p1 intro sed vhdl - rua, repositorio institucional de la ... · práctica 1. introducción al...

19
Universidad de Alicante Ángel Grediaga. Francisco J.Brotons Sistemas Electrónicos Digitales Introducción al diseño electrónico digital con VHDL Práctica 1

Upload: others

Post on 12-Mar-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: P1 INTRO SED VHDL - RUA, Repositorio Institucional de la ... · Práctica 1. Introducción al diseño electrónico con VHDL 7" 4.4 Asignación de patillas Para implementar el circuito

Práctica 1

U n i v e r s i d a d   d e   A l i c a n t e  Á n g e l   G r e d i a g a .   F r a n c i s c o   J . B r o t o n s  

Sistemas  Electrónicos  Digitales  Introducción  al  diseño  electrónico  digital  con  VHDL  

Práctica    1  

Page 2: P1 INTRO SED VHDL - RUA, Repositorio Institucional de la ... · Práctica 1. Introducción al diseño electrónico con VHDL 7" 4.4 Asignación de patillas Para implementar el circuito

Práctica 1. Introducción al diseño electrónico con VHDL 2  Índice  

 

1   INTRODUCCIÓN  ............................................................................................................................  3  

2   OBJETIVO  ........................................................................................................................................  3  

3   DESARROLLO  .................................................................................................................................  3  

4   PROCEDIMIENTO  .........................................................................................................................  3  4.1   ANALIZAR  LA  DESCRIPCIÓN  VHDL  Y  OBTENER  LA  TABLA  DE  VERDAD  ............................................  3  4.2   CREACIÓN  DEL  PROYECTO  .........................................................................................................................  4  4.3   TESTEO  FUNCIONAL  ...................................................................................................................................  6  4.4   ASIGNACIÓN  DE  PATILLAS  .........................................................................................................................  7  4.5   SINTETIZADO  Y  GRABACIÓN  DEL  FPGA  .................................................................................................  8  

5   REALIZACIÓN  DE  LA  PRÁCTICA  ...............................................................................................  9  

6   ANEXO  1  .......................................................................................................................................  10  6.1   TESTBENCH  (BANCO  DE  PRUEBAS)  .......................................................................................................  10  6.2   GENERACIÓN  DE  ESTÍMULOS  ..................................................................................................................  11  6.2.1   Generación  de  un  pulso  regular  y  repetitivo  ........................................................................  11  6.2.2   Generación  de  un  pulso  simple  ...................................................................................................  12  6.2.3   Generación  de  un  tren  de  pulsos  irregular  y  finito  ............................................................  12  6.2.4   Generar  tren  de  pulsos  irregular  repetitivo  .........................................................................  13  6.2.5   Generar  buses  ....................................................................................................................................  13  

6.3   COMPROBANDO  LOS  TEST  .......................................................................................................................  14  6.4   CREACIÓN  DE  TESTBENCH  .....................................................................................................................  14  6.4.1   TestBench  Tipo  I  ...............................................................................................................................  15  6.4.2   TestBench  Tipo  II  .............................................................................................................................  16  6.4.3   TestBench  Tipo  III  ............................................................................................................................  17  6.4.4   TestBench  Tipo  IV  ............................................................................................................................  19  

7   REFERENCIAS  .............................................................................................................................  19                                  

Page 3: P1 INTRO SED VHDL - RUA, Repositorio Institucional de la ... · Práctica 1. Introducción al diseño electrónico con VHDL 7" 4.4 Asignación de patillas Para implementar el circuito

Práctica 1. Introducción al diseño electrónico con VHDL 3  1 Introducción Esta práctica va a permitir al estudiante conocer el diseño electrónico utilizando un lenguaje de descripción hardware (VHDL), para ello es fundamental que se lea esta práctica desde el principio hasta el final, lo cual le permitirá tener una visión total de ella y por lo tanto la podrá realizar con sencillez. Además le va a permitir conocer algunas de las placas de desarrollo para los FPGAs, tales como la Basys2, Nexys2, Spartan3E, etc.

