Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Sergio Lopez-Buedo
sergio.lopez-buedo@uam.es
1
2
Introduccin
La entidad y la arquitectura
Tipos de datos
Los procesos
Circuitos combinacionales
VHDL
VHDL Circuitos secuenciales
Mquinas de estados
Triestados
Diseo jerrquico
Estilos de diseo
Verificacin con testbenches
2
3
Introduccin
La entidad y la arquitectura
Tipos de datos
Los procesos
Circuitos combinacionales
VHDL
VHDL Circuitos secuenciales
Mquinas de estados
Triestados
Diseo jerrquico
Estilos de diseo
Verificacin con testbenches
3
4
A
S
B
4
5
5
6
6
7
7
8
8
9
VHDL: Evolucin
1980: El departamento de defensa
de los EEUU funda el proyecto para
crear un HDL estndar dentro del
programa VHSIC
1981: Woods Hole Workshop,
reunin inicial entre el Gobierno,
Universidades e Industria
1983: Se concedi a Intermetrics,
IBM y Texas Instruments el contrato
para desarrollar VHDL
1985: Versin 7.2 de dominio
pblico.
1987: El IEEE lo ratifica como su
estndar 1076 (VHDL-87)
1993: El lenguaje VHDL fue
revisado y ampliado, pasando a ser
estndar 1076 93 (VHDL-93)
2000: ltima modificacin de VHDL
9
10
Y en el futuro?
10
11
Introduccin
La entidad y la arquitectura
Tipos de datos
Los procesos
Circuitos combinacionales
VHDL
VHDL Circuitos secuenciales
Mquinas de estados
Triestados
Diseo jerrquico
Estilos de diseo
Verificacin con testbenches
11
12
12
13
13
14
14
15
15
16
parte declarativa
de la arquitectura
16
17
17
18
Introduccin
La entidad y la arquitectura
Tipos de datos
Los procesos
Circuitos combinacionales
VHDL
VHDL Circuitos secuenciales
Mquinas de estados
Triestados
Diseo jerrquico
Estilos de diseo
Verificacin con testbenches
18
19
19
20
20
21
Tipo STD_LOGIC
Los dos valores del tipo bit se quedan cortos para modelar
todos los estados de una seal digital en la realidad
El paquete IEEE.standard_logic_1164 define el tipo std_logic,
que representa todos los posibles estados de una seal real:
21
22
22
23
23
24
24
25
a <= "0101";
b <= "0101";
25
26
Notacin:
1 bit : comilla simple (')
multiples bits: comilla doble (")
26
27
27
28
28
29
Ms sobre operadores
29
30
30
31
Introduccin
La entidad y la arquitectura
Tipos de datos
Los procesos
Circuitos combinacionales
VHDL
VHDL Circuitos secuenciales
Mquinas de estados
Triestados
Diseo jerrquico
Estilos de diseo
Verificacin con testbenches
31
32
begin
En el cuerpo de la arquitectura
se modela el comportamiento
del circuito con asignaciones,
instanciaciones y PROCESOS
32
33
process(lista de seales)
...
parte declarativa (variables, procedimientos, tipos, etc)
...
begin
...
instrucciones que describen el comportamiento
...
end process;
33
34
A
S La lista de sensibilidad tiene las
B seales A, B porque cualquier
cambio en las entradas puede
variar el estado de la puerta
process(A,B)
begin
if A='1' and B='1' then
El proceso S <= '1';
no declara
nada
else
S <= '0';
end if; Se usa un if..then..else
end process; para describir la puerta
34
35
El HW es inherentemente concurrente,
los circuitos coexisten fsicamente en el tiempo
A
S
B Este HW no se puede modelar
en un lenguaje secuencial
C como C:
Q
D
S = A & B;
El chip tiene dos puertas que
Q = C | D;
funcionan simultneamente
Ambas puertas funcionan al
mismo tiempo, no una antes
de la otra!
35
36
A
S
B S <= A and B;
C Q <= C or D;
Q
D
36
37
Necesidad de la concurrencia
A S !Q no toma el
valor correcto
B Q porque no se da
C S <= A and B; 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:
37
38
La solucin de VHDL
architecture ...
...
begin
process(...)
...
end process;
Los procesos se ejecutan
process(...) concurrentemente
...
end process;
end ...;
38
39
process(A,B)
begin
if A='1' and B='1' then
S <= '1';
else
S <= '0';
end if;
A S end process;
B Q
process(C,S)
C begin
if C='1' then
Q <= '1';
else
Q <= S;
end if;
end process;
end uam;
39
40
Procesos: Recapitulando
40
41
Ejemplo: Un termostato
IF condicion_1 THEN (Ashenden Fig. 3-1)
...
secuencia de instrucciones 1
architecture example of thermostat is
...
ELSIF condicion_2 THEN begin
...
secuencia de instrucciones 2 ctrl : process (desired_temp, actual_temp) is
... begin
ELSIF condicion_3 THEN if actual_temp < desired_temp - 2 then
... heater_on <= true;
secuencia de instrucciones 1 elsif actual_temp > desired_temp + 2 then
... heater_on <= false;
ELSE end if;
... end process ctrl;
instrucciones por defecto
...
end architecture example;
END IF;
41
42
42
43
43
44
busca: process(valor)
variable pos : integer;
begin
encontrado <= '0'; pos := 0;
while valor /= tabla(pos) loop
pos := pos + 1;
Ejemplo: if pos = 100 then exit;
Bsqueda en una tabla end if;
end loop;
if pos < 100 then
encontrado <= '1';
Aqu tambin se
end if;
paraleliza el bucle
end process;
44
45
45
46
El proceso se dispara
Las instrucciones se inmediatamente
process
ejecutan hasta que
se llega al wait, y en ...
ese punto se begin
suspende el proceso ... Cuando se deja de
instrucciones secuenciales cumplir la condicin
... de espera, la
ejecucin contina
wait...
...
Al llegar al final, se instrucciones secuenciales
empieza otra vez ...
por el principio
end process;
46
47
47
48
No olvidar...
48
49
Las variables
process(a,b,c)
...
variable v : std_logic;
...
begin
...
v := a and b or c;
...
end process;
49
50
process(A,B,C)
variable S : std_logic;
begin
A S S := A and B;
B Q if C='1' then
Q <= '1';
C else
Q <= S;
end if;
end process;
end uam;
50
51
Seales Variables
global
local
Visibilidad (comunicacin entre
(dentro del proceso)
procesos)
se actualizan cuando
se actualizan
Comportamiento avanza el tiempo (se
inmediatamente
suspende el proceso)
51
52
Introduccin
La entidad y la arquitectura
Tipos de datos
Los procesos
Circuitos combinacionales
VHDL
VHDL Circuitos secuenciales
Mquinas de estados
Triestados
Diseo jerrquico
Estilos de diseo
Verificacin con testbenches
52
53
process(a,b,sel)
Todas las entradas
begin deben estar en la
if sel='1' then lista de sensibilidad
Se debe asignar y <= a;
siempre (en else
todos los casos)
a la salida un y <= b;
valor end if;
end process;
end uam;
53
54
CAUSA
las seales en VHDL tienen un estado actual y un estado futuro
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
54
55
Un ejemplo correcto
55
56
56
57
CASE decode IS
WHEN "100" => key <= first;
WHEN "010" => key <= second;
WHEN "001" => key <= third;
WHEN OTHERS => key <= none;
END CASE;
57
58
Asignaciones concurrentes
58
59
59
60
60
61
61
62
Introduccin
La entidad y la arquitectura
Tipos de datos
Los procesos
Circuitos combinacionales
VHDL
VHDL Circuitos secuenciales
Mquinas de estados
Triestados
Diseo jerrquico
Estilos de diseo
Verificacin con testbenches
62
63
proceso sensible
tambin vale al reloj
rising_edge(clk)
process (clk)
begin
if clk'event and clk='1' then
q <= d;
end if;
cambia el reloj y
end process; es ahora 1 ...
no hay else, hay un flanco de
queremos subida
inferir memoria
63
64
64
65
CLK
65
66
66
67
process(rst,clk)
begin
if rst='1' then
dout <= "00000000";
elsif rising_edge(clk) then
if ce='1' then
if load='1' then
dout <= din;
else
dout <= dout(6 downto 0) & sin;
end if;
end if;
end if;
end process;
67
68
68
69
69
70
70
71
Registros: Mantienen el
end architecture uam;
estado.
Logica combinacional de
definicin de salidas
71
72
Introduccin
La entidad y la arquitectura
Tipos de datos
Los procesos
Circuitos combinacionales
VHDL
VHDL Circuitos secuenciales
Mquinas de estados
Triestados
Diseo jerrquico
Estilos de diseo
Verificacin con testbenches
72
73
73
74
74
75
Estado actual
Lgica Registros
Entradas estado sig. de estado
75
76
76
77
Diagrama de Estados:
PWAIT
RESET ack_out='1'
(async)
REQ
retry_out='1'
77
78
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
78
79
Ejemplo: Solucin 1
BEGIN
fsm: PROCESS (clock, reset)
BEGIN
IF reset = '1' THEN
wait_gen <= idle; -- asynchronous reset
79
80
END CASE;
END IF;
END PROCESS fsm;
END archmoore1;
80
81
Ejemplo: Solucion 2
BEGIN
fsm: PROCESS (clock, reset)
BEGIN
IF reset = '1' THEN
wait_gen <= idle;
retry_out <= '0';
ack_out <= '0';
81
82
END IF;
END PROCESS fsm;
END archmoore2;
82
83
Ejemplo: Solucin 3
BEGIN
83
84
CASE wait_gen IS
WHEN idle => IF req = '0' THEN wait_gen <= retry;
ELSE wait_gen <= idle;
END IF;
END IF;
END PROCESS fsm;
END archmoore3;
84
85
En FPGAs
reduce la lgica de clculo de estado siguiente
y por tanto, menos profundidad de lgica
permitiendo mquinas muy rpidas (>100MHz)
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
85
86
BEGIN
fsm: PROCESS (clock, reset)
BEGIN
IF reset = '1' THEN
wait_gen <= idle;
86
87
END CASE;
END IF;
-- Decodificacion de salidas
retry_out <= '1' WHEN (wait_gen = retry) ELSE '0';
ack_out <= '1' WHEN (wait_gen = ack) ELSE '0';
END archmoore4;
87
88
88
89
FSM de Mealy
Registros
de estado
Entradas Lgica Salidas
89
90
Diagrama de estados:
X0/01
RESET
(async)
1X/00
X1/10
90
91
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;
91
92
Introduccin
La entidad y la arquitectura
Tipos de datos
Los procesos
Circuitos combinacionales
VHDL
VHDL Circuitos secuenciales
Mquinas de estados
Triestados
Diseo jerrquico
Estilos de diseo
Verificacin con testbenches
92
93
PROCESS(in1)
BEGIN in1
senal <= in1;
END PROCESS; senal
93
94
Inferencia de triestado
Cuando se quiere que un driver de una seal se quede en alta
impedancia, se le asigna a la seal el valor 'Z'
Slo vale si para el tipo std_logic
Igual que ocurre en la realidad, el estado de la seal lo fijar el driver
que no est en alta impedancia
'0'
94
95
Con un proceso:
PROCESS (ena_a, a)
BEGIN
IF (sel_a = '0') THEN
t <= a;
ELSE t <= 'Z';
END PROCESS;
95
96
Seales bidireccionales
96
97
REG DATA
8 8
97
98
Introduccin
La entidad y la arquitectura
Tipos de datos
Los procesos
Circuitos combinacionales
VHDL
VHDL Circuitos secuenciales
Mquinas de estados
Triestados
Diseo jerrquico
Estilos de diseo
Verificacin con testbenches
98
99
Diseo jerrquico
99
100
rbol de jerarquas
COMPONENTE SUPERIOR
top.vhd
( TOP )
COMPONENTES INFERIORES
a1.vhd a2.vhd
100
101
101
102
Declaracin de Componentes
Antes de poder usar un componente, se debe declarar
Especificar sus puertos (PORT)
Especificar parmetros (GENERIC)
Una vez instanciado el componente, los puertos de la instancia
se conectan a las seales del circuito usando PORT MAP
Los parmetros se especifican usando GENERIC MAP
La declaracin de los componentes se puede hacer en un
package
Para declarar el componente, slo habr que importar el package
Opcin interesante: la declaracin de los componentes no aporta
nada al lector del cdigo
102
103
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
103
104
Ejemplo de diseo jerrquico:
componente inferior
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY mux2to1 IS PORT ( Descripcin del componente
a, b, sel: IN std_logic;
de nivel inferior
c: OUT std_logic);
END mux2to1;
LIBRARY ieee;
USE ieee.std_logic_1164.ALL; Creacin del package
PACKAGE mymuxpkg IS
COMPONENT mux2to1 PORT (
a, b, sel: IN std_logic;
c: OUT std_logic);
END COMPONENT; Mismos puertos
END mymuxpkg;
104
105
105
106
Introduccin
La entidad y la arquitectura
Tipos de datos
Los procesos
Circuitos combinacionales
VHDL
VHDL Circuitos secuenciales
Mquinas de estados
Triestados
Diseo jerrquico
Estilos de diseo
Verificacin con testbenches
106
107
Estilos de arquitecturas
Arquitectura estructural
Arquitectura RTL
Arquitectura comportamental
107
108
108
109
109
110
110
111
111
112
Niveles de abstraccin
VHDL permite describir circuitos electrnicos a
distintos niveles de abstraccin
Algortmico:
Un algoritmo puro consiste en un conjunto de
instrucciones ejecutadas secuencialmente que
realizan una tarea.
No se detallan relojes o retrasos
No sintetizable (o sintetizable en casos limitados)
RTL
Es la entrada para la sntesis.
Las operaciones se realizan en un ciclo de reloj
especifico.
No se detallan retrasos.
Nivel de puerta
Es la salida de la sntesis
Netlist de puertas e instanciaciones de una librera
tecnolgica
Se incluye informacin de retraso para cada puerta
112
113
Introduccin
La entidad y la arquitectura
Tipos de datos
Los procesos
Circuitos combinacionales
VHDL
VHDL Circuitos secuenciales
Mquinas de estados
Triestados
Diseo jerrquico
Estilos de diseo
Verificacin con testbenches
113
114
Pasos de la simulacin
Archivos VHDL
Anlisis
libreras de trabajo
Elaboracin
Simulacin
114
115
115
116
116
117
Testbench
European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma
Training Institute de Madrid
117
118
Generando estmulos
Dar valores a las seales que van hacia las entradas de la UUT
En sntesis no tiene sentido el tiempo
En los testbenches el tiempo es la principal magnitud
Asignacin concurrente
senal <= '1',
'0' AFTER 20 ns,
'1' AFTER 30 ns;
Asignacin secuencial
senal <= '1';
WAIT FOR 20 ns;
senal <= '0';
WAIT FOR 30 ns;
senal <= '1';
118
119
119
120
120
121
WAIT FOR
121
122
Ejemplo de cdigo
ARCHITECTURE tb_arch OF dff_tb IS
BEGIN
PROCESS
BEGIN
c <= '0'; d <= '0';
WAIT FOR 10 ns;
c <= '1';
WAIT FOR 10 ns;
ASSERT q=d REPORT "falla" SEVERITY FAILURE;
END PROCESS;
END tb_arch;
122
123
Testbenches avanzados
123
124
Procedimientos
VHDL permite definir procedimientos (subrutinas)
PROCEDURE nombre (clase parametro : dir tipo, ...) IS
{declaraciones}
BEGIN
{instrucciones secuenciales}
END PROCEDURE nombre;
124
125
Ejemplo de cdigo
ARCHITECTURE tb_arch OF dff_tb IS
(...)
BEGIN
PROCESS
BEGIN
c <= '0'; d <= '0';
send_clock_edge(c);
ASSERT q=d REPORT "falla" SEVERITY FAILURE;
END PROCESS;
END tb_arch;
125
126
Acceso a archivos
126
127
Escribir
write(linea, resultado);
writeline(archivo_resultados, linea);
127
128
Configuracin
128
129
Configuracin: Ejemplo
CONFIGURATION
CONFIGURATIONa_config
a_configOF
OFFull_adder
Full_adderIS
IS
FOR
FORstructural
structural
FOR
FORall:
all:Half_adder
Half_adder
Ejemplo: Sumador USE
USEENTITY
ENTITYwork.Half_adder(algorithmic);
work.Half_adder(algorithmic);
END FOR;
END FOR;
FOR
FORU2:U2:or_gate
or_gate
USE
USEENTITY
ENTITYwork.or_gate(behavioral);
work.or_gate(behavioral);
END FOR;
END FOR;
END
ENDFOR;
FOR;
END
ENDa_config;Ejemplo
a_config;Ejemplodel delSuma
Suma
A U0:
Temp_sum
B Half_adder
U1: A
AB AB
Carry_in B Full_adder
Half_adder Carry_in Carry_out
U2
Temp_carry_1 Carry_out
129
130
1. Simulacin funcional
RTL / behavioral sintetizable
Emplea construcciones estndar VHDL
Sin tiempos
2. Simulacin post-sntesis
Estructural
Librera de sntesis, elementos bsicos de diseo para la FPGA
Sin tiempos
3. Simulacin post-map, post-layout
Estructural
Librera de Xilinx, elementos reales de la FPGA
Con tiempos si se carga el archivo SDF
130
131
Sntesis
Sntesis Simulacin post-sntesis
Traducir
Traducirla
lanetlist
netlist
Simulacin post-layout
MAP
MAP
Place
Place&&Route
Route
Bitstream
Bitstream
131
132
132
133
Modelo post-layout
133
134
Introduccin
La entidad y la arquitectura
Tipos de datos
Los procesos
Circuitos combinacionales
VHDL
VHDL Circuitos secuenciales
Mquinas de estados
Triestados
Diseo jerrquico
Estilos de diseo
Verificacin con testbenches
134