14
Práctica 2: VHDL y FPGAs La práctica consiste en el diseño VHDL de un sistema digital para un dispositivo FPGA de la familia FLEX 8000 de Altera. En concreto el diseño estará basado en una placa con el dispositivo EPF8282ALC84-4. Las especificaciones del dispositivo FLEX8000 se encuentra en el anexo del documento. El diseño del sistema digital deberá realizar el control de uno de los módulos PROMAX usados con el microinstructor TM683, pero realizando el control mediante una FPGA que mapea un circuito digital diseñado en VHDL. El diseño y simulación del código VHDL se realizará usando el programa MAX+plus II de Altera. Se incluye un breve tutorial del diseño y simulación de un sistema digital que usaría la misma placa EPF8282 ALC84-4 Generador de funciones Fuente de alimentación Módulo Promax Puerto paralelo PC El puerto paralelo del PC se usa para programar la memoria SRAM de configuración del dispositivo, con el programa Flex.exe El conector de fuente de alimentación se usa junto con la fuente de alimentación del laboratorio El conector del generador de funciones se conecta para generar la señal de reloj del dispositivo. El conector del módulo promax conecta los PB<7:0> y PA<7:0> a pines de usario del dispositivo. SEÑAL PIN EPF8282 PB0 8 PB1 15 PB2 18 PB3 22 PB4 25 PB5 30 PB6 35 PB7 39 PA0 51 PA1 56 PA2 60 PA3 63 PA4 67 PA5 71 PA6 76 PA7 81 CLK 12 Tutorial del MAX+plus II y Tarjeta con FLEX EPF8282ALC84-4 El tutorial explicado a continuación es un diseño jerárquico de un sistema que cuenta de 0 a 9 mientras se pulse una tecla, sacando el resultado por un display de 7 segmentos. El sistema completo es llamado tutor y estará diseñado en un fichero tutor.vhd, que será el diseño de jerarquía superior. Este sistema estará compuesto a su vez de dos sistemas de menor jerarquía, un contador BCD y un decodificador de 7 segmentos. El contador estará diseñado en un fichero contador.vhd que contiene un diseño secuencial con su señal de reloj clk, la señal de reset asíncrono activa a bajo nivel n_rst, y una señal de habilitación e para contar hacia arriba. El otro sistema es un sistema combinacional que decodifica la salida del contador para un display de 7 segmentos dec7seg 4 7 clk clk e cont n_inc U1 U2 contador a b o n_rst n_rst tutor V DD tutor n_inc o 7 n_rst clk a b c d e f g o(6)=a o(5)=b o(4)=c o(3)=d o(2)=e o(0)=g o(1)=f 1. Crear una carpeta TUTORIAL en un directorio de trabajo. Esta es la carpeta donde se guardarán los ficheros VHDL y los archivos generados por el MAX+plus II 2. Arrancar el programa MAX+plus II de diseño para dispositivos de Altera. 3. Crear un nuevo fichero de texto, para editar el diseño VHDL. Para ello presionar el icono de nuevo fichero y seleccionar en el diálogo el tipo de fichero texto.

ALC84-4 EPF8282 Práctica 2: VHDL y FPGAs PIN …deeea.urv.cat/DEEEA/ecanto/WWW/SED/P2.pdfformato de representación entre binario, decimal, octal o hexadecimal. Se puede ajustar el

  • Upload
    others

  • View
    7

  • Download
    0

Embed Size (px)

Citation preview

Page 1: ALC84-4 EPF8282 Práctica 2: VHDL y FPGAs PIN …deeea.urv.cat/DEEEA/ecanto/WWW/SED/P2.pdfformato de representación entre binario, decimal, octal o hexadecimal. Se puede ajustar el

Práctica 2: VHDL y FPGAs