Los FPGAs son diferentes a los circuitos integrados tradicionales, pues poseen interconexiones programables que les permiten reconfigurase y por lo tanto tener una funcionalidad distinta cada vez que se requiera.

2 Objetivo Esta primera práctica es consiste en describir un sencillo circuito digital e implementarlo en un FPGA para comprobar su funcionamiento y ver el resultado iluminando un diodo LED en la placa.

3 Desarrollo Describir en VHDL el circuito de la Fig. 1 y escribir el testbench que compruebe su funcionamiento, para ello se debe utilizar VHDL y comprobar que se cumple la tabla de verdad del circuito.

Y= A xor B xor C Z= AB + AC + BC

Fig. 1 Circuito práctica 1

4 Procedimiento Los pasos que se deben seguir para completar esta práctica son los siguientes:

4.1 Analizar la descripción VHDL y obtener la tabla de verdad

Page 4: P1 INTRO SED VHDL - RUA, Repositorio Institucional de la ... · Práctica 1. Introducción al diseño electrónico con VHDL 7" 4.4 Asignación de patillas Para implementar el circuito

Práctica 1. Introducción al diseño electrónico con VHDL 4   La descripción que se proporciona a continuación es la del circuito de la Fig. 1, se debe analizar para obtener su tabla de verdad.

4.2 Creación del proyecto 1) Iniciar el ISE Poject Navegator, desde el menú de inicio o desde el icono del escritorio.

Hay que elegir desde File Menu, New Project. Poned el nombre del proyecto Pract1, ver Fig. 2. Se puede elegir la ubicación, para el desarrollo de las prácticas es necesario que os creéis una carpeta

en el disco C:\SED\LAB en la cual guardaréis todos las prácticas del laboratorio y que tendréis la precaución de realizar una copia de seguridad todos los días al finalizar las prácticas

Fig. 2 New Project

2) Hay que elegir las propiedades del dispositivo exactamente como se indica en la Fig. 3, durante el desarrollo del diseño estas propiedades se pueden cambiar

--------------------------------------------- -- Compañía: Universidad de Alicante -- Ingeniero: FAGO -- Fecha: 16:00:43 10/29/2010 -- Nombre Diseño: Practica1 -- Tool versions: ISE 10.1 -- Revision 0.01 - File Created -- Additional Comments: Práctica 1 de SED -- simple descripción de un circuito lógico -- combinacional ---------------------------------------------- -- Declaración de librerías y paquetes ---------------------------------------------- library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; ---------------------------------------------- -- Definición de la entidad (caja negra) ----- ---------------------------------------------- entity practica1 is port ( A: in std_logic; B: in std_logic; C: in std_logic; Z: out std_logic; Y: out std_logic ); end practica1; ---------------------------------------------- -- Definición de la arquitectura (comportamiento) -- ---------------------------------------------- Architecture comportamiento of practica1 is begin process (A,B,C) begin Y <= (A xor B) xor C; Z <= (A and B) or (A and C) or (B and C); end process; end comportamiento;

Page 5: P1 INTRO SED VHDL - RUA, Repositorio Institucional de la ... · Práctica 1. Introducción al diseño electrónico con VHDL 7" 4.4 Asignación de patillas Para implementar el circuito

Práctica 1. Introducción al diseño electrónico con VHDL 5  

Fig. 3 Propiedades del dispositivo

2) Una vez se pulse Next nos aparecerán varias pantallas para que creemos la descripción o para que añadamos descripciones de otros proyectos, en nuestro caso pulsaremos Next

Fig. 4 Pantallas de continuación

3) Ahora estamos en condiciones de crear nuetra primera descripción, para ello haremos como indica la Fig. 5

Llegados a este punto, nos pedirá el nombre y el tipo de nueva fuente que deseamos crear

Fig. 5 Project New Source

Page 6: P1 INTRO SED VHDL - RUA, Repositorio Institucional de la ... · Práctica 1. Introducción al diseño electrónico con VHDL 7" 4.4 Asignación de patillas Para implementar el circuito

