Está en la página 1de 134

Introduccin al Lenguaje de

Descripcin Hardware VHDL

Sergio Lopez-Buedo
sergio.lopez-buedo@uam.es

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

1
2

Lenguaje de Descripcin Hardware VHDL

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

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

2
3

Lenguaje de Descripcin Hardware VHDL

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

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

3
4

Para qu sirven los HDLs?


Los lenguajes de descripcin HW
Los modelos se pueden simular para
sirven para modelar circuitos,
comprobar que se corresponden con la
PARA EXPRESAR IDEAS
funcionalidad deseada
0 ns 10 ns 20 ns
if A='1' and B='1'
then S<='1'; A
else S<='0';
end if; B
S

O se pueden sintetizar para


crear un circuito que
funciona como el modelo

A
S
B

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

4
5

Los HDLs cuando el circuito ya existe

if A='1' and B='1'


then S<='1' after 5 ns;
else S<='0' after 4 ns;
end if;

En este caso el objetivo es simular el circuito


Se puede crear un para comprobar que su funcionalidad se ajusta
modelo de un circuito a las especificaciones iniciales
que ya exista, que ya
0 ns 10 ns 20 ns
est implementado
A
B Simulacin
Post-Layout
S

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

5
6

Los HDLs como documentacin

Los modelos de los circuitos si


estn bien comentados sirven Utilizar HDLs
como documentacin para hacer las
especificaciones

Los HDLs se pueden utilizar


tambin para crear bancos de
pruebas, o sea,
para crear estmulos y ver
resultados durante la simulacin
La mejor doc es
el cdigo fuente

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

6
7

HDLs: estado actual y alternativas

En la actualidad, los esquemticos no son una alternativa


realista en ningn proyecto
Ejemplo: GeForce4, 65 millones de transistores y 800.000
lneas de cdigo Verilog
La alternativa estndar es usar un HDL
Verilog: Costa Oeste, ASICs, menos verboso, ms parecido a C,
menos expresivo
VHDL: Costa Este y Europa, FPGAs, ms verboso, ms parecido a
PASCAL y ADA, ms expresivo
El diseo se sintetiza a partir de un HDL, pero gran parte del
diseo y la verificacin se realiza con lenguajes estndares
C y Matlab
VHDL es el estndar para FPGAs en proyectos industriales de
moderada complejidad en Espaa

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

7
8

VHDL: orgenes e historia

VHDL surge a principios de los '80 de un proyecto DARPA


(Departamento de Defensa de los EE.UU.) llamado VHSIC
Very High Speed Integrated Circuits
VHDL aparece como una manera de describir circuitos
integrados
La crisis del ciclo de vida del HW: cada da los circuitos integrados
eran ms complicados, y el coste de reponerlos cada vez era
mayor, porque no estaban correctamente documentados. VHDL
naci como una manera estndar de documentar los circuitos
Al mismo tiempo, se vio que la expresividad de VHDL permitira
reducir el tiempo de diseo de los circuitos, porque se podran
crear directamente de su descripcin: utilidad de la sntesis
En 1987 el trabajo fue cedido al IEEE, y a partir de ese
momento es un estndar abierto.

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

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

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

9
10

Y en el futuro?

Los lenguajes de descripcin de hardware tienen tambin


limitaciones:
Metodologa de diseo nueva, exige un cambio de mentalidad con
respecto al SW
No permiten reusar cdigo SW para HW
La decisin HW/SW se hace debe hacer antes de la codificacin
La simulacin es lenta, siempre hay que recurrir a una simulacin
algortmica usando lenguajes SW
Como respuesta a esto, hay varias iniciativas para describir HW
usando lenguajes de alto nivel, tipo SW
Handel-C, System-C
Forge (Java)
Superlog
VHDL es un lenguaje de presente, en el futuro ya se ver...

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

10
11

Lenguaje de Descripcin Hardware VHDL

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

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

11
12

Entidad y Arquitectura: 1er nivel de abstraccin


Abstraccin: caja negra 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.
En VHDL la caja negra se
denomina entidad
Interfaz: entradas y salidas La ENTITY describe la E/S del
diseo

rst Para describir su funcionamiento


q[7:0] se asocia una implementacin
d[7:0] que se denomina arquitectura
co La ARCHITECTURE describe el
clk
contenido del diseo.

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

12
13

PORTS: Puertos de una entidad

Interfaz de dispositivo Ports = Canales de Comunicacin


Cada una de las posibles conexiones se
denomina un PORT y consta de:
Un nombre, que debe ser nico dentro
de la entidad.
Una lista de propiedades, como:
la direccin del flujo de datos,
entrada, salida, bidireccional y se
Ports: entradas y salidas conoce como MODO del puerto.
los valores que puede tomar el
puerto: '0, '1' o (Z), etc.,los
rst valores posibles dependen de lo
q[7:0] que se denomina TIPO de seal.
d[7:0]
Los puertos son una clase especial de
co
clk seales que adicionalmente al tipo de
seal aade el modo

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

13
14

PORTS: Modos de un puerto

Modo de los puertos


Indican la direccin y si el puerto puede
leerse o escribirse dentro de la entidad
IN Una seal que entra en la entidad y
no sale. La seal puede ser leda pero no
escrita.
OUT Una seal que sale fuera de la
seal y no es usada internamente. La
seal no puede ser leda dentro de la
entidad.
BUFFER Una seal que sale de la
entidad y tambin es realimentada dentro
de la entidad.
INOUT Una seal que es bidireccional,
entrada/salida de la entidad.

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

14
15

VHDL: Declaracin de entidad

La declaracin VHDL de la caja negra:


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);
co: OUT std_logic);
END mi_componente;
mi_componente
MODO
TIPO
rst
q[7:0]
d[7:0]
co
clk

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

15
16

Estructura de un diseo VHDL

declaraciones de puertos nombre de la


entidad

parte declarativa
de la arquitectura

cuerpo de la arquitectura nombre de la