La práctica consiste en el diseño VHDL de un sistema digital para un dispositivo FPGA de lafamilia FLEX 8000 de Altera. En concreto el diseño estará basado en una placa con eldispositivo EPF8282ALC84-4. Las especificaciones del dispositivo FLEX8000 se encuentra enel anexo del documento.El diseño del sistema digital deberá realizar el control de uno de los módulos PROMAX usadoscon el microinstructor TM683, pero realizando el control mediante una FPGA que mapea uncircuito digital diseñado en VHDL.El diseño y simulación del código VHDL se realizará usando el programa MAX+plus II deAltera. Se incluye un breve tutorial del diseño y simulación de un sistema digital que usaría lamisma placa

EPF8282ALC84-4

Generadorde funciones

Fuente dealimentación

Módulo Promax

Puertoparalelo PC

• El puerto paralelo del PC se usa para programar la memoria SRAM de configuración deldispositivo, con el programa Flex.exe

• El conector de fuente de alimentación se usa junto con la fuente de alimentación dellaboratorio

• El conector del generador de funciones se conecta para generar la señal de reloj deldispositivo.

• El conector del módulo promax conecta los PB<7:0> y PA<7:0> a pines de usario deldispositivo.

SEÑAL PIN EPF8282PB0 8PB1 15PB2 18PB3 22PB4 25PB5 30PB6 35PB7 39PA0 51PA1 56PA2 60PA3 63PA4 67PA5 71PA6 76PA7 81CLK 12

Tutorial del MAX+plus II y Tarjeta con FLEX EPF8282ALC84-4

El tutorial explicado a continuación es un diseño jerárquico de un sistema que cuenta de 0 a 9mientras se pulse una tecla, sacando el resultado por un display de 7 segmentos. El sistemacompleto es llamado tutor y estará diseñado en un fichero tutor.vhd, que será el diseño dejerarquía superior. Este sistema estará compuesto a su vez de dos sistemas de menorjerarquía, un contador BCD y un decodificador de 7 segmentos. El contador estará diseñado enun fichero contador.vhd que contiene un diseño secuencial con su señal de reloj clk, la señal dereset asíncrono activa a bajo nivel n_rst, y una señal de habilitación e para contar hacia arriba.El otro sistema es un sistema combinacional que decodifica la salida del contador para undisplay de 7 segmentos

dec7seg4 7

clk clk

e

cont

n_inc

U1 U2

contador a b o

n_rst

n_rst

tutor

VDD

tutorn_inc o

7

n_rstclk

a

b

c

d

e

fg

o(6)=ao(5)=bo(4)=co(3)=do(2)=e

o(0)=go(1)=f

1. Crear una carpeta TUTORIAL en un directorio de trabajo. Esta es la carpeta donde seguardarán los ficheros VHDL y los archivos generados por el MAX+plus II

2. Arrancar el programa MAX+plus II de diseño para dispositivos de Altera.3. Crear un nuevo fichero de texto, para editar el diseño VHDL. Para ello presionar el icono de

nuevo fichero y seleccionar en el diálogo el tipo de fichero texto.

Page 2: ALC84-4 EPF8282 Práctica 2: VHDL y FPGAs PIN …deeea.urv.cat/DEEEA/ecanto/WWW/SED/P2.pdfformato de representación entre binario, decimal, octal o hexadecimal. Se puede ajustar el

Nuevo fichero

Fichero de texto (VHDL)

4. Se abrirá una ventana de edición de texto donde se realizará el diseño VHDL.5. Seleccionar del menu File|Project|Name y seleccionar la carpeta TUTORIAL del directorio

de trabajo, y cambiar el nombre de proyecto a TUTORIAL

Fichero de texto (VHDL)

Nombre del proyecto

Directorio dealmacenamiento

del proyecto

6. Escribir código del primer fichero de VHDL, un decodificador de 7 segmentos:

library ieee;use ieee.std_logic_1164.all;

entity dec7seg isport (

a: in std_logic_vector(3 downto 0);b: out std_logic_vector(6 downto 0));

end dec7seg;

architecture comb of dec7seg isbegin

with a selectb<= "1111110" when "0000",

"0110000" when "0001","1101101" when "0010","1111001" when "0011","0110011" when "0100","1011011" when "0101","1011111" when "0110","1110000" when "0111","1111111" when "1000","1110011" when "1001","0000000" when others;

end comb;