Práctica 1. Introducción al diseño electrónico con VHDL 6  Definimos la entradas y salidas de nuestro diseño, para cada una indicamos el nombre de la señal, la dirección (in, out, inout) y en el caso de que queramos un bus, el número de bits y la disposición de estos.

Fig. 6 Pantallas hasta llegar a la descripción

En las pantallas anteriores se muestra todo e proceso hasta que nos muestra la plantilla del diseño que debemos crear, nuestra descripción la escribiremos después del begin , se recomienda, si no se va a utilizar, borrar los comentaros que están en verde.

4.3 Testeo funcional Si hemos escrito correctamente la descripción de nuestro diseño, check syntax, demos realizar la simulación funcional escribiendo el testbench y observando los resultados determinaremos si el comportamiento es el esperado

Fig. 7 Fragmento de la simulación

Page 7: P1 INTRO SED VHDL - RUA, Repositorio Institucional de la ... · Práctica 1. Introducción al diseño electrónico con VHDL 7" 4.4 Asignación de patillas Para implementar el circuito

Práctica 1. Introducción al diseño electrónico con VHDL 7  

4.4 Asignación de patillas Para implementar el circuito en la tarjeta sobre la que vamos a trabajar, debemos asignar las

patillas en las que conectaremos las entradas A, B, C y su "switch" correspondiente y las salidas Y, Z con su y el diodo LED en las que queremos visualizarlas. Para ello deberemos consultar el manual de la tarjeta correspondientes, Basys2, Nexys2, Spartan3E, en el cual se encuentran referenciadas cada una delas patillas del FPGA.

La asignación se realiza a través del User Constraints File. Aunque tenemos varias formas de generar este fichero (que tendrá extensión ucf), la forma más sencilla es emplear la herramienta que nos proporciona ISE: Xilinx PACE. Para iniciarla, en el cuadro Sources nos colocaremos en Implementation. Y en los Processes, dentro del desplegable User Constraints seleccionaremos Foorplan IO – Pre-synthesis (Fig. 8).

--------------------------------------------- -- Testbench que comprueba -- el funcionamiento de la Práctica 1 --------------------------------------------- LIBRARY IEEE; USE IEEE.std_logic_1164.all; USE IEEE.std_logic_arith.all; USE IEEE.std_logic_unsigned.all; ENTITY testbench IS -- definición de la entidad, -- pero sin puertos END testbench; ARCHITECTURE testbench_arch OF testbench IS COMPONENT pract1 PORT ( A : in std_logic; B : in std_logic; C : in std_logic; Z : out std_logic; Y : out std_logic ); END COMPONENT; --DEFINICIONE DE SEÑALES PARA SIMULAR ------- SIGNAL A : std_logic := '0'; SIGNAL B : std_logic := '0'; SIGNAL C : std_logic := '0'; SIGNAL Z : std_logic := '0'; SIGNAL Y : std_logic := '0'; --llamada a la entidad para simular y asignación señales BEGIN UUT : pract1 PORT MAP ( A => A, B => B, C => C, Z => Z, Y => Y ); -- definición de los estímulos de entrada signal_A: process begin A <= NOT A; wait for 1 ns; end process; signal_B: process begin B <= NOT B; wait for 2 ns; end process; signal_C: process begin C <= NOT C; wait for 4 ns; end process; END testbench_arch;

Page 8: P1 INTRO SED VHDL - RUA, Repositorio Institucional de la ... · Práctica 1. Introducción al diseño electrónico con VHDL 7" 4.4 Asignación de patillas Para implementar el circuito

Práctica 1. Introducción al diseño electrónico con VHDL 8  

Dentro de esta herramienta completaremos en la columna Loc la ubicación que hemos seleccionado para las entradas de A, B, C y las salidas Y, Z conectadas a los diodos LED.

Existe otra posibilidad para crear el fichero *.ucf, consiste en utilizar un editor de texto, crear un fichero con la extensión ucf y escribir la asignación de patillas de acuerdo a la sintaxis del ejemplo que se muestra a continuación.

4.5 Sintetizado y grabación del FPGA Ahora ya solo nos falta de forma sucesiva, dentro de los processes seleccionar Synthesize – XST, Implement Design y Generate Programming File. En realidad, la selección del último hace que se ejecuten los dos anteriores.

