tuto vhdl
TRANSCRIPT
5/16/2018 Tuto VHDL - slidepdf.com
http://slidepdf.com/reader/full/tuto-vhdl 1/8
Universidad de Zaragoza, IEC. TEMA 2: Lenguaje VHDL - 24L. A. Barragán y J.I. Artigas
Modelado VHDL de operaciones aritméticas
Las funciones aritméticas y de comparación están restringidas a lostipos numéricos definidos en el package standard
Integer, real
El package std_logic_1164 no incluye funciones aritméticas y decomparación. Es necesario incluir packages adicionales
Package std_logic_arith. Define los tipos signed y unsigned, así como operaciones aritméticas y de
comparación para éstos
• function "+" (L:UNSIGNED;R:UNSIGNED) return UNSIGNED;
• fucntion "+" (L:UNSIGNED;R:INTEGER) return UNSIGNED; Define funciones de conversión para pasar de std_logic_vector a signed o
unsigned:
• Codificación binaria sin signo. UNSIGNED("1011") -- representa 11
• Codificación complemento a 2. SIGNED("1011") -- representa -5
Universidad de Zaragoza, IEC. TEMA 2: Lenguaje VHDL - 25L. A. Barragán y J.I. Artigas
Modelado VHDL de operaciones aritméticas
Package std_logic_unsigned
Define operaciones aritméticas y de comparación sin signo para objetos detipo std_logic_vector .
– function "+" (L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR)
return STD_LOGIC_VECTOR; – function "+"(L: STD_LOGIC_VECTOR; R: INTEGER) returnSTD_LOGIC_VECTOR;
Define funciones de conversión – function CONV_INTEGER(ARG: STD_LOGIC_VECTOR) return
INTEGER;
– function CONV_STD_LOGIC_VECTOR(ARG: INTEGER; SIZE:INTEGER) return STD_LOGIC_VECTOR;
Package std_logic_signed Define operaciones aritméticas y de comparación en complemento a 2 para
objetos de tipo std_logic_vector .
5/16/2018 Tuto VHDL - slidepdf.com
http://slidepdf.com/reader/full/tuto-vhdl 2/8
Universidad de Zaragoza, IEC. TEMA 2: Lenguaje VHDL - 26L. A. Barragán y J.I. Artigas
Modelado VHDL de operaciones aritméticas
Números sin signo Package std_logic_arith
Objetos de tipo unsigned
library IEEEuse IEEE.std_logic_1164.all;use IEEE.std_logic_arith.all;
entity ARITH isPort ( A: In unsigned(7 downto 0);
B: In unsigned(7 downto 0);O: Out unsigned(7 downto 0));
end ARITH;
architecture BEHAVIORAL of ARITH isbegin
O <= A + B;end BEHAVIORAL;
Universidad de Zaragoza, IEC. TEMA 2: Lenguaje VHDL - 27L. A. Barragán y J.I. Artigas
Modelado VHDL de operaciones aritméticas
Números sin signo Objetos de tipo std_logic_vector
Función de conversión de tipos UNSIGNED para interpretar A y B comoobjetos sin signo
library IEEE;use IEEE.std_logic_1164.all;use IEEE.std_logic_arith.all;
entity ARITH isPort ( A: In std_logic_vector(7 downto 0);
B: In std_logic_vector(7 downto 0);O: Out std_logic_vector(7 downto 0));
end ARITH;
architecture BEHAVIORAL of ARITH isbeginO <= UNSIGNED(A) + UNSIGNED(B);
end BEHAVIORAL;
5/16/2018 Tuto VHDL - slidepdf.com
http://slidepdf.com/reader/full/tuto-vhdl 3/8
Universidad de Zaragoza, IEC. TEMA 2: Lenguaje VHDL - 28L. A. Barragán y J.I. Artigas
Modelado VHDL de operaciones aritméticas
Números sin signo Objetos de tipo std_logic_vector
Package std_logic_unsigned. A y B considerados como objetos sin signo sinnecesidad de conversión de tipos
library IEEE;use IEEE.std_logic_1164.all;use IEEE.std_logic_unsigned.all;
entity ARITH isPort ( A,B: In std_logic_vector(7 downto 0);
O: Out std_logic_vector(7 downto 0));end ARITH;
architecture BEHAVIORAL of ARITH isbeginO <= A + B;-- Para no perder el acarreo-- S <= ('0'&A) + ('0'& B);
end BEHAVIORAL;
Universidad de Zaragoza, IEC. TEMA 2: Lenguaje VHDL - 29L. A. Barragán y J.I. Artigas
Modelado VHDL de operaciones aritméticas
Librerías aritméticas a incluir
La mayoría de las
operaciones con signo
La mayoría de las
operaciones sin signo
Todas las operaciones
sin signo
Todas las operaciones
con signo
std_logic_signedstd_logic_unsignedstd_logic_arith
5/16/2018 Tuto VHDL - slidepdf.com
http://slidepdf.com/reader/full/tuto-vhdl 4/8
Universidad de Zaragoza, IEC. TEMA 2: Lenguaje VHDL - 30L. A. Barragán y J.I. Artigas
Entornos de test
Un entorno de test (testbench) es otra entidad de diseño que se utiliza para verificar la corrección funcional de nuestro diseño Se puede utilizar construcciones no sintetizables de VHDL
Partes de un entorno de test• Entidad a testear (EUT)• Generador de estímulos. É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
Generador de Estímulos
TEST BENCH
CLK
RST,IN_DATA
OUT_DATA
EUT:Engloba todoel hardwareque va a ser sintetizado
Monitor deResultados
Universidad de Zaragoza, IEC. TEMA 2: Lenguaje VHDL - 31L. A. Barragán y J.I. Artigas
Generación de estímulos
Los estímulos pueden: Ser generados mediante código VHDL no sintetizable
• Patrones no repetitivos• Patrones repetitivos
Ser vectores de datos almacenados en:• Vector o tabla• Fichero
--Repetitivo
process begin
CLK <= '0';
wait for 20 ns;
CLK <= '1';
wait for 30 ns;
end process;
--No repetitivo
RST <= '1', '0' after 20 ns;
--Repetitivo
process begin
CLK <= '0', '1' after 20 ns;
wait for 50 ns;
end process;
5/16/2018 Tuto VHDL - slidepdf.com
http://slidepdf.com/reader/full/tuto-vhdl 5/8
Universidad de Zaragoza, IEC. TEMA 2: Lenguaje VHDL - 32L. A. Barragán y J.I. Artigas
Vectores de test almacenados en tabla
type test_vector is recordclk: 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 := (-- poner a 0 contador(clk=>'0',rst=>'1',cnt=>"000"),(clk=>'1',rst=>'1',cnt=>"000"),(clk=>'0',rst=>'0',cnt=>"000"), -- Modificar rst en flanco bajada
-- incrementar contador(clk=>'1',rst=>'0',cnt=>"001"),(clk=>'0',rst=>'0',cnt=>"001"),(clk=>'1',rst=>'0',cnt=>"010"),
...);
Entorno de test de un contador. Declarar estímulos
Universidad de Zaragoza, IEC. TEMA 2: Lenguaje VHDL - 33L. A. Barragán y J.I. Artigas
Vectores de test almacenados en tabla
Aplicar estímulos
-- Aplicar vectores de testprocess
-- Variable necesariamentevariable vector: test_vector;
beginfor i in test_vectors'range loop
-- Obtener vector ivector := test_vectors(i);clk <= vector.clk;rst <= vector.rst; wait for 20 ns;-- comprobar resultados de simulación
-- si no se cumple condición aparece el-- mensaje especificado en la pantalla
assert (cnt = vector.cnt)
report "Resultado incorrecto";end loop;
end process;
rst
cnt
clk
3
EUT
5/16/2018 Tuto VHDL - slidepdf.com
http://slidepdf.com/reader/full/tuto-vhdl 6/8
Universidad de Zaragoza, IEC. TEMA 2: Lenguaje VHDL - 34L. A. Barragán y J.I. Artigas
Ficheros
El acceso a ficheros (para leer o escribir) ralentiza la simulación
Se distinguen por el tipo de información almacenada
type text is file of string; type IntegerFile is file of integer;
El package TEXTIO de la librería std permite almacenar en elfichero el equivalente en texto (ASCII) del dato Almacenar el equivalente en texto (7) de un entero en vez del formato
binario
Para utilizar las funciones definidas en el package incluir en el
encabezamiento• Use std.textio.all;
El manejo de ficheros es diferente en VHDL'87 y VHDL'93
Universidad de Zaragoza, IEC. TEMA 2: Lenguaje VHDL - 35L. A. Barragán y J.I. Artigas
Package TEXTIO
Los ficheros se organizan en líneas
Procedimientos: readline(F,L) y writeline(F,L) transfieren datos de ficheros a líneas y
viceversa
read (L,value) y write(L,value) operan sobre líneas
line 1
line 2
line 3
line L
read (L,value)
write(L,value)
writeline(F,L)
fichero F
readline(F,L)
5/16/2018 Tuto VHDL - slidepdf.com
http://slidepdf.com/reader/full/tuto-vhdl 7/8
Universidad de Zaragoza, IEC. TEMA 2: Lenguaje VHDL - 36L. A. Barragán y J.I. Artigas
Package TEXTIO
Package textio de la librería std
<tipo> cualquiera de los definidos en el package STANDARD
-- Definiciones de tipos
type LINE is access string; -- Puntero a STRINGtype TEXT is file of STRING;
-- Funciones y Procedimientos predefinidos
function ENDFILE(file F : TEXT) return boolean;
procedure READLINE(file f: TEXT; L: out LINE);
procedure READ(L:inout LINE; VALUE:out <tipo>);
procedure WRITELINE(file f : TEXT; L : inout LINE);
procedure WRITE(L:inout LINE; VALUE:out <tipo>);
Package std_logic_textio de la librería ieee
<tipo> cualquiera de los definidos en el package STD_LOGIC_1164
Incluir cláusulas:
• use std.textio.all;
• use ieee.std_logic_textio.all;
Universidad de Zaragoza, IEC. TEMA 2: Lenguaje VHDL - 37L. A. Barragán y J.I. Artigas
Ficheros en VHDL'93
Declaración. Modos: lectura, escritura y añadir file MY_FILE : IntegerFile;
file MY_FILE : text is"inputdata.txt"; -- por defecto lectura
file MY_FILE : text open READ_MODE is"inputdata.txt";
file MY_FILE : text open WRITE_MODE is "outputdata.txt";
file MY_FILE : text open APPEND_MODE is "outputdata.txt";
Los ficheros pueden ser abiertos o cerrados bajo el control delmodelo file_open(fstatus, MY_FILE, "my_file.dat", write_mode)
file_close(MY_FILE)
Definido tipo enumerado FILE_OPEN_STATUS: Valores: OPEN_OK, STATUS_ERROR, NAME_ERROR, MODE_ERROR
5/16/2018 Tuto VHDL - slidepdf.com
http://slidepdf.com/reader/full/tuto-vhdl 8/8
Universidad de Zaragoza, IEC. TEMA 2: Lenguaje VHDL - 38L. A. Barragán y J.I. Artigas
Ficheros
READ_FILE: process -- Aplicación de los estímulos
file MY_FILE: text open READ_MODE is "eut_test.dat";
variable MY_LINE: line;
variable VEN, VRST: std_logic;
variable VCNT: std_logic_vector(2 downto 0);BEGIN
WHILE (NOT (endfile (MY_FILE))) LOOP
readline(MY_FILE, MY_LINE);
read(MY_LINE, VEN); read(MY_LINE, VRST);
read(MY_LINE, VCNT);
-- Aplicar valores leidos en flanco de bajada
CLK <= '0';
EN <= VEN; RST <= VRST;
wait for 10 ns;
CLK <= '1';
wait for 10 ns;
assert (CNT = VCNT) report "Resultado incorrecto";
END LOOP;
wait; -- Parar la simulación
END PROCESS;
EN
CNT
CLK
3
EUT
RST
0 1 000
1 1 000
1 0 001
...