7. Guardar el fichero seleccionando icono de guardar, cambiar la extensión del fichero a VHDy usar como nombre de fichero dec7seg.

Guardar ficheroNombre del

fichero VHDL

Seleccionar extensiónVHD para fichero VHDL

8. Crear y guardar un nuevo fichero contador.vhd siguiendo los anteriores pasos, con elsiguiente código:

library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;

entity contador isport (

Page 3: ALC84-4 EPF8282 Práctica 2: VHDL y FPGAs PIN …deeea.urv.cat/DEEEA/ecanto/WWW/SED/P2.pdfformato de representación entre binario, decimal, octal o hexadecimal. Se puede ajustar el

clk, n_rst: in std_logic;e: in std_logic;cont: out std_logic_vector(3 downto 0));

end contador;

architecture seq of contador issignal icont: unsigned(3 downto 0);begin

cont<=conv_std_logic_vector(icont,4);process(clk, n_rst, e)begin

if n_rst='0' thenicont<="0000";

elsif clk='1' and clk'event thenif e='1' then

if icont=9 thenicont<="0000";

elseicont<=icont+1;

end if;end if;

end if;end process;

end seq;

9. Crear y guardar un nuevo fichero tutor.vhd que unirá los otros dos ficheros VHDL paracrear el diseño de jerarquía superior:

library ieee;use ieee.std_logic_1164.all;

entity tutor isport (

clk, n_rst: in std_logic;n_inc: in std_logic;o: out std_logic_vector(6 downto 0));

end tutor;

architecture struct of tutor iscomponent contador is

port (clk, n_rst: in std_logic;e: in std_logic;cont: out std_logic_vector(3 downto 0));

end component;component dec7seg is

port (a: in std_logic_vector(3 downto 0);b: out std_logic_vector(6 downto 0));

end component;signal s: std_logic_vector(3 downto 0);signal inc: std_logic;begin

inc<=not n_inc;u1: contador port map(clk,n_rst,inc,s);u2: dec7seg port map(s,o);

end struct;

10. Seleccionar la ventana con el fichero de mayor jerarquía (tutor.vhd) y seleccionar del menúProject|Set Project to Current File

Seleccionar ficheroVHDL de mayor

jerarquía

11. Seleccionar el dispositivo EPF8282ALC84-4 usado en la placa, con el menu Assign|Device

FamiliaFLEX8000

EPF8282ALC84-4

Desactivar la opción

Page 4: ALC84-4 EPF8282 Práctica 2: VHDL y FPGAs PIN …deeea.urv.cat/DEEEA/ecanto/WWW/SED/P2.pdfformato de representación entre binario, decimal, octal o hexadecimal. Se puede ajustar el

12. Seleccionar los pines que se usarán de la FPGA para las señales de entrada/salida deldiseño. La señales clk debe ir al pin 12 que está conectado a la entrada de reloj de laplaca. La señal n_rst y reset, mientras que las señales n_inc y o(6:0) deberán ir en pines deusuario, dependiendo como estén conectados los pulsadores y el display de 7 segmentos ala FPGA. Para la selección de los pines seleccionar del menú Assign|Pin/Location/Chip. Acada señal se le debe asignar un pin, escribiendo la señal directamente |nombre_señal obuscándola de la lista, asignándole el pin del control de selección, y finalmente añadir laasignación señal-pin a la lista que será tenida en cuenta durante el proceso de compilacióndel diseño.

Escogerseñal

Pin asignado Nombre dela señal

Añadir señal y pinasignado a la lista

13. El siguiente paso es compilar el proyecto. Este proceso está compuesto de varios pasos,entre los cuales está la síntesis y el proceso de placement&routing. También se extrean losparámetros necesarios para poder hacer una simulación post-layout, incluyendo losretardos de los recursos lógicos y rutado.

Compilar proyecto

Proyecto compiladosin errores