Una vez finalizada la síntesis se obtendrá el fichero (.bit ) con la descripción preparada para grabar el dispositivo, que será el que se utilice en la programación de la FPGA.

De aquí en adelante las pantallas que salen en las figuras dependen de la aplicación que se utilice para grabar el FPGA y de la placa que dispongamos.

Para llevar este archivo .bit hasta nuestra FPGA utilizaremos la opción Configure Target Device que también está en process. Nos aparecerá una ventana pidiéndonos el archivo de configuración que acabamos de crear (Fig. 9), lo seleccionaremos y con ello se lo hemos asignado a la FPGA XC3S500E, que es la que dispone nuestra tarjeta. A continuación nos pedirá los de los dos siguientes elementos de que dispone, pero como no vamos a hacer uso de ellos, elegiremos la opción bypass.

Fig. 8 Asignación de patillas

# Asignación de patillas de la Práctica1

NET "A" LOC = "L13" ;

NET "B" LOC = "L14" ;

NET "C" LOC = "H18" ;

NET "Y" LOC = "F12" ;

#Falta por describir la patilla de salida Z

Page 9: P1 INTRO SED VHDL - RUA, Repositorio Institucional de la ... · Práctica 1. Introducción al diseño electrónico con VHDL 7" 4.4 Asignación de patillas Para implementar el circuito

Práctica 1. Introducción al diseño electrónico con VHDL 9  

Ya estamos en disposición de grabar nuestro dispositivo. Podemos situarnos sobre él y con el botón de la derecha seleccionar Program o simplemente seleccionarlo y seleccionar el icono de programación (Fig. 9).

5 Realización de la práctica NOTA: Produce errores realizar cortar y pegar del pdf para describir los circuitos

1. Obtener la tabla de verdad del circuito de la Fig. 1 2. Describir el circuito de la Fig. 1 y comprobar que se cumple su tabla de verdad 3. Para el apartado anterior generar un testbench para cubrir con los estímulos toda la tabla

de verdad. 4. Asignar las patillas de acuerdo a lo explicado en el apartado 4.4, sintetizar y grabar el FPGA

comprobando la tabla de verdad del circuito 5. Opcional. Comprobar el funcionamiento del divisor de frecuencia.

Fig. 9 Programación de la XC3S500E

Page 10: P1 INTRO SED VHDL - RUA, Repositorio Institucional de la ... · Práctica 1. Introducción al diseño electrónico con VHDL 7" 4.4 Asignación de patillas Para implementar el circuito

Práctica 1. Introducción al diseño electrónico con VHDL 10  6 Anexo 1

6.1 Testbench (Banco de pruebas) Una de las fases más importante en todo diseño es la de comprobación de su funcionamiento, para ello es necesario escribir los test adecuados y analizar los resultados que éstos nos proporcionan.

Cuando se realiza un cambio en el diseño, por pequeño que sea, se debe comprobar que no afecta a otras partes del diseño y que todo sigue funcionando correctamente. Un testbench es el nivel más alto de la jerarquía de diseño, el testbench llama al diseño a testear (DUT,

Design Under Test) o CAS (Circuito a Simular), por lo tanto necesita que defina los estímulos de entrada y examinar las salidas (Fig. 10), existen varios métodos para escribir testbench y cada uno posee unas ventajas y desventajas, los más comunes se verán en este apartado, que quiere servir de referencia para una buena escritura de test, los podemos agrupar en los siguientes tipos:

TestBench Consideraciones de tiempo Análisis de las señales de salida

I No incluidas (Análisis funcional) Inspección visual

II Incluidas (Análisis de tiempos) Inspección visual

III No incluidas (Análisis funcional) Con VHDL (Análisis automático)

IV Incluidas (Análisis de tiempos) Con VHDL (Análisis automático)

Tabla 1. Tipos de TestBench

Tipo   I: En este caso no se consideran los retardos del circuito a simular, y las salidas se deben comprobar visualmente, a este tipo también se le suele llamar "Estímulos solamente, análisis funcional".

