Anda di halaman 1dari 8

Modelado VHDL de operaciones aritmticas

Las funciones aritmticas y de comparacin estn restringidas a los tipos numricos definidos en el package standard
Integer, real

El package std_logic_1164 no incluye funciones aritmticas y de comparacin. Es necesario incluir packages adicionales Package std_logic_arith.
Define los tipos signed y unsigned, as como operaciones aritmticas y de comparacin para stos function "+" (L:UNSIGNED;R:UNSIGNED) return UNSIGNED; fucntion "+" (L:UNSIGNED;R:INTEGER) return UNSIGNED; Define funciones de conversin para pasar de std_logic_vector a signed o unsigned: Codificacin binaria sin signo. UNSIGNED("1011") -- representa 11 Codificacin complemento a 2. SIGNED("1011") -- representa -5
Universidad de Zaragoza, IEC. L. A. Barragn y J.I. Artigas TEMA 2: Lenguaje VHDL - 24

Modelado VHDL de operaciones aritmticas


Package std_logic_unsigned
Define operaciones aritmticas y de comparacin sin signo para objetos de tipo std_logic_vector.
function "+" (L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR; function "+"(L: STD_LOGIC_VECTOR; R: INTEGER) return STD_LOGIC_VECTOR;

Define funciones de conversin


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 aritmticas y de comparacin en complemento a 2 para objetos de tipo std_logic_vector.
Universidad de Zaragoza, IEC. L. A. Barragn y J.I. Artigas TEMA 2: Lenguaje VHDL - 25

Modelado VHDL de operaciones aritmticas


Nmeros sin signo
Package std_logic_arith Objetos de tipo unsigned
library IEEE use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.all; entity ARITH is Port ( A: In unsigned(7 downto 0); B: In unsigned(7 downto 0); O: Out unsigned(7 downto 0)); end ARITH; architecture BEHAVIORAL of ARITH is begin O <= A + B; end BEHAVIORAL;

Universidad de Zaragoza, IEC.

L. A. Barragn y J.I. Artigas

TEMA 2: Lenguaje VHDL - 26

Modelado VHDL de operaciones aritmticas


Nmeros sin signo
Objetos de tipo std_logic_vector Funcin de conversin de tipos UNSIGNED para interpretar A y B como objetos sin signo
library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.all; entity ARITH is Port ( 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 is begin O <= UNSIGNED(A) + UNSIGNED(B); end BEHAVIORAL;

Universidad de Zaragoza, IEC.

L. A. Barragn y J.I. Artigas

TEMA 2: Lenguaje VHDL - 27

Modelado VHDL de operaciones aritmticas


Nmeros sin signo
Objetos de tipo std_logic_vector Package std_logic_unsigned. A y B considerados como objetos sin signo sin necesidad de conversin de tipos
library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_unsigned.all; entity ARITH is Port ( A,B: In std_logic_vector(7 downto 0); O: Out std_logic_vector(7 downto 0)); end ARITH; architecture BEHAVIORAL of ARITH is begin O <= A + B; -- Para no perder el acarreo -- S <= ('0'&A) + ('0'& B); end BEHAVIORAL;
Universidad de Zaragoza, IEC. L. A. Barragn y J.I. Artigas TEMA 2: Lenguaje VHDL - 28

Modelado VHDL de operaciones aritmticas


Libreras aritmticas a incluir
std_logic_arith Todas las operaciones con signo Todas las operaciones sin signo La mayora de las operaciones sin signo La mayora de las operaciones con signo std_logic_unsigned std_logic_signed

Universidad de Zaragoza, IEC.

L. A. Barragn y J.I. Artigas

TEMA 2: Lenguaje VHDL - 29

Entornos de test
Un entorno de test (testbench) es otra entidad de diseo que se utiliza para verificar la correccin funcional de nuestro diseo
Se puede utilizar construcciones no sintetizables de VHDL 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

Generador de Estmulos Monitor de Resultados


Universidad de Zaragoza, IEC.

OUT_DATA

EUT: Engloba todo el hardware que va a ser sintetizado

L. A. Barragn y J.I. Artigas

TEMA 2: Lenguaje VHDL - 30

Generacin de estmulos
Los estmulos pueden:
Ser generados mediante cdigo VHDL no sintetizable Patrones no repetitivos --No repetitivo Patrones repetitivos RST <= '1', '0' after 20 ns;
--Repetitivo process begin CLK <= '0'; wait for 20 ns; CLK <= '1'; wait for 30 ns; end process;

--Repetitivo process begin CLK <= '0', '1' after 20 ns; wait for 50 ns; end process;

Ser vectores de datos almacenados en: Vector o tabla Fichero


Universidad de Zaragoza, IEC. L. A. Barragn y J.I. Artigas TEMA 2: Lenguaje VHDL - 31

Vectores de test almacenados en tabla


Entorno de test de un contador. 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 := ( -- 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"), ... );
Universidad de Zaragoza, IEC. L. A. Barragn y J.I. Artigas TEMA 2: Lenguaje VHDL - 32

Vectores de test almacenados en tabla


Aplicar estmulos
-- Aplicar vectores de test process -- Variable necesariamente 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; wait for 20 ns; -- comprobar resultados de simulacin -- si no se cumple condicin aparece el -- mensaje especificado en la pantalla assert (cnt = vector.cnt) report "Resultado incorrecto"; end loop; end process;

EUT rst cnt clk


3

Universidad de Zaragoza, IEC.

L. A. Barragn y J.I. Artigas

TEMA 2: Lenguaje VHDL - 33

Ficheros
El acceso a ficheros (para leer o escribir) ralentiza la simulacin Se distinguen por el tipo de informacin almacenada
type text is file of string; type IntegerFile is file of integer;

El package TEXTIO de la librera std permite almacenar en el fichero 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. L. A. Barragn y J.I. Artigas TEMA 2: Lenguaje VHDL - 34

Package TEXTIO
Los ficheros se organizan en lneas Procedimientos:
readline(F,L) y writeline(F,L) transfieren datos de ficheros a lneas y viceversa read(L,value) y write(L,value) operan sobre lneas
fichero F line L read(L,value) write(L,value) writeline(F,L) line 1 line 2 readline(F,L) line 3

Universidad de Zaragoza, IEC.

L. A. Barragn y J.I. Artigas

TEMA 2: Lenguaje VHDL - 35

Package TEXTIO
Package textio de la librera std
<tipo> cualquiera de los definidos en el package STANDARD
-- Definiciones de tipos type LINE is access string; -- Puntero a STRING type 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 librera ieee


<tipo> cualquiera de los definidos en el package STD_LOGIC_1164 Incluir clusulas: use std.textio.all; use ieee.std_logic_textio.all;
Universidad de Zaragoza, IEC. L. A. Barragn y J.I. Artigas TEMA 2: Lenguaje VHDL - 36

Ficheros en VHDL'93
Declaracin. Modos: lectura, escritura y aadir
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 del modelo
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
Universidad de Zaragoza, IEC. L. A. Barragn y J.I. Artigas TEMA 2: Lenguaje VHDL - 37

Ficheros
READ_FILE: process -- Aplicacin de los estmulos 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 simulacin END PROCESS;
Universidad de Zaragoza, IEC. L. A. Barragn y J.I. Artigas

0 1 1 1 1 0 ...

000 000 001

EUT RST EN CNT CLK

TEMA 2: Lenguaje VHDL - 38

Anda mungkin juga menyukai