14. Se puede visualizar un report del resultado de la compilación, que se almacena en unfichero tutor.rpt. Para visualizarlo se puede usar la visualización de la jerarquía del diseño,donde aparece que tutor.vhd está compuesto por U1 tipo contador.vhd y U2 tipodec7seg.vhd. Haciendo doble click sobre tutor.rpt se habre el fichero de report, dondeaparecen, entre otros datos, el número de células lógicas (LC) usadas en valor absoluto yen % respecto al número total de LCs del dispositivo, y los pines asignados para lasseñales.

Report del resultadode la compilación

Ver jerarquía del proyecto

Page 5: ALC84-4 EPF8282 Práctica 2: VHDL y FPGAs PIN …deeea.urv.cat/DEEEA/ecanto/WWW/SED/P2.pdfformato de representación entre binario, decimal, octal o hexadecimal. Se puede ajustar el

15. Para realizar la simulación es necesario crear un fichero de estimulación llamado tutor.scf,en el que se estimulan o dan valores a las señales de entrada al circuito en función deltiempo, y permitirá ver como evolucionan las señales de salida para verificar el correctofuncionamiento del circuito. Para crear el fichero se pulsa el icono de nuevo fichero, y en eldiálogo se selecciona fichero de estimulación scf.

Nuevo fichero

Fichero deestimulos (SCF)

16. Se abre entonces una ventana gráfica donde se dibujarán las formas de onda de lasseñales de entrada en función del tiempo, y se obtendrán en esta la forma de onda de lasseñales de salida. Por defecto el tiempo de simulación es 1us, pero se puede cambiar conel menú File|End Time, que abre una ventana de diálogo para modificarlo. También esposible cambiar el grid para el dibujo de las señales (resolución del dibujo de las formas deonda) con el menú Options|Grid Size. En este ejemplo se usará un tamaño de grid de 25nsy un tiempo de simulación de 500ns.

Tiempo desimulación

Tamañodel grid del

tiempo

17. Se pasa a continuación a seleccionar todas las señales de entrada (clk, n_rst, n_inc), ytodas las señales de salida (o6, o5…o0). Para ello seleccionar del menú contextual (botonderecho del ratón) de la ventana de formas de onda la opción Enter Nodes from SNF. En laventana de diálogo seleccionar tipos de señales de entrada (I) y salida (O), listar lasseñales, seleccionar todas y añadirlas para su visualización. La forma más rápida deseleccionar un rango de señales es seleccionar la primera, y después la últimamanteniendo la tecla SHIFT del teclado apretada.

Tipos deseñales a listar

Seleccionar yañadir señales

a visualizar

Page 6: ALC84-4 EPF8282 Práctica 2: VHDL y FPGAs PIN …deeea.urv.cat/DEEEA/ecanto/WWW/SED/P2.pdfformato de representación entre binario, decimal, octal o hexadecimal. Se puede ajustar el

18. Se pueden añadir más señales internas (B) para comprobar nodos que no son deentrada/salida del circuito. En este caso se visualizará la entrada a del dec7seg (es lasalida del contador). Debido al proceso de síntesis las señales internas cambian de nombreo desaparecen por optimizaciones. Se puede volver a usar el método anterior para añadirvarias señales, o usar la opción Insert Node del menú contextual para añadir una únicaseñal. En este caso se añade la señal |dec7seg:u2|a

Tipos deseñales a listar

Seleccionar yañadir la señal

a visualizar

19. Para visualizar más cómodamente las salidas o6, o5…o0 se pueden agrupar variasseñales seleccionándolas todas y con el menú contextual seleccionar Enter Group. En laventana de diálogo es posible seleccionar el formato de representación entre binario,decimal, octal o hexadecimal. Se puede ajustar el tiempo de visualización con los iconos dezoom dentro o fuera, o ajustar la vista para ver todo el tiempo de simulación, usando elicono de ajuste automático a todo el fichero de simulación.

Formato devisualización

Seleccionarseñales para

agrupar

Visualiza todo el tiempode simulación

20. Guardar el archivo como tutor.scf21. Una vez seleccionadas todas las señales a excitar y visualizar, se empieza a dibujar las

formas de onda de las entradas. Se empieza en este caso por clk, seleccionando la señal ya continuación el icono para excitarla como reloj. En la ventana de diálogo se selecciona elvalor inicial de la señal, y cada cuantos grid cambia. En este caso si se selecciona 1, elreloj cambia de valor cada 25ns, y por tanto el periodo será de 50ns.