arquitectura

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

16
17

Resumen: Entidad y Arquitecturas

La entidad se utiliza para hacer una descripcin "caja negra" del


diseo, slo se detalla su interfaz

Los contenidos del circuito se modelan dentro de la arquitectura

Una entidad puede tener varias arquitecturas


Por ejemplo, la descripcin de comportamiento que ha hecho el
diseador y el modelo post-layout obtenido despus de
implementar el chip

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

17
18

Lenguaje de Descripcin Hardware VHDL

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

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

18
19

Tipos de datos bsicos


TIPO es la definicin de los valores
tipos posibles que puede tomar un objeto
VHDL es un lenguaje fuertemente
tipado:
file access
A los objetos se les asigna siempre
un tipo cuando se declaran
Las asignacin slo pueden hacerse
compuestos entre objetos del mismo tipo
escalares
Los tipos predefinidos son:
Escalares: integer
real floating point
array
entero enumerated
record
physical
fsico Compuestos: array
record
Punteros: access
enumerados Archivos: file

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

19
20

Tipos bsicos predefinidos


Tipos IEEE-1076
BIT: slo puede tomar los valores de '0' o '1. Para modelar
seales digitales
BIT_VECTOR: un array unidimensional (vector) de bits. Para
modelar buses
INTEGER: tipo entero
usado como valor ndice en lazos, constantes o valores genricos
BOOLEAN: tipo lgico
Puede tomar como valores TRUE o FALSE
REAL: tipo para nmeros en coma flotante
ENUMERATED: Enumeracin
Conjunto de valores definido por el usuario
Por ejemplo: TYPE estados IS (inicio, lento, rapido)

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

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:

U No inicializado, valor por defecto.


X Desconocido fuerte, salida con mltiples fuentes en corto
0 Salida de una puerta con nivel lgico bajo
1 Salida de una puerta con nivel lgico alto
Z Alta Impedancia
W Desconocido dbil, terminacin de bus
L 0 dbil, resistencia de pull-down
H 1 dbil, resistencia de pull-up
No importa, usado como comodn para sntesis

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

21
22

Tipo STD_LOGIC (2)

Para describir buses se utiliza el tipo std_logic_vector, que es


un array de std_logic
Los tipos std_logic y std_logic_vector son los estndares
industriales.
Todos los valores son validos en un simulador VHDL, sin
embargo solo: 0, 1, Z, L, H y se reconocen para la
sntesis.
En el paquete IEEE.std_logic_1164 aparecen otros dos tipos:
std_ulogic y std_ulogic_vector. Son los mismos, pero sin haber
pasado por la funcin de resolucin
Esta funcin decide cul debe ser el valor de la seal cuando tiene
dos fuentes que le asignan valores distintos
Por ejemplo, si una fuente asigna un 1 y la otra una L, la funcin
de resolucin dice que la seal se queda a 1

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

22
23

Utilizando los tipos: seales en VHDL

El objeto bsico en VHDL es la seal, que se utiliza para


modelar los hilos del circuito
Puesto que modela nodos fsicos, incluye informacin de tiempo
No slo contiene unos valores ('0', '1', 'Z', etc...) sino tambin el
tiempo en el que se toman estos valores
Se declaran antes del begin de la arquitectura (en la parte
declarativa):
ARCHITECTURE uam OF prueba IS
SIGNAL s1 : STD_LOGIC;
SIGNAL s2 : INTEGER;
BEGIN

Pueden tener un valor inicial (no soportado en sntesis)


SIGNAL a : STD_LOGIC := '0';

Para asignar valores a una seal se utiliza <=

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

23
24

Utilizando los tipos: constantes y variables

Como en cualquier otro lenguaje, en VHDL se pueden utilizar


constantes
Se declaran tambin en la parte declarativa, antes del begin
ARCHITECTURE uam OF prueba IS
CONSTANT c1 : STD_LOGIC := '0';
CONSTANT c2 : TIME := 10 ns;
CONSTANT c3 : INTEGER := 5;
BEGIN

Las constantes pueden ser de cualquier tipo


El tercer objeto posible en VHDL son las variables:
Slo almacenan valores, no entienden de tiempo
Visibilidad limitada, slo dentro de un proceso y no en toda la
arquitectura (a diferencia de las seales y constantes)
Se les asignan valores empleando :=

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

24
25

Usando arrays para crear buses

Los vectores se pueden definir tanto en rangos ascendentes


como descendentes:
SIGNAL a: STD_LOGIC_VECTOR(0 TO 3); -- i.e. rango ascendente
SIGNAL b: STD_LOGIC_VECTOR(3 DOWNTO 0); -- i.e. rango descendente

a <= "0101";
b <= "0101";

Produce como resultado:


a(0) = '0'; a(1) = '1'; a(2) = '0'; a(3) = '1';
b(0) = '1'; b(1) = '0'; b(2) = '1'; b(3) = '0';

Una manera rpida y eficiente de asignar valores a vectores


