tuto vhdl

8
 Universidad de Zaragoza, IEC. TEMA 2: Lenguaje VHDL- 24 L. 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 los tipos numéricos definidos en el package standard Integer, real El package std_logic_1164 no incluye funciones aritméticas y de comparació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 • func tion "+" (L:UNSIGNED;R:UNSIGNED) retur n UNSI GNED; fucn tion "+" (L:UNSIGNE D;R:I NTEGE R) retur n UNSIGNED; Define funciones de conversión para pasar de std_logic_vector a signed o unsigned: • Codificación binar ia sin signo . UNSI GNED( "1011 ") -- repre senta 11 • Codificación comp lement o a 2. SIGNED("1011") -- representa -5 Universidad de Zaragoza, IEC. TEMA 2: Lenguaje VHDL- 25 L. 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 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 conversión  function CONV_INTEGER(ARG: STD_LOGIC_VECTOR) return INTEGER;  function CONV_STD_LOGI C_VECTOR(ARG: INTEGER ; SIZE: INTEGER) retur n STD_LOGIC _VECT OR;  Package std_logic_signed Define operaciones aritméticas y de compar ación en complemento a 2 para objetos de tipo std_logic_vector .

Upload: daniel-guzman

Post on 18-Jul-2015

142 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Tuto VHDL

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 .

Page 2: Tuto VHDL

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;

Page 3: Tuto VHDL

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

Page 4: Tuto VHDL

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;

Page 5: Tuto VHDL

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

Page 6: Tuto VHDL

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)

Page 7: Tuto VHDL

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 

Page 8: Tuto VHDL

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

...