Señal clk a excitar

Configuración del reloj:1.valor inicial ‘0’2.cambia cada 1xgrid

Excitar clkcomo reloj

Page 7: ALC84-4 EPF8282 Práctica 2: VHDL y FPGAs PIN …deeea.urv.cat/DEEEA/ecanto/WWW/SED/P2.pdfformato de representación entre binario, decimal, octal o hexadecimal. Se puede ajustar el

22. Seleccionar el tramo desde 350ns a 450ns de n_inc, y pulsar el icono para que este tramotenga el valor lógico ‘1’ para desactivarla.

La señal n_inc es desactivadaentre 350ns y 450ns

23. Realizar doble click sobre la señal n_rst. En la ventana de diálogo seleccionar el valor pordefecto como ‘1’ para activarla en toda el tiempo de simulación. Se pretende comprobar elfuncionamiento de la señal n_rst asíncrona, activándola durante un intervalo de tiempo enque no aparezca el flanco positivo del clk. Para ello desactivar el grid usando el menúOptions|Snap To Grid y seleccionar el tramo de n_rst alrededor de 400ns y de unos 25nsde duración y usando el icono para cambiar el valor a ‘0’ para activarla en este tramo. Unavez hecho esto volver ha activar el grid con el menú Options|Snap To Grid.

La señal n_rst es desactivadaen toda la simulación

La señal n_rst es activaasíncronamente alrededor de 400ns

24. Una vez excitadas todas las entradas, se pasará a realizar la simulación del diseñosintetizado con la excitación. Es una simulación que incluye los retardos que introducen losbloques lógicos y los recursos de rutado. Pulsar el icono de simulación, que abre unaventana de diálogo, donde el boton de start comienza la simulación. Observar que la señalde entrada a dec7seg es una señal síncrona con el flanco positivo del reloj, con un ciertoretardo, mientras que la salida del bloque dec7seg aparecen transitorios debido al caráctercombinacional del bloque, tras un cambio en sus entradas. Observar además que la señalde n_rst es asíncrona, ya que resetea el contador independientemente del clk.

Simulación

Comienzo desimulación

Resultados dela simulación

Page 8: ALC84-4 EPF8282 Práctica 2: VHDL y FPGAs PIN …deeea.urv.cat/DEEEA/ecanto/WWW/SED/P2.pdfformato de representación entre binario, decimal, octal o hexadecimal. Se puede ajustar el

25. Para ver con mayor detalle los retardos se puede ampliar la vista alrededor del primerflanco positivo de clk, a los 25ns. Observar el transitorio en o(6..0), en el que cambian alprincipio o1, o2, o3 a los 44.8ns (25ns+19.8ns) y después o6 a los 48.3ns (25ns+23.3ns).Los transitorios son debidos a que cada señal combinacional tiene retardos diferentes.

flanco declk a los 25ns cambio de

o1,o2,o3 a los44.8ns

cambio de o6a los 48.3ns

26. Se puede realizar un análisis estático de los retardos de las salidas respecto a clk usandoel icono de análisis estático de retardos, que abre un diálogo donde aparece el retardomin/max para cada salida respecto al clk. Se puede verificar que estos retardos secorresponden con los resultados obtenidos por simulación.

Análisisestático de

retardos

Retardosmin/max entreclk y salidas

27. Finalmente, una vez verificado el funcionamiento del diseño por simulación, se puedeprogramar la FPGA usando el programa Flex.exe, que transfiere el fichero tutor.ttf(bitstream de configuración) a la memoria de configuración SRAM. Para ello seleccionar laconfiguración passive-serial, y escribir tutor al pedir el nombre del fichero. Una vez se hatransferido correctamente el bitstream el programa informa de la correcta programación dela FPGA.

Page 9: ALC84-4 EPF8282 Práctica 2: VHDL y FPGAs PIN …deeea.urv.cat/DEEEA/ecanto/WWW/SED/P2.pdfformato de representación entre binario, decimal, octal o hexadecimal. Se puede ajustar el

