Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Seminarios VHDL
Seminarios VHDL
VHDL
La entidad y la arquitectura
Tipos de datos
Los procesos
Circuitos combinacionales
Circuitos secuenciales
Mquinas de estados
Triestados
Diseo jerrquico
Estilos de diseo
Verificacin con testbenches
Sintetizar
Simular
0 ns
10 ns
20 ns
A
B
S
Comprobar que tienen la
funcionalidad deseada
EDCD (Informtica,3)
DCSE (Teleco, 4)
SISTEMAS DIGITALES
Microprocesador
MUX
ALU
DECOD
Circuitos
Combinacionales
Puertas lgicas
REG
CONT
MEM
Circuitos
Secuenciales
Biestables
AUT
VHDL: HW + ALGORITMOS
Con VHDL modelamos el HARDWARE
Pero VHDL permite tambin programar ALGORITMOS (Software)
Mi diseo
hardware
Banco de pruebas
Pensamos
en HW
VHDL: Evolucin
La entidad y la arquitectura
VHDL
Tipos de datos
Los procesos
Circuitos combinacionales
Circuitos secuenciales
Mquinas de estados
Triestados
Diseo jerrquico
Estilos de diseo
Verificacin con testbenches
Entidad y arquitectura
Una unidad hardware se visualiza
como una caja negra
El interfaz de la caja negra esta
completamente definida.
El interior esta oculto.
rst
d[7:0]
clk
q[7:0]
rst
d[7:0]
clk
q[7:0]
IN
OUT
INOUT
MODO
TIPO
mi_componente
rst
d[7:0]
clk
q[7:0]
Declaraciones del
puerto
entity mi_componente is
port (
);
end mi_componente;
Nombre de la entidad
Parte declarativa
begin
Cuerpo
end test;
Nombre de la arquitectura
15
Tipos de datos
VHDL
European
Training Institute
Los procesos
Circuitos combinacionales
Circuitos secuenciales
Mquinas de estados
Triestados
Diseo jerrquico
Estilos de diseo
Verificacin con testbenches
Univ. Autnoma
de Madrid
tipos
access
file
compuestos
escalares
real
entero
array
Escalares:
integer
floating point
enumerated
physical
Compuestos: array
record
Punteros:
access
Archivos:
file
record
fsico
enumerados
ENUMERATED: Enumeracin
Conjunto de valores definido por el usuario
Por ejemplo: TYPE estados IS (inicio, lento, rapido)
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY mi_componente IS PORT (
clk, rst:
IN
std_logic;
d:
IN
std_logic_vector(7 DOWNTO 0);
q:
OUT
std_logic_vector(7 DOWNTO 0));
END mi_componente;
mi_componente
rst
d[7:0]
clk
q[7:0]
<= '1';
Ejemplo de uso:
Definimos una variable de tipo unsigned, para implementar un
contador:
VARIABLE contador: unsigned(7 downto 0);
Incrementamos la variable en 1:
contador:=contador + 1;
std_logic_signed,
std_logic_unsigned,
std_logic_arith
Uso:
mi_maquina<=INACTIVO;
Uso:
mi_memoria(0)<=xAA;
&
and
or, nor
xor, xnor
Relacionales
=
/=
<
<=
>
>=
igual
distinto
menor
menor o igual
mayor
mayor o igual
Miscelneos
abs valor absoluto
** exponenciacin
not negacin (unario)
Adicin
Multiplicativos
*
/
rem
mod
suma
resta
concatenacin de vectores
multiplicacin
divisin
resto
mdulo
Signo (unarios)
+,
Desplazamiento (signed y
unsigned)
shift_right, shift_left
Ms sobre operadores
No todos los operadores estn definidos para todos los tipos
El operador de concatenacin se utiliza muy a menudo
signal a: std_logic_vector( 3 downto 0);
signal b: std_logic_vector( 3 downto 0);
signal c: std_logic_vector( 7 downto 0);
a <= "0011";
b <= "1010";
c <= a & b;
-- c ="00111010"
a <= "0011";
b <= shift_left(a,1); -- b ="0110"
b <= shift_right(a,1); -- b ="0001"
Los procesos
VHDL
Circuitos combinacionales
Circuitos secuenciales
Mquinas de estados
Triestados
Diseo jerrquico
Estilos de diseo
Verificacin con testbenches
begin
En el cuerpo de la arquitectura
se modela el comportamiento
del circuito con asignaciones,
instanciaciones y PROCESOS
end UAM;
process(lista de seales)
...
parte declarativa (variables, procedimientos, tipos, etc)
...
begin
...
instrucciones que describen el comportamiento
...
end process;
A
B
El proceso
no declara
nada
process(A,B)
begin
if A='1' and B='1' then
S <= '1';
else
S <= '0';
Se usa un if..then..else
end if;
para describir la puerta
end process;
C
D
S
Q
S <= A and B;
Q <= C or D;
Necesidad de la concurrencia
Sin embargo, esta solucin ya no vale con este circuito:
A
B
C
S
Q
S <= A and B;
!Q no toma el
valor correcto
porque no se da
tiempo para
que se
actualize S!
Q <= S or C;
Por qu? No hay que olvidar que se trata de modelizar
circuitos reales, no virtuales, y las seales necesitan que
transcurra el tiempo para tomar un valor:
La solucin de VHDL
VHDL (y en general, todos los HDLs) solucionan este problema
dando soporte explicito a la concurrencia
En VHDL, una arquitectura puede tener tantos procesos como
queramos, y todos se ejecutan concurrentemente
architecture ...
...
begin
process(...)
...
end process;
process(...)
...
end process;
end ...;
A
B
C
process(A,B)
begin
if A='1' and B='1' then
S <= '1';
else
S <= '0';
end if;
end process;
S
Q
t0
t1
t2
process(C,S)
begin
if C='1' then
Q <= '1';
else
Q <= S;
end if;
end process;
end uam;
Procesos: Recapitulando
Los procesos se disparan (su cdigo se ejecuta) cuando
cambia alguna de las seales en su lista de sensibilidad
Las instrucciones dentro del proceso se ejecutan
secuencialmente, una detrs de otra, pero sin dar lugar a que
avance el tiempo durante su ejecucin
El tiempo slo avanza cuando se llega al final del proceso
Las seales modelan hilos del circuito, y como tales, slo
pueden cambiar de valor si se deja que avance el tiempo
Una arquitectura puede tener tantos procesos como queramos,
y todos se van a ejecutar en paralelo
Esta es la manera que tiene VHDL de expresar la concurrencia
inherente al hardware
IF condicion_1 THEN
...
secuencia de instrucciones 1
...
ELSIF condicion_2 THEN
...
secuencia de instrucciones 2
...
ELSIF condicion_3 THEN
...
secuencia de instrucciones 1
...
ELSE
...
instrucciones por defecto
...
END IF;
Ejemplo: Un multiplexor
process(A,B,S)
begin
if S = '1' then
X <= A;
else
X <= B;
end if;
end process;
B
S
CASE expresion IS
WHEN caso_1 =>
...
secuencia de instrucciones 1
...
WHEN caso_2 =>
...
secuencia de instrucciones 2
...
WHEN OTHERS =>
...
instrucciones por defecto
...
END CASE;
op1
op2
cmd
res
Ejemplo:
Decodificador de 3 a 8
paraleliza
Ejemplo:
Bsqueda en una tabla
busca: process(valor)
begin
encontrado <= '0'; pos := 0;
while valor /= tabla(pos) or pos < 100 loop
pos := pos + 1;
end loop;
if pos < 100 then
encontrado <= '1';
end if;
Aqu tambin se
end process;
paraleliza el bucle
end architecture uam;
Las instrucciones
se ejecutan hasta
que se llega al wait,
y en ese punto se
suspende el
proceso
Al llegar al final,
se empieza otra
vez por el
principio
process(lista de seales)
...
begin
...
instrucciones secuenciales
...
end process;
El proceso se
dispara cuando
cambia alguna
de estas seales
El proceso se
dispara
inmediatamente
process
...
begin
...
instrucciones secuenciales
...
wait...
...
instrucciones secuenciales
...
end process;
Cuando se deja de
cumplir la
condicin de
espera, la
ejecucin contina
Equivalente a emplear
lista de sensibilidad
Las variables
A la hora de modelar un circuito nos puede venir bien un tener
un objeto cuyo valor se actualice inmediatamente
sin tener que esperar a que avance el tiempo, como en las seales
El problema de la actualizacin
de la seal S tiene muy fcil
solucin con una variable
A
B
C
S
Q
Variables
Sintaxis
destino := fuente
Utilidad
representan
almacenamiento local
Visibilidad
global
(comunicacin entre
procesos)
local
(dentro del proceso)
Comportamiento
se actualizan cuando
avanza el tiempo (se
suspende el proceso)
se actualizan
inmediatamente
49
VHDL
European
Training Institute
Circuitos combinacionales
Circuitos secuenciales
Mquinas de estados
Triestados
Diseo jerrquico
Estilos de diseo
Verificacin con testbenches
Univ. Autnoma
de Madrid
Se debe asignar
siempre (en
todos los casos)
a la salida un
valor
process(a,b,sel)
begin
if sel='1' then
y <= a;
else
y <= b;
end if;
end process;
end uam;
B
Sel
EFECTOS
En un proceso, si el valor futuro de una seal no puede ser
determinado, se mantiene el valor actual.
Se sintetiza un latch para mantener su estado actual
VENTAJAS
Simplifica la creacion de elementos de memoria
DESVENTAJAS
Pueden generarse latches no deseados,p.ej. cuando todas las
opciones de una sentencia condicional no estn especificadas
00
01
10
11
don't care
process (a)
begin
case a is
when "00" =>
res <= '1';
when "01" =>
res <= '1';
when "10" =>
res <= '0';
end process;
Asignaciones concurrentes
Las asignaciones concurrentes son asignaciones de valores a
seales, fuera de proceso, que permiten modelar de una
manera muy compacta lgica combinacional
Funcionan como procesos (son procesos implcitos) y se ejecutan
concurrentemente con el resto de procesos y asignaciones
VHDL
Introduccin
La entidad y la arquitectura
Tipos de datos
Los procesos
Circuitos combinacionales
Circuitos secuenciales
Mquinas de estados
Triestados
Diseo jerrquico
Estilos de diseo
Verificacin con testbenches
tambin vale
rising_edge(clk
)
no hay else,
queremos
inferir memoria
proceso sensible
al reloj
process (clk)
begin
if clk'event and clk='1' then
q <= d;
end if;
cambia el reloj y
end process;
es ahora 1 ...
hay un flanco de
subida
CLK
begin
if rst='1' then
q_temp:="00000000";
elsif rising_edge(clk) then
if ce='1' then
if load='1' then
q_temp:=din;
else
q_temp:=q_temp(6 downto 0) & sin;
end if;
end if;
end if;
q<=q_temp;
end process;
Lgica
Comb.
EstFuturo
registro
Estado
Utilizacin de subtipos:
Definicion de Estados
Utilizacin de subtipos:
Definicion de Estados
begin
comb: process (Estado, in1, in2, in3)
begin
case Estado is
when E0 => out1 <= '0';
out2 <= '0';
EstFuturo <= E1;
when E1 => out1 <= '1';
if in1 = '1' then
EstFuturo <= E2;
else
EstFuturo <= E1;
end if;
when E2 =>
...
when E3 =>
...
end case;
end process comb;
Utilizacin de subtipos:
Definicion de Estados
registro: process(reset,clk)
begin
if reset='1' then
Estado <= E0;
elsif rising_edge(clk)then
Estado <= EstFuturo;
end if;
end process registro;
VHDL
Introduccin
La entidad y la arquitectura
Tipos de datos
Los procesos
Circuitos combinacionales
Circuitos secuenciales
Mquinas de estados
Triestados
Diseo jerrquico
Estilos de diseo
Verificacin con testbenches
69
European
Training Institute
Univ. Autnoma
de Madrid
70
Entradas
European
Training Institute
Lgica
estado sig.
Registros
de estado
Lgica
de salida
Salidas
Univ. Autnoma
de Madrid
71
Entradas
Lgica
estado sig.
Registros
de estado
Lgica
de salida
European
Training Institute
Estado actual
Registros
de salida
Salidas
Univ. Autnoma
de Madrid
72
Salida 1
Salida 2
Codif. Estados
s1
00
s2
01
s3
10
Nota: Los dos bits del estado son utilizados como salida
Entradas
European
Training Institute
Lgica
estado sig.
Registros
de estado
Salidas
Univ. Autnoma
de Madrid
73
Diagrama de Estados:
PWAIT
RESET
(async)
ack_out='1'
IDLE
00
REQ
European
Training Institute
REQ
RETRY
PWAIT
01
ACK
10
retry_out='1'
Univ. Autnoma
de Madrid
74
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY maq IS PORT (
clock, reset: IN std_logic;
req, pwait: IN std_logic;
retry_out, ack_out: OUT std_logic);
END maq;
European
Training Institute
Univ. Autnoma
de Madrid
75
Ejemplo: Solucin 1
Salidas combinacionales decodificadas a partir de los estados
ARCHITECTURE archmoore1 OF maq IS
TYPE fsm_states IS (idle, retry, ack);
SIGNAL wait_gen : fsm_states;
BEGIN
fsm: PROCESS (clock, reset)
BEGIN
IF reset = '1' THEN
wait_gen <= idle; -- asynchronous reset
ELSIF clock'EVENT AND clock = '1' THEN
CASE wait_gen IS
WHEN idle => IF req = '0' THEN wait_gen <= retry;
ELSE wait_gen <= idle;
END IF;
European
Training Institute
Univ. Autnoma
de Madrid
76
European
Training Institute
Univ. Autnoma
de Madrid
77
Ejemplo: Solucion 2
Salidas registradas decodificadas desde el valor de los estados
ARCHITECTURE archmoore2 OF maq IS
TYPE fsm_states IS (idle, retry, ack);
SIGNAL wait_gen: fsm_states;
BEGIN
fsm: PROCESS (clock, reset)
BEGIN
IF reset = '1' THEN
wait_gen <= idle;
retry_out <= '0';
ack_out
<= '0';
ELSIF clock'EVENT AND clock = '1' THEN
retry_out <= '0'; -- asignacion por defecto
European
Training Institute
Univ. Autnoma
de Madrid
78
WHEN retry
=>
WHEN ack
=>
END IF;
END PROCESS fsm;
END archmoore2;
European
Training Institute
Univ. Autnoma
de Madrid
79
Ejemplo: Solucin 3
Salidas codificadas en el valor de los estados
ARCHITECTURE archmoore3 OF maq IS
SIGNAL wait_gen:
CONSTANT idle:
CONSTANT retry:
CONSTANT ack:
std_logic_vector(1
std_logic_vector(1
std_logic_vector(1
std_logic_vector(1
DOWNTO
DOWNTO
DOWNTO
DOWNTO
0);
0) := "00";
0) := "01";
0) := "10";
BEGIN
fsm: PROCESS (clock, reset)
BEGIN
IF reset = '1' THEN
wait_gen <= idle;
ELSIF clock'EVENT AND clock = '1' THEN
European
Training Institute
Univ. Autnoma
de Madrid
80
European
Training Institute
Univ. Autnoma
de Madrid
81
En CPLDs
reduce el nmero de trminos producto
eliminando, si los hubiera, expasiones de productos, y mejorando por
tanto la velocidad
pero usa muchas ms macroceldas, y el beneficio nunca es tan
evidente como en FPGAs
European
Training Institute
Univ. Autnoma
de Madrid
82
European
Training Institute
THEN
THEN wait_gen <= retry;
ELSE wait_gen <= idle;
END IF;
Univ. Autnoma
de Madrid
83
=>
IF pwait = '1'
WHEN ack
=>
END CASE;
END IF;
END PROCESS fsm;
-- Decodificacion de salidas
retry_out <= '1' WHEN (wait_gen = retry) ELSE '0';
ack_out
<= '1' WHEN (wait_gen = ack)
ELSE '0';
END archmoore4;
European
Training Institute
Univ. Autnoma
de Madrid
84
Codificacin One-Hot
Logica de siguiente estado mas sencilla
Mejora la velocidad
Necesita mas registros
European
Training Institute
Univ. Autnoma
de Madrid
85
FSM de Mealy
Las salidas cambian por un cambio de estado o por un cambio
en el valor de las entradas
Hay que tener mucho cuidado con las entradas asncronas
Registros
de estado
Entradas
European
Training Institute
Lgica
Salidas
Univ. Autnoma
de Madrid
86
Diagrama de estados:
REQ PWAIT / ACK RETRY_OUT
X0/01
RESET
(async)
IDLE
0X/01
RETRY
1X/00
X1/10
European
Training Institute
Univ. Autnoma
de Madrid
87
Ejemplo: Solucin
ARCHITECTURE archmealy1 OF maq IS
TYPE fsm_states IS (idle, retry);
SIGNAL wait_gen: fsm_states;
BEGIN
fsm: PROCESS (clock, reset)
BEGIN
IF reset = '1' THEN
wait_gen <= idle;
ELSIF clock'EVENT AND clock = '1' THEN
CASE wait_gen IS
WHEN idle
=> IF req = '0'
THEN wait_gen <= retry;
ELSE wait_gen <= idle;
END IF;
WHEN retry
=> IF pwait = '1'
THEN wait_gen <= idle;
ELSE wait_gen <= retry;
END IF;
WHEN OTHERS
=> wait_gen <= idle;
END CASE;
END IF;
END PROCESS fsm;
retry_out <= '1' WHEN (wait_gen = retry AND pwait='0') OR
(wait_gen = idle AND req='0') ELSE '0';
ack_out <= '1' WHEN (wait_gen = retry AND pwait='1') ELSE '0';
END archmealy1;
European
Training Institute
Univ. Autnoma
de Madrid
88
VHDL
Introduccin
La entidad y la arquitectura
Tipos de datos
Los procesos
Circuitos combinacionales
Circuitos secuenciales
Mquinas de estados
Triestados
Diseo jerrquico
Estilos de diseo
Verificacin con testbenches
European
Training Institute
Univ. Autnoma
de Madrid
89
PROCESS(in1)
BEGIN
senal <= in1;
END PROCESS;
senal <= in2;
European
Training Institute
in1
senal
in2
Univ. Autnoma
de Madrid
90
Inferencia de triestado
European
Training Institute
in1
'Z'
senal = '0'
'0'
'0'
Univ. Autnoma
de Madrid
91
Con un proceso:
PROCESS (ena_a, a)
BEGIN
IF (sel_a = '0') THEN
t <= a;
ELSE t <= 'Z';
END PROCESS;
European
Training Institute
Univ. Autnoma
de Madrid
92
Seales bidireccionales
En este caso la seal tiene drivers externos, fuera de la entidad
ENTITY bufoe IS PORT (
x:
IN std_logic;
oe: IN std_logic;
y:
INOUT std_logic;
yfb: OUT std_logic);
END bufoe;
ARCHITECTURE simple OF bufoe IS
BEGIN
y <= x WHEN oe='1' ELSE 'Z';
yfb <= y;
END simple;
European
Training Institute
oe
x
yfb
Univ. Autnoma
de Madrid
93
REG
8
LOAD
CLOCK
DATA
8
OE
European
Training Institute
Univ. Autnoma
de Madrid
VHDL
Introduccin
La entidad y la arquitectura
Tipos de datos
Los procesos
Circuitos combinacionales
Circuitos secuenciales
Mquinas de estados
Triestados
Diseo jerrquico
Estilos de diseo
Verificacin con testbenches
Diseo jerrquico
Componentes pequeos son
utilizados como elementos
de otros ms grandes
Permite reutilizar cdigo
Diseos ms legibles y
portables
top.vhd
a.vhd
a1.vhd
a2.vhd
b.vhd
c.vhd
rbol de jerarquas
COMPONENTE SUPERIOR
( TOP )
top.vhd
a.vhd
a1.vhd
b.vhd
a2.vhd
c.vhd
COMPONENTES INFERIORES
AT
XT
AT
A
mi_comp
mi_comp
XT
ENTITY Top IS
PORT (
AT: IN std_logic;
XT: OUT std_logic);
END Top;
ENTITY mi_comp IS
PORT (
A: IN std_logic;
X: OUT std_logic);
END mi_comp;
Top
AT
X
XT
Component mi_comp
PORT (
A: IN std_logic;
X: OUT std_logic);
Signal S : std_logic;
C1
C2
Begin
C1:mi_comp PORT MAP
(A=>AT, X=>S)
C2:mi_comp PORT MAP
(A=>S, X=>XT)
END test;
VHDL
Introduccin
La entidad y la arquitectura
Tipos de datos
Los procesos
Circuitos combinacionales
Circuitos secuenciales
Mquinas de estados
Triestados
Diseo jerrquico
Estilos de diseo
Pasos de la simulacin
Archivos VHDL
Anlisis
libreras de trabajo
Elaboracin
Simulacin
Bancos de pruebas
Pensamos
en SW
Algoritmos
de
pruebas
Mi diseo
hardware
Banco de pruebas
Pensamos
en HW
Estmulos
Usuario
Algoritmos
de
pruebas
Mi diseo
hardware
Resultados
Banco de pruebas
Estmulos
Algoritmos
de
pruebas
Mi diseo
hardware
Resultados
Banco de pruebas
Generando estmulos
A <= x03;
B <= x02;
WAIT FOR 20 ns;
A<= xAA;
B<= x20;
WAIT FOR 30 ns;
NOTE
WARNING
ERROR (nivel por defecto si no se incluye SEVERITY)
FAILURE
ASSERT
(resultado=esperado)
WAIT FOR
process
begin
A
A <= x01;
B <= x01;
B
WAIT FOR 10 ns;
ASSERT X = x02 REPORT Falla SEVERITY FAILURE;
A<= xFF;
B<= x01;
WAIT FOR 10 ns;
ASSERT X = x00 REPORT Falla SEVERITY FAILURE;
WAIT;
end process;
ENTITY sumador_tb IS
END sumador_tb;
Elementos:
cA
Proceso
de
pruebas
cB
A
X
B
cX
sumador
std_logic_vector(7 downto 0);
std_logic_vector(7 downto 0);
std_logic_vector(7 downto 0));
process
begin
for i in 1 to 255 loop
for j in 1 to 255 loop
cA <= std_logic_vector(to_unsigned(i,8));
cB <= std_logic_vector(to_unsigned(j,8));
WAIT FOR 10 ns;
ASSERT cX = std_logic_vector(to_unsigned(i+j,8))
REPORT Falla SEVERITY FAILURE;
end loop;
end loop;
end process;
VHDL
Introduccin
La entidad y la arquitectura
Tipos de datos
Los procesos
Circuitos combinacionales
Circuitos secuenciales
Mquinas de estados
Triestados
Diseo jerrquico
Estilos de diseo
Verificacin con testbenches