Beruflich Dokumente
Kultur Dokumente
TEMA 2:
LENGUAJE VHDL
Breve historia
Caractersticas de VHDL
Introduccin
Conceptos bsicos
Descripcin de la arquitectura
Modelo de tiempos
Simulacin
Lenguaje VHDL - 1
Breve historia
Qu significa VHDL?
VHDL = VHSIC Hardware
Description Language
VHSIC = Very High Speed Integrated
Circuits
Soporta temporizacin:
Sncrona
Asncrona
Lenguaje VHDL - 2
Codificacin orientada al
hardware
Evitar:
Bucles combinacionales.
Buffers triestado.
Latches (usar slo FFs).
Set, Reset asncronos.
Relojes condicionales (Gated-clock).
Lenguaje VHDL - 3
CONCEPTOS BASICOS
Objetos
Tipos
Operadores
Lenguaje VHDL - 4
Objetos
t
Clases de objetos:
Constant. Se les asigna un valor
inicial que no puede ser modificado.
Variable. Contiene un valor que
puede ser modificado.
Signal. Contiene una lista de valores
que incluye el valor actual y un
conjunto de posibles valores futuros.
File. Modelan ficheros en el entorno
del host. Se utilizan en test-benchs.
Tipos
t
variable R: natural := 0;
t
Declaraciones implcitas:
Puertos de una entidad
Indices de bucles
Lenguaje VHDL - 5
Tipos escalares
t
Composite
t
Tipo matriz:
Una o ms dimensiones
Elementos del mismo tipo
Acceso indexado
1
0
1
2
3
t
ENUMERATION
-- Conjunto de valores definidos por el usuario
-- Hace ms legible el cdigo, se utiliza en la
-- definicin de mquinas de estado
type MICRO_OP is (LOAD, STORE, ADD, SUB);
Campo2
Campo3
Campo4
Tipo Registro:
Uno o ms campos
Campos de diferente tipo
Acceso por nombre
Campo1
FISICOS
-- Representan medidas de magnitudes fsicas
-- Existe un tipo TIME cuya unidad es fs
constant TH : time := 10 ns;
Lenguaje VHDL - 6
Tipos de datos
t
Operadores
type MATRIZ is
array(integer range<>, integer range <>) of integer;
subtype IMAGEN is MATRIZ (0 to 255, 0 to 255);
subtype POSITIVE is INTEGER range 1 to INTEGERHIGH
t
package std_logic_arith
package std_logic_unsigned
package std_logic_signed
ARITMTICOS
+
*
/
mod
rem
**
abs
RELACIN
SIGN O
DESPL.
sll
srl
sla
sra
rol
ror
/=
>
<=
>=
CONCATENACIN
<
LOGICOS
AND
OR
NAND
NOR
XOR
NOT
&
Lenguaje VHDL - 7
ORGANIZACIN DEL
DISEO
Entidad
Entidad:
Declaracin de la entidad.
Descripcin de la arquitectura.
Declaracin de la configuracin.
Empaquetamientos y libreras.
E2
E1
Lenguaje VHDL - 8
Declaracin de la entidad
Modo de un puerto
Design Entity
Entity Declaration
Architecture Body
IN
Config. Declaration
Modos
INOUT
OUT
BUFFER
R/W
Lectura de un BUFFER,
como solo tiene una fuente,
lee el valor asignado
Tipos
Lenguaje VHDL - 9
Descripcin de la arquitectura
t
Declaracin de configuracin
component E2
...
end component
ARCHITECTURE mi_arq OF E1 IS
Design Entity
Entity Declaration
...
I_1: E2
E1_A1
E1_A2
Entity E2
BEGIN
Architecture Body
Config. Declaration
-- Instrucciones Concurrentes
-- El orden textual no importa
-- ya que se ejecutan en paralelo
END mi_arq;
-- Descripcin de entidad E1 en
-- fichero E1.vhd
configuration CFG_E1 of E1 is
for E1_A2
for I_1: E2
use configuration WORK.CFG_E2_A1;
end for;
end for;
end CFG_E1;
E2_A1
E2_A2
-- Descripcin de E2 entity en
-- fichero E2.vhd
configuration CFG_E2_A1 of E2 is
for E2_A1
end for;
end CFG_E2_A1
Lenguaje VHDL - 10
Declaracin de Entidad
Definir zcalos
Arquitectura
Soldar zcalos en la
placa y Rutear pistas
En un mismo zcalo se
pueden insertar distintos
C.I. compatibles
funcionalmente y pin a
pin segn: velocidad,
precio, consumo,...
Configuracin
Insertar en cada zcalo
un integrado
Empaquetamientos:
Pueden contener declaraciones y
definiciones de objetos a usar en
diferentes diseos.
Constan de:
Declaracin: Componentes, constantes,
tipos, funciones y procedimientos.
Cuerpo: Cuerpos de las funciones y
procedimientos declarados.
package EX_PACK is
z
z --Declarations
z
end;
Libreras:
Los diseos, una vez compilados, se
almacenan en Libreras.
Una librera es un directorio. Los
diseos compilados son ficheros.
Lenguaje VHDL - 11
CLK
RST
Smbolo
ppp.sch
odf
I_2
ctl
STD_LOGIC_1164
STD_LOGIC_ARITH
I_3
odf.vhd
library IEEE;
use IEEE.std_logic_1164.all
Entity Declaration
odf
I_1
Esquemtico
OUT_DATA(15:0)
IN_DATA(15:0)
DATA_RDY
VHDL
Architecture Body
Config. Declaration
Lenguaje VHDL - 12
DESCRIPCION DE LA
ARQUITECTURA
Arbol de directorios
Introduccin
Estilos de modelado
Sentencia PROCESS
Sentencias secuenciales
Sentencias de asignacin
Sentencia IF
Sentencia CASE
Sentencia LOOP
Sentencia COMPONENT
Ejemplo
VLSI1
home
synopsys
sd4
packages
usuario
IEEE
WORK
src
lib
std_logic_1164.vhd
std_logic_arith.vhd
...
xxx.vhd
xxx.sym
xxx.sch
xxx.syn
xxx.sim
xxx.mra
Lenguaje VHDL - 13
Introduccin
t
PROCESS
Comportamental
Secuencial
Statement A
Statement B
Signal Assignment
Process
Component
Block
Statement C
Concurrente
COMPONENT instantation
t
Estructural
END name;
t
Procedure
Generate
Assert
Lenguaje VHDL - 14
RS_Latch
Q
RESET
Ecuaciones Booleanas
Dominio Concurrente.
N_RESET
0
0 1
1
1
1 0
Descripcin comportamental
Algoritmo secuencial.
SET RESET
0
0
1
1
Descripcin comportamental
entity RS_Latch is
Port (N_SET : In BIT;
N_RESET: In BIT;
Q : Out BIT;
N_Q : Out BIT);
end RS_Latch;
SET
N_SET
0
1
0
1
1
1
0
Q
1
0
1
Q
Descripcin estructural
SET
U1
U2
RESET
Lenguaje VHDL - 15
Es un error:
No utilizar ninguno de los dos
mecanismos en un proceso. El proceso
permanece en un bucle infinito
Utilizar lista de sensibilidades y
sentencias wait en el mismo proceso
end process;
process (sensitivity list);
-- Declarations (var.)
begin
-- Sequential stmts
end process;
t
Un proceso puede
estar activo o en
suspenso. El proceso
se ejecuta hasta que
se suspende.
Proceso
Activo
Activo
Eventos en
AoB
Suspenso
Suspenso
Lenguaje VHDL - 16
Suspenso
Eventos en
AoB
Activo
Lenguaje VHDL - 17
Sentencias secuenciales
t
Sentencias de asignacin
t
Asignacin de seal:
Nombre_sig <= expresion;
Las seales a ambos lados del
operador de asignacin deben ser del
mismo tipo
Si hay varias asignaciones a la misma
seal dentro de un mismo proceso:
prevalece el valor de la ltima
Pueden aparecer en sentencias
secuenciales y concurrentes
Asignacin de variable:
Nombre_var := expresion;
Los objetos a ambos lados del
operador de asignacin deben ser del
mismo tipo
Mantienen su valor a lo largo del ciclo
de simulacin
Slo puede aparecer en el interior de
un proceso (dominio secuencial)
LOOP
NEXT
EXIT
Sincronizacin
entre procesos
WAIT
Subprogramas
PROCEDURE
FUNCTION
Asignacin de Seales
Asignacin de Variables
Assertion
Lenguaje VHDL - 18
Sentencia IF
t
Sentencia CASE
Sentencia IF:
Cada una de las condiciones debe ser
booleana
Si una condicin es evaluada como
verdadera, el resto de las expresiones
no son evaluadas
when others
PROCESS
BEGIN
if S1='0' and S0='0' then
Z <= IN0 after 5 ns;
elsif S1='0' and S0='1' then
Z <= IN1 after 5 ns;
elsif S1='1' and S0='0' then
Z <= IN2 after 5 ns;
else Z <= IN3 after 5 ns;
end if;
wait on IN0,IN1,IN2,IN3, S1,S0;
END PROCESS
IN0
IN1
MUX
Sentencia CASE
Se escoge una y slo una de las
alternativas
Cuando no se cubren todas las
alternativas es necesario la inclusin
como ltima alternativa de :
IN2
IN3
S0 S1
Lenguaje VHDL - 19
Sentencia LOOP:
La forma con while primero evalua la
condicin y si sta es verdadera se
ejecuta el contenido del bucle.
La forma con for especifica un
nmero de iteraciones. La declaracin
de la variable de iteracin es implcita.
No se le puede asignar valores dentro
del bucle y no existe fuera de l.
Dentro de un bucle se pueden utilizar las
sentencias: NEXT y EXIT.
L1:
L2:
Lenguaje VHDL - 20
Sentencia COMPONENT
t
Ejemplo (1)
clock
CLK
I_1
COUNT
RST
reset
RST
I_2
3bit_counter
CLK
I_3
entity reset is
PORT(RST: out bit);
end reset;
reset
RST
clock
CLK
Lenguaje VHDL - 21
Ejemplo (2)
MODELO DE TIEMPOS
entity 3bit_counter is
PORT(CLK,RST: in bit;
COUNT: out integer range 0 to 7);
end 3bit_counter;
t
t
Driver
Ciclo de simulacin
Mltiples drivers
COUNT
Lenguaje VHDL - 22
Ciclo de simulacin
t
La simulacin
Comienza con las asignaciones de seal
y todos los procesos suspendidos
Los procesos reaccionan ante eventos en
ciertas seales
Finaliza cuando no hay procesos activos
ni asignaciones de seal que hacer en
dicho tiempo T
Current
T
Simulation Time
2nd Half
AWAKE
PROCESS
2
1
*D
*C
Next
Simulation Time
3
1st Half
UPDATE
SIGNALS
Retraso delta
No se corresponde con ningn retraso
real. El tiempo fsico de simulacin no
avanza.
Permite ordenar eventos que ocurren
en el mismo tiempo de simulacin
La ordenacin es causal
*
20 ns
*
40 ns
* X, seal X es actualizada
Lenguaje VHDL - 23
CONDICIONES INICIALES
A=0, B=1, C=2, X=3
PROCESS
-- A, B, C, X son variables
-- Declaracin y asignacin
-- dentro del proceso
BEGIN
-- wait until the trailing
-- edge of the clock
wait until Clock = '1';
-- variable assignments
A:= B+C; -- 1+2
X:= A+C; -- 3+2
A:= X+C; -- 5+2
END PROCESS;
A=7, X=5
PROCESS
-- A, B, C, X son seales
-- Las seales se han de-- clarado fuera del proceso
BEGIN
-- wait until the trailing
-- edge of the clock
wait until Clock = '1';
-- signal assignments
A<= B+C; -- 1+2
X<= A+C; -- 0+2
A<= X+C; -- 3+2
END PROCESS;
A=5, X=2
Lenguaje VHDL - 24
Asignacin concurrente de
seales (1)
t
Asignacin concurrente de
seales (2)
t
architecture A1 of INV is
signal B, C : bit;
begin
-- El orden textual
A
-- no importa
Z <= NOT C;
B <= NOT A;
C <= NOT B;
end A1;
*
20 ns
-- Concurrente
A<= B;
Z <= A;
B
A
B
Z
20ns
20ns + 3
Lenguaje VHDL - 25
Multiples drivers
Driver
Driver: lista de pares (valor, tiempo)
ordenados temporalmente (T, ) asociados
a una seal
'U'
'0'
5
DR1:
DR2:
('0' , 10ns)
('1' , 5ns)
architecture A1 of TWO_DR is
begin
Z <= A and B after 10 ns;
Z <= not C after 5 ns;
end;
Funcin
de
Resolucin
'1'
10
ns
Lenguaje VHDL - 26
DESCRIPCION DE
CIRCUITOS DIGITALES
t
Introduccin
Circuitos combinacionales
Circuitos secuenciales:
Latches
Flip-Flops
Introduccin
Lenguaje VHDL - 27
Circuitos combinacionales
t
library IEEE;
use IEEE.std_logic_1164.all;
entity COMBI is
port( A, B, C: in std_logic;
D: out std_logic);
end COMBI;
process (A, B)
begin
D <= (A and B) or C;
end process;
t
D
process (A, B, C)
begin
D <= (A and B) or C;
end process;
Cdigo interpretado
por la herramienta de
sntesis
Lenguaje VHDL - 28
Tipo booleano
Cierto => 1
Falso => 0
process(A, B, COND)
begin
-- Asignar valor a D_OUT
-- en todas las condiciones
if (COND) then
D_OUT <= B;
else
D_OUT <= A;
end if;
process(A, B, COND)
end process;
begin
-- Dar a D_OUT
-- un valor por defecto
D_OUT <= A;
if (COND) then
D_OUT <= B;
end if;
end process;
B
COND
D_OUT
A
Lenguaje VHDL - 29
Latch
process (Enable,Data)
begin
if (Enable='1') then
Value <= Data;
end if;
end process;
PROCESS (A,B,C,D,SEL)
BEGIN
case SEL is
when "00" => Z <= A;
when "01" => Z <= B;
when "10" => Z <= C;
when others => Z <= D;
end case;
END PROCESS;
A
B
MUX
Sentencia IF Latch
C
D
Data
Value
Enable
Data
Enable
Value
SEL
Lenguaje VHDL - 30
Circuitos secuenciales
t
Flip-Flop
process (CLK)
begin
if (CLK'EVENT and CLK='1') then
if (Reset = '1') then
Q <= '0';
else Q <= Data;
end if;
end if;
end process;
process begin
-- Flanco Ascendente
wait until CLK='1';
...
end process;
process (CLK)
begin
if CLK'EVENT and CLK='1' then
...
end if;
end process;
Lenguaje VHDL - 31
MEFs
Tipos:
MOORE, correspondencia entre
estado y vector de salida biunvoca
Funcin de salida S O
Funcin de
Transicin
Next
state
Registros
S
Funcin
de Salida
Current state
Niveles de descripcin:
Algortmico
Tablas de Transicin de estados
Ecuaciones booleanas y registros
Funcin de
Transicin
Next
state
Registros
S
Funcin
de Salida
Current state
Lenguaje VHDL - 32
Descripcin en 2 procesos de
MEF sncronas
t
Descripcin en 2 procesos de
MEF sncronas
t
Descripcin en 2 procesos:
Proceso secuencial, actualiza el estado
Proceso combinacional, deriva el
siguiente estado y actualiza las salidas
Para evitar "glitches", registrar salidas
ENTITY fsm
ARCHITECTURE Beh2 OF fsm
INPUTS
CASE
Para cada estado:
Transicin de estados;
Generacin de salidas;
OUTPUTS
Combinacional:
PROCESS( Current_state, All_inputs)
Secuencial:
PROCESS BEGIN
-- Un unico CLK
wait until CLK ='1';
Next_state
Current_state
END PROCESS;
END PROCESS;
Estructura General:
Lenguaje VHDL - 33
SIMULACION
Entornos de test
Entornos de test
Generacin de estmulos
Vectores de test
Ficheros
Generador
de Estmulos
Monitor de
Resultados
CLK
RST,
IN_DATA
OUT_DATA
EUT:
Engloba todo
el hardware
que va a ser
sintetizado
Lenguaje VHDL - 34
Generacin de estmulos
t
Utilizacin:
Los estmulos pueden ser vectores de
entrada almacenados en una tabla
Los resultados esperados se pueden
almacenar junto con el correspondiente
vector de entrada para su comparacin
con el resultado obtenido
Ejemplo:
Declaracin
vector o tabla
fichero ASCII
t
Generacin de estmulos:
Patrones NO Repetitivos
Patrones Repetitivos
--No repetitivo
RST <= '1', '0' after 20 ns;
--Repetitivo
process begin
CLK <= '0';
wait for 10 ns;
CLK <= '1';
wait for 10 ns;
end process;
--Repetitivo
process begin
CLK <= '1', '0' after 20 ns;
wait for 50 ns;
end process;
Lenguaje VHDL - 35
Ficheros (1)
Utilizacin:
Los estmulos pueden ser vectores de
entrada almacenados en un fichero
ASCII
Los resultados se pueden escribir en un
fichero para posterior comprobacin
Construcciones:
-- Instanciacin de EUT
U1:eut port map(CLK=>actual_clk,I1=>actual_input1,
I2=>actual_input2, O=>actual_output);
-- Aplicacin de los estmulos
process begin
for i in input_vectors'range loop
-- Aplicar vector de test
-- en el flanco de bajada del reloj
actual_clk <= '0';
actual_input1 <= input_vectors(i).input1;
actual_input2 <= input_vectors(i).input2;
wait for 10 ns;
actual_clk <= '1';
wait for 10 ns;
-- Comprobar resultados de simulacin
assert(actual_output=input_vectors(i).output)
report "Resultado incorrecto";
end loop;
assert FALSE -- Parar la simulacin
report "Fin";
end process;
Package TEXTIO
-- 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
Lenguaje VHDL - 36
Ficheros (2)
t
Ejemplo:
-- Instanciacin de EUT
U1:eut port map(CLK=>actual_clk,I1=>actual_input1,
I2=>actual_input2, O=>actual_output);
-- Aplicacin de los estmulos
READ FILE: process
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;
Lenguaje VHDL - 37