Tutorial de Veribest VHDL

Este tutorial muestra cómo realizar la simulación funcional del código VHDL del anterior diseñousando el simulador VHDL Veribest.

1. Crear una nueva carpeta desde Windows donde se almacenará el diseño VHDL y la libreríade trabajo WORK.

2. Seleccionar el menú File/New (o el icono New de la barra de botones), apareciendo uncuadro de diálogo, donde se seleccionará VHDL Workspace y se pulsará OK.

3. Aparecerá una segunda ventana de diálogo donde se introducirá un nombre al Workspace(o proyecto), y el directorio de trabajo. Como nombre del Workspace escribir tutorial ycomo directorio de trabajo una nueva carpeta ha creado al principio. Seleccionar en estemismo diálogo la opción Use Synopsys IEEE Library, para poder usar las libreríasSTD_LOGIC_ARITH, STD_LOGIC_SIGNED y STD_LOGIC_UNSIGNED. Pulsar finalmenteel botón Create para crear el Workspace.

Menú File/New

o Botón New

VHDL Workspace

Nombre delWorkspace ydirectorio de

trabajo

Seleccionar libreríaSynopsys IEEE

4. Se crea entonces el archivo de proyecto tutorial.vpd, que contiene la referencia a losficheros VHDL que debe compilar y simular. Se abré también una ventana donde semuestra una lista (vacía de momento) de estos ficheros, y el orden de compilación. Paraañadir ficheros al proyecto seleccionar en la ventana del proyecto el botón de añadirficheros, que abré una segunda ventana de diálogo que permite navegar por los directoriosde Windows. Ir a la carpeta donde están los ficheros fuentes que ya fueron usados con elMax+PlusII, seleccionando los tres ficheros contador.vhd, tutor.vhd y dec7seg.vhd a la vezusando la tecla control + botón izquierdo del teclado, y finalmente pulsando OK. Otraopción es copiar estos tres ficheros de la carpeta del Max+PlusII a la carpeta donde setrabaja con Veribest. Una vez seleccionados los tres ficheros, estos se deben mostrar en laventana del proyecto tutorial.vpd.

Añadirficheros

al proyectotutorial.vpd

5. Para realizar la simulación del diseño VHDL es necesario crear un fichero VHDL detestbench. Para ello seleccionar del menú File/New o botón New, y en la ventana dediálogo seleccionar VHDL Source File, y pulsar Create.

Page 10: ALC84-4 EPF8282 Práctica 2: VHDL y FPGAs PIN …deeea.urv.cat/DEEEA/ecanto/WWW/SED/P2.pdfformato de representación entre binario, decimal, octal o hexadecimal. Se puede ajustar el

VHDL Source File

Menú File/New

o Botón New

6. Escribir el fichero VHDL de testbench que aparece a continuación. Guardar el fichero con elnombre test.vhd, y añadir el fichero al proyecto. Comprobar que el orden de compilación escontador.vhd, dec7seg.vhd, tutor.vhd y test.vhd. Si no es así, pulsar las teclas deordenación de ficheros VHDL dentro del proyecto.

library ieee;use ieee.std_logic_1164.all;

entity test isend test;

architecture test1 of test issignal clk: std_logic:='0';signal n_rst,n_inc: std_logic;signal o: std_logic_vector(6 downto 0);begin

n_rst<='1', '0' after 30 ns, '1' after 60 ns, '0' after 400ns, '1' after 425 ns;n_inc<='0', '1' after 350 ns, '0' after 450 ns;

process(clk)begin

clk<=not clk after 25 ns;end process;

DUT: entity work.tutor port map(clk,n_rst,n_inc,o);

end test1;

Guardar fichero VHDL

Añadir elficherotest.vhd

al proyectotutorial.vpd

Ordenación de compilaciónde los ficheros VHDL en el

proyecto

Page 11: ALC84-4 EPF8282 Práctica 2: VHDL y FPGAs PIN …deeea.urv.cat/DEEEA/ecanto/WWW/SED/P2.pdfformato de representación entre binario, decimal, octal o hexadecimal. Se puede ajustar el

