You are on page 1of 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 Controlador de display. Testbench para el contador sexagecimal Generador de pulsos Testbench para la unidad de control Xilinx constraint file.

Descripcin Proviene de la sesin anterior. Debe completarlo Genera un pulso cada segundo, referente a un reloj de 50MHZ. No debe ser necesario modificarlo 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 4 4 4 RESET CONT SEXAGESIMAL mm:ss

UP DW LD

4 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 mode segundo Unidad de control up_bcd dw_bcd ld_bcd cl_bcd up_bcd dw_bcd ld_bcd cl_bcd reset an[3:0] seg[6:0] dp sw[7:0] 8 4 7

Unidad de datos

Generador de segundos

clk

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


0 4 4 4 0 4 8 sw[7:0]

up dw ld 4 clk 4 4 4 CONT SEXAGESIMAL mm:ss

reset

reset

reset

an[3:0] seg[6:0]

4 7

w_display 16 d_in[15:0]

dp

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.
-mode clear

clear

MODE_UP CLEAR1 cl_bcd=1


-mode

CLEAR2 cl_bcd=1

MODE_DOWN

set start start start start --

RUN_UP

SET_BCD 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.

You might also like