son los aggregates:
a <= (0 => '0, 1 => c and d, others=> Z);

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

25
26

Asignacin de seales en buses

Flexibilidad en la asignacin de valores de buses

SIGNAL tmp: STD_LOGIC_VECTOR(7 downto 0);

Todos los bits: tmp <= "10100011";


tmp <= x"A3"; -- VHDL93

Un solo bit: tmp(7) <= '1';

Un rango de bits: tmp(7 downto 4) <= "1010";

Notacin:
1 bit : comilla simple (')
multiples bits: comilla doble (")

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

26
27

Como definir nuevos tipos (y usarlos)

VHDL permite definir nuevos tipos, bien a partir de tipos


enumerados, o como subconjunto de tipos ya existentes, o tipos
multidimensionales
Las definiciones de tipos se deben hacer en la parte declarativa
de la arquitectura
Definir un tipo como una enumeracin:
TYPE estados IS (inactivo, operando, finalizar);
SIGNAL mi_maquina : estados;

Definir un tipo bidimensional:


TYPE memoria IS ARRAY (1024 downto 0) OF
std_logic_vector(7 downto 0);
SIGNAL mi_memoria : memoria;

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

27
28

Operadores definidos en VHDL


Lgicos Adicin
and + suma
or, nor resta
xor, xnor & concatenacin de vectores
Relacionales Multiplicativos
= igual * multiplicacin
/= distinto / divisin
< menor rem resto
<= menor o igual mod mdulo
> mayor Signo (unarios)
>= mayor o igual +,
Miscelneos Desplazamiento (bit_vector)
abs valor absoluto sll, srl
** exponenciacin sla, sra
not negacin (unario) rol, ror

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

28
29

Ms sobre operadores

No todos los operadores estn definidos para todos los tipos


En particular, para los std_logic habr que obtenerlos de las
libreras estndar:
std_logic_signed
std_logic_unsigned
std_logic_arith
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"

Los operadores de desplazamiento bsicos slo funcionan con


bit_vector. Es mucho mejor usar concatenacin con std_logic

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

29
30

Acerca de las libreras en VHDL

Libreras clsicas (y anticuadas):


std_logic_signed
std_logic_unsigned
std_logic_arith
Las libreras signed y unsigned se deben emplean cuando se
quiere que los std_logic_vector estn respectivamente en
complemento a 2 o en binario natural
Aqu est el CONV_INTEGER
La librera arith es ms completa, y utiliza mayormente los tipos
signed o unsigned (derivados de std_logic_vector)
Aqu est CON_STD_LOGIC_VECTOR
Tendencia actual del IEEE: emplear la librera numeric_std
Pensada para trabajar con los tipos signed y unsigned
TO_INTEGER, TO_SIGNED, TO_UNSIGNED

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

30
31

Lenguaje de Descripcin Hardware VHDL

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

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

31
32

Entrando en detalle en la arquitectura

architecture UAM of EJEMPLO is

Parte declarativa: aqu se


definen los subtipos y las
seales que vamos a usar

begin

En el cuerpo de la arquitectura
se modela el comportamiento
del circuito con asignaciones,
instanciaciones y PROCESOS

end architecture UAM;

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

32
33

El proceso: el elemento de diseo principal

Un proceso describe el comportamiento de un circuito


Cuyo estado puede variar cuando cambian ciertas seales
Utilizando construcciones muy expresivas: if..then..else, case,
bucles for y while, etc
Y que adems puede declarar variables, procedimientos, etc...

process(lista de seales)
...
parte declarativa (variables, procedimientos, tipos, etc)
...
begin
...
instrucciones que describen el comportamiento
...
end process;

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

33
34

Ejemplo: Descripcin de una puerta AND

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

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

34
35

El problema de la concurrencia del HW

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!

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

35
36

Concurrencia: Una posible solucin

La solucin al problema anterior es que aunque la ejecucin


sea secuencial, las instrucciones no tarden ningn tiempo
en ejecutarse:

A
S
B S <= A and B;

C Q <= C or D;
Q
D

De esta manera la aunque una instruccin se ejecuta despus


de la otra, como las dos se evalan en el mismo instante, desde
el punto de vista de la modelizacin del circuito ambas puertas
estn funcionando simultneamente
Esta es la solucin por la que opta VHDL (y Verilog)

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

36
37

Necesidad de la concurrencia

Sin embargo, esta solucin ya no vale con este circuito:

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:

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

37
38

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;
Los procesos se ejecutan
process(...) concurrentemente
...
end process;

end ...;

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

38
39

Dos procesos en paralelo como solucin


architecture uam of ejemplo is
...
begin

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;

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

39
40

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

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

40
41

Instrucciones en procesos: IF..THEN..ELSE

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;

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

41
42

Instrucciones en procesos: CASE


Ejemplo: Una ALU sencilla
architecture uam of alu is
begin
CASE expresion IS
WHEN caso_1 => alu : process (op1, op2, cmd) is
... begin
secuencia de instrucciones 1 case cmd is
... when "00" =>
WHEN caso_2 => res <= op1 + op2;
... when "01" =>
secuencia de instrucciones 2 res <= op1 op2;
... when "10" =>
WHEN OTHERS => res <= op1 and op2;
... when "11" =>
instrucciones por defecto res <= op1 or op2;
... when others =>
END CASE; res <= "XXXXXXXX";
end case;
end process alu;

end architecture uam;

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

42
43

Instrucciones en procesos: Bucle FOR

[etiqueta] FOR identificador IN rango LOOP


...
instrucciones secuenciales
...
END LOOP [etiqueta];

architecture uam of decoder is


begin

decod : process (a) is


begin
for i in 0 to 7 loop
if i = CONV_INTEGER(a) then
Ejemplo:
q(i) <= '1';
Decodificador de 3 a 8 else
q(i) <= '0';
Dentro del proceso
end if;
no avanza el tiempo,
por lo que el bucle
end loop;
se paraleliza
end process decod;

end architecture uam;

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

43
44

Instrucciones en procesos: Bucle WHILE

[etiqueta] WHILE condicion LOOP


...
instrucciones secuenciales
...
END LOOP [etiqueta];

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;

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

44
45

Bucles con next y exit

En VHDL se pueden crear bucles infinitos


[etiqueta] LOOP
...
instrucciones secuenciales
...
END LOOP [etiqueta];

Todos los bucles pueden tener una condicin de salida


exit [etiqueta] [when condicion];

Con la instruccin next termina inmediatamente la iteracin


actual y se pasa a la siguiente
next [etiqueta] [when condicion];

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

45
46

Procesos: Dos opciones de funcionamiento


Las instrucciones process(lista de seales) El proceso se
dispara cuando
se ejecutan hasta ... cambia alguna de
que se llega al begin
final, y entonces estas seales
se suspende el ...
proceso instrucciones secuenciales
...
end process;

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;

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

46
47

Distintas clasulas wait

Esperar a que ocurra una condicin:


wait until a='1' and b='0';

Esperar a que cambie alguna de las seales de una lista:


wait on a, b, clk;

Esperar un cierto tiempo:


wait 100 ns;

Esperar indefinidamente (matar el proceso):


wait;

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

47
48

Asignacin de valores a seales

No olvidar...

Las asignaciones a seales dentro de procesos


slo se ejecutan cuando se suspende el proceso

No es un dogma de fe, tiene su explicacin...

Las seales modelan conexiones fsicas, y por tanto, no slo


deben tener en cuenta el valor, sino tambin el tiempo
Para que un cable cambie de valor hace falta que el tiempo avance
De la misma forma, para que una seal cambie de valor hace falta
que el tiempo avance
El tiempo slo avanza cuando se suspende el proceso

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

48
49

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
La solucin son las variables
Las variables se declaran dentro de los procesos
Slo se ven dentro del proceso que las ha declarado
Toman el valor inmediatamente, son independientes del tiempo

process(a,b,c)
...
variable v : std_logic;
...
begin
...
v := a and b or c;
...
end process;

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

49
50

Solucin con variables

El problema de la actualizacin architecture uam of ejemplo is


de la seal S tiene muy fcil ...
solucin con una variable begin

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;

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

50
51

Semntica de variables y seales

Seales Variables

Sintaxis destino <= fuente destino := fuente

modelan nodos fsicos representan


Utilidad
del circuito almacenamiento local

global
local
Visibilidad (comunicacin entre
(dentro del proceso)
procesos)
se actualizan cuando
se actualizan
Comportamiento avanza el tiempo (se
inmediatamente
suspende el proceso)

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

51
52

Lenguaje de Descripcin Hardware VHDL

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

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

52
53

Modelar lgica combinacional con procesos

architecture uam of mux is


begin

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;

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

53
54

El problema de la memoria implcita

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

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

54
55

Un ejemplo correcto

architecture example of thermostat is


begin
ctrl : process (desired_temp, actual_temp) is
begin
if actual_temp < desired_temp - 2 then
heater_on <= true;
elsif actual_temp > desired_temp + 2 then
heater_on <= false;
end if;
end process ctrl;
end architecture example;

Se genera un latch para la seal heater_on


porque no se actualiza en todos los casos

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

55
56

Un problema con la memoria implcita

Disear un circuito de acuerdo a esta tabla de verdad


process (a)
begin
case a is
A S
when "00" =>
00 1 res <= '1';
01 1 when "01" =>
10 0 res <= '1';
when "10" =>
11 don't care res <= '0';
when others =>
null;
end process;

Solucin es incorrecta, por no poner el caso "11" no significa


"don't care", simplemente est guardando el valor anterior, est
generando un latch

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

56
57

Reglas para evitar la memoria implcita

Para evitar la generacin de latches no deseados


Se deber terminar la instruccin IF...THEN...ELSE... con la clusula
ELSE
Especificar todas las alternativas en un CASE, definiendo cada
alternativa individualmente, o mejor terminando la sentencia CASE
con la clusula WHEN OTHERS... Por ejemplo,

CASE decode IS
WHEN "100" => key <= first;
WHEN "010" => key <= second;
WHEN "001" => key <= third;
WHEN OTHERS => key <= none;
END CASE;

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

57
58

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
Hay tres tipos
Asignaciones simples
s <= (a and b) + c;
Asignaciones condicionales
s <= a when c='1' else b;
Asignaciones con seleccin
with a+b select
s <= d when "0000",
e when "1010",
'0' when others;

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

58
59

Asignaciones concurrentes simples

A una seal se le asigna un valor que proviene de una


expresin, que puede ser tan compleja como queramos
s <= ((a + b) * c) and d;

Esta expresin es completamente equivalente a este proceso:


process(a,b,c,d)
begin
s <= ((a + b) * c) and d;
end process;

Se pueden utilizar todos los operadores que queramos, tanto


los predefinidos como los que importemos de las libreras

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

59
60

Asignaciones concurrentes condicionales

A la seal se le asigna valores dependiendo de si se cumplen


las condiciones que se van evaluando:
architecture uam of coder is
begin
s <= "111" when a(7)='1' else
"110" when a(6)='1' else
"101" when a(5)='1' else
"100" when a(4)='1' else
"011" when a(3)='1' else
"010" when a(2)='1' else
"001" when a(1)='1' else
"000";
end architecture uam;

Por su ejecucin en cascada es similar al IF..THEN..ELSE


Pueden generarse problemas de memoria implcita si no se
pone el ltimo else

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

60
61

Asignaciones concurrentes con seleccin


Se le asigna un valor a una seal dependiendo del valor que
tome una expresin:
architecture uam of decod is
begin
with a sel
s <= "00000001" when "000",
"00000010" when "001",
"00000100" when "010",
"00001000" when "011",
"00010000" when "100",
"00100000" when "101",
"01000000" when "110",
"10000000" when others;
end architecture uam;

Por su ejecucin en paralelo (balanceada) es similar a un CASE


Se pueden dar problemas de memoria implcita si no se pone el
ltimo when others

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

61
62

Lenguaje de Descripcin Hardware VHDL

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

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

62
63

El fundamento: Modelo del flip-flop D

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

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

63
64

Flip-flop con reset asncrono y clock enable


process (clk,rst)
begin
if rst='1' then
q <= '0';
elsif clk'event and clk='1' then
if ce='1' then
q <= d;
end if;
end if;
end process;

Otro circuito fundamental.


El reset debe estar en la lista de sensibilidad porque es
asncrono, tiene efecto independientemente del reloj.
En los circuitos secuenciales, la lista de sensibilidad debe estar
compuesta como mucho por el reloj y el reset (si es asncrono).

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

64
65

El axioma del diseo sncrono

CLK

El reloj es nico y est en todos los flip-flops del diseo

No se pueden usar dos relojes en el sistema


Todas las seales asncronas se deben muestrear (pasar por un flip-flop D)
nada ms entrar al sistema
No se deben poner puertas en el reloj, si se necesita deshabilitar la carga
de un flip-flop utilizar la habilitacin de reloj

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

65
66

Ejemplo: Un contador de 8 bits


process(clk,rst)
variable q_temp : std_logic_vector(7 downto 0);
begin
if rst='1' then
q_temp := (others => '0');
elsif rising_edge(clk) then
if ce='1' then
if up='1' then
q_temp := q_temp + 1;
else
q_temp := q_temp - 1;
end if;
end if;
end if;
q <= q_temp;
end process;

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

66
67

Ejemplo: Un registro de desplazamiento

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;

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

67
68

Metodologa: Diseo circuitos secuenciales

Lgica EstFuturo Estado


registro
Comb.

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

68
69

Metodologa: Diseo circuitos secuenciales

Maquinas de estados: FSM architecture uam of ejemplo is


type t_estado is (E0, E1, E2, E3);
signal Estado, EstFuturo : t_estado;
Utilizacin de subtipos: signal in1, in2, in3 : std_logic;
Definicion de Estados signal out1, out2 : std_logic;
signal CK, reset : std_logic;
Tres Bloques Funcionales ...
Lgica combinacional:
Decision de cambio de
estado
Registros: Mantienen el
estado.
Logica combinacional de
definicin de salidas

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

69
70

Metodologa: Diseo circuitos secuenciales


begin
comb: process (Estado, in1, in2, in3)
Maquinas de estados: FSM begin
case Estado is
when E0 => out1 <= '0';
Utilizacin de subtipos: out2 <= '0';
Definicion de Estados EstFuturo <= E1;
when E1 => out1 <= '1';
Tres Bloques Funcionales if in1 = '1' then
Lgica combinacional: EstFuturo <= E2;
Decision de cambio de else
EstFuturo <= E1;
estado
end if;
Registros: Mantienen el when E2 =>
estado. ...
when E3 =>
Logica combinacional de
...
definicin de salidas
end case;
end process comb;

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

70
71

Metodologa: Diseo circuitos secuenciales

Maquinas de estados: FSM


registro: process
Utilizacin de subtipos: begin
wait until reset='1' or rising_edge(CK);
Definicion de Estados if reset='1' then
Tres Bloques Funcionales Estado <= E0;
else
Lgica combinacional: Estado <= EstFuturo;
Decision de cambio de end if;
estado end process registro;

Registros: Mantienen el
end architecture uam;
estado.
Logica combinacional de
definicin de salidas

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

71
72

Lenguaje de Descripcin Hardware VHDL

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

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

72
73

FSM: Maquinas de Moore

FSM MOORE: Una maquina de estados en la que las salidas


cambian solo cuando cambia el estado

Las posibles implementaciones son:

Asignacin arbitraria del valor de los estados


Las salidas se decodifican a partir de los estados
1. Decodificacin combinacional.
2. Decodificacin registrada.

Asignacin especfica de los valores de estado


Las salidas pueden ser codificadas directamente en los estados
Codificacin one-hot

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

73
74

Implementacin de una FSM de Moore (1)

Salidas decodificadas a partir del valor de los estados.


1. Decodificacin Combinacional
Las salidas se decodifican a partir del estado actual
Salidas = funcin(estado_actual)

Lgica Registros Lgica Salidas


Entradas estado sig. de estado de salida

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

74
75

Implementacin de una FSM Moore (2)

Salidas decodificadas a partir del valor de los estados.


2. Decodificacin con salidas registradas
La decodificacin de las salidas se realiza en paralelo con la
decodificacin del siguiente estado.
Salidas = funcin(estado_anterior, entradas)

Estado actual
Lgica Registros
Entradas estado sig. de estado

Lgica Registros Salidas


de salida de salida

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

75
76

Implementacin de una FSM Moore (3)

Salidas codificadas en los bits de los estados

Estado Salida 1 Salida 2 Codif. Estados


s1 0 0 00
s2 1 0 01
s3 0 1 10
Nota: Los dos bits del estado son utilizados como salida

Lgica Registros Salidas


Entradas estado sig. de estado

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

76
77

Ejemplo: Generador de wait states

Diagrama de Estados:

PWAIT
RESET ack_out='1'
(async)

IDLE REQ RETRY PWAIT ACK


00 01 10

REQ
retry_out='1'

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

77
78

Ejemplo: Declaracin de la entidad

La declaracin de la entidad es la misma para todas las


implementaciones:

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 Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

78
79

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 Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

79
80

Ejemplo: Solucin 1 (cont.)

WHEN retry => IF pwait='1' THEN wait_gen <= ack;


ELSE wait_gen <= retry;
END IF;

WHEN ack => wait_gen <= idle;

WHEN OTHERS => wait_gen <= idle;

END CASE;
END IF;
END PROCESS fsm;

retry_out <= '1' WHEN (wait_gen = retry) ELSE '0';


ack_out <= '1' WHEN (wait_gen = ack) ELSE '0';

END archmoore1;

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

80
81

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 Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

81
82

Ejemplo: Solucin 2 (cont.)


CASE wait_gen IS
WHEN idle => IF req = '0' THEN wait_gen <= retry;
retry_out <= '1';
ack_out <= '0';
ELSE wait_gen <= idle;
ack_out <= '0';
END IF;
WHEN retry => IF pwait = '1' THEN wait_gen <= ack;
ack_out <= '1';
ELSE wait_gen <= retry;
retry_out <= '1';
ack_out <= '0';
END IF;
WHEN ack => wait_gen <= idle;
ack_out <= '0';
WHEN OTHERS => wait_gen <= idle;
ack_out <= '0'; -- para evitar latch
END CASE;

END IF;
END PROCESS fsm;
END archmoore2;

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

82
83

Ejemplo: Solucin 3

Salidas codificadas en el valor de los estados

ARCHITECTURE archmoore3 OF maq IS

SIGNAL wait_gen: std_logic_vector(1 DOWNTO 0);


CONSTANT idle: std_logic_vector(1 DOWNTO 0) := "00";
CONSTANT retry: std_logic_vector(1 DOWNTO 0) := "01";
CONSTANT ack: std_logic_vector(1 DOWNTO 0) := "10";

BEGIN

fsm: PROCESS (clock, reset)


BEGIN
IF reset = '1' THEN
wait_gen <= idle;
ELSIF clock'EVENT AND clock = '1' THEN

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

83
84

Ejemplo: Solucin 3 (cont.)

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 <= ack;
ELSE wait_gen <= retry;
END IF;
WHEN ack => wait_gen <= idle;
WHEN OTHERS => wait_gen <= idle;
END CASE;

END IF;
END PROCESS fsm;

retry_out <= wait_gen(0);


ack_out <= wait_gen(1);

END archmoore3;

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

84
85

FSM: Codificacin One-hot

Un estado por flip-flop

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

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

85
86

Ejemplo: Solucin One-hot

ARCHITECTURE archmoore4 OF maq IS

TYPE fsm_states IS (idle, retry, ack);


ATTRIBUTE enum_encoding: string;
ATTRIBUTE enum_encoding OF fsm_states : TYPE IS 001 010 100;
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;

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

86
87

Ejemplo: Solucin One-hot (cont.)

WHEN retry => IF pwait = '1' THEN wait_gen <= ack;


ELSE wait_gen <= retry;
END IF;

WHEN ack => wait_gen <= idle;

WHEN OTHERS => wait_gen <= idle;

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 Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

87
88

Resumen FSM Moore

Salidas decodificadas de los bits de estado


Mayor flexibilidad en el proceso de diseo
Utilizando tipos enumerados se permite que la asignacin de los
estados se realice durante la compilacin.
Salidas codificadas en los bits de estado
Asignacin manual del valor de los estados
La salida se obtiene directamente de los registros
Se reduce le nmero de registros
Lgica adicional ms compleja
Codificacin One-Hot
Logica de siguiente estado mas sencilla
Mejora la velocidad
Necesita mas registros

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

88
89

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 Lgica Salidas

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

89
90

Ejemplo: generador de wait states

Diagrama de estados:

REQ PWAIT / ACK RETRY_OUT

X0/01
RESET
(async)

IDLE 0X/01 RETRY

1X/00
X1/10

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

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;

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

91
92

Lenguaje de Descripcin Hardware VHDL

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

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

92
93

Concepto de driver de una seal


El driver es el elemento que da valores a una seal
Para cada seal que se le asigna un valor dentro de un proceso
se crea un driver para esa seal
Independientemente de cuantas veces se le asigne un valor a la
seal, se crea un nico driver por proceso
Tanto para procesos explcitos como implcitos
Cuando hay mltiples drivers se usa la funcin de resolucin

PROCESS(in1)
BEGIN in1
senal <= in1;
END PROCESS; senal

senal <= in2; in2

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

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'

senal <= in1 WHEN 'Z'


in1
ena='1' ELSE 'Z';
senal = '0'
PROCESS(in1)
BEGIN '0'
senal <= '0'; '0'
END PROCESS;

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

94
95

Ejemplos de inferencia de buffers triestado

Con asignacin condicional:


a_out <= a WHEN enable_a='1' ELSE 'Z';
b_out <= b WHEN enable_b='1' ELSE 'Z';

Con un proceso:

PROCESS (ena_a, a)
BEGIN
IF (sel_a = '0') THEN
t <= a;
ELSE t <= 'Z';
END PROCESS;

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

95
96

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;
oe
y: INOUT std_logic;
yfb: OUT std_logic);
END bufoe; x y
ARCHITECTURE simple OF bufoe IS
BEGIN yfb
y <= x WHEN oe='1' ELSE 'Z';
yfb <= y;
END simple;

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

96
97

Ejemplo con seales bidireccionales

REG DATA
8 8

LOAD ENTITY ejbidir IS PORT (


load,clock,oe: IN std_logic;
data: INOUT std_logic);
CLOCK END ejbidir;
ARCHITECTURE simple OF ejbidir IS
OE SIGNAL reg: std_logic_vector(7 downto 0);
BEGIN
data<=reg WHEN oe='1' ELSE "ZZZZZZZZZ";
PROCESS(clk) BEGIN
IF rising_edge(clk) THEN reg<=data;
END IF;
END PROCESS;
END simple;

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

97
98

Lenguaje de Descripcin Hardware VHDL

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

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

98
99

Diseo jerrquico

Componentes pequeos son


utilizados como elementos
de otros ms grandes top.vhd
Es fundamental para la a.vhd
reutilizacin de cdigo
Permite mezclar a1.vhd
componentes creados con
distintos mtodos de diseo:
Esquemticos a2.vhd
VHDL, verilog
Genera diseos ms legibles
y ms portables
Necesario para estrategias b.vhd c.vhd
de diseo top-bottom o
bottom-up

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

99
100

rbol de jerarquas

COMPONENTE SUPERIOR
top.vhd
( TOP )

a.vhd b.vhd c.vhd

COMPONENTES INFERIORES
a1.vhd a2.vhd

Cada componente de la jerarqua es un archivo VHDL, con:


Entidad
Arquitectura

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

100
101

Cmo instanciar un componente

ENTITY top IS PORT


( ... )
END top;

ARCHITECTURE jerarquica OF top IS


signal s1,s2 : std_logic;
COMPONENT a PORT
( entrada IN std_logic;
salida OUT std_logic );
END COMPONENT;
begin
u1: a PORT MAP
(entrada=>s1, salida=>s2);
end top

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

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

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

102
103

Ejemplo de diseo jerrquico: top-level

LIBRARY ieee;
USE ieee.std_logic_1164.ALL;

ENTITY toplevel IS PORT (s: IN std_logic;


p, q, r: IN std_logic_vector(2 DOWNTO 0);
t: OUT std_logic_vector(2 DOWNTO 0));
END toplevel;
Declaracin del componente en un package
USE WORK.mymuxpkg.ALL;

ARCHITECTURE archtoplevel OF toplevel IS Asociacin por nombre


SIGNAL i: std_logic_vector(2 DOWNTO 0);
BEGIN
m0: mux2to1 PORT MAP (a=>i(2), b=>r(0), sel=>s, c=>t(0));
m1: mux2to1 PORT MAP (c=>t(1), b=>r(1), a=>i(1), sel=>s);
m2: mux2to1 PORT MAP (i(0), r(2), s, t(2));
i <= p AND NOT q;
END archtoplevel; Asociacin posicional

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

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;

ARCHITECTURE archmux2to1 OF mux2to1 IS


BEGIN
c <= (a AND NOT sel) OR (b AND sel);
END archmux2to1;

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;

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

104
105

Qu son los packages (paquetes)?

Es el mecanismo que tiene VHDL para guardar construcciones


que se van a reutilizar en varios diseos
Declaraciones de componentes, subprogramas, constantes...
Consta de dos partes:
Declaracin del paquete
Declaraciones de seales y constantes
Declaraciones de componentes
Definiciones de tipos
Declaraciones de subprogramas
Cuerpo del paquete
Cuerpo de los subprogramas
Cualquier otra declaracin que se desea que permanezca privada al
paquete
Los paquetes se agrupan en libreras

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

105
106

Lenguaje de Descripcin Hardware VHDL

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

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

106
107

Estilos de arquitecturas
Arquitectura estructural

Arquitectura RTL

Arquitectura comportamental

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

107
108

Estilos de descripcin: Estructural

Una unidad de alto nivel se divide en


unidades de ms bajo nivel.
Descripcin que contiene los sub-
componentes y las conexiones entre
los mismos.

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

108
109

Estilos de descripcin: Comportamiento

Nivel abstracto de descripcin, usando la expresividad de las


construcciones de VHDL
Definicin de QUE HACE el modelo y NO COMO LO HACE.
Es sintetizable siempre que sea RTL
Cuando se utilizan ecuaciones lgicas (asignaciones
concurrentes) se denomina dataflow

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

109
110

Estilos de descripcin: RTL

RTL: Register Transfer Level


Descripcin de comportamiento teniendo en cuenta el flujo de
datos entre registros y bloques funcionales

Tiene en cuenta el ciclo de reloj


Independiente de la tecnologa
Definicin del sistema en trminos de:
registros
lgica combinacional
operaciones

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

110
111

Estilos de descripcin: Algortmico

Descripcin de comportamiento completamente independiente


del hardware, sin especificar ni relojes ni separando entre
bloques combinacionales y secuenciales
instruccion := memoria(PC);
opcode := instruccion (31 downto 28)
rs1 := instruccion(27 downto 24); rs2 := instruccion(23 downto 20);
rd := instruccion(19 downto 16); offset := instruccion(15 downto 0);
case opcode is
when load => rd := memoria(rs1 + offset);
when store => memoria(rs + offset) <= rd;
when add => rd := rs1 + rs2;
...

Equivalente a un modelo que se podra crear en cualquier otro


lenguaje de alto nivel, por ejemplo C
Slo es til para simulacin

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

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

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

112
113

Lenguaje de Descripcin Hardware VHDL

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

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

113
114

Pasos de la simulacin

Archivos VHDL

Anlisis

libreras de trabajo

Elaboracin

Simulacin

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

114
115

Verificacin con testbenches

Un diseo sin verificacin no est completo


Hay muchas maneras de verificar, pero la ms utilizada es el
banco de pruebas, testbench
Simular bsicamente es:
Generar estmulos
Observar los resultados
Un testbench es un cdigo VHDL que automatiza estas dos
operaciones
Los testbenches no se sintetizan
Se puede utilizar un VHDL algortmico
Usualmente con algoritmos secuenciales Aprovechar
la potencia
de VHDL

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

115
116

Como hacer un testbench

1. Instanciar el diseo que estmulos


vamos a verificar
El testbench ser el nuevo
top-level
Ser una entidad sin ports
diseo.vhd
2. Escribir el cdigo que:
Genera los estmulos
Observa los resultados resultados
Informa al usuario
testbench.vhd

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

116
117

Instanciando la unidad bajo test (UUT)

ENTITY test IS Entidad sin


END test; puertos
ENTITY
ARCHITECTURE
Declaracin del
COMPONENT componente
ARCHITECTURE Instanciacin del
UUT: PORT componente
PROCESS Procesos de
simulacin
Descripcin de la UUT
CONFIGURATION Configuracin del
componente

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';

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

118
119

Observando seales con assert

Assert se usa para comprobar si se cumple una condicin


Equivalente a IF (not condicin)
Sintaxis
ASSERT condicion REPORT string SEVERITY nivel;

Tras REPORT se aade una cadena de texto, que se muestra


si no se cumple la condicin
SEVERITY puede tener cuatro niveles
NOTE
WARNING
ERROR (nivel por defecto si no se incluye SEVERITY)
FAILURE

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

119
120

Caractersticas adicionales de assert

El simulador puede configurarse para indicar a partir de qu


nivel de error se parar la simulacin
Se pueden mostrar en el REPORT valores de seales:
ASSERT q=d
REPORT "Valor erroneo: " & std_logic'image(q);
SEVERITY nivel;

Se utiliza el atributo predefinido de VHDL 'image, que pasa de


cualquier valor, del tipo que sea, a una representacin en forma
de string
Generalmente se usa dentro de procesos (instruccin
secuencial), pero tambin se puede usar como concurrente
Se chequea la condicin continuamente, y en el momento en que
deja de cumplirse, se escribe el mensaje

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

120
121

Algoritmo bsico para los testbenches

Algoritmo elemental de verificacin:


Dar valores a las seales de entrada a la UUT
Esperar con WAIT FOR
Comprobar los resultados con ASSERT
Volver a dar valores a las seales de entrada a la UUT
y repetir

seal <= valor ASSERT


ASSERT
(resultado=esperado)
(resultado=esperado)

WAIT FOR

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

121
122

Ejemplo de cdigo
ARCHITECTURE tb_arch OF dff_tb IS

COMPONENT dff PORT (...) END COMPONENT;


SIGNAL d, c, q : std_logic;

BEGIN

UUT : dff PORT MAP (d => d, c => c, q => q );

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;

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

122
123

Testbenches avanzados

Se pueden dar valores dependiendo de los resultados


senal <= '0'; WAIT FOR 10 ns;
IF senal/='0' THEN
REPORT "Intento otra vez"; senal <= '0';
ELSE
REPORT "Ahora pruebo con uno"; senal <= '1';
END IF;
WAIT FOR 10 ns;

Usar los bucles para hacer pruebas sistemticas


FOR i IN 0 TO 255 LOOP
FOR j IN 0 TO 255 LOOP
sumando1 <= i;
sumando2 <= j;
WAIT FOR 10 ns;
ASSERT suma=(i+j) REPORT "ha fallado la suma";
END LOOP;
END LOOP;

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

123
124

Procedimientos
VHDL permite definir procedimientos (subrutinas)
PROCEDURE nombre (clase parametro : dir tipo, ...) IS
{declaraciones}
BEGIN
{instrucciones secuenciales}
END PROCEDURE nombre;

La clase de los parmetros puede ser:


VARIABLE, CONSTANT, SIGNAL
Y la direccin:
IN, INOUT, OUT
Los procedimientos se pueden declarar en la arquitectura o en un
proceso, y se llaman desde un proceso o concurrentemente

Interesante para encapsular tareas repetitivas en la simulacin

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

124
125

Ejemplo de cdigo
ARCHITECTURE tb_arch OF dff_tb IS
(...)

PROCEDURE send_clock_edge(SIGNAL c : out std_logic) IS


BEGIN
c <= '0'; WAIT FOR 10 ns;
c <= '1'; WAIT FOR 10 ns;
END PROCEDURE send_clock_edge;

BEGIN

UUT : dff PORT MAP (d => d, c => c, q => q );

PROCESS
BEGIN
c <= '0'; d <= '0';
send_clock_edge(c);
ASSERT q=d REPORT "falla" SEVERITY FAILURE;
END PROCESS;

END tb_arch;

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

125
126

Acceso a archivos

La simulaciones ms potentes trabajan sobre archivos


Ejemplos:
Simulacin de un multiplicador que escribe los resultados en un
archivo de texto
Testbench para un microprocesador que lee un programa en
ensamblador de un archivo, lo ensambla y lo ejecuta
Acceso bsico: paquete std.textio
Archivos de texto
Acceso lnea a lnea: READLINE, WRITELINE
Dentro de una lnea, los campos se procesan con READ y WRITE
Acceso especfico para std_logic: ieee.std_logic_textio

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

126
127

Instrucciones para acceder a archivos


Especificar el archivo
FILE archivo_estimulos : text IS IN "STIM.TXT";

Leer una lnea


VARIABLE linea : line;
...
readline(archivo_estimulos, linea);

Leer un campo de una lnea


VARIABLE opcode : string(2 downto 0);
...
read (linea, opcode);

Escribir
write(linea, resultado);
writeline(archivo_resultados, linea);

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

127
128

Configuracin

Una configuracin es una unidad de


diseo:

Que se usa para realizar asociaciones


dentro de los modelos
Asociar entidad con arquitectura.
En la instanciacin de un componente
asociarlo a una entidad y su arquitectura.
Muy utilizada en entornos de simulacin
Proporciona una manera rpida y flexible de
Aplicandolo a un componente particular: probar distintas alternativas del diseo
FOR instance_name : comp_name USE ...; Limitada o no soportada en entornos de
sntesis.
Aplicandolo a todas las instancias:
FOR ALL: comp_1 USE ENTITY
WORK.entity_name(architecture_name);

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

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

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

129
130

Verificacin de un diseo escrito en VHDL

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

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

130
131

Simulaciones en el flujo de diseo de FPGAs

Sntesis
Sntesis Simulacin post-sntesis

Traducir
Traducirla
lanetlist
netlist
Simulacin post-layout
MAP
MAP

Place
Place&&Route
Route

Bitstream
Bitstream

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

131
132

Testbench para un diseo VHDL

El testbench debe ser el mismo para las tres simulaciones


Las tres simulaciones se asociarn con tres configuraciones, se
pondr como top-level la configuracin que nos interese en
cada momento
CONFIGURATION funcional_OF dfftb IS FUNCIONAL
FOR dfftbarch
FOR uut:dff USE ENTITY WORK.dff(behavioral);
END FOR;
END FOR;
END funcional;

CONFIGURATION postlayout_OF dfftb IS


POST-LAYOUT
FOR dfftbarch
FOR uut:dff USE ENTITY WORK.dff(structure);
END FOR;
END FOR;
END postlayout;

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

132
133

Modelo post-layout

Una vez implementado el diseo, se crea un modelo post-layout


de la FPGA mediante ngd2vhdl
time_sim.vhd
El modelo usa la librera SIMPRIM
Los tiempos se anotan en un archivo SDF separado
time_sim.sdf
Todo la FPGA est modelada en estos dos archivos
El simulador puede no cargar el fichero SDF
Primera simulacin, rpida, ver si el comportamiento es correcto
Segunda simulacin, detallada, ver si los tiempos se respetan
Pueden aparecer en la entidad los nodos GSR/GTS (opcional)
Se puede arreglar reconfigurando los ports en CONFIGURATION

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

133
134

Lenguaje de Descripcin Hardware VHDL

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

European Lenguaje de Descripcin Hardware VHDL Univ. Autnoma


Training Institute de Madrid

134

También podría gustarte