Tipo  II: En este caso sí se consideran los retardos internos del circuito a simular, pero las salidas se deben comprobar visualmente, ya que igual que el Tipo I, no contienen resultados conocidos y por lo tanto no se puede realizar una comprobación automática. También se le suele llamar "Estímulos solamente, análisis temporal".

Tipo  III: En este caso no se consideran los retardos del circuito a simular, pero las señales de salida se comprueban automáticamente por el simulador, ya que se conocen resultados de las mismas. También se le suele llamar "Análisis funcional automático".

Tipo   IV: En este caso sí se consideran los retardos internos del circuito a simular y además las salidas son comprobadas automáticamente por el simulador, este es el análisis más completo de un circuito realizado con TestBench, también se le suele llamar "Análisis temporal automático".

Fig. 10 Testbench

Page 11: P1 INTRO SED VHDL - RUA, Repositorio Institucional de la ... · Práctica 1. Introducción al diseño electrónico con VHDL 7" 4.4 Asignación de patillas Para implementar el circuito

Práctica 1. Introducción al diseño electrónico con VHDL 11  6.2 Generación de estímulos Antes de empezar a trabajar con simulaciones es necesario aprender a construir estímulos que luego se incluirán en el fichero de test, la Fig. 11 muestra las formas de ondas más habituales para utilizar como estímulos, y que a continuación vamos a explicar como describirlos.

6.2.1 Generación de un pulso regular y repetitivo Existen varias posibilidades:

a) Recomendada

b) Más larga

Fig. 11 Tipos de estímulos más habituales

signal CLK : std_logic:='0'; wait for 10ns; clk <= not clk;

signal CLK : std_logic:='0'; wait for 10ns; clk <='0'; wait for 10ns; clk <='1'; wait for 10ns;

Page 12: P1 INTRO SED VHDL - RUA, Repositorio Institucional de la ... · Práctica 1. Introducción al diseño electrónico con VHDL 7" 4.4 Asignación de patillas Para implementar el circuito

Práctica 1. Introducción al diseño electrónico con VHDL 12  c) Compacta

Las tres formas generarán un reloj como el de la Fig. 11 (a) donde T=10ns

6.2.2 Generación de un pulso simple

Hay que tener en cuenta que la declaración del último WAIT en la descripción no tiene límites

Con esta descripción se consigue un pulso como el de la Fig. 11 (b), dónde el tiempo anterior al pulso es de 15ns, y el tiempo del pulso a "1" es de 20ns.

6.2.3 Generación de un tren de pulsos irregular y finito En ocasiones en lugar de repetir la instrucción WAIT varias veces, se emplea LOOP con la forma de onda de valores asignados primero a una constante (CONSTANT), además hay que tener en cuenta que la declaración del último WAIT en la descripción no tiene límites

signal CLK : std_logic:='0'; clk <= not clk after 10ns;

signal reset : std_logic:='0'; wait for 15ns; reset <='1'; wait for 20ns; reset <='0'; wait;

constant pulsos : std_logic_vector_(7 downto 0):="10110100"; signal estimulo: std_logic:='0'; ---------------------------------------------------------- for i in pulsos'range loop; estimulo <= pulsos(i); wait for 30ns; end loop; wait;

Fig. 12 tren de pulsos no repetitivo e irregular

30ns

30ns

30ns60ns

60ns

10110100

Page 13: P1 INTRO SED VHDL - RUA, Repositorio Institucional de la ... · Práctica 1. Introducción al diseño electrónico con VHDL 7" 4.4 Asignación de patillas Para implementar el circuito

Práctica 1. Introducción al diseño electrónico con VHDL 13  6.2.4 Generar tren de pulsos irregular repetitivo La diferencia con respecto al caso anterior se encuentra en el último WAIT, que hemos eliminado

6.2.5 Generar buses En este caso utilizaremos un entero para determinar la anchura los valores que deben tomar las señales y por lo tanto el número de bits que debe tener el bus, en el ejemplo los valores son repetitivos