7. Compilar el proyecto, pulsando el botón de Compille All (Alt+F8), y comprobar que no hayerrores comprobando la salida del compilador VHDL que es mostrada en la ventana deBuild.

Compile All

Salida del compilador

8. Para empezar a simular, es necesario indicar al Workspace que unidad se va a simular,que en nuestro caso es el testbench, es decir, la entidad test de arquitectura test1 que hasido escrita en el fichero test.vhd. Para ello seleccionar el botón Workspace Settings o elmenú Workspace/Settings… y aparece una ventana de diálogo para ajustar opciones de lacompilación y simulación. En la pestaña Compile, seleccionar las opciones que aparecenen la figura de abajo, y en la pestaña Simulate seleccionar como unidad de simulación(desde la lista de unidades de diseño de la librería WORK) la arquitectura test1 de laentidad test, y pulsando el botón Set. No olvidar activar la opción Trace On, que permitirámás adelante depurar el código VHDL.

Opciones decompilación

Lista de ficherosVHDL a compilar

Selecciónentidad+arquitectura

a simular

Unidades de diseñoen la librería WORK

WorkspaceSettings

Activar Trace On

9. Para realizar la simulación funcional del código pulsar el botón de Execute Simulator(CTRL+F5) o dentro del menú Workspace/Execute Simulator. Aparece un mensajeindicando que el simulador funcionará en modo limitado al no disponer de licencia.Comprobar en la ventana de salida del simulador que al final del proceso aparece elmensaje: Message Summary: Total: 0 error(s), 0 warning(s), 0 note(s).

Execute Simulator

Page 12: ALC84-4 EPF8282 Práctica 2: VHDL y FPGAs PIN …deeea.urv.cat/DEEEA/ecanto/WWW/SED/P2.pdfformato de representación entre binario, decimal, octal o hexadecimal. Se puede ajustar el

10. Para visualizar gráficamente las formas de onda del resultado de la simulación, se debeabrir una ventana de Waveform. Se puede maximizar la ventana para ver mejor la salidagráfica si se desea. Pulsar el botón de añadir las señales a visualizar, apareciendo undiálogo que permite seleccionar jerárquicamente las señales a añadir. Seleccionar de laentidad TEST todas la señales pulsando el botón Add, y de la instancia DUT la señalinterna s(3 downto 0) que es la que conecta la salida cont de U1 con la entrada a de U2.Una vez añadidas estas 5 señales pulsar el botón close para cerrar el diálogo.

Abrir ventana deWaveform

Añadir señalesa visualizar

•TEST(TEST1)•clk•n_rst•n_inc•o(6 downto 0)

•DUT: TUTOR(STR)•s(3 downto 0)

11. Para realizar una simulación funcional de 500ns, escribir 500 y seleccionar ns en loscontroles destinados a indicar el tiempo de simulación deseado. Pulsar a continuación elbotón Run (F5) y observar el resultado gráfico de la simulación. Se puede hacer un Zoomto Fit para ver todo el resultado de la simulación entero. Se puede observar que elsimulador VHDL genera una salida de texto de unos Warnings a los 25ns en la instanciaU1 de la entidad CONTADOR y arquitectura SEQ, por lo que se va a continuación a ver aque son debidos.

Run (F5)

500 nsZoomto Fit

Formas deonda

Salida detexto del

simulador

12. La simulación funcional VHDL permite no sólo ver formas de onda, sino la depuración decódigo usando ejecutación paso a paso, puntos de ruptura, visualización del contenido deseñales, etc… de forma similar a cuando se depura un fichero fuente en un lenguaje deprogramación como C. Ir al menú Simulate/Restore para reiniciar la simulación al principio(a los 0ns). A continuación se va a colocar un punto de ruptura en la entidad CONTADORque está descrito en el fichero contador.vhd. Abrir el fichero contador.vhd con doble click enla ventana de proyecto, seleccionar la primera línea de código del proceso, donde aparecela comprobación if n_rst=’0’ then y colocarle un punto de ruptura..

