Académique Documents
Professionnel Documents
Culture Documents
DE
TECNOLOGA ELECTRNICA
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.
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.
ck
Figura 1. Esquema del detector de flancos.
!btn
!btn
BTN_UP pulse=0
btn
BTN_UP2 pulse=1
--
BTN_DOWN pulse=0
btn
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
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
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.
Unidad de datos
Generador de segundos
clk
clk
reset
reset
reset
an[3:0] seg[6:0]
4 7
w_display 16 d_in[15:0]
dp
Display Controller
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.
clear
CLEAR2 cl_bcd=1
MODE_DOWN
RUN_UP
segundo / up_bcd=1
segundo / dw_bcd=1
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.
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