constant pulsos : std_logic_vector_(7 downto 0):="10110100"; signal estimulo: std_logic:='0'; ---------------------------------------------------------- for i in pulsos'range loop; estimulo <= pulsos(i); wait for 30ns; end loop;

30ns

30ns

30ns60ns

60ns

10110100 10110100

Fig. 13 Pulsos irregulares repetitivos

signal valores : integer range 0 to 255; -- 8 bits ---------------------------------------------------------- valores <= 33; wait for 100ns; valores <= 44; wait for 25ns; valores <= 1A; wait for 100ns; valores <= 3F; wait for 25ns; valores <= 77; wait for 75ns;

Page 14: P1 INTRO SED VHDL - RUA, Repositorio Institucional de la ... · Práctica 1. Introducción al diseño electrónico con VHDL 7" 4.4 Asignación de patillas Para implementar el circuito

Práctica 1. Introducción al diseño electrónico con VHDL 14  6.3 Comprobando los test Conviene comprobar que los estímulos que vamos a aplicar al circuito a simular sean los correctos, para ello vamos a escribirlos y comprobar su generación de forma adecuada y empezamos por generar el clk y el reset de acuerdo a los apartados anteriores y escribimos su definición de la siguiente manera:

Fig. 14 Generación de clk y reset

6.4 Creación de TestBench La mejor manera de aprender a escribir TestBench es realizar muchos de ellos sobre circuitos conocidos, vamos a utilizar un divisor de frecuencia para realizar los diversos tipos de TestBench

Fig. 15 Circuito a simular

A continuación se muestra la descripción del divisor de frecuencia, que no es mas que un contador de los pulsos de reloj (CLK) que queremos dividir, inicializando dicha cuenta cada vez que ha llegado a la cuenta de los pulsos correspondientes.

library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity TEST_BENCH1 is end TEST_BENCH1; architecture TEST_BENCH of TEST_BENCH1 is signal clk : std_logic :='0'; signal reset : std_logic :='0'; begin --------genera el clk --------- clk <= not clk after 10ns; ----------------------------- -- genera reset ------------- process begin wait for 15ns; reset <='1'; wait for 20ns; reset <='0'; wait; end process; ---------------------------- end TEST_BENCH;

clksalida

habilita

Divisor defrecuencia

Page 15: P1 INTRO SED VHDL - RUA, Repositorio Institucional de la ... · Práctica 1. Introducción al diseño electrónico con VHDL 7" 4.4 Asignación de patillas Para implementar el circuito

Práctica 1. Introducción al diseño electrónico con VHDL 15  

Los pasos para crear TestBench son los siguientes:

1. Definir la entidad TestBench sin puertos 2. Declarar como componente el circuito a simular (DUT) 3. Declarar una señal por cada puerto del componente 4. Llamar al componente conectando sus puertos con las señales correspondientes 5. Generar los estímulos

6.4.1 TestBench Tipo I Para el circuito ejemplo, se muestra a continuación la descripción de los test del tipo I explicados en el apartado 6.1.

En la Fig. 16 se observa la simulación con los el testbench tipo I. Comprobar que se obtienen estos resultados, en los que se observa que el T de clk es 20ns, es decir, su frecuencia es 50MHZ y la salida CLK_OUT tiene un periodo de 200ns, es decir una frecuencia de 5MHz. Por lo tanto se ha dividido el reloj la frecuencia por 10, es decir, se ha multiplicado el periodo por 10.

Fig. 16 Simulación con el testbench tipo I

library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity DIVFREQ is Port ( CLK : in STD_LOGIC; HABILITA : in STD_LOGIC; CLK_OUT : out STD_LOGIC); end DIVFREQ; architecture COMPORTA of DIVFREQ is CONSTANT MAX : INTEGER :=4; -- LA CUENTA SERÁ DE 0 A 4 (5 VPERIODOS) SIGNAL CUENTA : INTEGER RANGE 0 TO 5 :=0; -- EN ALTA Y 5 PERIODOS EN BAJA SIGNAL TEMP : STD_LOGIC:='0'; begin PROCESS(CLK, HABILITA) BEGIN IF CLK'EVENT AND CLK='1' AND HABILITA='1' THEN CUENTA <= CUENTA +1; IF CUENTA=MAX THEN TEMP <= NOT TEMP; CUENTA <= 0; END IF; END IF; CLK_OUT <= TEMP; END PROCESS;