Page 13: ALC84-4 EPF8282 Práctica 2: VHDL y FPGAs PIN …deeea.urv.cat/DEEEA/ecanto/WWW/SED/P2.pdfformato de representación entre binario, decimal, octal o hexadecimal. Se puede ajustar el

Doble click sobrecontador.vhd

Seleccionar línea dondeaparece la comprobaciónif n_rst=‘0‘ then

y colocar breakpoint

MenúSimulate/Restore

a los 0ns

13. Pulsar el botón Run (F5) para simular durante los 500ns deseados. Observar que a los0ns+1δ el breakpoint ha parado la ejecución del código en la primera línea del proceso dela entidad CONTADOR. Volver a pulsar el botón Continue varias veces hasta que se vuelvaa parar la simulación en la misma línea, pero a los 25ns+0δ, que es el instante en el cualnos interesa depurar el código. Se puede visualizar el contenido de las señales que usaeste proceso en una ventana de Watch. Para ello abrir una ventana Watch, y pulsando elbotton Add Watch añadir para el U1: CONTADOR(SEQ) dentro del DUT:TUTOR(STRUCT)todas las señales usadas por CONTADOR, que son clk, n_rst, e, cont e icont. Una vezfinalizada la selección se puede observar el valor de todas estas señales en el instante desimulación, que en este caso es 25ns+0δ.

14. Continuar la ejecución paso a paso observando como se simula el código en función delcontenido de las señales visualizadas en la ventana de Watch. A los 25ns+0δ se haproducido un flanco ascendente de reloj, n_rst=’1’, e=’1’, icont=’U’ (no inicializado) por loque el código pasa a ejecutar la asignación icont<=icont+1. Esta operación aritméticaproduce un Warning en el simulador debido a que uno de los operandos tiene un valor ‘U’(no inicializado), por lo que la suma de cómo resultado ‘X’ (indefinido), mostrando esteaviso al usuario con el mensaje.

Assertion [WARNING] in :TEST(TEST1):DUT@TUTOR(STRUCT):U1@CONTADOR(SEQ):_P1 at time 25 ns, cycle 0: There is an 'U'|'X'|'W'|'Z'|'-' in anarithmetic operand, the result will be 'X'(es).

Nueva ventanaWatch

•DUT: TUTOR(STR)•clk•n_rst•e•icont•cont

Continuar hastaparar en el

breakpoint a los25ns+0δ

15. Si se continua ejecutando paso a paso se obseva que el código se detiene en la asignacióncont<=conv_std_logic_vector(icont,4) a los 25ns+1δ, y el simulador muestra unnuevo mensaje de Warning.

Assertion [WARNING] in TEST(TEST1):DUT@TUTOR(STRUCT):U1@CONTADOR(SEQ):_P at time 25 ns, cycle 1: There is an 'U'|'X'|'W'|'Z'|'-' in anarithmetic operand, the result will be 'X'(es).

16. Estos mensajes de Warning no son problemáticos, ya que son debidos a que no se hahecho el reset del dispositivo todavía, con lo que aquellas señales que son registradastienen un valor inicial ‘U’ (indefinido) y provoca que cualquier asignación que leen estasseñales den mensajes de Warning. Una vez hecho el reset a los 30ns el valor de icont seinicializa a ‘0’ y los mensajes de Warning ya no vuelven a aparecer. Si se visualiza denuevo la ventana de formas de onda, añadiendo además la señal icont de la instancia U1del DUT, se puede observar como el valor inicial es x”U”, pasando a los 25ns a x”X”, y a los30ns se inicializa por el n_rst=’0’ a x”0”. Para observar mejor las formas de onda se puedecambiar la escala de visualización a 1ns.

Page 14: ALC84-4 EPF8282 Práctica 2: VHDL y FPGAs PIN …deeea.urv.cat/DEEEA/ecanto/WWW/SED/P2.pdfformato de representación entre binario, decimal, octal o hexadecimal. Se puede ajustar el

La señal icont delU1 cambia de x”U”a x”X” a los 25ns ya x”0” a los 30ns

Cambiar escala a 1ns

25ns30ns