VHDL
VHDL
VHDL
VHDL: Lenguaje de
descripcin de hardware
XII Asamblea General del ISTEC, UTP, Panam, Noviembre de 2002
Qu es un HDL?
Hot Lab Support Initiative
VHDL
esquema textual
(CONCURRENCIA)
Permite describir mdulos con acciones que sern evaluadas en
ig
ht
G.
Ja
Funciona de acuerdo a lo
deseado?
Co
py
r
Los procesos de Sntesis y de Place & Route, son slo una parte menor de la
tarea de diseo
Ms all de que un diseo quepa dentro de un dispositivo, y de que satisfaga
los tiempos de operacin necesarios, la pregunta clave es: Funciona de
acuerdo a lo deseado?
Es justamente este tema algo que la actual industria de herramientas EDA
an no ha resuelto satisfactoriamente, y que puede llevar la mayor parte del
tiempo de diseo:
EL PROBLEMA NO ES CMO DISEAR Y SINTETIZAR UN
DISPOSITIVO DE VARIOS MILLONES DE COMPUERTAS
CORRIENDO A CIENTOS DE MEGAHERTZ, SINO CMO
VERIFICARLO!!!
Qu ventajas da el uso de
HDLs?
Verificacin funcional en
distintas etapas de un diseo
Simulador VHDL
Informacin de
estmulos y repuestas
Simulador VHDL
Informacin de
estmulos y repuestas
Simulador VHDL
Informacin de
estmulos y repuestas
Dispositivo
Equipamiento de test
automtico
Boundary Scan Testing
Informacin de
estmulos y repuestas
SOFTWARE
HARDWARE
Caractersticas de un HDL
Hot Lab Support Initiative
(comportamiento)
qu
en
od
20
02
VHDL: Lenguaje de
descripcin de hardware
La necesidad de poder
simular
02
20
2: Una vez analizadas todas las seales del sistema se sabe cul
es el instante prximo en que deber producirse un cambio; el
reloj de simulacin es avanzado hacia l (en caso del delta delay
el reloj permanece sin cambios), se realiza el/los cambios, se
actualizan las colas de todas las seales y se vuelve al paso 1;
qu
en
od
Qu HDLs existen?
Hot Lab Support Initiative
ig
ht
G.
Ja
10
Co
py
r
Resultado
Documentacin
Anlisis
Especificacin
Descripcin de qu
debe hacerse
Diseo
Cdigo VHDL
Netlists
Simulacin
Validacin
simulada
Test-Bench y vectores
Prototipo
Detalle del
funcionamiento
Prototipado
Simulacin de eventos
discretos
Elaboracin de cmo
llegar a los resultados
Qu es un estilo de
descripcin de hardware?
SINTESIS!!
11
12
VHDL: Lenguaje de
descripcin de hardware
Modelado por
comportamiento (behavior)
Modelado estructural
Hot Lab Support Initiative
02
input1
output1
Componente1
de menor nivel
Componente1
de menor nivel
qu
en
od
20
outputn
inputn
13
Fuente: ALTERA
Estructura jerrquica
Hot Lab Support Initiative
subdiseo 2
subdiseo 3
15
.....
.....
16
Encapsulamiento de
mdulos
Co
py
r
El comportamiento interno de un
mdulo puede ser definido mediante
diferentes estilos, y slo puede ser
observado desde el exterior del
mdulo por los efectos que provoca
en la interfase
INTERFASE
instancia del
mdulo C
otra instancia
del mdulo B
Generalidades
Identificadores
Tipos y objetos
Atributos
Operadores
COMPORTAMIENTO
INTERNO
mdulo B
mdulo C
Bases de VHDL
PUERTAS
17
modulo A
instancia del
mdulo B
subdiseo 4
.....
Fuente: ALTERA
Instancias y Jerarquas
ig
ht
G.
Ja
subdiseo tope
.....
subdiseo 1
14
18
VHDL: Lenguaje de
descripcin de hardware
Elementos de lxico:
identificadores
02
hello_world
VHDL1993
Es un texto que representa un valor numrico, expresado en la forma de entero (sin punto
decimal), o real (con punto decimal):
enteros: son nmeros positivos y negativos
29
-5
999
3.1415927
0.68
99.99E9
Enteros y reales pueden ser expresados usando una base distinta a 10, entre 2 y 16.
Para ello se indica la base en decimal, un #, el nmero expresado en esa base y otro
#. En los reales el exponente debe ser siempre expresado en decimal
2#1011# 4#13#e2 16#B#
2#0.1#
8#0.4#
12#0.6#
3.141_592_7
FLEX_10k
22
a Z 1
Co
py
r
Doble Comilla
23
Elementos de lxico:
bit_strings
Elementos de lxico:
caracteres
Los reales pueden usar notacin exponencial, donde el nmero es seguido por la
letra E (o e) y el exponente (siempre usando base 10)
2.7E-6
digital_design
ig
ht
G.
Ja
punto flotante: deben incluir un punto decimal, y al menos un dgito antes y uno
despus de l.
2k_efecto
schematics!
20
Elementos de lxico:
nmeros
X__FPGAs
myemail@net
cod1997_
qu
en
od
19
20
Slo pueden contener letras del alfabeto (A hasta Z, a hasta z), los nmeros
decimales (0 a 9) y el caracter underscore o underline (_).
Deben comenzar con una letra del alfabeto.
No pueden terminar con un underscore
No pueden tener dos o ms undescore sucesivos
B0110_1101
24
O537 XF5AA
VHDL: Lenguaje de
descripcin de hardware
XII Asamblea General del ISTEC, UTP, Panam, Noviembre de 2002
02
por enumeracion!
Ejemplos de tipos:
type word is array (0 to 31) of BIT;
type byte is array (NATURAL range 7 downto 0) of BIT;
type arcoiris is (rojo,naranja,amarillo,verde,azul,ndigo,violeta);
type complejo is record real:INTEGER; imag : INTEGER; end record;
type MVL4 is (X, 0, 1, Z);
20
compuestos:
un caso muy usual en una matriz o vector (is array ... of)
aunque tambin existe el agrupamiento (is record ...end record;)
Ejemplos de subtipos:
subtype nibble is byte (3 downto 0);
de acceso: punteros
archivos: para manejo de I/O en archivos
25
Declaracin de objetos en
VHDL
En VHDL existen cuatro clases de objetos: constant, variable, signal y file, cuya
declaracin se hace en conjunto con una especificacin de tipo
26
27
28
Declaracin de objetos en
VHDL
Co
py
r
Declaracin de atributos
Hot Lab Support Initiative
Declaracin de objetos en
VHDL
29
ig
ht
G.
Ja
qu
en
od
El uso de atributos puede ser til para asignar a una dada seal
ciertas caractersticas requeridas para su posterior sntesis. Por
ejemplo, definir la codificacin a usar para un tipo enumerado
30
VHDL: Lenguaje de
descripcin de hardware
Atributos predefinidos en
VHDL
02
SDELAYED (T) genera una nueva seal que copia el valor de S con una
demora T
SSTABLE (T) devuelve TRUE si S no ha cambiado durante el lapso previo
de tiempo T
SQUIET (T) devuelve TRUE si no se han asignado nuevos valores a S
durante el lapso previo de tiempo T
STRANSACTION es TRUE si se ha asignado un nuevo valor a S
SLAST_EVENT devuelve el tiempo pasado desde el ltimo evento
SEVENT devuelve TRUE si S ha cambiado
31
Recordarlos!
Son MUY
usados!
32
El usuario puede definir nuevos atributos que pueden ser asociados a cualquier
elemento del lenguaje. Para ello son necesarios dos pasos:
Se define el atributo:
ATTRIBUTE <identificador> : <tipo del identificador>;
Cuidado con POS y VAL! Dependen del tipo del objeto al que se aplican!
Para enumerados, POS devuelve 0 para el primer trmino
33
Recordarlos!
Son MUY
usados!
ig
ht
G.
Ja
se tiene:
20
muestraHIGH valdr 7
muestraLOW valdr 0
muestraRIGHT valdr 0
muestraLEFT valdr 7
muestraRANGE valdr 7 DOWNTO 0
muestraREVERSE RANGE valdr 0 TO 7
muestraLENGTH valdr 8
muestraASCENDING ser falso
qu
en
od
Atributos predefinidos en
VHDL
34
Y luego preguntar:
VHDL: Operadores
Co
py
r
Bases de VHDL
logicos: AND, OR, NAND, NOR, XOR, XNOR, NOT, para tipos BIT, BOOLEAN, y
arrays de ellos
relacionales: =, /=, <, <=, >, >=, donde los operandos deben ser del mismo tipo, y el
resultado es BOOLEAN
Construcciones bsicas:
Entidad
Arquitectura
Package
Configuracin
de shift: SLL, SRL, SLA, SRA, ROL, ROR, donde el operando izquierdo debe ser un
array de BIT o BOOLEAN, y el derecho un INTEGER
suma y resta: + y -. Estos operadores estn predefinidos para el tipo numricos
INTEGER y sus subtipos; para trabajar con BITs o BIT_VECTORs debe usarse el
operador de concatenacin & o hacer el overload de + o -.
de multiplicacin y divisin: *, /, MOD, REM, con * y / predefinidos para los tipos
numricos enteros y flotante, y MOD y REM slo para enteros; un objeto fsico puede
ser multiplicado o dividido por un tipo numrico, dando como resultado un valor fsico
miscelaneos: exponenciacin (**), y valor absoluto (ABS )
Texto remarcado: Operadores definidos en VHDL 1993
Los de shift no son soportados por MAX+plus II VHDL
35
36
Estructuras de VHDL:
organizacin
Estructuras de VHDL
Hot Lab Support Initiative
Package
Un ejemplo en VHDL
a
b
AND
c
d
ENTITY ejemplo_1 IS
PORT (
a,b,e : IN BIT;
c,d
: OUT BIT );
END ENTITY ejemplo_1;
- -y del comportamiento
ARCHITECTURE comporta
OF ejemplo_1 IS
BEGIN
c <= a AND b;
d <= e;
END ARCHITECTURE comporta;
40
Co
py
r
Agregado
Agregado
en
enVHDL93
VHDL93
[GENERIC(...);] [PORT(...);]
END [ENTITY] [<identificador>] ;
identificador
identificador
modo
modo
tipo
tipo
41
design unit
design unit
Entidades en VHDL
ig
ht
G.
Ja
Se define separadamente el
comportamiento desde el
punto de vista externo
(ENTITY) a la realizacin
interna (ARCHITECTURE)
END..;
ejemplo_1
39
END..;
38
design unit
END..;
qu
en
od
ARCHITECTURE..OF..IS..
...
BEGIN
...
END..;
design unit
Configuration
37
LIBRARY..USE...
LIBRARY..USE...
ENTITY..IS
...
END...;
20
DESIGN FILE
02
VHDL: Lenguaje de
descripcin de hardware
VHDL: Lenguaje de
descripcin de hardware
43
02
20
Agregado
Agregado
en
enVHDL93
VHDL93
44
Estructura bsica de
modelado en VHDL
qu
en
od
Fuente: ALTERA
46
Co
py
r
Agregados
Agregados
en
enVHDL-93
VHDL-93
47
Estructuras de VHDL:
libraries y packages
ig
ht
G.
Ja
La dupla VHDL
Entidad + Arquitectura
48
VHDL: Lenguaje de
descripcin de hardware
La library STD
y el package STANDARD
Ejemplo de un Package
cualquiera
De
De acceso
acceso
Discretos
Discretos
Enteros
Enteros
Fsicos
Fsicos
Enumerados
Enumerados
Natural
Natural
Positive
Positive
Boolean
Boolean
FALSE,
FALSE,TRUE
TRUE
Carcter
Carcter
Archivos
Archivos
Compuestos
Compuestos
Punto
Punto
flotante
flotante
Records
Records
Arrays
Arrays
Reales
Reales
Strings
Strings
Bit-Vector
Bit-Vector
Tiempo
Tiempo
fs,ps,ns,us,ms,sec,min,hr
fs,ps,ns,us,ms,sec,min,hr
Bit
Bit
0,1
0,1
Severity
Severity Level
Level
NOTE,
NOTE,WARNING,
WARNING,ERROR,
ERROR,FAILURE
FAILURE
Declaracin
Declaracin
del
delPackage
Package
Fuente: ASHENDEN
Cuerpo
Cuerpodel
del
Package
Package
Fuente: ALTERA
50
Pero adems existe la llamada Working Library, indicada por WORK, que
es aquel directorio donde el diseo actual est siendo procesado
C:\MAXPLUS2\VHDL93
G.Jaquenod 2002, All Rights Reserved.
52
La Library IEEE
Co
py
r
02
Escalares
Escalares
ig
ht
G.
Ja
PACKAGE filt_cmp IS
TYPE state_type IS (idle, tap1, tap2, tap3, tap4);
COMPONENT acc
port(xh : in std_logic_vector(10 downto 0);
clk, first: in std_logic;
yn : out std_logic_vector(11 downto 4));
END COMPONENT;
FUNCTION compare (variable a , b : integer)
RETURN boolean;
END PACKAGE filt_cmp;
51
Tipos
Tipos
revisar
revisar STANDARD.VHD
STANDARD.VHD en
en C:\maxplus2\vhdl93\std
C:\maxplus2\vhdl93\std
20
package STANDARD is
....
type BOOLEAN is (FALSE,TRUE);
type BIT is (0,1);
subtype NATURAL is INTEGER
range 0 to INTEGERHIGH;
subtype POSITIVE is INTEGER
range 1 to INTEGERHIGH;
type BIT_VECTOR is array (NATURAL range <>)
of BIT;
subtype DELAY_LENGTH is TIME
range 0 fs to TIMEHIGH;
type TIME is range <....> units fs; ps = 1000 fs;
ns = 1000 ps; us = 1000 ns; ms = 1000 us;
sec = 1000 ms; min = 60 sec; hr = 60 min;
end units;
....
end package STANDARD;
Tipos definidos en el
package STANDARD
qu
en
od
49
Fuente: ALTERA
El package
IEEE.Std_logic_1164
buscar en C:\MAXPLUS2\VHDL93\IEEE\
53
Fuente: ALTERA
54
VHDL: Lenguaje de
descripcin de hardware
Estructuras de VHDL:
configuracion
02
Entidad E1
Bases de VHDL
Entidad E2
Arq3
Arq1
Entidad E3
Arq1
Arq2
Arq3
55
Tipos de descripciones en
VHDL
Asignacin a seales
Declaracin de tipos y
constantes
Declaracion de atributos de
seales
Invocacin a funciones y
procedimientos
Sentencia ASSERT
Retardos (AFTER)
58
Co
py
r
temp
signals
Fuente: ALTERA
qa
t
AND
qb
XOR
59
signals
qa <= r OR t;
qb <= (qa AND NOT(g XOR h));
process
process
signals
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY simp IS
PORT(r, t, g, h : IN std_logic;
qb : OUT std_logic);
END ENTITY simp;
ARCHITECTURE logic OF simp IS
SIGNAL qa : std_logic;
BEGIN
Secuenciales
Declaracin de variables
Asignacin a variables
Sentencia IF..THEN..ELSE
Sentencia CASE
Sentencia LOOP
Sentencia RETURN
Sentencia NULL
Sentencia WAIT
ig
ht
G.
Ja
Concurrentes
56
Declaracin de seales
Sentencia WHEN..ELSE
Sentencia WITH..SELECT
Sentencia PROCESS
Sentencias BLOCK
57
Concurrencia y Secuencialidad
Seales y Variables
Sentencias de asignacin
Arq2
20
Arq2
qu
en
od
Arq1
Fuente: ALTERA
10
VHDL: Lenguaje de
descripcin de hardware
Asignaciones simples a
seales
Asignaciones concurrentes
Hot Lab Support Initiative
02
qa <= r OR t ;
qb <= (qa AND NOT(g XOR h));
OR
61
y0
sel0
y1
sel1
y2
y3
Fuente: DUECK
64
Asignacion condicional
concurrente: WHEN..ELSE
c
q <=
a WHEN sela = 1
ELSE b WHEN selb = 1
ELSE c;
proceso implcito
cada salida es
funcin combinatoria
de 3 entradas
requiere ocho
macroceldas, una
por cada salida
ARCHITECTURE usowhen
OF prioriencod IS
BEGIN
priori <= 3 WHEN max = '1'
ELSE 2 WHEN med = '1'
ELSE 1 WHEN min = '1'
ELSE 0;
END ARCHITECTURE usowhen;
Fuente del grfico:
SYNPLIFY HDL Analyst
66
b
selb
0
0
1
sela
Porqu?
ENTITY prioriencod IS
PORT (
max,med,min : IN BIT;
priori : OUT INTEGER
RANGE 0 TO 3);
END ENTITY prioriencod;
65
Asignacin condicional
concurrente: WHEN..ELSE
-- codificador de prioridad
Fuente: ALTERA
Co
py
r
ig
ht
G.
Ja
63
qb
XOR
AND
g
h
62
Ejemplos: decodificador
2 a 4 estilo RTL
procesos
implcitos
qu
en
od
qa
20
Asignacion condicional
concurrente: WHEN..ELSE
11
VHDL: Lenguaje de
descripcin de hardware
Ejemplo: codificador de
prioridad 7:3
Asignacion condicional
concurrente: WITH..SELECT
02
20
qu
en
od
a
b
c
d
sel
00
01
10
?
67
Asignacion condicional
concurrente: WITH..SELECT
cada salida es funcin
combinatoria de 4 entradas
requiere siete macroceldas,
una por cada salida
0));
70
Ejemplo: decodificador
BCD a 7 segmentos
Co
py
r
71
WHEN
WHEN
WHEN
WHEN
WHEN
codbcd
X"1",
X3",
X5",
X7",
X9",
y(0)
y(1)
y(2)
y(3)
Usando SELECT:
el uso de WHEN OTHERS
a
b
c
d
e
f
g
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY mux2a1_sig IS
PORT ( a,b,sel:IN std_logic;
z : OUT Std_logic;
END ENTITY mux2a1;
Quines
son los
OTHERS?
d <= seg(3);
Ejemplo: decodificador
2 a 4 usando WITH
ig
ht
G.
Ja
69
68
72
12
VHDL: Lenguaje de
descripcin de hardware
02
Bases de VHDL
20
pasando de la concurrencia a la
secuencialidad:
los procesos
las variables
las asignaciones secuenciales
74
Sentencias concurrentes:
PROCESOS
[(nombre de seal/es)]
[IS]
<sentencias secuenciales>;...;<>;
END PROCESS [label];
equivale a
PROCESS (a,b,c,x,y) IS BEGIN
IF x=1 THEN q<=a; ELSIF y=1 THEN q<=b; ELSE q<=c; END IF;
END PROCESS;
Sentencias de control
asociadas a eventos: WAIT
Co
py
r
76
indica las reglas que debe cumplir un conductor frente al semforo en una
interseccin.
A la vez: WAIT FOR 2 ns; puede ser usada en procesos de simulacin.
No
Nosintetizable!!!
sintetizable!!!
77
El label es opcional!
75
Asignaciones concurrentes
y procesos implcitos
lista
lista de
de
sensibilidad
sensibilidad
ig
ht
G.
Ja
[label:] PROCESS
qu
en
od
73
78
13
VHDL: Lenguaje de
descripcin de hardware
Ejemplos de WAIT
a,b,c,d:
a,b,c,d: eventos
eventos para
para WAIT
WAIT ON
ON
a,c:
a,c: eventos
eventos para
para WAIT
WAIT UNTIL
UNTIL
e,f,g,h:
e,f,g,h: eventos
eventos para
para WAIT
WAIT FOR
FOR
a b
X2
PROCESS BEGIN
WAIT ON X; X3 <= NOT(X);
END PROCESS;
X3
PROCESS BEGIN
WAIT UNTIL X=1; X4 <= NOT(X);
END PROCESS;
X4
PROCESS BEGIN
X5 <= NOT(X);
WAIT UNTIL X=1 FOR 10 ns;
END PROCESS;
X5
No
Nosintetizable!!!
sintetizable!!!
79
10 20 30 40
50 60 70
Fuente: SJOHOLM
Asignaciones a variables
en un proceso
80
82
Asignaciones condicionales
en procesos: IF
Co
py
r
Por ejemplo:
SIGNAL data_alu:INTEGER;
PROCESS BEGIN
IF
nclr=0 THEN data_alu <= 0;..;..;..;
ELSIF pass=1 THEN data_alu <= data_A;..;..;..;
ELSE ..;..;..;
END PROCESS;
Fuente: ALTERA
PROCESS
SIGNAL s1, s3: INTEGER := 0; SIGNAL s2: INTEGER := 1;
BEGIN
s1 <= s2;
s2 <= s1; -- hasta ac s1 sigue en 0 y s2 en 1
WAIT FOR 1 ns; -- recien antes del wait s2 va a 0 y s1
s3 <= s1;
WAIT FOR 1 ns; -- ac s3 pasa a uno un nanosegundo despus
END PROCESS;
IF - THEN: Ejemplo
Hot Lab Support Initiative
Proceso implcito
Asignaciones a seales
en un proceso
PROCESS(a,b,r,s,t)
BEGIN
IF a = 1 THEN
q <= r;
ELSIF b = 1 THEN q <= s;
ELSE
q <= t;
END IF;
END PROCESS;
IF
<expressin> THEN <sentencia>;..; <sentencia>;
ELSIF <expressin> THEN <sentencia>;..; <sentencia>;
ELSE
<sentencia>; ..; <sentencia>;
END IF;
83
PROCESS
VARIABLE v1,v2: INTEGER := 0; -- valor inicial
BEGIN
v1 := v1 + 1; -- luego de esta sentencia v1 vale 1
v2 := v1 + 1; -- luego de esta sentencia v2 vale 2
...
END PROCESS;
81
ig
ht
G.
Ja
MAX+plusII slo
soporta una instruccin
wait until para una seal
simple
Otras variedades de wait
(ej: wait on) o seales
complejas no son
toleradas para la sntesis
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
20
X1
PROCESS BEGIN
X2 <= NOT(X); WAIT ON X;
END PROCESS;
qu
en
od
02
84
q <= (a and r)
or ((not a) and b and s)
or ((not a) and (not b) and t)
Fuente del grfico:
SYNPLIFY HDL Analyst
14
VHDL: Lenguaje de
descripcin de hardware
XII Asamblea General del ISTEC, UTP, Panam, Noviembre de 2002
Uso de IF en
PROCESOS combinatorios
85
02
Asignaciones condicionales
en procesos: CASE
ARCHITECTURE a OF bufferts IS
data
BEGIN
PROCESS (oe, data)
BEGIN
IF oe = '0' THEN triout <= 'Z';
ELSE triout <= data;
END IF;
END PROCESS;
END ARCHITECTURE a;
86
87
88
Co
py
r
ENTITY case_rango IS
PORT (a: IN INTEGER RANGE 0 TO 30;
b: OUT INTEGER RANGE 0 TO 3);
END ENTITY case_rango;
PROCESS(sel, a, b,
BEGIN
CASE sel IS
WHEN 00
=> q
WHEN 01
=> q
WHEN 10
=> q
WHEN OTHERS => q
END CASE;
END PROCESS;
c, d)
<=
<=
<=
<=
a;
b;
c;
d;
00
b
c
d
01
sel
10
11
2
requiere slo 2
macroceldas
operando en
Cascade Chain
a
b
sel0
sel1
c
d
ARCHITECTURE a OF dmux8 IS
BEGIN
PROCESS (d,s) IS
VARIABLE sal : BIT_VECTOR(0 to 7);
BEGIN
IF (d = '1') THEN sal := "11111111";
ELSE CASE s IS
WHEN 0 => sal := B"01111111";
WHEN 1 => sal := B"10111111";
WHEN 2 => sal := B"11011111";
WHEN 3 => sal := B"11101111";
WHEN 4 => sal := B"11110111";
WHEN 5 => sal := B"11111011";
WHEN 6 => sal := B"11111101";
WHEN OTHERS => sal := B"11111110";
END CASE;
END IF;
y <= sal ;
END PROCESS;
END a;
Asignaciones condicionales
en procesos: CASE
89
Fuente: ALTERA
La sentencia final WHEN OTHERS permite definir la accin ante los posibles
valores aun indefinidos del campo constante, y evitar la inferencia de
elementos de memoria
triout
ig
ht
G.
Ja
En el campo <constante> cada posible valor debe figurar una y slo una vez,
pudiendo emplearse | (el operador OR) para agrupar posibles valores, o TO
(o DOWNTO) para expresar un rango.
20
cada salida es
funcin combinatoria
de 3 entradas
requiere ocho
macroceldas, una
por cada salida
qu
en
od
Uso de IF en
PROCESOS combinatorios
90
msb sal7
sal6
..
sal5
lsb
sal4
sal3
sal2
sal1
ena sal0
y7
y6
y5
y4
y3
y2
y1
y0
15
91
20
00
01
10
11
PROCESS(sel, a, b, c, d)
BEGIN
CASE sel IS
WHEN 00 => q <= a;
WHEN 01 => q <= b;
WHEN 10 => q <= c;
WHEN OTHERS => q <= d;
END CASE;
END PROCESS;
Proceso Explcito
qu
en
od
Proceso Implcito
92
[label:] LOOP
<sentencia>;...;<sentencia>;
END LOOP label;
94
Generador de paridad:
LOOP de rango abierto
Co
py
r
Fuente: ALTERA
Fuente: ALTERA
Ejemplo: AND(N)
con parametros y LOOP
ENTITY and_parametrizada IS
GENERIC (retardo: TIME := 10 ns; fanin: POSITIVE := 4);
PORT (entradas : IN BIT_VECTOR (fanin-1 DOWNTO 0);
salida: OUT BIT);
END ENTITY and_parametrizada;
95
ig
ht
G.
Ja
02
VHDL: Lenguaje de
descripcin de hardware
entradas(n-1)
entradas(n-2)
entradas(n-3)
------------------------entradas(1)
entradas(0)
salida
IF;
16
VHDL: Lenguaje de
descripcin de hardware
Tanto para NEXT como para EXIT hay dos posibles modos, absoluto
y condicional:
Behavioral o
Structural?
97
20
sum := 0;
sumapos: FOR i IN dataRANGE LOOP
NEXT sumapos WHEN data(i) <= 0;
sum := sum + data (i);
END LOOP sumapos;
qu
en
od
98
Controles de LOOP:
NEXT y EXIT
02
Asignaciones incompletas:
inferencia de memoria
ig
ht
G.
Ja
Bases de VHDL
Inferencia de
elementos de memoria
(voluntaria e involuntaria)
G.Jaquenod 2002, All Rights Reserved.
99
Inferencia de latches
dentro/fuera de procesos
Co
py
r
100
GATE
ARCHITECTURE concu OF latchconcu IS
BEGIN
Qu pasa si a=0?
c <= b when a='1';
el valor previo se conserva --> se crea un latch
END ARCHITECTURE concu;
101
102
sel(0)
sel(1)
1
sel(2)
gate
clrn
sel(3)
Fuente: ALTERA
17
VHDL: Lenguaje de
descripcin de hardware
Flipflops: formas de
definir el reloj
PROCESS BEGIN
WAIT UNTIL rising_edge (reloj);
q <= d;
END PROCESS;
Equivalente
Equivalenteaalalade
deabajo,
abajo,
pero
peroredundante
redundante
PROCESS BEGIN
WAIT UNTIL reloj=1;
q <= d;
Slo
Slosisino
nose
senecesita
necesitaRESET/SET
RESET/SET
END PROCESS;
asincrnicos
asincrnicos
Acepta
Aceptaflancos
flancosde
deX
XooZ
Zaa1
1
Tambin
Tambinsirve
sirvepara
paraseales
sealesBIT
BIT
ANALIZAR
ANALIZARCMO
CMOFUNCIONA
FUNCIONACADA
CADAMTODO!
MTODO!
103
Fuente: SJOHOLM
105
107
106
Inferencia de registros:
cuntos flipflops?
PRN
4 inp.
LUT
ENA
CLRN
Cascade Out
Fuente: ALTERA
MAX+plus II HELP
ARCHITECTURE a OF ff_cl_ena IS
SIGNAL q_aux: STD_LOGIC;
BEGIN
lista de sensibilidad
PROCESS (clk, clrn)
BEGIN
IF clrn = '0' THEN q_aux <= '0';
ELSIF rising_edge (clk) THEN
IF ena = '1' THEN q_aux <= d;
ELSE q_aux <= q;
END IF;
END IF;
END PROCESS;
q <= q_aux;
END ARCHITECTURE a;
G.Jaquenod 2002, All Rights Reserved.
ena
clk
clrn
Inferencia de registros:
cuntos flipflops?
Fuente: ALTERA
ENTITY reg1 IS
PORT (d,clk: in BIT;
q
: out BIT);
END ENTITY reg1;
Fuente: ALTERA
Cascade In
ENTITY reg1 IS
PORT (d,clk: in BIT;
q
: out BIT);
END ENTITY reg1;
Fuente: CHANG
Co
py
r
104
ig
ht
G.
Ja
clk
qu
en
od
Muy
Muyusada
usada
Necesita
NecesitaIEEE_1164
IEEE_1164
yyseales
sealesSTD_LOGIC
STD_LOGIC
20
02
D
D
QQ
clk
a
a, b y q se
actualizan al
mismo tiempo,
en el flanco de
subida de clk
D
D
QQ
clk
D
D
QQ
b
q
clk
clk
Fuente: ALTERA
18
VHDL: Lenguaje de
descripcin de hardware
ENTITY reg1 IS
PORT (d,clk:IN BIT;
q:OUT BIT);
END ENTITY reg1;
ENTITY reg1 IS
PORT (d,clk:IN BIT;
q:OUT BIT);
END ENTITY reg1;
Inferencia de registros:
cuntos flipflops?
ig
ht
G.
Ja
Fuente: ALTERA
Co
py
r
a q
b
clk
d se copia en a, y a en b, en forma
secuencial, y slo b es copiado en
q recin al fin del PROCESS
Fuente: ALTERA
Inferencia de registros:
cuntos flipflops?
Fuente: ALTERA
MAX+plus II HELP
114
b q
D
D
QQ
clk
clk
La copia de d en a y de a
en b se hace recin al final
del proceso.
En cambio la copia de b en
q es concurrente.
Fuente: ALTERA
D
D
QQ
clk
Porqu defino el
rango de cnt, en
vez de slo poner
INTEGER?
112
D Q
clk
ENTITY reg1 IS
PORT (d,clk:IN BIT;
q:OUT BIT);
END ENTITY reg1;
113
110
ENTITY reg1 IS
PORT (d,clk:IN BIT;
q:OUT BIT);
END ENTITY reg1;
20
Fuente: ALTERA
qu
en
od
111
Inferencia de registros:
cuntos flipflops?
02
Inferencia de registros:
cuntos flipflops?
109
STD_LOGIC;
clk
ld
Fuente: ALTERA
MAX+plus II HELP
19
VHDL: Lenguaje de
descripcin de hardware
Fuente: ALTERA
MAX+plus II HELP
Ejemplos: contadores
con cualquier mdulo
Usando sentido
PROCESS (clk)
VARIABLE cnt : INTEGER RANGE 0 TO 255;
BEGIN
IF (clk='1') THEN
IF (up_dn='1') THEN cnt := cnt+1;
ELSE cnt := cnt-1;
END IF;
END IF;
q <= cnt;
END PROCESS;
up_dn
clk
20
115
PROCESS (clk)
VARIABLE cnt : INTEGER RANGE 0 TO 255;
VARIABLE sentido : INTEGER;
BEGIN
IF (up_dn='1') THEN sentido:= 1;
ELSE sentido:= -1;
END IF;
IF (clk='1') THEN cnt:=cnt + sentido;
END IF;
q <= cnt;
END PROCESS;
Para qu se
define
sentido?
-1
+1
up_dn
+
+
clk
qu
en
od
02
116
Asignaciones concurrentes
mltiples
Dada una seal, en VHDL se crea un driver que excita esa seal en diferentes
ocasiones:
al ejecutar una sentencia de asignacin, dentro o fuera de un proceso, o en un procedure
al instanciar un componente
117
ig
ht
G.
Ja
Fuente: ALTERA
118
Donde cada driver est asociado a una lista con el valor corriente y los valores
futuros a asignar a esa seal (cola de transacciones)
Por ejemplo, si se ejecutan los siguiente procesos:
PROCESS (s1) BEGIN
a <= s1;
END PROCESS;
PROCESS (s2) BEGIN
a <= s2;
END PROCESS;
Co
py
r
Para definir la funcin de resolucin a emplear en una dada seal de un tipo no resuelto, se
intercala el nombre de esta funcin antes de especificar el tipo:
tipo_no_resuelto;
ENTITY NORES IS
PORT (A,ENA1,B,ENA2: IN STD_ULOGIC;
SALIDA: OUT STD_ULOGIC);
END;
ARCHITECTURE X OF NORES IS BEGIN
SALIDA <= A WHEN ENA1=1 ELSE Z;
SALIDA <= B WHEN ENA2=1 ELSE Z;
END X;
ENA1
ENA2
119
SALIDA
L! !
MA
s2
Esto crea un conflicto(colisin) donde 2 drivers excitan la misma seal, que debe
ser resuelto mediante una funcin de resolucin, que toma a s1,s2 como vector
de entrada y decide el valor de a.
s1
Funciones de resolucin
en STD_LOGIC_1164
ENTITY SIRES IS
PORT (A,ENA1,B,ENA2: IN STD_LOGIC;
SALIDA: OUT STD_LOGIC);
END;
ARCHITECTURE X OF SIRES IS BEGIN
SALIDA <= A WHEN ENA1=1 ELSE Z;
SALIDA <= B WHEN ENA2=1 ELSE Z;
END X;
ENA1
A
SALIDA
!
ok!
ENA2
B
Fuente: BAKER
20
VHDL: Lenguaje de
descripcin de hardware
sentencia
utilidad
Representa una
interconexin del circuito
123
VARIABLES ( := )
destino := fuente;
122
Actualizada
inmediatamente
Fuente: ALTERA
124
Co
py
r
word(3) <= 1;
125
salida
Bases de VHDL
datos
02
20
clk
oe
ARCHITECTURE bts OF mi74374 IS
SIGNAL a:std_logic_vector (7 DOWNTO 0); --FlipFlop internos
BEGIN
registros: PROCESS (clk)
BEGIN
Forma
Formarpida
rpidade
de
asignar
IF clk=1' THEN a <= datos; end if;
asignarelelmismo
mismovalor
valor
aatodo
END PROCESS registros;
todoelelvector
vector
tri: PROCESS (oe,a)
BEGIN
IF oe = 1' THEN salida <= (others => 'Z');
ELSE
salida <= a;
END IF;
END PROCESS tri;
END ARCHITECTURE bts;
ig
ht
G.
Ja
BEHAVIOR
ENTITY mi74374 IS
PORT (salida:INOUT std_logic_vector (7 DOWNTO 0);
oe,clk:IN std_logic;
datos:IN std_logic_vector (7 DOWNTO 0));
END ENTITY mi74374;
SEALES ( <= )
SCOPE
qu
en
od
En
Eneste
estecaso,
caso,al
al
declarar
declararuna
unavariable
variable
de
detipo
tipoword_3
word_3debe
debe
declararse
declararsesu
surango
rango
126
21
VHDL: Lenguaje de
descripcin de hardware
Asignaciones a arreglos
Hot Lab Support Initiative
De igual modo, luego de haber definido el valor de ciertos elementos de un vector, puede
usarse others para completar los restantes:
b <= O765;
d <= 381;
-- Octal
-- Decimal
En VHDL87, si se desea usar strings de bit para inicializar objetos que no son
BIT_VECTOR (ej: STD_LOGIC) deben invocarse funciones de conversin:
a <= to_stdlogicvector (XF3);
44Columnas
Columnas
ig
ht
G.
Ja
130
Concatenado de arrays y
subarrays
Co
py
r
La
Lasuma
suma
Fuente: BAKER
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_unsigned.ALL;
131
Dos arrays, o un array y un elemento aislado del mismo tipo que los elementos
del array pueden ser concatenados usando el operador & (en cuyo caso el
objeto al que se asigna el resultado debe tener el largo correcto!).
Es posible agregar un carcter a un objeto tipo STRING o unir dos STRINGs
De igual modo, es posible concatenar:
Concatenado de arreglos
El operador &
129
AGGREGATE
AGGREGATE
128
Arreglos multidimensionales
El tipo STRING
);
incluir
incluirstd_logic_unsigned
std_logic_unsigned
yystd_logic_1164)
std_logic_1164)
Asi como a elementos de un array pueden serle asignados elementos de otro array, los
valores de todo un array pueden ser asignados a otro array de igual dimensin en una
nica asignacin:
qu
en
od
20
En VHDL93 existen strings de bit predefinidos que pueden ser usados para
asignar valores a objetos tipo bit_vector:
127
02
Asignaciones a arreglos:
uso de aggregates
SubArray
SubArray
22
VHDL: Lenguaje de
descripcin de hardware
De igual modo se pueden definir entidades con ports de rango indefinido, cuyo
rango se define al instanciarlas como componentes de una jerarquia superior
SRL
Shifts lgicos
ROL
xRIGHT
20
FALSE
0
SLA
SRA
Shifts aritmticos
ROR
Rotaciones
135
136
Ejemplo de GENERATE:
sumador
Co
py
r
137
Fuente: ASHENDEN
La sentencia GENERATE
ig
ht
G.
Ja
FALSE
0
VHDL93 define 6 operandos de shift, llamados SLL, SRL, SLA, SRA, ROL, ROR, donde
el operando izquierdo debe ser un array de BIT o BOOLEAN, y el derecho un INTEGER
que indica la cantidad de desplazamientos a realizar. Notese que los desplazamientos se
refieren a izquierda o derecha y no al valor del ndce de rango, por lo que no importa si el
elemento a desplazar es de rango (xx TO yy) o (xx DOWNTO yy)
SLL
cs
oe
wr
64 x 8
ARCHITECTURE ejemplo OF miram IS BEGIN
8
8
memoria: PROCESS IS
VARIABLE esta_ram : ramblock;
Inicializacion
Inicializacion
BEGIN
FOR i IN direcciones LOOP esta_ram(i) := 0; END LOOP;
LOOP
WAIT ON cs,oe,wr,dir,d_ent;
IF (cs AND wr)='1' THEN esta_ram(dir) := d_ent; END IF;
IF (cs AND oe)='1' THEN d_sal <= esta_ram(dir);
Loop
Loopeterno
eterno
ELSE d_sal <= 0; END IF;
END LOOP;
END PROCESS memoria;
Si d_sal fuera STD_LOGIC_VECTOR ac
asignara (OTHERS => Z)
END ARCHITECTURE ejemplo ;
134
xLEFT
qu
en
od
133
En
Enalgn
algnpackage
package
defino
definolos
lostipos
tiposyyen
en
base
baseaaellos
ellosel
elarray
array
02
Uso de Arrays:
modelo de una RAM 64x8
Fuente: DUECK
138
Condicional
label: IF <expresin booleana> GENERATE
[declaraciones...; BEGIN]
sentencia; ..; sentencia;
END GENERATE;
Atencin:
Atencin:IF
IF
GENERATE
GENERATEno
notiene
tiene
ELSE
ELSEGENERATE
GENERATE
como
comoel
elAHDL!
AHDL!
Diferencias entre
FOR..GENERATE y LOOP
23
VHDL: Lenguaje de
descripcin de hardware
ASSERT y REPORT
Hot Lab Support Initiative
02
ac se activa chk_thold
ASSERT (datoSTABLE(t_setup))
dato
SEVERITY ERROR;
END IF;
reloj
relojd
139
La sentencia NULL
Es como la sentencia
vaca (;) del C
141
SEVERITY ERROR;
ARCHITECTURE
ARCHITECTURE nullex
nullex OF
OF uso_NULL
uso_NULL IS
IS
BEGIN
BEGIN
ejemplo:
ejemplo: PROCESS
PROCESS (a)
(a) BEGIN
BEGIN
s1
s1 <=
<= 0;
0;
s2
s2 <=
<= 0;
0;
s3
s3 <=
<= 0;
0;
Qu circuito se
CASE
CASE (a)
(a) IS
IS
generar ac?
Se inferir un
WHEN
B00
WHEN B00 =>
=>
LATCH?
s1
s1 <=
<= 1;
1;
WHEN
WHEN B01
B01 =>
=>
s2
s2 <=
<= 1;
1;
s3
s3 <=
<= 1;
1;
WHEN
WHEN OTHERS
OTHERS =>
=> NULL;
NULL;
END
CASE;
END CASE;
END
END PROCESS
PROCESS ejemplo;
ejemplo;
END
END ARCHITECTURE
ARCHITECTURE nullex;
nullex;
142
Co
py
r
Subprogramas
funciones y procedimientos
143
Su formato es:
PARAMETERS
RETURN VALUE
todas los objetos locales son voltiles, por lo que el resultado de la evaluacin debe
devolverse al programa que la invoca mediante una o ms RETURN.
ARCHITECTURE
begin
...
end
Bases de VHDL
los parmetros de llamada (o invocacion) pueden ser tanto de tipo variable como
signal, y son siempre modo IN (no es posible a una funcion modificar un parmetro)
PARAMETERS
PARAMETERS
ac se activa chk_thold
END IF;
END PROCESS chk_thold;
PROCEDURE
violacion
de thold
ig
ht
G.
Ja
ASSERT (datoSTABLE(t_hold))
140
En VHDL existe la
sentencia NULL para
indicar que no se hace
nada, y sirve para
realizar una
especificacin ms
completa.
qu
en
od
thold
violacion
de tsetup
tsetup
20
FUNCTION
Fuente: ALTERA
144
24
VHDL: Lenguaje de
descripcin de hardware
XII Asamblea General del ISTEC, UTP, Panam, Noviembre de 2002
Funcin para comparar
strings con dont care
Una funcion se dice pura (pure) si al ser llamada con identicos parametros
devuelve igual valor de retorno; sino (P.Ej: NOW) se dice impure.
02
package mypack is
FUNCTION string_match (a,b: IN std_logic_vector) RETURN BOOLEAN;
end package mypack;
20
146
Subprogramas: los
procedimientos
Si los parmetros son VARIABLE los PROCEDURE slo pueden ser llamados desde
dentro de procesos; si son SIGNAL pueden ser llamados concurrentemente
147
148
Subprogramas
funciones y procedimientos
Co
py
r
ig
ht
G.
Ja
qu
en
od
Definicin de Subprogramas
en un package
PACKAGE std_logic_1164 IS
...
FUNCTION rising_edge (SIGNAL s:std_ulogic) RETURN BOOLEAN;
FUNCTION falling_edge (SIGNAL s:std_ulogic) RETURN BOOLEAN;
...
END std_logic_1164;
Prototipos
Prototipos
Cuerpo
Cuerpo
150
25
VHDL: Lenguaje de
descripcin de hardware
Subprogramas
parmetros de rango abierto
Overload de Operadores
Hot Lab Support Initiative
(3
(3
(6
(6
DOWNTO
DOWNTO
DOWNTO
DOWNTO
0);
0);
0);
0));
Descripcin
Descripcinde
delala
FUNCTION
FUNCTION dentro
dentrode
de
una
unaarquitectura
arquitectura
20
02
151
Cada
Cadallamada
llamadaaamax
maxdevuelve
devuelve
un
unlargo
largodistinto:
distinto:amax
amaxtiene
tiene
largo
largo44yybmax
bmaxlargo
largo77
152
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_unsigned.ALL;
Se incluye el
package donde
se describen los
nuevos
operadores
ig
ht
G.
Ja
ENTITY overload IS
PORT ( a
: IN STD_LOGIC_VECTOR (3 DOWNTO 0);
b
: IN STD_LOGIC_VECTOR (3 DOWNTO 0);
sum : OUT STD_LOGIC_VECTOR (3 DOWNTO 0));
END ENTITY overload;
ARCHITECTURE ejemplo OF overload IS
BEGIN
sumador: PROCESS (a, b)
BEGIN
sum <= a + b;
END PROCESS sumador;
END ARCHITECTURE ejemplo;
153
qu
en
od
BEGIN
amax <= max (a1,a2);
bmax <= max (b1,b2);
END ARCHITECTURE rangoabierto;
154
Bases de VHDL
Co
py
r
Definicin de los nuevos tipos UNSIGNED y SIGNED como array (NATURAL range <>)
of STD_LOGIC
Funciones de Conversin CONV_INTEGER, CONV_UNSIGNED, CONV_SIGNED y
CONV_STD_LOGIC_VECTOR (4 funciones en cada caso) para operandos INTEGER,
STD_ULOGIC, UNSIGNED y SIGNED, con retorno INTEGER, UNSIGNED, SIGNED y
STD_LOGIC_VECTOR respectivamente
Funciones ZERO_EXTEND y SIGN_EXTEND para operandos STD_LOGIC_VECTOR,
con retorno STD_LOGIC_VECTOR
Funciones de Overload:
155
Fuente: ALTERA
Qu incluye std_logic_arith?
Hot Lab Support Initiative
revisar
revisarc:\MAXPLUS2\VHDL93\IEEE\arith.vhd
c:\MAXPLUS2\VHDL93\IEEE\arith.vhdyyarithb.vhd
arithb.vhd!!!!
156
Fuente: ALTERA
26
VHDL: Lenguaje de
descripcin de hardware
Qu incluyen std_logic_signed y
std_logic_unsigned?
02
Por ejemplo:
Por ejemplo:
Fuente: ALTERA
158
ig
ht
G.
Ja
Fuente: ALTERA
160
STD_LOGIC_ARITH, STD_SIGNED
y STD_UNSIGNED
Co
py
r
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_arith.ALL;
largo=5
largo=5bits
bits
largo=6
largo=6bits
bits
161
159
SIGNED'("1010") representa -6
qu
en
od
157
Funciones de Overload de <, >, <=, >=, =, /=, (2 funciones en cada caso) para
operandos STD_LOGIC_VECTOR e INTEGER, con retorno BOOLEAN
revisar
revisarc:\MAXPLUS2\VHDL93\IEEE\signed.vhd
c:\MAXPLUS2\VHDL93\IEEE\signed.vhdyysignedb.vhd,
signedb.vhd,
as
ascomo
comounsigned.vhd
unsigned.vhdyyunsignb.vhd
unsignb.vhd!!!!
20
162
Fuente: SJOHOLM
27
VHDL: Lenguaje de
descripcin de hardware
Conversiones
STD <=> std_logic
02
20
164
Los operadores aritmticos de suma y resta (+) y (-) permiten un alto nivel de
abstraccin en funciones aritmticas, pues el diseador slo describe qu es
lo que desea (behavior) y el compilador resuelve cmo hacerlo (estructura)
b
COMPILADOR
sum
165
166
Co
py
r
LIBRARY
LIBRARY ieee;
ieee;
USE
USE ieee.std_logic_1164.ALL;
ieee.std_logic_1164.ALL;
USE
USE ieee.std_logic_arith.ALL;
ieee.std_logic_arith.ALL;
ig
ht
G.
Ja
sum <= a + b;
Usa
Usaaasu
suvez
veztres
tresfunciones:
funciones:
CONV_INTEGER
CONV_INTEGER(std_logic_vector)
(std_logic_vector)RETURN
RETURN(integer)
(integer)para
parapasar
pasarde
de
STD_LOGIC_VECTOR
STD_LOGIC_VECTORaaUNSIGNED.
UNSIGNED.Definida
Definidaen
enSTD_LOGIC_ARITH
STD_LOGIC_ARITH
CONV_STD_LOGIC_VECTOR
CONV_STD_LOGIC_VECTOR(integer,integer)
(integer,integer)RETURN
RETURN(std_logic_vector)
(std_logic_vector)
para
paralalafuncion
funcionopuesta.
opuesta.Definida
Definidaen
enSTD_LOGIC_ARITH
STD_LOGIC_ARITH
MAXIMUM
MAXIMUM(integer,integer)
(integer,integer)RETURN
RETURN(integer).
(integer).Definida
Definidapor
poreleldiseador
diseador
G.Jaquenod 2002, All Rights Reserved.
qu
en
od
163
Ejemplo de Overload
de un operador aritmtico
ENTITY
ENTITY add_ex1
add_ex1 IS
IS
PORT(a,b:IN
PORT(a,b:IN std_logic_vector(15
std_logic_vector(15 DOWNTO
DOWNTO 0);
0);
c,d:IN
c,d:IN std_logic_vector(15
std_logic_vector(15 DOWNTO
DOWNTO 0);
0);
input:IN
input:IN std_logic;
std_logic;
sum:OUT
std_logic_vector(15
DOWNTO
sum:OUT std_logic_vector(15 DOWNTO 0));
0));
END
END ENTITY
ENTITY add_ex1;
add_ex1;
ARCHITECTURE
ARCHITECTURE behavior
behavior OF
OF add_ex1
add_ex1 IS
IS
BEGIN
BEGIN
PROCESS(a,b,c,d,input)
PROCESS(a,b,c,d,input)
BEGIN
BEGIN
IF
IF input='0'
input='0' THEN
THEN sum
sum <=
<= aa ++ b;
b;
ELSE
sum
ELSE
sum <=
<= cc ++ d;
d;
END
IF;
END IF;
END
END PROCESS;
PROCESS;
END
END ARCHITECTURE
ARCHITECTURE behavior;
behavior;
a
b
c
d
MUX
sum
input
22 sumadores
sumadores
++
11 multiplexer:
multiplexer:
48
48LEs
LEs
22bloques
bloquesde
de16
16LEs
LEsc/u
c/u
usando
usandocadenas
cadenasde
deCarry
Carry
Fuente: ALTERA
ENTITY add_ex1 IS
PORT(a,b,c,d:IN std_logic_vector(15 DOWNTO 0);
input:IN std_logic;
sum:OUT std_logic_vector(15 DOWNTO 0));
END ENTITY add_ex1;
167
a
c
b
d
sum
Bases de VHDL
input
Diseo de
mquinas de estado
11 sumador
sumador
++
22 multiplexer:
multiplexer:
tambin
tambin48
48LEs,
LEs,pero
pero
slo
slo11bloque
bloquede
de16
16LEs
LEs
usa
usacadenas
cadenasde
deCarry
Carry
Fuente: ALTERA
168
28
VHDL: Lenguaje de
descripcin de hardware
Ejemplos: FSMs
Hot Lab Support Initiative
02
ARCHITECTURE a OF state_machine IS
TYPE STATE_TYPE IS (s0,s1); SIGNAL state: STATE_TYPE;
BEGIN
PROCESS (clk,reset) BEGIN
IF reset = '1' THEN state <= s0;
s0/0
ELSIF (clk'EVENT AND clk = '1') THEN
CASE state IS
dont
WHEN s0=> state <= s1;
1
care
WHEN s1=> IF input='1' THEN state <= s0;
ELSE state <= s1; END IF;
END CASE;
s1/1
END IF;
END PROCESS;
output <= '1' WHEN state = s1 ELSE '0';
0
END a;
20
Definir dos objetos que almacenan los estado actual y futuro como
seales de ese tipo predefinido:
SIGNAL filter : tipo_de_estado;
171
172
Fuente: ALTERA
Fuente: ALTERA
ARCHITECTURE a OF semaforo IS
TYPE modo_semaforo IS (stop, prepare, pase, alerta, nocturno);
ATTRIBUTE ENUM_ENCODING : STRING;
SIGNAL estado : modo_semaforo;
ATTRIBUTE ENUM_ENCODING OF modo_semaforo:TYPE IS 100 110 001 010 000";
BEGIN
PROCESS (clk) BEGIN
ATENCIN:
ATENCIN:
IF clk'EVENT AND clk = '1' THEN
ENUM_ENCODING
ENUM_ENCODING
CASE estado IS WHEN stop
=> estado <= prepare;
es
esun
unatributo
atributoslo
slo
WHEN prepare => estado <= pase;
interpretado
WHEN pase
=> estado <= alerta;
interpretadopor
porelel
WHEN alerta
=>
MAX+plus
IIIIVHDL!!
MAX+plus
VHDL!!
IF fotocelda ='1' THEN estado<=stop;
Cada
Cadaherramienta
herramienta
ELSE estado<=nocturno;
EDA
END IF;
EDAsuele
sueledefinir
definir
WHEN nocturno => estado <= alerta;
atributos
atributospropios
propios
END CASE;
para
controlar
elel
para
controlar
END IF;
proceso
procesode
desntesis!!
sntesis!!
END PROCESS;
WITH estado SELECT (rojo,amarillo,verde) <=
('1','0','0') WHEN stop,('1','1','0') WHEN prepare,('0','0','1') WHEN pase,
('0','1','0') WHEN alerta,('0','0','0') WHEN nocturno;
END ARCHITECTURE a;
173
Co
py
r
ig
ht
G.
Ja
Fuente: ALTERA
MAX+plus II HELP
170
qu
en
od
ARCHITECTURE a OF enumfsm IS
TYPE count_state is (cero, uno, dos, tres); SIGNAL present, next: count_state;
ATTRIBUTE ENUM_ENCODING: STRING;
ATTRIBUTE ENUM_ENCODING OF count_state : TYPE IS "11 01 10 00";
BEGIN
Slo vale para MAX+plus II VHDL!!
PROCESS (present, ud) BEGIN
CASE present IS
WHEN cero => IF (ud='0') THEN next <= uno;
ELSE next <= tres;
WHEN uno => IF (ud='0') THEN next <= dos;
ELSE next <= cero;
WHEN dos=>
IF (ud='0') THEN next <= tres;
ELSE next <= uno;
WHEN tres => IF (ud='0') THEN next <= cero;
ELSE next <= dos;
END CASE;
END PROCESS;
PROCESS BEGIN WAIT UNTIL clk = '1'; present <=
END a;
174
lsb
lsb
lsb
lsb
lsb
lsb
lsb
lsb
<=
<=
<=
<=
<=
<=
<=
<=
'0';
'1';
'1';
'0';
'0';
'1';
'1';
'0';
msb
msb
msb
msb
msb
msb
msb
msb
<=
<=
<=
<=
<=
<=
<=
<=
'0';
'1';
'0';
'0';
'1';
'0';
'1';
'1';
END IF;
END IF;
END IF;
END IF;
29
VHDL: Lenguaje de
descripcin de hardware
176
Nivel TOP(Estructural)
Nivel 1
177
Nivel 2
Nivel 3
Nivel 3
Nivel 2
Nivel 3
Nivel 3
Nivel 3
Nivel 3
Nivel 3
Fuente: ALTERA
178
Counters
Adders
State Machines
Fuente: ALTERA
Nivel 2
Nivel 3
Nivel 3
Nivel 3
Counter
State
Machine
Adder
LFSR
STYLE=NORMAL
STYLE=NORMAL
STYLE=FAST
STYLE=FAST
STYLE=WYSIWYG
STYLE=WYSIWYG
Nivel 2
Nivel 3
GLOBAL_STYLE=NORMAL
GLOBAL_STYLE=NORMAL
ASSIGN
ASSIGN TIMING
TIMING REQ
REQ
FMAX=35MHz
FMAX=35MHz
Nivel 1
179
......
Nivel 2
.
.
.
.
Co
py
r
Counters
Adders
State Machines
ig
ht
G.
Ja
Nivel 1
Nivel 3
Counters
Adders
State Machines
Componente n
(Behavioral)
Una jerarqua tipo rbol (diseo Top Down) es una mejor solucin
Nivel 2
Componente 2
(Behavioral)
qu
en
od
Herramientas para
el diseo jerrquico
Componente 1
(Behavioral)
20
Bases de VHDL
175
02
STYLE=FAST
STYLE=FAST
ASSIGN
ASSIGN CLIQUE
CLIQUE
Fuente: ALTERA
180
Fuente: ALTERA
30
VHDL: Lenguaje de
descripcin de hardware
02
top.vhd
entity-architecture top
component mid_a
component mid_b
bottom_a.vhd
entity-architecture bottom_a
181
20
mid_b.vhd
entity-architecture mid_b
component bottom_a
component bottom_b
bottom_b.vhd
entity-architecture bottom_b
Fuente: ALTERA
qu
en
od
mid_a.vhd
entity-architecture mid_a
component bottom_a
182
ALTERA MEGACOREs:
Signal Processing & Telecom: cascadable adaptive FIR, Filter Library (FIR & IIR), Rank
ig
ht
G.
Ja
183
Communications: HDLC Controller (byte & bit oriented), Data encoder/decoder, Packet
over SONET (POS) Controller, SONET Interface, ATM Receive Processor, Generador de
tonos (DTMF, call progress, etc.), UTOPIA Level_2, 10/100 Ethernet MAC, Cell
Delineation (ATM sobre SONET o SDH)
PCI: 32bit/33MHz, 32bit/66MHz, 64bit 66MHz Master, Target, ambos, Bridge, Arbiter
Otros: CAN, IEEE1394, IEEE1284, I2C, DAI (Digital Audio Interface), USB
Fuente: ALTERA
184
Co
py
r
Microprocesadores: 49410, 8051, RAW8051, 8052, 2901, 2910, 6502, Z80, 6402, 6850,
8237,8251,8254, 8255, 8259, 16450, 165550, 6850,29116, SDRAM, DMA, PowerPC
Fuente: ALTERA
185
186
Fuente: ALTERA
31
VHDL: Lenguaje de
descripcin de hardware
componente
componenteen
enlalaarquitectura
arquitectura
ARCHITECTURE a OF practica IS
SIGNAL conta: STD_LOGIC_VECTOR (0 TO prescaler_size-1);
invocacin
invocacin
BEGIN
prescaler : LPM_COUNTER -- instanciacin del componente
GENERIC MAP (LPM_WIDTH => prescaler_size)
PORT MAP (clock => clk, q => conta);
BEGIN
u1 : tollv
Nombre
Nombre de
de
la
la Instancia
Instancia
Ejemplos:
un Full-Adder estilo RTL
c_in
a
b
sum
Nombre
Nombre del
del Componente
Componente
Fuente: ALTERA
Fuente: DUECK
190
Co
py
r
191
ig
ht
G.
Ja
Declaracin
Declaracin del
del
ARCHITECTURE tolleab_arch OF tolleab IS
Componente
Componente
COMPONENT tollv
PORT( clk : IN STD_LOGIC;
cross,nickel,dime, quarter:IN STD_LOGIC;
green,red:OUT STD_LOGIC;
sout:OUT STATE_TYPE;
Asociacin
Asociacin
state_in:IN STATE_TYPE);
Posicional
Posicional
END COMPONENT;
189
declaracin
declaracinusando
usando
188
Invocacin de Componentes:
mapeo por asociacin posicional
USE lpm.lpm_components.ALL;
un
unPackage
Package
ENTITY practica IS
GENERIC (prescaler_size: INTEGER := 23;...)
PORT ( clk: IN STD_LOGIC;.);
no
END ENTITY practica;
noes
esnecesario
necesariodeclarar
declararalal
187
LIBRARY lpm;
qu
en
od
02
20
192
32
VHDL: Lenguaje de
descripcin de hardware
02
20
193
194
qu
en
od
PORT MAP(a,b,c,..,0,...);
PORT MAP(...,<port del componente> =>0,...);
ig
ht
G.
Ja
Una especificacin puede ser toda behavioral, pero en un diseo a ser sintetizado
hay que pensar en qu resultar en el silicio
Pensar el diseo de modo de aprovechar al mximo los lmites de fan-in, los modos
de operacin y las prestaciones especiales de la familia a usar!
Pensar sincrnico!
Cuidado con
el OverConstraint!
!!
Evitar los gated-clocks, tratando de usar pocos relojes globales (idealmente slo uno)
y aprovechar el ENABLE de los flipflops
195
Co
py
r
196
Un diseo recin
termina cuando el
equipo de serie
est funcionando
OK en lo del
usuario final!!
No antes!!!
!!
!!
197
198
33
VHDL: Lenguaje de
descripcin de hardware
Evaluar cuantos flipflops se han especificado como seales a las que se asigna
valores en procesos sensibles a una seal de reloj
Ver en los archivos de reporte cuntos flipflops ha colocado el compilador
Analizar de dnde surgen esos nuevos registros
!!
En vez de definir estados por enumeracin a los que el compilador asigne un valor
cualquiera, analizar si los mismos registros que sirven como memoria de estado no
pueden a su vez ser la salida sincrnica de la FSM. Eso produce circuitos ms
simples, ms rpidos, y con menos glitches.
20
02
LOGICA
DE NUEVO
ESTADO
DECOD
qu
en
od
199
200
Lgica
combinatoria
Lgica
combinatoria
D Q
Ck
CL
D Q
Ck
CL
202
Co
py
r
FF1
Lgica
combinatoria
FF2
Lgica
combinatoria
D Q
Ck
CL
T0
FF3
Lgica
combinatoria
D Q
Ck
CL
T1~2xT0
FFx
D Q
Ck
CL
Lgica
combinatoria
T1~T0
T2~T0
D Q
Ck
CL
Lgica
combinatoria
T0
Lgica
combinatoria
D Q
Ck
CL
T1~T0/2
Lgica
combinatoria
Lgica
combinatoria
D Q
Ck
CL
T2~T0/2
T3~T0
D Q
Ck
CL
Pin
True Path
D Q
Ck
CL
FFy
D Q
Ck
CL
False Path
203
Lgica
combinatoria
T2~T0
Para sincerar las evaluacin de Clock Performance debe notificarse este hecho al
compilador usando constraints de MultiCycle path
D Q
Ck
CL
D Q
Ck
CL
Si se usan flipflops con Enable y se sabe que (por ejemplo) FF1 y FF2 slo se habiltan en
los ciclos pares de la seal de reloj, el tiempo T1 puede ser el doble de lento que T0 o T2
True Path
Lgica
combinatoria
D Q
Ck
CL
T0
ig
ht
G.
Ja
D Q
Ck
CL
Lgica
combinatoria
Lgica
combinatoria
204
A
B
F1
F2
34
VHDL: Lenguaje de
descripcin de hardware
delay
02
T1
Bases de VHDL
delay
delay
20
ser IMPORTANTSIMAS
Tb << T1
qu
en
od
206
ig
ht
G.
Ja
208
Co
py
r
209
25
Fuente: SJOHOLM
Resolucin de asignaciones
demoradas
20
15
Cada vez que cambia reloj, en la cola de eventos se prepara un nuevo cambio
al valor negado para 50ns despues; y como esta asignacion es realizada solo
cuando hay eventos en reloj, recien a los 50ns del reloj de simulacion sera
reevaluada, cambiando y preparando un nuevo evento para 50 ns, .
10
Recin
Recinen
enVHDL93!
VHDL93!
207
El tiempo en la asignacin
simple a seales
salidas
210
35
VHDL: Lenguaje de
descripcin de hardware
process begin
s <= transport 1 after 20ns;
s <= transport 0 after 10ns;
wait;
end process;
El modelo transport
propaga la expresin a la
seal, sin modificaciones
El modelo inertial filtra
cambios de duracin inferior
a un mnimo
10ns
0
20ns
1
tiempo
valor
20ns
1
10ns
0
C<= 0,
1 AFTER 10 ns,
0 AFTER 12 ns,
1 AFTER 20 ns,
0 AFTER 25 ns,
1 AFTER 40 ns,
0 AFTER 57;
A1 <= INERTIAL C
AFTER 10 ns;
tiempo
valor
process begin
s <= 1 after 20ns;
s <= 0 after 10ns;
wait;
end process;
20ns
1
A2 <= TRANSPORT C
AFTER 10 ns;
10ns
0
A3 <= REJECT 4 ns
INERTIAL C
AFTER 10 ns;
212
Ai
02
process begin
s <= 0 after 10ns;
s <= 1 after 20ns;
wait;
end process;
tiempo
valor
20
process begin
s <= transport 0 after 10ns;
s <= transport 1 after 20ns;
wait;
end process;
Ejemplos de INERTIAL y
TRANSPORT
10
20
qu
en
od
211
30
40
50
60
70
Fuente: SJOHOLM
ig
ht
G.
Ja
Bases de VHDL
Ejemplos combinatorios
213
Co
py
r
214
215
SI
NO
OF mayoria IS
vot_b)
vot_c)
vot_c);
rtl ;
Fuente: DUECK
Ejemplos: Trascodificador
Binario a GRAY
NO
Los cdigos GRAY son muy usados cuando en base a un cdigo desea
hacerse una decodificacin ausente de glitches.
216
36
VHDL: Lenguaje de
descripcin de hardware
0000=0
0000=0
0001=1
0001=1
0010=2
0011=3
0011=3
0010=2
0100=4
0110=6
0101=5
0111=7
0100=4
1000=8
1100=C
1001=9
1101=D
1010=A
1111=F
1011=B
1110=E
1100=C
1010=A
1101=D
1011=B
1110=E
1001=9
1111=F
1000=8
Ejemplo: comparador de
magnitud de N bits
ig
ht
G.
Ja
220
Co
py
r
sel(2)
cantidad de
desplazamientos
En vez de 16 Mux
hago los shifts por
etapas: 1, 2 4 y 8
shifts!
ARCHITECTURE a OF bsder IS
SIGNAL shf1,shf2,shf4: bit_vector (15 DOWNTO 0);
BEGIN
shf1 <= din WHEN sel(0)='0'
ELSE '0' & din (15 DOWNTO 1);
shf2 <= shf1 WHEN sel(1)='0'
sel(0) sel(1)
ELSE B"00" & shf1 (15 DOWNTO 2);
shf4 <= shf2 WHEN sel(2)='0'
ELSE B"0000" & shf2 (15 DOWNTO 4);
dout <= shf4 WHEN sel(3)='0'
ELSE B"00000000" & shf4 (15 DOWNTO 8);
END ARCHITECTURE a;
221
dato de salida
ENTITY bsder IS
PORT (din: IN
sel: IN
dout: OUT
END ENTITY bsder
Barrel Shifter
> = <
7485
218
219
20
GRAY
0101=5
0111=7
ARCHITECTURE a OF mi7485 IS
BEGIN PROCESS (a,b,amaybi,aigualbi,amenbi)
> = <
VARIABLE compare : STD_LOGIC_VECTOR(2 downto 0);
BEGIN
compare := 000;
IF a=b THEN
IF aigualbi=1 THEN compare(1):= 1; END IF;
> = <
IF amaybi=1
THEN compare(2):= 1; END IF;
IF amenbi=1
THEN compare(0):= 1; END IF;
END IF;
IF a<b THEN compare(0):= 1; END IF;
IF a>b THEN compare(2):= 1; END IF;
END IF;
amaybo <= compare(2); aigualbo <= compare(1); amenbo <= compare(0);
END PROCESS;
END a;
dato de entrada
217
BINARIO
0110=6
ARCHITECTURE a OF bin2gray IS
BEGIN
gray (ancho) <= bin (ancho);
gray (ancho-1 DOWNTO 1) <=
bin(ancho-1 DOWNTO 1)
XOR bin(ancho DOWNTO 2);
END a;
02
GRAY
qu
en
od
ENTITY bin2gray IS
GENERIC (ancho : INTEGER := 8);
PORT(
bin : IN BIT_VECTOR (ancho DOWNTO 1);
gray : OUT BIT_VECTOR (ancho DOWNTO 1));
END ENTITY bin2gray;
Binario
ARCHITECTURE a OF brder IS
SIGNAL shf1,shf2,shf4: bit_vector
BEGIN
shf1 <= din WHEN sel(0)='0 ELSE
shf2 <= shf1 WHEN sel(1)='0 ELSE
shf4 <= shf2 WHEN sel(2)='0 ELSE
dout <= shf4 WHEN sel(3)='0 ELSE
END ARCHITECTURE a;
DOWNTO 1);
& shf1(15 DOWNTO 2);
& shf2(15 DOWNTO 4);
& shf4(15 DOWNTO 8);
sel(3)
222
37
VHDL: Lenguaje de
descripcin de hardware
XII Asamblea General del ISTEC, UTP, Panam, Noviembre de 2002
Operacin de un
Barrel Shifter Signed
20
226
Recreando instrucciones de
SHIFT: SRL
Co
py
r
Fuente: ALTERA
MAX+plus II HELP
ig
ht
G.
Ja
EPF10K10LC84-3
224
Recreando instrucciones de
SHIFT: SLL
qu
en
od
02
223
NINGUNA!
227
Bases de VHDL
Uso de elementos de memoria
228
38
VHDL: Lenguaje de
descripcin de hardware
A
B
Giro Horario
230
A0
B0
Giro Horario
A0
B1
232
Co
py
r
Un algoritmo ms eficiente una slo N+1 macroceldas, que en base al bit actual Gi, al
previo Gi-1 y a una funcin Di-1 que viene desde la etapa previa calcula el siguiente Gi y
la funcin Di
Excepto la primer etapa (generacin de D-1) y la ltima etapa, las dems etapas tienen
una arquitectura como sigue
Ei
Evaluar los posibles usos de los modos de operacion
ARCHITECTURE a OF graycont IS
SIGNAL d: BIT_VECTOR (NBITS-1 downto 0); SIGNAL qt: BIT_VECTOR (NBITS downto 0);
BEGIN
Ci
T Q Gi
clk
Di
TQ
clk
TQ
clk
TQ
clk
D0
D1
D2
Q0
Q1
G.Jaquenod 2002, All Rights Reserved.
TQ
clk
TQ
clk
DN-1
Q2
QN-1
QN
Resultados
de la
simulacin
funcional
usando
MAX+plus II
Giro Antihorario
Giro Antihorario
El uso de LPMs
simplifica el diseo y
casi siempre da
resultados de sntesis
mucho ms eficientes
En este caso el uso
de recursos baja de
26 LEs a slo 16 LEs!
ig
ht
G.
Ja
231
ARCHITECTURE a OF shaftlpm IS
BEGIN
shaftcnt: lpm_counter GENERIC MAP (
LPM_WIDTH => 9, LPM_MODULUS =>360)
PORT MAP (clock => a, updown =>b,
sclr => z, q => pos);
END a;
Giro Antihorario
20
Giro Horario
A
B
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
LIBRARY lpm;
USE lpm.lpm_components.ALL;
qu
en
od
02
Ciclo
Cdigo GRAY
Dummy qt0
Ciclo
Cdigo GRAY
Dummy qt0
0000=0
1100=C
0001=1
1101=D
0011=3
1111=F
0010=2
1110=E
0110=6
1010=A
0111=7
1011=B
0101=5
1001=9
0100=4
1000=8
(others =>'0');
FOR i IN 1 TO NBITS-1 LOOP qt(i) <= qt(i) XOR (qt(i-1) AND d(i-1)); END LOOP;
qt(NBITS) <= qt(NBITS) XOR ( (qt(NBITS-1) OR qt(NBITS)) AND d(NBITS-1));
END IF;
END ARCHITECTURE a;
233
234
39
VHDL: Lenguaje de
descripcin de hardware
235
CL
Q
CL
CL
Q
CL
ARCHITECTURE a OF johnson IS
BEGIN
sync: PROCESS (reloj,init)
BEGIN
IF init=1' THEN q <=(others =>'0');
ELSIF reloj'EVENT AND reloj='1' THEN
q(n DOWNTO 2) <= q (n-1 DOWNTO 1);
q(1) <= NOT (q(n));
END IF;
END PROCESS sync;
END ARCHITECTURE a;
xorout : BIT;
FOR i IN 1 TO LFSRTAPS LOOP if (mask (i)='1') THEN temp := temp XOR fftaps(i); END IF; END LOOP;
xorout <= NOT (temp);
END PROCESS p1;
taps <= fftaps;
END ARCHITECTURE a;
237
238
x1
x2
x3 x4
Co
py
r
X2
X3
X11
din
xpass
dout
rdy
CRC_OK
239
240
x16
din
dout
Fuente: 74F401 en
www.fairchildsemi.com
Generador/testeador de CRC-16
Hot Lab Support Initiative
ARCHITECTURE a OF crcshft IS
CONSTANT mask: std_logic_vector (15 DOWNTO 0):= X"8005";
SIGNAL feedback: std_logic;
SIGNAL shf,inp : std_logic_vector (15 DOWNTO 0);
BEGIN
feedback <= (din XOR shf(15)) AND xpass;
inp (0) <= feedback;
l0: FOR i IN 1 TO 15 GENERATE
inp(i) <= (feedback AND mask(i)) XOR shf(i-1);
END GENERATE l0;
PROCESS (reloj) BEGIN
IF reloj = '1' THEN
IF init='1' THEN shf <= (others =>'1'); ELSE shf <= inp;
END IF;
END IF;
END PROCESS;
zero <= '1' WHEN shf = X"0000" ELSE '0';
dout <= shf(15) WHEN xpass='0' ELSE din;
END a;
x6
Tx/Rx
x5
X12
reloj
init
Al
Alser
serfuncin
funcinde
de22oo44
realimentaciones,
realimentaciones,bastan
bastanNNelementos
elementos
lgicos
para
un
LFSR
lgicos para un LFSRde
deNNbits
bits
reloj
init
Generador/testeador de CRC
DQ
Generador/testeador de CRC
DQ
ig
ht
G.
Ja
DQ
x0
SUBTYPE mascara IS BIT_VECTOR (16 DOWNTO 1); TYPE tabla IS ARRAY (3 TO 16) OF mascara;
DQ
CRC-16: 1+X2+X15+X16
ENTITY lfsrn IS GENERIC (LFSRTAPS : INTEGER RANGE 3 TO 16 :=3); -- cantidad de etapas, entre 3 y 16
SIGNAL
236
LFSR genrico, de 3 a 16
etapas
Realimentacion desde
2 etapas
LUT
LUT
CL
LUT
20
qu
en
od
En diseos de microelectrnica
de RF suelen ser usados como
prescalers en las primeras
etapas, dada su alta simplicidad
circuital y la rpida velocidad de
operacin
LUT
02
Contadores Johnson
Uso 22 LEs:
16 para shift
1 para MUX dout
4 para zero
40
VHDL: Lenguaje de
descripcin de hardware
Generador/testeador de CRC-16
Porqu usa 3
LIBRARY ieee; USE ieee.std_logic_1164.ALL;
Uso
Uso38
38LEs:
LEs:
LEs para ena?
LIBRARY ieee; USE ieee.std_logic_unsigned.ALL;
22
crcshift
22para
paracrcshift
LIBRARY lpm; USE lpm.lpm_components.ALL;
99para
el
contador
para el contador
ENTITY crc16 IS PORT (
33para
ena
paraena
init,reloj,txrx,din: IN std_logic;
33para
xpass
paraxpass
dout,nrdy,crc_ok: OUT std_logic);
END crc16;
ARCHITECTURE a OF crc16 IS
CONSTANT NMSG : INTEGER :=30; -- largo del mensaje
COMPONENT crcshift PORT (dout,zero: OUT std_logic;
din,init,xpass,reloj: IN std_logic); END COMPONENT;
SIGNAL xpass,ena,cntval: std_logic; SIGNAL conta: std_logic_vector (8 DOWNTO 0);
SIGNAL crcx: std_logic_vector (15 DOWNTO 0);
BEGIN
shift: crcshift PORT MAP
(dout=>dout,zero=>crc_ok,din=>din,init=>init,xpass=>xpass,reloj=>reloj);
shaftcnt: lpm_counter GENERIC MAP (LPM_WIDTH => 9)
PORT MAP (clock => reloj, sclr =>init, cnt_en => ena,q => conta);
cntval <= '1' WHEN (conta < NMSG) ELSE '0'; xpass <= '1' WHEN txrx='0' ELSE cntval;
ena
<= '1' WHEN (conta < NMSG+15) ELSE '0';
nrdy
<= ena;
END a;
X8
X7
X7
X6
X6
X5
T=8
243
R15
X87
X65
X43
X21
X76
X54
X32
X1
R14
X87
R13
X76
R12
X65
R11
X5
X4
R10
X4
X3
R9
X3
X2
R8
Q16
X2
X1
R7
Q15
X1
R11
X54
R10
R6
Q14
R5
Q13
R4
Q12
R3
Q11
R2
R1
Q10
Q9
X8
X7
X6
X5
X4
X3
X2
X1
X43
R9
R8
R7
R6
R5
R4
R3
R2
R1
X32
Q16
X21
Q15
X1
Q14
Q13
Q12
Q11
Q10
Q9
Xf
R11
R10
R9
R8
R7
R6
R5
R4
R3
R2
R1
Q12
Q11
Q10
Q9
Q8
Q7
Q6
Q5
Q4
Q3
Q2
Q1
T=1
Q1
D1
Q16
Q15
Q1
D1
Q14
Q13
Q12
Q11
Q10
Q9
Q8
Q7
Q6
Q5
Q4
Q3
Q2
Q1
D1
Q1
Di
Q16
Q2
Q1
D1
D2
Q15
Q1
Di
Q14
Q13
Q12
Q11
Q10
Q9
Q8
Q7
Q6
Q5
Q4
Q3
Q2
Q1
D1
D2
Q2
Q1
D1
D2
T8
R16
R15
R14
R13
R12
R11
R10
R9
R8
R7
R6
R5
R4
R3
R2
R1
X87,X65
X43,X21
X76,X54
X32,X1
X87
X76
X65
X54
X43
X32
Q16
X21
Q15
X1
Q14
Q13
Q12
Q11
Q10
Q9
Xf
D[8..1]
244
Co
py
r
G.Jaquenod 2002, All Rights Reserved.
X76
X54
X32
X1
X87
X65
X43
X21
Xf
R16
R15
R14
R13
R12
R11
R10
R9
R8
R7
R6
R5
R4
R3
R2
R1
Q[16..1]
245
20
R12
Q13
Viendo que un elemento lgico tiene 4 entradas, y que cada Xi requiere dos
variables, pueden definirse trminos Xij = ( Xi xor Xj ), solucionables con un
nico LE, y llamando Xf = ( X87 xor X65 xor X43 xor X21 ), queda:
R16
R13
Q14
din
ARCHITECTURE a OF shift_store IS
SIGNAL regshf : STD_LOGIC_VECTOR (largo-1 DOWNTO 0);
store
BEGIN
PROCESS (reloj) BEGIN
reloj
IF reloj=1 THEN
regshf (largo-1 DOWNTO 1)<=regshf (largo-2 DOWNTO 0);
regshf (0)<=din;
END IF;
END PROCESS;
PROCESS (store) BEGIN
IF store=1 THEN data <= regshf; END IF;
END PROCESS;
dout
dout <= regshf (largo-1);
END a;
246
data
X7
X6
X5
X4
X3
X2
X1
R14
Q15
ig
ht
G.
Ja
T=8
X8
X7
X6
X5
X4
X3
X2
X1
R12
R15
Q16
242
R16
T=0
T=2
R14
dout
R15
Q1
di
R16
reloj
init
qu
en
od
241
Q16 Q15
02
41
VHDL: Lenguaje de
descripcin de hardware
Recuperador de reloj
behavioral
e2
e3
e7
e6
e<=
e<=
e<=
e<=
e<=
e<=
e<=
X"04";
X"08";
X"10";
X"20";
X"40";
X"80";
X"01";
END
END
END
END
END
END
END
ARCHITECTURE a OF recupclka IS
SIGNAL rxdly,edge : bit;
SIGNAL e: bit_vector (8 DOWNTO 1);
BEGIN
PROCESS (rxck_8x,nreset) IS
BEGIN
IF nreset='0' THEN e <= X"00";
ELSIF rxck_8x'EVENT and rxck_8x='1' THEN
rxdly <= rxd; -- rxd demorado un ciclo
edge <= rxdly XOR rxd; -- detector de transicion
e(1) <= NOT((e(8) AND NOT(edge)) OR (e(7) AND edge));
e(2) <= NOT(e(1)) OR ((e(8) OR e(2)) AND edge);
e(3) <= (e(2) AND NOT(edge)) OR (e(3) AND edge);
e(4) <= (e(3) AND NOT(edge)) OR (e(4) AND edge);
e(5) <= (e(4) AND NOT(edge));
e(6) <= (e(5) AND NOT(edge));
e(7) <= (e(6) AND NOT(edge)) OR (e(5) AND edge);
e(8) <= (e(7) AND NOT(edge)) OR (e(6) AND edge);
END IF;
END PROCESS;
rxck <= e(4);
END ARCHITECTURE a;
e4
IF;
IF;
IF;
IF;
IF;
IF;
IF;
e5
el flanco se
engancha ac
Estediseo,
diseo,compilado
compilado
Este
conMAX+Plus
MAX+PlusII,
II,
con
requiere32
32LEs
LEs
requiere
247
248
LIBRARY
LIBRARY ieee;
ieee; USE
USE ieee.std_logic_1164.ALL;
ieee.std_logic_1164.ALL;
LIBRARY
LIBRARY ieee;
ieee; USE
USE ieee.std_logic_unsigned.ALL;
ieee.std_logic_unsigned.ALL;
MULTIPLICANDO
MULTIPLICADOR
ARCHITECTURE
ARCHITECTURE aa OF
OF cysel64
cysel64 IS
IS
SIGNAL
SIGNAL slo,shi0,shi1:
slo,shi0,shi1:
std_logic_vector(33
std_logic_vector(33 DOWNTO
DOWNTO 1);
1);
BEGIN
BEGIN
slo
<=
'0'&
a(32
DOWNTO
1)
slo <= '0'& a(32 DOWNTO 1)
++ b(32
b(32 DOWNTO
DOWNTO 1)
1) ++ cin;
cin;
shi0
<=
'0'&
a(64
DOWNTO
33)
shi0 <= '0'& a(64 DOWNTO 33)
++ b(64
b(64 DOWNTO
DOWNTO 33);
33);
shi1
shi1 <=
<= '0'&
'0'& a(64
a(64 DOWNTO
DOWNTO 33)
33)
++ b(64
DOWNTO
33)
+
b(64 DOWNTO 33) + '1';
'1';
ACUMULADOR
Hacerlo
genrico!
ENTITY
ENTITY seradd
seradd IS
IS PORT
PORT ((
a,b,reloj,init:IN
a,b,reloj,init:IN BIT;
BIT; s:OUT
s:OUT BIT);
BIT);
END
END seradd
seradd ;;
ARCHITECTURE
ARCHITECTURE aa OF
OF seradd
seradd IS
IS
SIGNAL
SIGNAL c:
c: BIT;
BIT;
BEGIN
BEGIN
PROCESS
PROCESS (reloj,init)
(reloj,init) BEGIN
BEGIN
IF
IF (init=1)
(init=1) THEN
THEN s<=0;
s<=0; c<=0;
c<=0;
ELSIF
ELSIF relojEVENT
relojEVENT AND
AND reloj=1
reloj=1 THEN
THEN
ss <=
<= aa XOR
XOR bb XOR
XOR c;
c;
cc <=
<= (a
(a AND
AND b)
b) OR
OR (a
(a AND
AND c)
c) OR
OR (b
(b AND
AND c);
c);
END
END IF;
IF;
END
END PROCESS;
PROCESS;
END
END a;
a;
a
b
A
B
C
D Q
Ck
CL
S
c0
reloj
e4
Fuente: R.Andraka.
e5
Pensando en la sntesis
obtengo los siguientes
beneficios:
Bajo de 32 LEs a slo 10 LEs
Anda mucho ms rpido
Evito metaestabilidades
Fuerzo el uso de ONE-HOT!!
252
AH
BH
N/2 Adder
AH
N/2 Adder
Ci
Co
BH
Co
AL
0
Ci
BL
N/2 Adder
Co
0
SH
SL
Ejemplos:
Sumador/restador Serial
ARCHITECTURE
ARCHITECTURE aa OF
OF seraddsub
seraddsub IS
IS
SIGNAL
SIGNAL c:
c: BIT;
BIT; --- carry/borrow
carry/borrow
BEGIN
BEGIN
PROCESS
PROCESS (reloj,init)
(reloj,init) BEGIN
BEGIN
IF
IF (init=1)
(init=1) THEN
THEN s<=0;
s<=0; c<=0;
c<=0;
ELSIF
ELSIF relojEVENT
relojEVENT AND
AND reloj=1
reloj=1 THEN
THEN
ss <=
<= aa XOR
XOR bb XOR
XOR c;
c;
IF
IF sr=1
sr=1
THEN
-sr=1
indica
suma
THEN -- sr=1 indica suma
cc <=
<= (m
(m AND
AND s)
s)
OR
OR (m
(m AND
AND c)
c)
OR
OR (s
(s AND
AND c);
c);
ELSE
ELSE --- sr=0
sr=0 indica
indica resta
resta
cc <=
<= (NOT(m)
(NOT(m) AND
AND s)
s)
OR
(NOT(m)
OR (NOT(m) AND
AND c)
c)
OR
OR (s
(s AND
AND c);
c);
END
END IF;
IF;
END
END IF;
IF;
END
END PROCESS;
PROCESS;
END
END a;
a;
CSA
e6
ENTITY
ENTITY seraddsub
seraddsub IS
IS PORT
PORT ((
m,s,sr,reloj,init:IN
m,s,sr,reloj,init:IN BIT;
BIT; s:OUT
s:OUT BIT);
BIT);
END
END seraddsub;
seraddsub;
D Q
Ck
CL
init
e3
e7
Cout
s(32
s(32 DOWNTO
DOWNTO 1)
1) <=
<= slo(32
slo(32 DOWNTO
DOWNTO 1);
1);
s(64
s(64 DOWNTO
DOWNTO 33)
33) <=
<=
shi0
shi0 (32
(32 DOWNTO
DOWNTO 1)
1) WHEN
WHEN slo(33)='0'
slo(33)='0'
ELSE
shi1
(32
DOWNTO
1);
ELSE shi1 (32 DOWNTO 1);
cout
<=
shi0
(33)
WHEN
slo(33)='0'
cout <= shi0 (33) WHEN slo(33)='0'
ELSE
ELSE shi1
shi1 (33);
(33);
END
END a;
a;
250
Co
py
r
e2
Ejemplos:
sumador Carry-select
LIBRARY
LIBRARY ieee;USE
ieee;USE ieee.std_logic_1164.ALL;
ieee.std_logic_1164.ALL;
LIBRARY
LIBRARY ieee;USE
ieee;USE ieee.std_logic_unsigned.ALL;
ieee.std_logic_unsigned.ALL;
ENTITY
ENTITY cysel64
cysel64 IS
IS
PORT
(a,b:IN
PORT (a,b:IN std_logic_vector(64
std_logic_vector(64 DOWNTO
DOWNTO 1);
1);
s:
OUT
std_logic_vector(64
s: OUT std_logic_vector(64 DOWNTO
DOWNTO 1);
1);
cin:IN
std_logic;
cin:IN std_logic; cout:OUT
cout:OUT std_logic);
std_logic);
END
cysel64;
END cysel64;
ig
ht
G.
Ja
CONTROL
249
251
SUMADOR
e8
ENTITY
ENTITY iteramult
iteramult IS
IS PORT
PORT ((
mr,mo:IN
mr,mo:IN std_logic_vector
std_logic_vector (8
(8 DOWNTO
DOWNTO 1);
1);
init,reloj:
init,reloj: IN
IN std_logic;
std_logic; rdy:OUT
rdy:OUT std_logic;
std_logic;
res:
res: BUFFER
BUFFER std_logic_vector
std_logic_vector (16
(16 DOWNTO
DOWNTO 1));
1));
END
END ENTITY
ENTITY iteramult
iteramult ;;
ARCHITECTURE
ARCHITECTURE aa OF
OF iteramult
iteramult IS
IS
BEGIN
BEGIN
PROCESS
PROCESS (reloj)
(reloj) IS
IS
VARIABLE
VARIABLE cnt
cnt :: INTEGER
INTEGER RANGE
RANGE 00 TO
TO 8;
8;
VARIABLE
VARIABLE moshf:std_logic_vector(16
moshf:std_logic_vector(16 DOWNTO
DOWNTO 1);
1);
VARIABLE
VARIABLE mrshf:std_logic_vector(8
mrshf:std_logic_vector(8 DOWNTO
DOWNTO 1);
1);
BEGIN
BEGIN
IF
IF reloj='1'
reloj='1' THEN
THEN
IF
IF init
init == '1'
'1' THEN
THEN moshf:=
moshf:= X"00"
X"00" && mo;
mo; cnt:=0;
cnt:=0;
mrshf
mrshf :=
:= mr;
mr; res
res <=
<= X"0000";rdy
X"0000";rdy <=
<= '0';
'0';
ELSIF
ELSIF cnt
cnt << 88 THEN
THEN
IF
IF mrshf(1)
mrshf(1) == '1'
'1' THEN
THEN res
res <=
<= moshf+res;
moshf+res; END
END IF;
IF;
moshf
moshf :=
:= moshf
moshf (15
(15 DOWNTO
DOWNTO 1)
1) && '0';
'0';
mrshf
mrshf :=
:= '0'
'0' && mrshf(8
mrshf(8 DOWNTO
DOWNTO 2);
2);
if
if cnt/=7
cnt/=7 THEN
THEN rdy<='0';
rdy<='0'; ELSE
ELSE rdy<='1';
rdy<='1'; END
END IF;
IF;
cnt
cnt :=
:= cnt+1;
cnt+1;
END
END IF;
IF;
END
END IF;
IF;
END
END PROCESS;
PROCESS;
END
END ARCHITECTURE
ARCHITECTURE a;
a;
e1
02
e8
20
ARCHITECTURE a OF recupclk IS
SIGNAL rxdly,edge : bit;
SIGNAL e: bit_vector (8 DOWNTO 1);
BEGIN
edge <= rxdly XOR rxd; -- detector de transicion
PROCESS (rxck_8x) IS
BEGIN
IF rxck_8x='1' THEN
rxdly <= rxd; -- rxd demorado un ciclo
CASE e IS
WHEN X"02" => IF edge='1' THEN e <= X"02"; ELSE
WHEN X"04" => IF edge='1' THEN e <= X"04"; ELSE
WHEN X"08" => IF edge='1' THEN e <= X"08"; ELSE
WHEN X"10" => IF edge='1' THEN e <= X"40"; ELSE
WHEN X"20" => IF edge='1' THEN e <= X"80"; ELSE
WHEN X"40" => IF edge='1' THEN e <= X"01"; ELSE
WHEN X"80" => IF edge='1' THEN e <= X"02"; ELSE
WHEN OTHERS => e <= X"02";
END CASE;
END IF;
END PROCESS;
rxck <= e(5);
END ARCHITECTURE a;
e1
qu
en
od
Recuperador de reloj
pensando en la sntesis
m
s
s/r
reloj
init
A
B
x
Ci
D Q
Ck
CL
cO
D Q
Ck
CL
42
VHDL: Lenguaje de
descripcin de hardware
Ejemplos:
Complementador serial
reloj
init
D Q
Ck
CL
s
D
Q
DFF
D Q
Ck
CL
Fuente: R.Andraka.
Ejemplos: Multiplicador
serial sin signo
ENTITY
ENTITY umulser
umulser IS
IS GENERIC
GENERIC (N:INTEGER:=
(N:INTEGER:= 16);
16);
PORT
PORT (rel,init,m0:IN
(rel,init,m0:IN BIT;
BIT; mr:IN
mr:IN BIT_VECTOR(N
BIT_VECTOR(N DOWNTO
DOWNTO 1);
1);
res:OUT
res:OUT BIT);
BIT);
END
END umulser;
umulser;
254
gnt0
gnt3
gnt1
gnt2
reloj
req0
req1
req2
req3
cycle
start
257
gnt0
gnt1
gnt2
gnt3
mr(N-1)
256
Un rbitro sincrnico
Round Robin
a
b
res
CSA
Fuente: R.Andraka.
Ejemplos: Multiplicador
serial con signo
mr(N-2)
D
Q
Ca2
a
b
m(1)
m(0)
CSA
a
b
s
CSA
a
b
res
CSA
rel
init
El multiplicador serial con signo es casi idntico al sin signo, slo que en
la primer etapa, en vez de un simple flipflop D, debe colocarse un
circuito de complemento a 2
Fuente: R.Andraka.
LIBRARY
LIBRARY ieee;
ieee; USE
USE ieee.std_logic_1164.ALL;
ieee.std_logic_1164.ALL;
Un
Unarbitro
arbitroROUND
ROUNDROBIN
ROBINimplementa
implementaun
uncircuito
circuito
de
deprioridad
prioridadvariable,
variable,donde
dondeen
enfuncin
funcindel
delestado
estado
actual
(gnt0..3)
y
las
entradas
req0..3
se
define
actual (gnt0..3) y las entradas req0..3 se definela
la
prioridad
prioridadde
deatencin
atencinaaesas
esasentradas.
entradas.
por
porejemplo,
ejemplo,sisignt0
gnt0est
estactiva,
activa,req1
req1tendr
tendrla
la
mxima
mximaprioridad,
prioridad,seguido
seguidopor
porreq2
req2 yyslo
slo
despus
despuspor
porreq3;
req3;al
alactivarse
activarsegnt1,
gnt1,la
laprioridad
prioridad
ser
serahora
ahorade
dereq2
req2seguida
seguidapor
porreq3
req3 yyluego
luegopor
por
req0.
req0.
de
deeste
estemodo
modose
setrata
tratade
deasegurar
aseguraruna
unaasignacin
asignacin
de
deprioridades
prioridadesequitativa.
equitativa.
Como
Comoseales
sealesauxiliares:
auxiliares:
start
startavisa
avisacuando
cuandoel
elcontrol
controldel
delsistema
sistemase
se
asigna
a
un
nuevo
asigna a un nuevomaster
master
cycle
cycleindica
indicaal
alrbitro
rbitroque
queel
eltiempo
tiempodisponible
disponible
para
parael
elmaster
masteractual
actualse
seagot,
agot,por
porlo
loque
quesisi
hay
hayalgun
algunotro
otroen
enespera
esperale
leser
serasignado
asignadoel
el
control
control
CSA
mo
Co
py
r
a
b
BEGIN
BEGIN
genprod:
genprod: FOR
FOR ii IN
IN NN DOWNTO
DOWNTO 11
GENERATE
GENERATE prod(i)
prod(i) <=
<= mr(i)
mr(i) AND
AND m0;
m0;
END
END GENERATE;
GENERATE;
gencsa:
gencsa: FOR
FOR ii IN
IN N-1
N-1 DOWNTO
DOWNTO 11
GENERATE
GENERATE chaincsa:
chaincsa: seradd
seradd PORT
PORT MAP(a=>prod(i),b=>chain(i+1),reloj=>rel,
MAP(a=>prod(i),b=>chain(i+1),reloj=>rel,
init=>init,
init=>init, s=>chain(i));
s=>chain(i));
END
END GENERATE;
GENERATE;
PROCESS
PROCESS (rel,init)
(rel,init) BEGIN
BEGIN
IF
IF (init=1)
(init=1) THEN
THEN chain(N)<=0;
chain(N)<=0;
ELSIF
ELSIF relEVENT
relEVENT AND
AND rel=1
rel=1 THEN
THEN chain(N)
chain(N) <=
<= prod(N);
prod(N);
END
END IF;
IF;
END
END PROCESS;
PROCESS;
res
res <=
<= chain(1);
chain(1);
END
END a;
a;
255
mr(0)
ig
ht
G.
Ja
ARCHITECTURE
ARCHITECTURE aa OF
OF umulser
umulser IS
IS
COMPONENT
COMPONENT seradd
seradd PORT
PORT (a,b,reloj,init:IN
(a,b,reloj,init:IN BIT;
BIT; s:OUT
s:OUT BIT);
BIT); END
END COMPONENT;
COMPONENT;
SIGNAL
SIGNAL prod,chain:
prod,chain: BIT_VECTOR
BIT_VECTOR (N
(N DOWNTO
DOWNTO 1);
1);
s
CSA
qu
en
od
a
b
rel
init
mr(1)
20
ARCHITECTURE
ARCHITECTURE aa OF
OF com2dos
com2dos IS
IS
SIGNAL
SIGNAL flg:
flg: BIT;
BIT;
BEGIN
BEGIN
PROCESS
(reloj,init)
BEGIN
PROCESS (reloj,init) BEGIN
IF
IF (init=1)
(init=1) THEN
THEN
s<=0;
s<=0; flg
flg <=0;
<=0;
ELSIF
ELSIF relojEVENT
relojEVENT AND
AND reloj=1
reloj=1 THEN
THEN
ss <=
<= aa XOR
XOR flg;
flg;
flg
<=
a
OR
flg;
flg <= a OR flg;
END
IF;
END IF;
END
END PROCESS;
PROCESS;
END
END a;
a;
253
mr(N-2)
mo
02
Ejemplos: Multiplicador
serial sin signo
ENTITY
ENTITY rrobtab
rrobtab IS
IS PORT
PORT ((
req:
req: IN
IN std_logic_vector
std_logic_vector (3
(3 DOWNTO
DOWNTO 0);
0);
actual
actual :: IN
IN std_logic_vector
std_logic_vector (3
(3 DOWNTO
DOWNTO 0);
0);
nuevo:OUT
nuevo:OUT std_logic_vector
std_logic_vector (3
(3 DOWNTO
DOWNTO 0));
0));
END
END rrobtab;
rrobtab;
req0
req1
req2
req3
actual
nuevo
Este diseo
ARCHITECTURE
ARCHITECTURE aa OF
OF rrobtab
rrobtab IS
IS
no funciona.
SIGNAL
SIGNAL concat:
concat: std_logic_vector
std_logic_vector (7
(7 DOWNTO
DOWNTO 0);
0);
Porqu?
BEGIN
BEGIN
concat
concat <=
<= actual&req;
actual&req;
WITH
WITH concat
concat SELECT
SELECT
nuevo
nuevo <=
<= "0001"
"0001" WHEN
WHEN "0001000X"|"001000X1"|"01000XX1"|"1000XXX1",
"0001000X"|"001000X1"|"01000XX1"|"1000XXX1",
"0010"
"0010" WHEN
WHEN "0001XX1X"|"001000X0"|"01000X10"|"1000XX10",
"0001XX1X"|"001000X0"|"01000X10"|"1000XX10",
"0100"
WHEN
"0100" WHEN "0001X10X"|"0010X1XX"|"01000X00"|"1000X100",
"0001X10X"|"0010X1XX"|"01000X00"|"1000X100",
"1000"
"1000" WHEN
WHEN "0001100X"|"001010XX"|"01001XXX"|"1000X000",
"0001100X"|"001010XX"|"01001XXX"|"1000X000",
"XXXX"
"XXXX" WHEN
WHEN OTHERS;
OTHERS;
END
END a;
a;
258
43
VHDL: Lenguaje de
descripcin de hardware
LIBRARY
LIBRARY ieee;
ieee; USE
USE ieee.std_logic_1164.ALL;
ieee.std_logic_1164.ALL;
actual
nuevo
ARCHITECTURE
ARCHITECTURE aa OF
OF rrobtab
rrobtab IS
IS
BEGIN
BEGIN
PROCESS
PROCESS (actual,req)
(actual,req) IS
IS
variable
vnuevo:
std_logic_vector
variable vnuevo: std_logic_vector (3
(3 DOWNTO
DOWNTO 0);
0);
BEGIN
BEGIN
CASE
CASE actual
actual IS
IS
WHEN
WHEN X"0"
X"0" =>
=> vnuevo
vnuevo :=
:= X"1";
X"1";
WHEN
WHEN X"1"
X"1" =>
=> IF
IF req(1)='1'
req(1)='1' THEN
THEN vnuevo
vnuevo :=
:= X2";
X2"; ELSIF
ELSIF req(2)='1'
req(2)='1' THEN
THEN vnuevo
vnuevo :=
:= X4";
X4";
ELSIF
ELSIF req(3)='1'
req(3)='1' THEN
THEN vnuevo
vnuevo :=
:= X8";
X8"; ELSE
ELSE vnuevo
vnuevo :=
:= actual;
actual; END
END IF;
IF;
WHEN
WHEN X2"
X2" =>
=> IF
IF req(2)='1'
req(2)='1' THEN
THEN vnuevo
vnuevo :=
:= X"4";
X"4"; ELSIF
ELSIF req(3)='1'
req(3)='1' THEN
THEN vnuevo
vnuevo :=
:= X"8";
X"8";
ELSIF
ELSIF req(0)='1'
req(0)='1' THEN
THEN vnuevo
vnuevo :=
:= X"1";
X"1"; ELSE
ELSE vnuevo
vnuevo :=
:= actual;
actual; END
END IF;
IF;
WHEN
WHEN X4"
X4" =>
=> IF
IF req(3)='1'
req(3)='1' THEN
THEN vnuevo
vnuevo :=
:= X8";
X8"; ELSIF
ELSIF req(0)='1'
req(0)='1' THEN
THEN vnuevo
vnuevo :=
:= X"1";
X"1";
ELSIF
req(1)='1'
THEN
vnuevo
:=
X2";
ELSE
vnuevo
:=
actual;
END
IF;
ELSIF req(1)='1' THEN vnuevo := X2"; ELSE vnuevo := actual; END IF;
WHEN
WHEN X8"
X8" =>
=> IF
IF req(0)='1'
req(0)='1' THEN
THEN vnuevo
vnuevo :=
:= X"1";
X"1"; ELSIF
ELSIF req(1)='1'
req(1)='1' THEN
THEN vnuevo
vnuevo :=
:= X2";
X2";
ELSIF
ELSIF req(2)='1'
req(2)='1' THEN
THEN vnuevo
vnuevo :=
:= X4";
X4"; ELSE
ELSE vnuevo
vnuevo :=
:= actual;
actual; END
END IF;
IF;
WHEN
WHEN OTHERS
OTHERS =>
=> vnuevo
vnuevo :=
:= actual;
actual;
END
END CASE;
CASE;
nuevo
nuevo <=
<= vnuevo;
vnuevo;
END
END PROCESS;
PROCESS;
END
END a;
a;
259
02
req0
req1
req2
req3
ENTITY
ENTITY rndrob
rndrob IS
IS PORT
PORT (reloj,ini
(reloj,ini :: IN
IN std_logic;
std_logic; req:
req: IN
IN std_logic_vector
std_logic_vector (3
(3 DOWNTO
DOWNTO 0);
0);
grant:OUT
grant:OUT std_logic_vector
std_logic_vector (3
(3 DOWNTO
DOWNTO 0));
0));
END
END rndrob;
rndrob;
ARCHITECTURE
a
OF
rndrob
IS
ARCHITECTURE a OF rndrob IS
COMPONENT
COMPONENT rrobtab
rrobtab PORT
PORT (req:
(req: IN
IN std_logic_vector(3
std_logic_vector(3 DOWNTO
DOWNTO 0);
0);
actual:
actual: IN
IN std_logic_vector(3
std_logic_vector(3 DOWNTO
DOWNTO 0);
0); nuevo:OUT
nuevo:OUT std_logic_vector
std_logic_vector (3
(3 DOWNTO
DOWNTO 0));
0));
END
END COMPONENT;
COMPONENT;
SIGNAL
act,nov:std_logic_vector(3
DOWNTO
0);
SIGNAL
tstop,rini,tout,lib:
SIGNAL act,nov:std_logic_vector(3 DOWNTO 0); SIGNAL tstop,rini,tout,lib: std_logic;
std_logic;
BEGIN
BEGIN
decis:
decis: rrobtab
rrobtab PORT
PORT MAP
MAP (req
(req =>
=> req,actual=>act,nuevo=>nov);
req,actual=>act,nuevo=>nov);
tstop
tstop <=
<= NOT(tout);
NOT(tout);
timer:
timer: lpm_counter
lpm_counter GENERIC
GENERIC MAP
MAP (LPM_WIDTH
(LPM_WIDTH =>
=> 3)
3)
PORT
PORT MAP
MAP (clock=>reloj,cnt_en
(clock=>reloj,cnt_en =>
=> tstop,
tstop, aclr=>rini,cout=>tout);
aclr=>rini,cout=>tout);
lib
lib <=
<= (not(req(0))
(not(req(0)) AND
AND act(0)
act(0) AND
AND not(nov(0)))
not(nov(0))) OR
OR (not(req(1))
(not(req(1)) AND
AND act(1)
act(1) AND
AND not(nov(1)))
not(nov(1)))
OR
OR (not(req(2))
(not(req(2)) AND
AND act(2)
act(2) AND
AND not(nov(2)))
not(nov(2))) OR
OR (not(req(3))
(not(req(3)) AND
AND act(3)
act(3) AND
AND not(nov(3)));
not(nov(3)));
grant
grant <=
<= act
act WHEN
WHEN (tout='0')
(tout='0') OR
OR (nov=act)
(nov=act) ELSE
ELSE "0000";
"0000";
PROCESS
(reloj)
BEGIN
PROCESS (reloj) BEGIN
IF
IF reloj='1'
reloj='1' THEN
THEN
IF
IF ini='1'
ini='1' THEN
THEN act
act <=
<= X"1";
X"1"; rini
rini <=
<= '1';
'1'; ELSIF
ELSIF lib='1'
lib='1' THEN
THEN act
act <=
<= nov;
nov; rini
rini <=
<= '1';
'1';
ELSE
ELSE rini
rini <=
<= '0';
'0'; END
END IF;
IF;
END
IF;
END IF;
END
END PROCESS;
PROCESS;
END
END a;
a;
20
ENTITY
ENTITY rrobtab
rrobtab IS
IS PORT
PORT (req:
(req: IN
IN std_logic_vector
std_logic_vector (3
(3 DOWNTO
DOWNTO 0);
0);
actual
actual :: IN
IN std_logic_vector
std_logic_vector (3
(3 DOWNTO
DOWNTO 0);
0);
nuevo:OUT
nuevo:OUT std_logic_vector
std_logic_vector (3
(3 DOWNTO
DOWNTO 0));
0));
END
END rrobtab
rrobtab ;;
LIBRARY
LIBRARY ieee;
ieee; USE
USE ieee.std_logic_1164.ALL;
ieee.std_logic_1164.ALL; LIBRARY
LIBRARY lpm;
lpm; USE
USE lpm.lpm_components.ALL;
lpm.lpm_components.ALL;
qu
en
od
260
a su vez, almacenar las salidas del diseo bajo test en un archivo permite su
uso posterior para comparar respuestas de arquitecturas alternativas
ig
ht
G.
Ja
Bases de VHDL
261
262
BIT,BIT_VECTOR,BOOLEAN,CHARACTER,INTEGER,REAL,STRING,TIME;
G.Jaquenod 2002, All Rights Reserved.
Co
py
r
Subprogramas definidos en
TEXTIO
263
264
44
VHDL: Lenguaje de
descripcin de hardware
Ejemplo de escritura
Ejemplo de escritura
ahora
...tt..A..B
20
02
Se cuenta con tres seales std_logic llamadas A, B y reloj, y se desea, cada vez que haya
un flanco positivo de reloj, escribir en un archivo llamado salida.vct una lnea que
describe el momento del evento, A y B con el siguiente formato:
escribo
wrfile
265
Una variable de nombre puntero, de tipo LINE, donde preparar los datos a escribir
Una funcin que permita convertir los nueve posibles valores de una variable STD_LOGIC a los
nueve caracteres que los representan
qu
en
od
266
ig
ht
G.
Ja
Bases de VHDL
Verificacin funcional
de modelos VHDL
267
268
Sntesis
OK?
Co
py
r
Si
Velocidad?
269
Place&Route
No
Anlisis temporal
La edicin y modificacin de
constraints, que puede ser
realizada tanto dentro del
cdigo VHDL (en algunos
casos) como mediante
asignaciones externas
rea?
No
Si
OK?
Si
No
No
Velocidad?
Si
rea?
SINTESIS
No
Si
Qu es el test bench?
Hot Lab Support Initiative
TEST BENCH
lmf
acf
Si
edif
No
Generador de
estmulos
Otros mdulos ya
operativos
Monitor de
salidas
45
VHDL: Lenguaje de
descripcin de hardware
I.
II.
III.
Otros mdulos ya
operativos
TEST BENCH
Generador de
estmulos
Monitor de
salidas
02
20
qu
en
od
272
Clase I
Hot Lab Support Initiative
ig
ht
G.
Ja
Best used for simpler target code & code not intended
for re-use
Fuente: ALTERA
274
Co
py
r
Fuente: ALTERA
Fuente: ALTERA
Class III
275
Clase II
Fuente: ALTERA
273
mycode_tb.vhd
clk_assignment
wavegen_process
mycode.vhd
clk
in1
in2
in3
out1
out2
reset_assignment
276
rst
Fuente: ALTERA
46
VHDL: Lenguaje de
descripcin de hardware
mediante un algoritmo:
mycode_tb.vhd
wavegen_process
mycode.vhd
clk
in1
in2
in3
compare_process
20
clk_assignment
out1
out2
reset_assignment
02
clk
277
Fuente: ALTERA
279
278
Fuente: ASHENDEN
Asignaciones simples y
WAIT FOR (simulacin)
ig
ht
G.
Ja
qu
en
od
280
Co
py
r
Vectores repetitivos y
simtricos (simulacin)
281
282
47
VHDL: Lenguaje de
descripcin de hardware
XII Asamblea General del ISTEC, UTP, Panam, Noviembre de 2002
Vectores repetitivos y
asimtricos
02
283
Es posible generar patrones de test ms complejos que una seal de reloj (por
ejemplo, secuencias GRAY) a travs del uso de algoritmos:
LIBRARY ieee;
USE ieee.std_logic_1164.ALL; USE ieee.numeric_std.ALL;
20
asym2:
asym2: PROCESS
PROCESS BEGIN
BEGIN
reloj2
reloj2 <=
<= '1';
'1'; WAIT
WAIT FOR
FOR (ton);
(ton);
reloj2
reloj2 <=
<= '0';
'0'; WAIT
WAIT FOR
FOR (toff);
(toff);
END
PROCESS
asym2;
END PROCESS asym2;
284
ig
ht
G.
Ja
qu
en
od
Vectores repetitivos y
asimtricos (simulacin)
ARCHITECTURE xx OF testbench IS
COMPONENT graygen IS PORT (gray : OUT unsigned (8 DOWNTO 1));
END COMPONENT;
SIGNAL gray : unsigned (8 DOWNTO 1);
BEGIN
dut: graygen PORT MAP (gray);
END;
285
Co
py
r
286
Es posible generar patrones de test ms complejos que una seal de reloj (por
ejemplo, secuencias pseudo-random) a travs del uso de algoritmos similares a
los usados para el diseo de LFSRs:
ENTITY psrnd IS PORT (taps : OUT BIT_VECTOR (7 DOWNTO 0)); END psrnd;
ARCHITECTURE a OF psrnd IS
p0: PROCESS IS
VARIABLE
BEGIN
FOR i IN 0 TO 7 LOOP IF (msk(i)='1') THEN tmp:= tmp XOR fftaps(i); END IF;
END LOOP;
END a;
287
288
48
VHDL: Lenguaje de
descripcin de hardware
Generacin de vectores
mediante arrays
02
LIBRARY
LIBRARY ieee;USE
ieee;USE ieee.std_logic_1164.ALL;
ieee.std_logic_1164.ALL; USE
USE ieee.numeric_std.ALL;
ieee.numeric_std.ALL;
ENTITY
ENTITY testbench
testbench IS
IS END;
END;
ARCHITECTURE
ARCHITECTURE xx
xx OF
OF testbench
testbench IS
IS
COMPONENT
COMPONENT usoarray
usoarray IS
IS PORT
PORT (tabular_bus:
(tabular_bus: OUT
OUT UNSIGNED
UNSIGNED (7
(7 DOWNTO
DOWNTO 0));
0));
END
END COMPONENT;
COMPONENT;
SIGNAL
SIGNAL out_tab:
out_tab: UNSIGNED
UNSIGNED (7
(7 DOWNTO
DOWNTO 0);
0);
BEGIN
BEGIN
dut:
dut: usoarray
usoarray PORT
PORT MAP
MAP (out_tab);
(out_tab);
END;
END;
ARCHITECTURE xx OF testfile IS
BEGIN
leo_file: PROCESS
VARIABLE dly:time; VARIABLE punte:line; FILE vecfile:TEXT IS IN vect.vec;
BEGIN
WHILE NOT (endfile(vecfile)) LOOP
READLINE (vecfile,punte);
READ(punte,dbus); READ(punte,abus); READ(punte,nWR);READ(punte,nRD);
READ(punte,dly);
WAIT FOR dly;
END LOOP;
END PROCESS leo_file;
END;
291
Generador de
Monitor de
ARCHITECTURE completa OF and2 IS
de nivel tope
estmulos
salidas
(DUT)
SIGNAL valor : std_ulogic;
BEGIN
Dos procesos:
compuerta: PROCESS (a,b) IS BEGIN
Tiempos de
uno para modelar el behavior
propagacion
valor <= a AND b;
otro para modelar los retardos
distintos!
END PROCESS compuerta;
retardos: PROCESS (valor) IS BEGIN
IF valor=1 THEN
y <= REJECT tr1 INERTIAL 1 AFTER tp1;
ELSIF valor=0 THEN y <= REJECT tr0 INERTIAL 0 AFTER tp0;
ELSE
y <= REJECT trx INERTIAL X AFTER tpx;
END IF;
Cuando a o b son X o Z
END PROCESS retardos;
END ARCHITECTURE completa ;
Uso REJECT --> VHDL93
Fuente: ASHENDEN
5....
Otros mdulos ya
operativos
Generador de
estmulos
Monitor de
salidas
ac se activa chk_thold
datos
reloj
tsetup
thold
violacion
de tsetup
relojd
violacion
de thold
ac se activa chk_thold
293
292
Co
py
r
ig
ht
G.
Ja
290
qu
en
od
289
20
P.Ashenden. The Designers Guide to VHDL. Morgan Kaufmann Publishers Inc., 2nd Edition. ISBN: 1-55860-674-2
P.Ashenden. The Students Guide to VHDL. Morgan Kaufmann Publishers Inc, 1998, ISBN 1-55860-520-7
L.Baker. VHDL Programming With Advanced Topics. John Wiley and Sons, Inc. 1993, ISBN 0-471-57464-3
J.Bhasker. A VHDL Primer, Revised Edition. Prentice Hall 1995. ISBN 0-13-181447-
K.C.Chang. Digital Systems Design With VHDL and Synthesis. An inteegrated Approach. IEEE Computer Society
1999. ISBN 0-7695-0023-4
R. Dueck. Digital Design with CPLD. Applications and VHDL. DELMAR, Thomson Learning. ISBN 0-7668-1160-3
S.S.Leung & M.AA.Shanblatt. ASIC System Design with VHDL: A Paradigm. 2nd.Edition, Kluwer Academic
Publishers, 1989, ISBN:0-7923-9032-6
294
F.Pardo & J.Boluda. VHDL Lenguaje para sntesis y modelado de circuitos. AlfaOmega 2000. ISBN 970-15-0443-7.
S.Sjoholm & L.Lindh. VHDL for Designers. Prentice Hall 1997. ISBN 0-13-473414-9.
M.J.S.Smith. Application Specific Integrated Circuits. Addison Wesley 1997. ISBN 0-201-50022-1
L.Ters et al. VHDL Lenguaje Estndar de Diseo Electrnico. McGraw Hill 1998, ISBN 84-481-1196-6
49
VHDL: Lenguaje de
descripcin de hardware
XII Asamblea General del ISTEC, UTP, Panam, Noviembre de 2002
Bibliografa: manuales
y notas de aplicacin
02
Co
py
r
ig
ht
G.
Ja
295
qu
en
od
20
50