Page 16: P1 INTRO SED VHDL - RUA, Repositorio Institucional de la ... · Práctica 1. Introducción al diseño electrónico con VHDL 7" 4.4 Asignación de patillas Para implementar el circuito

Práctica 1. Introducción al diseño electrónico con VHDL 16  

6.4.2 TestBench Tipo II En este caso se tienen en cuenta los retardos del circuito por lo tanto en la descripción del divisor de frecuencia deberemos añadir retardo a la cuenta ( 5ns) y retardo a la salida (8ns), consiste simplemente en sustituir la línea cuenta <= cuenta +1; por cuenta <= cuenta +1 after 5 ns; Se observa que en este caso la cuenta no está sincronizada con el flanco de subida del reloj y hay un retardo de 5ns, y la salida se retrasa 8ns.

LIBRARY ieee; USE ieee.std_logic_1164.ALL; USE ieee.numeric_std.ALL; ENTITY testbench_DIVFREQ_Tipo_I IS END testbench_DIVFREQ_Tipo_I; ARCHITECTURE testbench_DIVFREQ_Tipo_I OF testbench_DIVFREQ_Tipo_I IS -- Declaración de componentes -------- COMPONENT DIVFREQ Port ( CLK : in STD_LOGIC; HABILITA : in STD_LOGIC; CLK_OUT : out STD_LOGIC); END COMPONENT; ----- Declaración de señales ----------------- SIGNAL CLK_S : std_logic:='0'; SIGNAL HABILITA_S : std_logic:='0'; SIGNAL CLK_OUT_S : std_logic; BEGIN -- LLAMADA AL COMPONENTE (CIRCUITO A SIMULAR) ------- DUT:DIVFREQ PORT MAP(CLK=> CLK_S, HABILITA=>HABILITA_S, CLK_OUT=>CLK_OUT_S); -- GENERACIÓN DE LOS ESTÍMULOS --------------------------- -- GENERACIÓN DEL RELOJ ----------------------------------- PROCESS BEGIN wait for 10ns; CLK_S <= NOT CLK_S; END PROCESS; -- FIN DEL RELOJ ----------------------------------------- -- GENERACIÓN DE HABILITA ----------------------------------- PROCESS BEGIN WAIT FOR 60ns; HABILITA_S <= '1'; WAIT; -- OPCIONAL END PROCESS; -- FIN DE HABILITA -------------------------------

Page 17: P1 INTRO SED VHDL - RUA, Repositorio Institucional de la ... · Práctica 1. Introducción al diseño electrónico con VHDL 7" 4.4 Asignación de patillas Para implementar el circuito

Práctica 1. Introducción al diseño electrónico con VHDL 17  6.4.3 TestBench Tipo III En este caso se utiliza una señal "patrón" en el ejemplo CLK_OUT_ESPERADA, cuyo valor es la que se debe obtener en la salida y lo comparamos con el verdadero valor CLK_OUT para comprobar si son iguales.

Llegados a este punto hay que comentar la sentencia ASSERT.

ASSERT [expresión_booleana] [REPORT "mensaje"] [SEVERITY nivel_severidad]

El "mensaje" se escribe cuando la condición es falsa y el simulador se detendrá dependiendo del nivel de severidad, en concreto con ERROR Y FAILURE

Los niveles de severidad son:

a) WARNING, para informar que alguna cosa inusual ha ocurrido b) ERROR, para informar que un problema grave se ha encontrado c) FAILURE, para informar que un problema inaceptable ha ocurrido

Fig. 17 Testbench Tipo III

La Fig. 17 muestra el resultado de un TestBench Tipo III, en el que el texto nos muestra como las señales generada y esperada son distintas en unos instantes de tiempo e iguales en otros, dicha respuesta se debe a la utilización de ASSERT en el TestBench

