Professional Documents
Culture Documents
PRCTICA VHDL
SIMULACIN EN VHDL
CON VERIBEST
En esta prctica vamos a ver una breve introduccin a la simulacin de circuitos
electrnicos mediante el uso de Lenguajes de Descripcin de Hardware, y en concreto
utilizaremos el simulador de VHDL de Veribest. El uso de los comandos e
instrucciones ms comunes de esta herramienta se ilustra mediante un ejemplo sencillo,
y abarca desde la creacin de un fichero, la compilacin, la visualizacin de las formas
de onda...
0-. Realizacin de la prctica.
Para el desarrollo de la prctica, vamos a realizar la simulacin completa de
cuantos circuitos electrnicos podamos. Sugerencia: comenzar por los ms sencillos
(puertas), y luego aumentar la complejidad (mux, sumadores).
1-. Arranque del programa.
Se puede realizar de varias formas, desde el men de Inicio, bien mediante el
icono de acceso directo (si existe), o conociendo la ruta del programa, que debera ser:
C:\Programs\Veribest VB99.0\Veribest VHDL simulator \ Veribest VHDL
La ventana del simulador se muestra en la siguiente figura:
4-. Compilacin.
En realidad no es un proceso exactamente de compilacin el que vamos a
realizar, porque no crearemos un archivo ejecutable, sino uno listo para ser simulado.
Establecemos las condiciones de compilacin:
WorkspaceSettings
En la nueva ventana, aseguraos que la opcin Debug est seleccionada, despus
haced clic en aceptar. A continuacin se analiza el fichero:
WorkspaceCompile <nombre de nuestro fichero>
Si el cdigo es correcto, aparecern mensajes de compilacin de las entidades y
arquitecturas, componentes y dems que nuestro circuito posea, seguidos del mensaje
Done. Si el cdigo no es correcto, aqu se marcar la lnea donde se encuentra(n) el
error(es) y de que tipo es. En este caso los corregiremos y repetiremos el proceso de
compilacin.
Cuando el proceso no da errores, lo guardamos (Save). La unidad compilada se
almacena en la librera WORK. Para ver su ubicacin, seleccionad Library en la barra
de herramientas, y dentro de ella Library Browser, o pinchad en el icono
correspondiente. Aparecen las diferentes libreras, IEEE, STD, VB, y en rojo WORK,
WORKLIB. Si pinchamos en esta aparecen, con smbolos de chip, los diferentes
circuitos que hayamos compilado; no su cdigo, sino la entidad, arquitecturaetc., que
llevan asociadas. Podemos Ver informacin de fecha y opciones de compilacin en la
parte derecha de la ventana. (Ver figura).
para que estemos seguros de que las salidas sean las correctas, pero lgicamente no
siempre va a poder ser as. En nuestro caso, est bastante claro cuales son las formas
de onda que necesitamos para verificar el comportamiento de nuestro sistema.
a
Fig. 3. Formas de onda que representan la tabla de
verdad de una puerta OR de dos entradas.
b
q
0
5 10 15 20
(tiempo en nanosegundos).
Donde podemos ver que el resultado obtenido es el que caba esperar. Ahora
estamos en disposicin de comenzar desde el principio, aadiendo nuevos circuitos a
nuestro espacio de trabajo. Salimos del simulador mediante el icono Eject.
7-. VHDL
Es de resaltar que, como en todos los lenguajes de programacin, la versatilidad
del VHDL nos permite realizar el mismo circuito de muchas formas distintas. En un
circuito medianamente complicado tendremos probablemente tantas soluciones
diferentes como personas aborden el problema.
Un ltimo circuito nos permite estudiar algunas de las funciones ms destacadas
del VHDL. En este ejemplo nos encontramos con uno de los casos en los que el archivo
de testeo no puede cubrir todas las posibilidades, o no resulta rentable as hacerlo:
Comparador de 4 bits.
LIBRARY IEEE;
USE IEEE.std_logic_1164.all;
ENTITY comp_4bit IS
PORT (a, b: IN BIT_VECTOR (3 DOWNTO 0);
agtb, altb, aeqtb: OUT BIT);
END comp_4bit;
ARCHITECTURE comportamental OF comp_4bit IS
BEGIN
PROCESS (a, b)
VARIABLE var_agtb: BIT := '0';
VARIABLE var_altb: BIT := '0';
VARIABLE var_aeqtb: BIT := '0';
BEGIN
L1: FOR i IN 3 DOWNTO 0 LOOP
IF ((a(i) = '1') and (b(i) = '0')) THEN
var_agtb := '1';
ELSE
var_agtb := '0';
END IF;
IF ((a(i) = '0') and (b(i) = '1')) THEN
var_altb := '1';
ELSE
var_altb := '0';
END IF;
IF (a(i) = b(i)) THEN
var_aeqtb := '1';
ELSE
var_aeqtb := '0';
END IF;
END LOOP L1;
agtb <= var_agtb;
altb <= var_altb;
aeqtb <= var_aeqtb;
END PROCESS;
END comportamental;
END comp_test;
ARCHITECTURE test_flujo OF comp_test IS
COMPONENT
comp_4bit PORT (
END COMPONENT;
FOR I: comp_4bit USE ENTITY WORK.comp_4bit (comportamental);
SIGNAL a, b: BIT_VECTOR (3 DOWNTO 0);
SIGNAL agtb, altb, aeqtb: BIT;
BEGIN
I: comp_4bit PORT MAP (a, b, agtb, altb, aeqtb);
a <= "0000", "0001" AFTER 5 ns, "0010" AFTER 10 ns, "0011" AFTER
15 ns, "0100" AFTER 20 ns, "0101" AFTER 25 ns, "0110" AFTER 30 ns,
"0111" AFTER 35 ns, "1000" AFTER 40 ns, "1001" AFTER 45 ns, "1010"
AFTER 50 ns, "1011" AFTER 55 ns, "1100" AFTER 60 ns, "1101" AFTER 65
ns, "1110" AFTER 70 ns, "1111" AFTER 75 ns, "0000" AFTER 80 ns;
b <= "0001", "0000" AFTER 5 ns, "0010" AFTER 10 ns, "0011" AFTER
15 ns, "0001" AFTER 20 ns, "0100" AFTER 25 ns, "0110" AFTER 30 ns,
"1111" AFTER 35 ns, "0110" AFTER 40 ns, "1000" AFTER 45 ns, "1011"
AFTER 50 ns, "1011" AFTER 55 ns, "1100" AFTER 60 ns, "1101" AFTER 65
ns, "0110" AFTER 70 ns, "1101" AFTER 75 ns, "0000" AFTER 80 ns;
END test_flujo;
NOTA: En las formas de onda que el simulador nos ofrece podemos observar que, por
ejemplo ante las entradas a = 0100, b = 0001 la salida del sistema es a < b, no a > b. Este error
se repite en la misma direccin y a la inversa (a > b cuando debera ser a < b) en diferentes
ejemplos de entrada y salida. A que se debe el fallo de comparacin? Cmo lo podramos
corregir?