Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Introduccin
q
Contenidos:
t Introduccin t Elementos bsicos Objetos Tipos Operadores t Estructura de un fichero VHDL Entidad Arquitectura t Descripcin de circuitos digitales Combinacionales Secuenciales t Simulacin: entornos de test
Qu significa VHDL?
t VHDL=VHSIC Hardware Description Language t VHSIC=Very High Speed Integrated Circuits
Estndar IEEE 1076 (Institute of Electrical and Electronics Engineering) desde 1987
t Portabilidad entre herramientas y plataformas
Elementos Bsicos
q
Objetos
t Contienen valores t Los objetos pertencen a una clase y tienen un tipo
Tipos.
t Se caracteriza por un conjunto de valores que puede tener y un conjunto de operaciones
q q
Clases de objetos:
t Constant. Se les asigna un valor inicial que no puede ser modificado t Variable. Contiene un valor que puede ser cambiado t Signal. Contiene una lista de valores que incluye el valor actual y un conjunto de valores futuros. t File. Modelan ficheros y se utilizan en testbenchs.
t Bit. Tipo predefinido en IEEE 1076 type bit is ('0', '1'); No es posible describir salidas triestado t Std_logic. Tipo definido en librera IEEE 1164 Para utilizarlo:
library ieee; use ieee.std_logic_1164.all;
t Matriciales Mltiples elementos del mismo tipo Una o ms dimensiones y acceso indexado
Type table8x4 is array (0 to 7, 0 to 3) of bit;
Lgica multivaluada. 9 valores=('U', 'X', '0', '1', 'Z', 'W', 'L', 'H', '-')
'U'=desconocido (simulacin); 'X'=cortocircuito (simulacin); 'Z'=HiZ ; '-'=dont care, se sintetiza en '0' o '1'.
Universidad de Zaragoza, IEC. Dispositivos digitales. PLDs - 5
Operadores
q
package std_logic_arith package std_logic_unsigned package std_logic_signed = ARITMTICOS + * / mod rem ** abs
Universidad de Zaragoza, IEC.
/=
>=
SIGN O:
ASIGNACIN :
<=
:=
Declaracin de entidad
q
Libreras
t La librera estndar es siempre visible t Si se van a utilizar otras libreras, las declaraciones y funciones en ellas definidas se pueden importar: Design Entity Library ieee; Use ieee.std_logic_1164.all; Libreras
A B C D
Declaracin de entidad
t Especifica el interfaz del circuito
M N P Q
Entity Declaration
Arquitectura
t Descripcin interna del circuito Comportamental Estructural Mezcla
Architecture Body
Modo de un puerto
q
Arquitectura
q
El modo define la direccin del flujo de datos del puerto visto desde la entidad. Puede ser:
t t t t IN, entrada dedicada, slo pueden ser ledos en la arquitectura OUT, salida dedicada, slo se les puede asignar valor en la arquitectura BUFFER, salida dedicada, pero puede ser ledo en la arquitectura INOUT, bidireccional
IN OUT BUFFER
IN
INOUT
Architecture Body
Estilos de modelado
q
Estilos de modelado
q
Descripcin comportamental
t Ec. booleanas
comp4
4 B
entity comp4 is port (A, B: in bit_vector(3 downto 0); AeqB: out bit); end comp4;
q
architecture behcomp4 of comp4 is begin AeqB <= not (A(0) xor B(0)) and not (A(1) xor B(1)) and not (A(2) xor B(2)) and not (A(3) xor B(3)); end behcomp4;
Descripcin estructural
C(0) C(1) AeqB C(2) C(3) Use work.gatespkg.all; architecture strcomp4 of comp4 is signal c: bit_vector(3 downto 0); begin U0: xor2 port map(A(0),B(0),C(0)); U1: xor2 port map(A(1),B(1),C(1)); U2: xor2 port map(A(2),B(2),C(2)); U3: xor2 port map(A(3),B(3),C(3)); U4: nor4 port map(C(0),C(1),C(2),C(3),AeqB); end strcomp4;
Dispositivos digitales. PLDs - 14
Descripcin comportamental
t Algoritmo
architecture behcomp4 of comp4 is begin process(A,B) begin if (A=B) then AeqB <= '1'; else AeqB <= '0'; end if; end process; end behcomp4;
Dispositivos digitales. PLDs - 13
Circuitos combinacionales
t Sentencia de asignacin concurrente
Y <= A and B; A B A Y
Circuitos combinacionales
t Proceso Multiplexor
process(A,B,S) begin if (S='1') then Y <= B; else Y <= A; end if; end process;
A B
0 Y 1 S
E A
Multiplexor
Y <= B when S='1' else A; A B 0 Y 1 S
Universidad de Zaragoza, IEC. Dispositivos digitales. PLDs - 15
Las entradas (seales ledas dentro del proceso) deben aparecer en la lista de sensibilidades Asignar valores a las salidas para todas las condiciones para evitar la inferencia de latches
B S
D EN
Biestables
q
MEFs
process (CLK,RST) -- Reset asncrono begin if (RST='1') then Q <= '0'; elsif (CLK'event and CLK='1') then Q <= D; end if; end process; process (CLK) -- Reset sncrono begin if (CLK'event and CLK='1') then if (RST='1') then Q <= '0'; else Q <=D; end if; end if; end process;
q
Flip-flops
RST
Descripcin VHDL
t Dos procesos: Proceso secuencial, actualiza el estado Proceso combinacional, deriva siguiente estado y actualiza salidas t Supondremos MEFs sncronas, todos los FFs con el mismo CLK
Mquina Moore
1 1
E CK
S0 0
..0 O
S1 0
.00
001
I
F
Funcin G Funcin F
O case...when if ... then .. n_state CLKevent else ... and CLK CLK=1
p_state
Mquina Mealy
1/0 1/0 S0 0/0 S1 ..0 1/1 0/0 S2 .00 0/0
-- proceso combinacional process (E,p_state) begin case pstate is ... when S2 => if (E='0') then Y <= '0'; n_state <= S2; else Y <= '1'; n_state <= S0; end if; when others => -- Illegal state -- recovery end case; end process;
I RST
O
G
AR FFs G
process (CLK,RST) -- proc. secuencial begin if (RST='1') then p_state <= S0; elsif (CLK'event and CLK='1') then p_state <= n_state; end if; end process;
Salidas de MEFs
q
Entornos de test
q
Salidas decodificadas
t Presentan glitches t Las salidas de la MEF que actan sobre habilitaciones triestado (/OE) o que actan como reloj (/WE) deben estar libres de glitches Registrar las salidas Hacer coincidir salidas con variables de estado
-- Declaraciones signal p_state, n_state: std_logic_vector(2 downto 0); constant IDLE: std_logic_vector(2 downto 0):="000"; ... -- Cuerpo de la arquitectura OE <= p_state(1);
Un entorno de test (testbench) es otra entidad de diseo que se utiliza para verificar la correccin funcional de nuestro diseo
t Se puede utilizar construcciones no sintetizables de VHDL t Partes de un entorno de test Entidad a testear (EUT) Generador de estmulos. stos se aplican a los puertos de entrada de la EUT Monitor de resultados. Fichero de datos o un visualizador de formas de onda. Comparar resultados obtenidos con esperados
TEST BENCH
CLK RST, IN_DATA
OUT_DATA
Generacin de estmulos
q
Declarar estmulos
type test_vector is record clk: std_logic; rst: std_logic; cnt: std_logic_vector(2 downto 0); end record; type test_vector_array is array(natural range <>) of test_vector; constant test_vectors: test_vector_array := ( -- reset the counter (clk=>'0',rst=>'1',cnt=>"000"), (clk=>'1',rst=>'1',cnt=>"000"), (clk=>'0',rst=>'0',cnt=>"000"), -- incrementar contador (clk=>'1',rst=>'0',cnt=>"001"), (clk=>'0',rst=>'0',cnt=>"001"), (clk=>'1',rst=>'0',cnt=>"010"), ... );
--Repetitivo process begin CLK <= '1', '0' after 20 ns; wait for 50 ns; end process;
Dispositivos digitales. PLDs - 25
Ficheros
q
Aplicar estmulos
-- Aplicar vectores de test process variable vector: test_vector; begin for i in test_vectors'range loop -- Obtener vector i vector := test_vectors(i); clk <= vector.clk; rst <= vector.rst; -- comprobar resultados de simulacin if (cnt /= vector.cnt) then assert false report "Resultado incorrecto"; end if; end loop; end process;
Estmulos en fichero
t Use std.textio.all; t Use ieee.std_logic_textio.all;
-- Definiciones de tipos type STRING is array (POSITIVE range <>) of CHARACTER type LINE is access STRING;-- Pointer to a STRING value type TEXT is file of STRING; type SIDE is (RIGHT, LEFT);-- Justify output data type WIDTH is NATURAL;-- Specify widths of output fields -- Funciones y Procedimientos predefinidos function ENDFILE (F: TEXT) return BOOLEAN; procedure READLINE(F: in TEXT, L: out LINE); procedure READ(L:inout LINE; VALUE:out <tipo>; GOOD: out BOOLEAN); procedure WRITELINE(F: out TEXT; L: in LINE); procedure WRITE(L:inout LINE; VALUE:out <tipo>; JUSTIFIED: in SIDE; FIELD: in WIDTH); <tipo> cualquiera de los definidos en el package STANDARD
Dispositivos digitales. PLDs - 28
Package TEXTIO
Ficheros
READ FILE: process -- Aplicacin de los estmulos file INPUT_FILE: text is in "./eut_test.vec"; variable MY_LINE: line; variable IN1, IN2, OUT: std_logic; BEGIN WHILE (NOT (endfile (INPUT_FILE))) LOOP readline(INPUT_FILE, MY_LINE); read (MY_LINE, IN1);read (MY_LINE, IN2);read (MY_LINE, OUT); -- Aplicar valores leidos actual_clk <= '0'; actual_input1 <= IN1; actual_input2 <= IN2; wait for 10 ns; actual_clk <= '1'; wait for 10 ns; assert (actual_output = OUT) report "Resultado incorrecto"; END LOOP; assert FALSE -- Parar la simulacin report "Fin"; END PROCESS;
Universidad de Zaragoza, IEC. Dispositivos digitales. PLDs - 29
Report
NO
Simulacin funcional SI
Simulacin temporal