Está en la página 1de 7

DEPARTAMENTO

DE

TECNOLOGA ELECTRNICA

ESCUELA TCNICA SUPERIOR DE INGENIERA INFORMTICA

Diseo de mquinas de estado


Sistemas Digitales Avanzados

1. Introduccin y objetivos
Las mquinas de estado finitas (FSM) son fundamentales en el diseo circuitos digitales
secuenciales . Con ellas se consigue implementar algoritmos complejos existiendo procedimientos para
obtener el cdigo HDL de manera sistemtica. Utilizaremos una descripcin llamada en la bibliografa
descripcin cannica de mquinas de estado.
Los objetivos de esta sesin de laboratorio son realizar la implementacin de mquinas de estado
mediante un procedimiento sistemtico, facilitando as la codificacin HDL. Se realizar lo siguiente;
Implementacin de una pequea mquina de estados para deteccin de flancos.
Implementacin de una mquina de estados para control de un cronmetro.
Implementacin completa de un cronmetro usando la metodologa de diseo basada en Unidad
de Datos y Unidad de Control.

Nombre del fichero


display.v
contador_bcd_tb.v
segundero.v
unidad_control_tb.v
basys2.ucf

Contenido

Descripcin

Controlador de display.

Proviene de la sesin anterior.

Testbench para el contador


sexagecimal

Debe completarlo

Generador de pulsos

Genera un pulso cada segundo, referente


a un reloj de 50MHZ.

Testbench para la unidad de


control

No debe ser necesario modificarlo

Xilinx constraint file.

Conexin de los componentes de la placa

Rev. 1.269

Sistemas Digitales Avanzados

Nombre del fichero

Contenido

Descripcin
Basys2 con los Pads de la FPGA.

Tabla 1. Ficheros necesarios durante la sesin de laboratorio.

2. Diseo de un detector de flancos


En primer lugar se disear una mquina de estados para detectar flancos de subida. Esta mquina
se utilizar para conectar cada uno de los botones existentes en la placa de desarrollo a los sistemas a
desarrollar.
El objetivo es generar un pulso de un ciclo de duracin cuando un botn se pulse, independiente del
tiempo que est el botn pulsado. Puesto que el reloj de la placa funciona a 50Mhz cualquier pulsacin
realizada en un botn durar multitud de pulsos de reloj, con este sistema, se detecta una pulsacin
larga usando su flanco de subida, independientemente del tiempo que tarde el botn en soltarse. En la
figura 1 se muestra el mdulo a disear cuyo diagrama de estados es el mostrado en la figura 2.
reset
btn

Detector
Flanco

pulse

ck
Figura 1. Esquema del detector de flancos.

!btn

!btn

BTN_UP
pulse=0

btn

BTN_UP2
pulse=1

--

BTN_DOWN
pulse=0

btn

Figura 2. Mquina de estados para el detector de flancos.

Se propone realizar lo siguiente:


1. Cree un mdulo Verilog llamado detecta_flanco correspondiente a la figura 1 que implemente la
mquina de estados de la figura 2. Defina los estados con la sentencia parameter para poder
realizar diferentes asignaciones.
1.1. Realice un testbench con varios pulsos de varios ciclos de duracin y comprube si la salida
genera un nico pulso en cada flanco de subida. No se olvide de realizar un reset inicial.
1.2. Busque en Internet un diseo en Verilog de un detector de flancos ms simple que su diseo.
Se recomienda realizar la bsqueda en ingls.

3. Diseo de un cronmetro
Ahora se pretende disear un cronmetro con dos modos de funcionamiento: cronmetro y

Sistemas Digitales Avanzados

temporizador. Para el control del mismo se utilizar el detectores de flancos conectados cada uno de los
botones disponibles en la placa de desarrollo.
El ncleo de este diseo es un contador en sexagesimal capaz de realizar la cuenta de minutos y
segundos, tanto en modo ascendente como descendente. Este contador, mostrado en la figura 3, consiste
en 4 salidas BCD. Las salidas BCD representan en decimal los minutos (en los dos dgitos ms
significativos) y los segundos (en los dos dgitos menos significativos), por tanto, el formato de salida es
mm:ss.
El funcionamiento de este contador se puede resumir indicando los valores que tomarn cada una de las
salidas BCD:
Dgito BCD1 y BCD0: Corresponden a los segundos toma valores 0-5 y 0-9 respectivamente.
Dgito BCD3 y BCD1: Corresponden a los minutos ambos toman valores 0-9, por tanto se puede
llegar 99 minutos ya que no tenemos dgitos para indicar las horas.
DIN3 DIN2 DIN1 DIN0
4