Page 18: P1 INTRO SED VHDL - RUA, Repositorio Institucional de la ... · Práctica 1. Introducción al diseño electrónico con VHDL 7" 4.4 Asignación de patillas Para implementar el circuito

Práctica 1. Introducción al diseño electrónico con VHDL 18  

LIBRARY ieee; USE ieee.std_logic_1164.ALL; USE ieee.std_logic_unsigned.all; USE ieee.numeric_std.ALL; ENTITY testbench_DIVFREQ_Tipo_III IS END testbench_DIVFREQ_Tipo_III; ARCHITECTURE behavior OF testbench_DIVFREQ_Tipo_III IS -- DECLARACIÓN DEL COMPONENTE PARA EL CIRCUITO A SIMULAR (DUT) COMPONENT DIVFREQ PORT( CLK : IN std_logic; HABILITA : IN std_logic; CLK_OUT : OUT std_logic ); END COMPONENT; --ENTRADAS signal CLK : std_logic := '0'; signal HABILITA : std_logic := '0'; --SALIDAS signal CLK_OUT : std_logic; signal CLK_OUT_ESPERADA : std_logic:= '0'; BEGIN -- LLAMADA AL CIRCUITO A TESTEAR DUT: DIVFREQ PORT MAP ( CLK => CLK, HABILITA => HABILITA, CLK_OUT => CLK_OUT ); -- GENERACIÓN DE LOS ESTÍMULOS ------------------- -- GENERACIÓN DEL RELOJ -------------------------- PROCESS BEGIN wait for 10 ns; CLK<= NOT CLK; END PROCESS; -- FIN DE GENERACIÓN RELOJ ---------------------- -- GENERACIÓN DE HABILITA ------------------------ PROCESS BEGIN WAIT FOR 60 ns; HABILITA <= '1'; WAIT; -- OPCIONAL END PROCESS; -- FIN DE GENERACIÓN HABILITA -------------------- -- GENERACIÓN DE CLK_OUT_ESPERADA ---------------- PROCESS BEGIN WAIT FOR 160 ns; WHILE HABILITA ='1' LOOP CLK_OUT_ESPERADA <= NOT CLK_OUT_ESPERADA; WAIT FOR 50 nS; END LOOP; END PROCESS; -- FIN GENERACIÓN DE CLK_OUT_ESPERADA -------------- -- VERIFICAción DE CLK_OUT_ESPERADA -------------- PROCESS BEGIN WAIT FOR 20 ns; ASSERT (CLK_OUT = CLK_OUT_ESPERADA) REPORT "DISTINTAS!!" severity WARNING; ASSERT (CLK_OUT/=CLK_OUT_ESPERADA) REPORT "Señales generada y esperada iguales" SEVERITY NOTE; END PROCESS; -- FIN VERIFICACIÓN DE CLK_OUT_ESPERADA -------------- END;

Page 19: P1 INTRO SED VHDL - RUA, Repositorio Institucional de la ... · Práctica 1. Introducción al diseño electrónico con VHDL 7" 4.4 Asignación de patillas Para implementar el circuito

Práctica 1. Introducción al diseño electrónico con VHDL 19  6.4.4 TestBench Tipo IV Es el más completo de los test, utilizaremos el ejemplo anterior en el que los retardos de 5ns y 8ns están incluidos. El TestBench será el mismo con unas pequeñas modificaciones, utilizaremos una señal "patrón" , en el ejemplo CLK_OUT_ESPERADA, cuyo valor es la que se debe obtener en la salida.

Con todo lo explicado anteriormente no es complicado realizar el testbench del tipo IV

7 Referencias Descarga del paquete de Xilinx webpack 10.1: http://www.xilinx.com/support/download/index.htm

Guía de referencia de VHDL: http://www.eng.auburn.edu/department/ee/mgc/vhdl.html

Enlace con los paquetes standard de VHDL: http://www.csee.umbc.edu/portal/help/VHDL/stdpkg.html

Tutorial de VHDL: http://www.ehu.es/~jtpolagi/inicio2.htm