UP
DW
LD

4
RESET

CONT SEXAGESIMAL
mm:ss

CLK
BCD3 BCD2 BCD1 BCD0
Figura 3. Diagrama de bloques Contador Sexagesimal con salida BCD.

Siga los siguientes pasos:


2. Cree un nuevo modulo llamado contador_bcd correspondiente a la figura 3. Respete los nombres
de la conexiones para que el testbech suministrado opere correctamente.
2.1. Considere en el contador que los dos ltimos dgitos variarn de 00 a 59 mientras que los
dos primeros desde 00 a 99.
2.2. Utilice el testbech contador_bcd_tb.v para comprobar su diseo. Observe si hay errores en la
salida de texto del simulador. En caso de encontrar errores, en las formas de onda de la
simulacin hay una seal llamada error que se activa durante el error detectado, puede utilizarla
para buscar los errores.
2.3. El test anterior es incompleto, slo comprueba los valores en modo ascendente. Complete el
cdigo para comprobar todos los valores en modo descendentes.
2.4. Contemple en su diseo la llegada a cero del contador en modo descendente. Se propone
bloquearlo en cero cuando se alcance este valor.

Sistemas Digitales Avanzados

3.1. Metodologa de diseo UD-UC


Una metodologa de diseo ampliamente utilizada para el diseo de circuitos digitales consiste dividir
los diseos en dos componentes llamados Unidad de Datos y Unidad de Control. A su vez estos
componentes segn su complejidad, tambin se subdividen.
Bsicamente la Unidad de Datos consiste en agrupar los componentes encargados de almacenar y
operar con datos. Estos componentes se interconectan mediante buses y las seales seales de control
de los componentes quedan como seales E/S de la Unidad de Datos. Estos componentes suelen ser
registros, unidades aritmticas/lgicas, contadores, etc.
Por otro lado la Unidad de Control no es ms que una mquina de estados secuencial conectada a las
seales de control de todos los elementos que forman la Unidad de Datos. Esta mquina secuencial se
encarga de activar seales de la Unidad de Datos ciclo a ciclo de reloj. As, consigue realizar
operaciones con los componentes de la unidad de datos, tras una secuencia determinada de activacin
de seales en la Unidad de Datos, habr terminado la operacin para la que estaba diseada.
Siguiente esta metodologa, el diseo del cronmetro se dividir en dos mdulos denominados
unidad_datos y unidad_control. Ambos estarn interconectados siguiendo el esquema mostrado en la
figura 4. La Unida de Control recibir ordenes del usuario a travs de los pulsadores y la Unidad de
Datos mostrar en el display los minutos y segundos pudiendo recibir datos desde los conmutadores .
reset
reset
start
set
clear

reset
up_bcd

up_bcd

an[3:0]

dw_bcd

dw_bcd

seg[6:0]

ld_bcd

ld_bcd

cl_bcd

cl_bcd

sw[7:0]

Generador
de segundos

Unidad de
control

clk

dp

mode
segundo

Unidad de
datos

clk

Figura 4. Conexin de la unidad de datos y de control del cronmetro.

3.2. Diseo de la Unidad de Datos


El componente principal de la unidad de datos de este sistema digital es el contador sexagesimal, el
cual, se conectar adecuadamente al controlador de display para conseguir mostrar los minutos y
segundos. Para el uso en modo temporizador se utilizarn los conmutadores con lo que se sonsigue
introducir el nmero de minutos deseados en la cuenta atrs. En la figura 5 se muestra el diagrama de
bloques de la unidad de datos a disear.
Se propone que realice el diseo siguiendo los siguientes pasos:

Sistemas Digitales Avanzados

5
0

0
4

sw[7:0]

reset

up
CONT SEXAGESIMAL
mm:ss

dw
ld

clk

reset

an[3:0]

reset

seg[6:0]
w_display
16

4
7

dp

d_in[15:0]

Display
Controller

clk
Figura 5. Diagrama de bloques de la Unidad de Datos

3. Aada al proyecto los componentes del mdulo controlador de display diseado en el laboratorio
anterior. No aada el mdulo principal ni el fichero UCF.
3.1. Debe modificar el mdulo display para que admita carga de datos del exterior mediante un
BUS. El interfaz del mdulo debe quedar:

module display( input extclk, reset, w_display,


input [15:0] d_in,
output [6:0] seg,
output [3:0] an);

3.2. Modifique el modo de escritura en la memoria del display. La escritura debe ser nicamente
disparada por el reloj externo en el flanco positivo, el resto de seales no debe aparecer en la
lista de sensibilidad.
4. Cree un nuevo mdulo llamado unidad_datos que incluya todas las seales mostradas en la figura
4.
4.1. Instancie el mdulo display, el mdulo contador, interconecte los dos componentes y la E/S
del mdulo correctamente.
4.2. Al aadir el contador sexagesimal diseado anteriormente considere que slo tiene una seal
reset. Debe conectarla correctamente ya que la unidad de datos recibe dos seales reset y cl_bcd,
ambas inicializan el contador.
4.3. La seal de escritura del display debe fijarla a 1 para conseguir escritura continua en el
display.

Sistemas Digitales Avanzados

3.3. Diseo de la Unidad de Control


El diseo de la unidad de control consiste en la implementacin de una mquina de estados finita
encargada de activar secuencialmente las seales de la unidad de datos y, consiguiendo el
funcionamiento deseado.
El cronmetro a disear dispondr de dos modos de funcionamiento, uno ascendente (cronmetro) y
otro descendente (temporizador). El diagrama de estados de la figura 6 muestra los estados y las seales
a activar en cada uno de los estados. La mquina de estados funcionar con el reloj del sistema pero
recibe una seal denominada segundo proveniente de un generador de pulsos a intervalos de 1 segundo.
No se confunda con el generador de pulsos, ste genera un pulso de un ciclo de reloj de duracin cada
segundo, no una seal cuadrada de un segundo de perodo.
--

clear

mode
clear

MODE_UP

CLEAR2

MODE_DOWN
cl_bcd=1

CLEAR1
cl_bcd=1

mode

--

set
start

start

start

start
--

SET_BCD

RUN_UP

RUN_DW
ld_bcd=1

segundo / up_bcd=1

segundo / dw_bcd=1

Figura 6. Diagrama de estados de la Unidad de Control.

5. Cree un nuevo mdulo llamado unidad_control con las conexiones E/S indicadas en la figura 4 e
implemente la mquina de estados de la figura 6.
5.1. Asigne al estado MODE_UP el valor binario 000.
5.2. Utilice el testbench del fichero unidad_control_tb.v para comprobar la mquina de estados
opera correctamente.

4. Implementacin del sistema completo


El ltimo paso de diseo consiste en realizar mdulo superior donde aparecen la unidad de datos y de
control interconectada junto a los componentes E/S adicionales.
6. Cree un nuevo mdulo llamado cronometro con las siguientes caractersticas:
6.1. Las seales E/S son: input start,set,clear,mode,clk, output [3:0] an, output [6:0]

Sistemas Digitales Avanzados

seg, input [7:0] sw, output dp


6.2. Aada una instancia de la unidad de datos y otra de la de control, interconectada
correctamente.
6.3. Para conectar los pulsadores a la unidad de control se utilizar el detector de flanco
diseado al principio de este laboratorio. Adalo al proyecto e instancie el detector 4 veces, una
para cada pulsador. Debe conectar cada una de las 4 salidas del detector a las seales de entrada
de la unidad de control.
6.4. Al tener el sistema 4 entradas y solo disponer de 4 botones en la placa de desarrollo, se
propone generar seal reset mediante la pulsacin de dos botones simultneos. Declare un cable
interno en el mdulo cronometro y mediante una sentencia assign active reset cuando el primer y
el ltimo botn estn ambos pulsados.
6.5. Utilice el fichero suministrado segundero.v. Este fichero contiene un generador de un pulso
de reloj cada segundo en base a un reloj de 50Mhz. Debe instanciarlo y conectar su salida a la
seal de entrada de la Unidad de Control llamada segundo.
6.6. Por ltimo se recomienda eliminar el divisor de frecuencia existente en el mdulo display.
Debe sustituirlo por un mdulo simular al que acaba de aadir (segundero.v). Con esto evitar
dejar seales del contador sin conectar.
7. Para la implementacin conecte los botones como se indica en la figura 7. Implemente el diseo y
utilice la combinacin de botones correcta para generar seal reset en el sistema.

set
mode

start
clear

Figura 7. Diagrama de estados de la Unidad de Control.

También podría gustarte