AHDL
AHDL
Lenguajes de descripcin
de Hardware I
Una breve visin sobre
los HDLs en general y
AHDL en particular
Copyright Guillermo Jaquenod,1999
Discretos vs. continuos
IMPORTANTE!
Existen lenguajes de descripcin de hardware
pensados para el diseo de sistemas continuos
(analgicos), y otros concebidos para trabajar con
sistemas discretos (usualmente binarios)
Este curso trata sobre lenguajes de descripcin
de hardware de sistemas discretos
Copyright Guillermo Jaquenod,1999
Qu es un HDL?
Un lenguaje HDL para descripcin de hardware (HDL: Hardware
Description Language) es una herramienta formal para describir
el comportamiento y la estructura de sistemas (usualmente
electrnicos pero a veces tambin de otros tipos) usando un
esquema textual
Usando HDL el diseador puede describir la operacin del
sistema con diferentes niveles de abstraccin (o estilos):
describiendo QU es lo que el sistema debe hacer
(comportamiento)
describiendo CMO hacerlo (algortmico)
detallando CON QU hacerlo (flujo de datos y estructural)
Copyright Guillermo Jaquenod,1999
Caractersticas de un HDL
Describe actividades que ocurren en forma simultnea
(CONCURRENCIA)
Permite describir mdulos con acciones que sern evaluadas en
forma secuencial (procedural), donde todo el mdulo ser visto
como una accin concurrente ms
Posibilita la construccin de una estructura jerrquica, donde es
posible combinar descripciones estructurales y de flujo de datos
con descripciones de comportamiento (BEHAVIOR)
Permite modelizar el concepto de tiempo, fundamental para la
descripcin de sistemas electrnicos
Copyright Guillermo Jaquenod,1999
Que ventajas da el uso de HDLs?
Como herramienta de especificacin
es posible su uso para la de especificacin general de un
sistema, tanto a nivel de hardware como de software
permite describir el hardware, tanto a nivel de sistemas y
subsistemas, como de componentes
Como herramienta de diseo
Mejor documentacin y facilidad de reuso
Posibilidad de parametrizacin
Portabilidad de un diseo. Independencia tecnolgica
Como herramienta de simulacin
Disponibilidad de modelos de distintos componentes de
fabricantes variados en HDLs normalizados
Facilidad para la generacin de vectores de test complejos
Copyright Guillermo Jaquenod,1999
Dnde es posible usar HDL?
ESPECIFICACIN DEL SISTEMA
PARTICIN HARDWARE/SOFTWARE
ESPECIFICACIN
DE SOFTWARE
SOFTWARE
PLD
Partes
Estndar
ASIC
PLAQUETAS
Y
SISTEMAS
ESPECIFICACIN
DE HARDWARE
FPGA
DISEO
ESPECIFICACIN
Copyright Guillermo Jaquenod,1999
Qu es un estilo de
descripcin de hardware?
Es la manera en que el diseador describe el sistema. Puede ser:
Comportamiento (Behavioral): detalla la funcin entrada-salida
del diseo, sin profundizar la arquitectura o los registros empleados
Algoritmico: detalla las acciones a realizar para alcanzar los
objetivos, a modo de un algoritmo de software
Flujo de datos a nivel de registros: describe la solucin en forma
de una mquina secuencial, detallando los registros y la lgica que
los une, sin incluir cmo resolver esa lgica. Es una descripcin de
la arquitectura del sistema, pero no de la tecnologa
Estructural, a nivel de registros: describe una red de compuertas
y registros, incorporando posibles esquemas de conexin
Copyright Guillermo Jaquenod,1999
Niveles de abstraccion versus
dominios de descripcion
Dominio de descripcion
Comportamiento Estructural Fisico
Especificaciones CPUs, memorias Particion
Performance switches, buses fisica
Algoritmos de manejo Modulos de Hardware Clusters
de estructuras de Estructuras de datos
datos
Operaciones a nivel de ALUs, multiplexores Cableado
registros Registros
Secuencias de estado Microsecuenciadores
Ecuaciones booleanas Compuertas, flipflops Celdas logicas
N
i
v
e
l
d
e
a
b
s
t
r
a
c
c
i
o
n
L
o
g
i
c
o
F
u
n
c
i
o
n
a
l
A
l
g
o
r
i
t
m
i
c
o
A
r
q
u
i
t
e
c
t
u
r
a
l
Copyright Guillermo Jaquenod,1999
Qu HDLs existen?
De bajo nivel: permiten definir un circuito a nivel de arquitectura
(FlipFlops, compuertas bsicas, ecuaciones lgicas)
PALASM, CUPL, ABEL
De nivel medio: superset de los previos, permiten definir un circuito
en modo jerrquico, as como la generacin condicional/iterativa de
hardware; en ciertos permiten el uso de descripciones de
comportamiento (funciones aritmticas, mquinas de estado).
AHDL
De alto nivel: superset de los previos, no slo posibilitan mayor nivel
de abstraccin, sino que tambin son usados para la simulacin,
para la sntesis del generador de estmulos y el monitor de salidas
VHDL, VERILOG HDL
Copyright Guillermo Jaquenod,1999
Estructura jerrquica
diseo de jerarqua tope
subdiseo 1
subdiseo 4
subdiseo 3
subdiseo 2
.....
.....
.....
.....
subdiseo tope
Copyright Guillermo Jaquenod,1999
mdulo full_adder
...
instancia de half_adder
...
instancia de half_adder
....
Diseo jerrquico
El diseo jerrquico permite
descomponer un sistema complejo en subsistemas, y asignar
el diseo de cada subsistema a una persona diferente
generar sudiseos reutilizables
posibilidad de usar diseos realizados por terceros (IP:
Intellectual Property)
mdulo half_adder
.....
full_adder
half
adder
half
adder
OR
Copyright Guillermo Jaquenod,1999
Instancias y Jerarquas
Como elementos constructivos de su
comportamiento, un mdulo puede incluir
dentro de s bloques de menor nivel (otros
mdulos) definidos separadamente, los que
sern usados a travs de sus puertas,
excitando sus entradas y utilizando los
valores que aparezcan en sus salidas
La inclusin de un mdulo dentro de otro de
mayor nivel se llama crear una INSTANCIA
de ese mdulo
Esta facilidad permite generar estructuras
jerrquicas sin restricciones de anidamiento,
as como el reuso de subdiseos
modulo A
otra instancia
del mdulo B
instancia del
mdulo C
mdulo B
mdulo C
instancia del
mdulo B
Copyright Guillermo Jaquenod,1999
Encapsulamiento de mdulos
La interfase de un mdulo con los
dems se realiza mediante puertas,
que pueden ser de entrada, de
salida, o bidireccionales, y esta
interfase es la nica parte visible del
mdulo por el resto del diseo
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
Este tipo de operacin permite el
encapsulamiento del diseo
COMPORTAMIENTO
INTERNO
INTERFASE
PUERTAS
Copyright Guillermo Jaquenod,1999
Ejemplo elemental en AHDL
el campo subdesign define el
nombre del mdulo y las puertas a
travs de las cuales el mundo
exterior ve al bloque funcional
el campo lgico (BEGIN..END)
define el comportamiento interno
del bloque
-- nombre del bloque
-- y de sus puertas
SUBDESIGN ejemplo_1 (
a,b,e : INPUT;
c,d : OUTPUT;)
-- descripcin del
-- comportamiento
BEGIN
c = a & b;
d = e;
END;
AND
ejemplo_1
a
b
c
d e
Copyright Guillermo Jaquenod,1999
Ese ejemplo en VHDL
Se define separadamente el
comportamiento desde el
punto de vista externo
(ENTITY) a la realizacin
interna (ARCHITECTURE)
Es posible definir distintas
arquitecturas de un mismo
bloque funcional
-- descripcion del nombre y
-- las puertas
ENTITY ejemplo_1 IS
PORT (
a, b, e : IN BIT;
c, d : OUT BIT;
);
END ejemplo1;
--y del comportamiento
ARCHITECTURE comporta
OF ejemplo_1 IS
BEGIN
c <= a AND b;
d <= e;
END comporta;
AND
ejemplo_1
a
b
c
d e
Copyright Guillermo Jaquenod,1999
AHDL
ALTERA Hardware
Description Language
Copyright Guillermo Jaquenod,1999
Lenguaje de descripcin de
Hardware ALTERA
AHDL permite la descripcin del hardware a travs de su
comportamiento (behavior), en lugar de hacerlo a travs de un
circuito esquemtico
Usa ecuaciones lgicas, variables, constantes, funciones,
operadores aritmticos, tablas de verdad, y expresiones
condicionales, en forma similar a la de un lenguaje de software de
alto nivel.
Est especialmente orientado para definir mquinas de estado de
gran complejidad
Toda la descripcin del comportamiento es resuelta en forma
concurrente
Facilita el diseo mediante el uso de plantillas
Soporta todas las familias de ALTERA
Copyright Guillermo Jaquenod,1999
Flujo de diseo mediante AHDL y
el MAX+PLUS II
Editor de
formas de onda
MAX+PLUS II
Compilador
funcional o
fisico
Simulador
Archivo .tdf
Estimulos:
.scf
Archivo .snf
Funciona OK?
Editor de texto
de AHDL
MAX+PLUS II
Editor de
texto
Estimulos:
.vec
no
MAX+
PLUS II
Copyright Guillermo Jaquenod,1999
AHDL: secciones
de un archivo .tdf
Ttulo (opcional)
Include (opcional)
Constant (opcional)
Define (opcional)
Parameters (opcional)
Function prototype (opcional)
Options(opcional)
Assert (opcional)
Subdesign (necesario)
Variable (opcional). Puede contener:
Declaraciones: Instancias, Nodos, Registros y Mquinas
de estado
Logic (necesario). Puede contener:
Construcciones: Default, Assert, , Case, For_Generate,
If_Generate, If_Then, y Tablas de verdad
Ecuaciones: lgicas y de control
Referencias: a funciones In_Line
TITULO
INCLUDE
CONSTANT
DEFINE
PARAMETERS
PROTOTYPE
OPTIONS
ASSERT
SUBDESIGN
VARIABLE
LOGIC
opcional
obligatoria
Copyright Guillermo Jaquenod,1999
AHDL: la seccin TITULO
Es un campo opcional, nico, que no
afecta a la descripcin del hardware
Permite incorporar comentarios que
luego sern incorporados al reporte de
compilacin
Importante a los fines de la
documentacin del diseo
TITULO
La sintaxis es:
TITLE nombre del diseo;
keyword TITLE
comentarios,
entre comillas
terminacin
Copyright Guillermo Jaquenod,1999
AHDL: la seccin INCLUDE
Es un campo opcional, mltiple
Permite importar texto desde otros
archivos escritos en AHDL (cuya extensin
por defecto es .inc) al corriente diseo
para la compilacin
Usualmente usado para incluir prototipos
de funciones de menor nivel
La sintaxis es:
INCLUDE archivo.inc;
keyword INCLUDE
nombre del
archivo a importar
TITULO
INCLUDE
terminacin
Copyright Guillermo Jaquenod,1999
AHDL: la seccin CONSTANT
Es un campo opcional, mltiple
Permite definir un nombre simblico y
asociarlo a un valor constante.
Posteriores usos del nombre sern
reemplazados por el valor constante
durante la compilacin
La sintaxis es:
CONSTANT nombre = valor ;
keyword CONSTANT
nombre de la constante
TITULO
INCLUDE
CONSTANT
valor constante
Copyright Guillermo Jaquenod,1999
AHDL: la seccin PARAMETERS
Es un campo opcional, mltiple
Permite declarar parmetros que controlan la
implementacin de una megafuncin o
macrofuncin parametrizada
Los parmetros pueden ser nombres definidos
por el usuario, o por ALTERA
Un parmetro puede ser usado slo luego de
ser declarado
No se permiten referencias cruzadas
En la declaracin se puede asignar a los
parmetros valores por default
El compilador busca el valor del parmetro
desde la instancia de la funcin hasta el nivel
tope. Se sigue luego por los valores de default.
TITULO
INCLUDE
CONSTANT
DEFINE
PARAMETERS
Copyright Guillermo Jaquenod,1999
AHDL: la seccin PARAMETERS
Ejemplo de una seccin PARAMETERS:
valores por
default
PARAMETERS
(
NOMBRE = pedro,
ANCHO,
AD_ANCHO = 8,
NUMPALA = 2^AD_ANCHO
);
keyword PARAMETERS
nombre de los
parmetros
AD_ANCHO puede ser usado pues
ya fu definido en la lnea anterior
Copyright Guillermo Jaquenod,1999
AHDL: la seccin FUNCTION
PROTOTYPE
TITULO
INCLUDE
CONSTANT
DEFINE
PARAMETERS
PROTOTYPE
El prototipo es la descripcin de una
funcin, compuesta por:
nombre de la funcin
entradas
parmetros
salidas y puertas bidireccionales
FUNCTION nombrefuncin (ent1,..,entK)
WITH (param1,param2,..,paramL)
RETURNS (sal1,..,salM,bidi1,..,bidiN);
keywords
FUNCTION
WITH, y
RETURNS
nombre de la funcin lista de entradas
lista de
parmetros
lista de salidas
y puertas
bidireccionales
Copyright Guillermo Jaquenod,1999
AHDL: la seccin SUBDESIGN
SUBDESIGN declara tipo y nombre
de las puertas de un diseo .tdf
Comienza con SUBDESIGN seguido
por el nombre del diseo, que debe
ser el mismo que el del archivo .tdf
el tipo bsico de las puertas puede
ser INPUT, OUTPUT, y BIDIR.
se puede usar MACHINE INPUT y
MACHINE OUTPUT para importar y
exportar mquinas de estado
Es posible asignar un valor por
default de GND o VCC para las
entradas en caso que no sean
usadas en un nivel superior
SUBDESIGN mi_diseo (
en1,clk1: INPUT = VCC;
a[4..0]: OUTPUT;
dual: BIDIR;
)
TITULO
INCLUDE
CONSTANT
DEFINE
PARAMETERS
PROTOTYPE
OPTIONS
ASSERT
SUBDESIGN
Copyright Guillermo Jaquenod,1999
AHDL: la seccin VARIABLE
en esta seccin se declaran las
variables usadas en la seccin LOGIC
para definir lgica interna (o buried)
Puede incluir las siguientes
construcciones:
Declaracin de nodos
Declaracin de registros
Declaracin de instancias de
funciones
Declaracin de Mquinas de estado
Asignacin de ALIAS a Mquinas
de estado
TITULO
INCLUDE
CONSTANT
DEFINE
PARAMETERS
PROTOTYPE
OPTIONS
ASSERT
SUBDESIGN
VARIABLE
Copyright Guillermo Jaquenod,1999
AHDL: la seccin VARIABLE
La palabra clave VARIABLE indica el inicio de esta seccin
Un conjunto de variables de igual tipo puede definirse:
mediante la lista de nombres simblicos, separados por
comas.
dos puntos, y el tipo de variable
punto y coma, como terminacin
Donde el tipo de puede ser:
<primitiva>, NODE, TRI_STATE_NODE,
<megafuncin>, <macrofuncin>, o <declaracin de
mquina de estado>
Copyright Guillermo Jaquenod,1999
AHDL: la seccin VARIABLE
Ejemplo de una seccin VARIABLE
VARIABLE
a,b,c : NODE;
temp : halfadd;
tsnodo: TRI_STATE_NODE;
adder : lpm_add_sub
WITH (LPM_WIDTH=8);
keyword VARIABLE: inicio de la seccin
listas de nombres
simblicos
tipos bsicos
de nodos
instancia de una
macrofuncin
(half adder)
instancia de una megafuncin
(lpm_add_sub) con un
parmetro (LPM_WIDTH)
Copyright Guillermo Jaquenod,1999
la seccin VARIABLE: instancias
Declarar una instancia de una funcin significa asignar
recursos especficos de hardware para realizar esa
funcin
Por ejemplo, dada una funcin comparar, con prototipo:
FUNCTION comparar (a[3..0],b[3..0]) RETURNS (igual);
el poner en la seccin VARIABLE la instancia
VARIABLE
mi_comp : comparar;
define los nodos mi_comp.a[..], mi_comp.b[..] y mi_comp.igual
Copyright Guillermo Jaquenod,1999
La seccin VARIABLE: los buffers
Buffers:
CARRY: conexin mediante el uso de la cadena de CARRY
CASCADE: conexin mediante el uso de la cadena de CASCADE
EXP: trmino que determina el uso de un expansor
GLOBAL: indica que una seal debe usar una lnea global de Clock,
Clear, Preset, o Output Enable (todas las familias)
LCELL: fuerza que la seal a la que se asigne sea la salida de una
celda lgica, y que no sea removida por el compilador durante la
minimizacin
SOFT: propone un lugar para una celda lgica, de ser sta requerida.
Puede ser removido por el compilador durante la minimizacin
TRI: buffer TRI_STATE (Ej: FUNCTION TRI (in,oe) RETURNS (out);)
OPNDRN: equivale a TRI con in==GND
Copyright Guillermo Jaquenod,1999
La seccin VARIABLE: los registros
AHDL ofrece primitivas para definir los siguientes tipos de
registros:
flipflops:
D: DFF y DFFE (con clock Enable)
T: TFF y TFFE
JK: JKFF y JKFFE
SR: SRFF y SRFFE
latches: LATCH
Por ejemplo, el prototipo de un flipflop D es:
FUNCTION DFF (d,clk,clrn,prn) RETURNS (q);
Si en la seccin VARIABLE se declara: mi_ff : DFF; en la
seccin de lgica se podrn utilizar las entradas
mi_ff.d, mi_ff.clk, mi_ff.clrn, mi_ff.prn y la salida mi_ff.q
Copyright Guillermo Jaquenod,1999
la seccin VARIABLE: los nodos
AHDL acepta dos tipos de nodos: NODE y
TRI_STATE_NODE
son variables locales similares a las variables globales
INPUT, OUTPUT o BIDIR declaradas en la seccin
SUBDESIGN, en cuanto representan una lnea que
transporta una seal.
un nodo de tipo NODE con mltiples asignaciones junta
las seales mediante funciones wired-AND o wired-OR,
segn los defaults sean VCC o GND, respectivamente.
un nodo de tipo TRI_STATE_NODE con mltiples
asignaciones junta las seales directamente entre s. Un
nodo de este tipo con una nica asignacin es tratado
como un nodo tipo NODE
Copyright Guillermo Jaquenod,1999
la seccin VARIABLE: los nodos
Ejemplo elemental de diseo con especificacin
de nodos :
SUBDESIGN node_ex
( a, oe : INPUT ;
out : OUTPUT ;
c : BIDIR ; )
VARIABLE
b: NODE ;
t: TRI_STATE_NODE ;
BEGIN
b =a ;
out =b ;
t =TRI (a, oe) ;
c =t ;
END ;
a
out
oe
c
t
node_ex
b
FUNCTION node_ex (a,oe)
RETURNS (c,out);
Copyright Guillermo Jaquenod,1999
declaracin de mquinas de estado
Se puede crear una mquina de estados declarando su
nombre, sus estados, y opcionalmente sus bits
La declaracin se compone de:
el nombre simblico, seguido de (:) y la palabra clave
MACHINE
(opcional) el nombre de los bits de estado, con la frase clave
OF BITS (..)
la lista de estados, compuesta por la frase clave WITH
STATES (..) con la enumeracin de los nombres simblicos
de los estados, separados por comas, con sus
asignaciones opcionales.
Copyright Guillermo Jaquenod,1999
declaracin de mquinas de estado
Ejemplo:
VARIABLE
me : MACHINE
WITH STATES (e1,e2,e3);
nombre de
la mquina
estados:
e1,e2 y e3
se fuerza a que use tres bits q1, q2, q3 (opcional)
se fija el valor de
los bits para cada
uno de los estados
(op[cional)
el primer estado
es el de RESET
VARIABLE
me : MACHINE
OF BITS (q1,q2,q3)
WITH STATES (
e1 = B000,
e2 = B010,
e3 = B111);
Copyright Guillermo Jaquenod,1999
AHDL: la seccin LOGIC
Define las operaciones lgicas del
.tdf
Se encuadra entre las palabras
clave BEGIN y END;
Se compone de
Ecuaciones: lgicas y de control
Expresiones: Case, If_Then,
Tablas de verdad, Default,
If_Generate, y For_Generate
Referencias: a funciones
In_Line
TITULO
INCLUDE
CONSTANT
DEFINE
PARAMETERS
PROTOTYPE
OPTIONS
ASSERT
SUBDESIGN
VARIABLE
LOGIC
Copyright Guillermo Jaquenod,1999
La seccin LOGIC: operadores
Operadores
+
-
!
^
MOD
DIV
*
LOG2
+
-
==
!=
>
>=
<
<=
& o AND
!& o NAND
$ o XOR
!$ o XNOR
# u OR
!# o NOR
?
Ejemplo
+1
-1
!a
a ^ 2
4 MOD 2
4 DIV 2
a * 2
LOG2(4-3)
1+1
2-1
5 == 5
5 != 4
5 > 4
5 >= 5
a < b+2
a <= b+2
a & b
1 !& 0
1 $ 1
1 !$ 1
a # b
a !# b
(5<4)?3:4
Descripcin
+unario
- unario
NOT lgico
exponente
mdulo
divisin
producto
log.base 2
suma
resta
igualdad
desigualdad
mayor
mayor o igual
menor
menor o igual
AND
AND negada
OR exclusivo
XOR negado
OR inclusivo
OR negado
IF compacto
Prioridad
1
1
1
1
2
2
2
2
3
3
4
4
4
4
4
4
5
5
6
6
7
7
8
La seccin lgica evala
expresiones, usando
operadores y reglas de
precedencia.
La expresiones pueden ser
lgicas y aritmticas.
Copyright Guillermo Jaquenod,1999
Seccin LOGIC: ecuaciones lgicas
Ejemplo de un diseo simple usando ecuaciones lgicas
Booleanas
SUBDESIGN boole1
(a0, a1, a2 : INPUT;
out1, out2 : OUTPUT;)
BEGIN
out1 = a1 & !a0;
out2 = out1 # a2;
END;
boole1
AND
OR
a0
a1
a2
out1
out2
boole1
FUNCTION boole1 (a0,a1,a2)
RETURNS (out1,out2);
Copyright Guillermo Jaquenod,1999
Seccin LOGIC: ecuaciones lgicas
Ejemplo de una ecuacin lgica compleja
a[ ] = ((c[ ] & -B001101) + e[6..1]) # (p,q,r,s,t,v);
equivale a c[ ] & B110011
es el grupo (c[6]&1,c[5]&1,c[4]&0,c[3]&0,c[2]&1,c[1]&1)
minimiza a (c[6],c[5],0,0,c[2],c[1])
estos dos grupos se suman de forma
numrica, mediante adders
entre estos dos grupos se hace el OR, bit a bit
c[6] c[5] 0 0 c[2] c[1]
e[6] e[5] e[4] e[3] e[2] e[1]
... ... ... ... ... ...
+
Copyright Guillermo Jaquenod,1999
Seccin LOGIC: ecuaciones lgicas
a[ ] = ((c[ ] & -B001101) + e[6..1]) # (p,q,r,s,t,v);
a[6] a[5] a[4] a[3] a[2] a[1]
OR
HA FA HA HA FA FA
OR OR OR OR OR
p
q
r
s
t
v
c[6] c[5] c[2] c[1]
e[6] e[5] e[4] e[3] e[2] e[1]
Copyright Guillermo Jaquenod,1999
La seccin LOGIC: la sentencia CASE
CASE f[ ].q IS
WHEN H00 =>
f[ ].d = 0;
WHEN H01 =>
f[ ].d = count[ ].q+1;
WHEN H02, H03, H04 =>
f[].d = addr[];
WHEN OTHERS =>
f[ ].d = f[ ].q;
END CASE;
fin de la
sentencia CASE
expresiones a
activar si la expresin
coincide
expresiones a activar
si ninguna coincide
expresin
a evaluar
condiciones
CONSTANTES!
cuya exclusin
puede ser
verificada en la
compilacin
inicio de la
sentencia CASE
Copyright Guillermo Jaquenod,1999
La seccin LOGIC:
la construccin IF..THEN
Permite definir una relacin
salidas=f(entradas)
parecida a CASE
Su forma general es como la
del ejemplo:
condiciones
VARIABLES
a evaluar en
hardware
expresiones
de activacin
condicional
IF a[ ] ==b[ ] THEN
f[ ].d =addr[ ] +1;
ELSIF g3 $ g4 THEN
f[ ].d =addr[ ];
ELSE
d =VCC;
END IF;
Copyright Guillermo Jaquenod,1999
IF..THEN versus CASE
CASE evala una nica expresin y luego detecta su coincidencia
con expresiones constantes cuyo carcter excluyente entre s
puede ser verificado por software en la compilacin
IF..THEN evala varias expresiones en las sentencias IF.. y
ELSIF.., donde la posible validez de varias expresiones fuerza a
que el compilador genere hardware para impedirlo
Use CASE en lugar de IF..THEN siempre que le sea posible!!!
Si la construccin dice
IF a THEN c=d;
ELSIF b THEN c=e;
ELSE c=f;
END IF:
El compilador lo traduce a:
IF a THEN c=d;
END IF;
IF !a & b THEN c=e;
END IF;
IF !a & !b THEN c=f;
END IF;
Copyright Guillermo Jaquenod,1999
ms sobre IF..THEN
Lo parecido:
Una construccin IF..THEN..ELSE en software genera cdigo
tanto para analizar las distintas condiciones como para la
ejecucin de las sentencias.
De igual modo, una construccin IF..THEN..ELSE en AHDL
genera hardware tanto para analizar las distintas condiciones
como para la ejecucin de las sentencias.
Lo diferente:
El carcter secuencial del software hace que al analizar la
validez de la condicin de un ELSIF est implcito la invalidez
de las condiciones de las sentencias IF y ELSIF previas.
La operacin en paralelo del hardware hace que esta
presuncin no valga.
HARDWARE versus SOFTWARE
Copyright Guillermo Jaquenod,1999
Seccin LOGIC: tablas de verdad
Usadas para especificar lgica combinacional en general y tablas de
transiciones en mquinas de estado
La primera lnea indica el orden de las variables, y las lneas siguientes
indican la correspondencia de valores
SUBDESIGN cod_prioridad
( menor, medio, mayor : INPUT;
priori[1..0] : OUTPUT; )
BEGIN
TABLE
mayor, medio, menor => priori[ ];
1 , X , X => 3;
0 , 1 , X => 2;
0 , 0 , 1 => 1;
0 , 0 , 0 => 0;
END TABLE;
END;
tabla de verdad
combinatoria.
Permite el uso de
trminos dont care!
mayor
medio
menor
priori
FUNCTION cod_prioridad
(menor,medio,mayor)
RETURNS (priori[1..0]);
Copyright Guillermo Jaquenod,1999
Maquinas de estado
tipo Mealy y tipo Moore
memoria
E(k+1)=EF=f(ent{},EA)
reloj
E(k)=EA
ent{}
Bloque
combinatorio
SAL{} = g(E(k))
SAL{} = g(E(k),ent{})
MEALY
MOORE
Copyright Guillermo Jaquenod,1999
SUBDESIGN digilock (clk, reset, ent0, ent1 :INPUT; sali :OUTPUT;)
VARIABLE ss: MACHINE WITH STATES (s0,s1,s2,s3,s4);
BEGIN
ss.clk = clk; ss.reset = reset;
TABLE
ss, ent0, ent1 => sali, ss;
s0, X, X => 1, s1;
s1, X, X => 1, s3;
s2, 0, 0 => 1, s1;
s2, 1, 1 => 1, s1;
s2, 0, 1 => 1, s0;
s2, 1, 0 => 1, s3;
s3, X, X => 0, s4;
s4, X, X => 0, s2;
END TABLE;
END;
Tablas de verdad y
mquinas de estado
XX/0
S0
S1
S2
S3
S4
00/1
XX/0
01/1
10/1
11/1
XX/1
XX/1
digilock
sali
ent0
ent1
reset
clock
FUNCTION digilock
(ent0,ent1,reset,clock)
RETURNS (sali);
Copyright Guillermo Jaquenod,1999
Maquinas de estado
tipo Mealy
nMaquinas tipo Mealy: las salidas son
funcion de las entradas y del estado actual
SUBDESIGN mealy
(
clk : INPUT;
reset : INPUT;
y : INPUT;
z : OUTPUT;
)
VARIABLE
ss: MACHINE WITH
STATES (s0, s1,
s2, s3);
BEGIN
ss.clk = clk;
ss.reset = reset;
TABLE
% estado entrada salida estado %
% actual actual futura futuro %
ss, y => z, ss;
s0, 0 => 0, s0;
s0, 1 => 1, s1;
s1, 0 => 1, s1;
s1, 1 => 0, s2;
s2, 0 => 0, s2;
s2, 1 => 1, s3;
s3, 0 => 0, s3;
s3, 1 => 1, s0;
END TABLE;
END;
Copyright Guillermo Jaquenod,1999
Maquinas de estado tipo Moore
n Maquinas tipo Moore: las salidas son
funcion solo del estado actual
SUBDESIGN moore
(
clk : INPUT;
reset : INPUT;
y : INPUT;
z : OUTPUT;
)
VARIABLE
ss: MACHINE OF BITS
(z)
WITH STATES
(s0=0,
s1 = 1,
s2 = 1,
s3 = 0);
BEGIN
ss.clk = clk;
ss.reset = reset;
TABLE
ss, y => ss;
s0, 0 => s0;
s0, 1 => s2;
s1, 0 => s0;
s1, 1 => s2;
s2, 0 => s2;
s2, 1 => s3;
s3, 0 => s3;
s3, 1 => s1;
END TABLE;
TABLE
ss => z;
s0 => GND;
s1 => VCC;
s2 => VCC;
s3 => GND;
END TABLE;
END;
Copyright Guillermo Jaquenod,1999
La seccin LOGIC: IF..GENERATE
Es una sentencia para controlar la compilacin condicional de
hardware
Puede ser usada tanto en la seccin LOGIC como en la
seccin VARIABLE
Usa las keywords IF..GENERATE, ELSE GENERATE, END
GENERATE;
IF DEVICE_FAMILY == FLEX8K GENERATE
c[ ] = 8kadder (a[ ], b[ ], cin);
ELSE GENERATE
c[ ] = otroadder (a[ ], b[ ], cin);
END GENERATE;
Copyright Guillermo Jaquenod,1999
PARAMETERS N_ADDERS;
SUBDESIGN suma_var (
a[N_ADDERS..1], b[N_ADDERS..1],cin: INPUT;
c[N_ADDERS..1], cout : OUTPUT;
)
VARIABLE cy [(N_ADDERS+1)..1] : NODE;
BEGIN
cy[1] = cin;
FOR i IN 1 TO N_ADDERS GENERATE
c[i] = a[i] $ b[i] $ cy[i];
cy [i+1] = a[i]&b[i] # a[i]&cy[i] # b[i]&cy[i];
END GENERATE;
cout = cy [N_ADDERS+1];
END;
La seccin LOGIC: FOR.GENERATE
n Es una sentencia de
control de compilacin util
para especificar hardware
en forma parametrizada
n Usa las keywords
FOR..IN..TO..GENERATE,
END GENERATE;
n Ejemplo: definir el
hardware de un sumador
en base a una cascada de
full-adders en forma
paramtrica
ecuacin de
un full-adder
Copyright Guillermo Jaquenod,1999
AHDL: mas secciones, las
macrofunciones y las LPMs
La seccion LOGIC: los DEFAULTS
La seccion ASSERT
La seccion DEFINE
El uso de macrofunciones y LPMs
Copyright Guillermo Jaquenod,1999
La seccin LOGIC: DEFAULTS
Permite que el compilador sepa
qu valor asignar a una variable si
el programa deja este valor sin
definir
Facilita la autodocumentacin
Usa las keywords DEFAULTS y
END DEFAULTS
Slo es posible una sentencia
DEFAULTS en la seccin LOGIC
Ejemplo:
BEGIN
DEFAULTS
no_a = VCC;
END DEFAULTS;
IF y & z THEN
no_a = GND;
END IF;
END;
el estado inactivo de no_a se
define como VCC ==> es un
seal activa baja
slo es necesario especificar
cuando no_a se activa
Copyright Guillermo Jaquenod,1999
AHDL: la seccin DEFINE
Es un campo opcional, mltiple
Permite definir una funcin evaluable, que
devuelve un valor en base a sus
argumentos
El compilador evala las expresiones y
calcula el valor numrico
La expresin DEFINE no genera hardware
Ejemplo:
TITULO
INCLUDE
CONSTANT
DEFINE
argumentos
DEFINE MAX(a,b) = (a > b) ? a : b ;
keyword DEFINE
nombre de la funcin
expresin
aritmtica
a evaluar
Copyright Guillermo Jaquenod,1999
AHDL: la seccin ASSERT
ASSERT permite testear la validez de
una expresin que use parmetros,
nmeros, funciones evaluables, o el
estado de uso de una puerta
ASSERT se activa si la expresin es
falsa o nula. En ese caso el mensaje que
sigue al trmino REPORT es mostrado
por el Message Processor
TITULO
INCLUDE
CONSTANT
DEFINE
PARAMETERS
PROTOTYPE
OPTIONS
ASSERT
ASSERT (ANCHO > 0)
REPORT ANCHO (%) debe ser entero positivo ANCHO
SEVERITY ERROR;
Copyright Guillermo Jaquenod,1999
AHDL y las macrofunciones
Se denomina macrofuncion a un modulo de menor jerarquia,
cuando este es empleado dentro de uno de mayor nivel
El sistema MAX+PLUS II provee en forma estandar, a la manera
de macrofunciones:
Mas de 300 componentes de la familia TTL
Algunas funciones propias de ALTERA
Con ellos se dispone de soluciones para el diseno de Sumadores,
Unidades Aritmetico Logicas (ALUs), Latches, Multiplicadores,
Buffers, Multiplexadores, Comparadores, Generadores y
verificadores de Paridad, Contadores, Registros, Codificadores y
Decodificadores, Shift Registers, Filtros Digitales, Elementos de
memoria, Circuitos para deteccion y correccion de errores,
Funciones SSI, y algunos mas
Copyright Guillermo Jaquenod,1999
Como se usa una macrofuncion?
El proceso de uso de una macrofuncion consta de tres etapas:
Definicion: esta parte implica el ingreso del prototipo de la
<funcion>, ya sea directamente o a traves de un archivo de
INCLUDE. Esto permite que al instanciarse una variable de este
tipo (ya sea en la seccion variable o por una referencia in_line) el
compilador sepa cuantas son, y cual es el nombre y tipo de las
puertas de la <funcion>.
Instanciacion: al instanciar una variable declarandola como de
tipo <macrofuncion>, cuando se le asigna un <nombre>
Referenciacion: al referenciar la variable <nombre>, las puertas
de esta variable tendran similar nombre a las puertas de la
<funcion>
Copyright Guillermo Jaquenod,1999
Include 7483.inc
Include 7483.inc
Ejemplo de uso de una
macrofuncion
VARIABLE
misuma: 7483;
ope1[3..0],ope2[3..0] : NODE;
resulta[3..0], arrastre : NODE;
VARIABLE
misuma: 7483;
ope1[3..0],ope2[3..0] : NODE;
resulta[3..0], arrastre : NODE;
misuma.a[] = ope1[];
misuma.b[] = ope2[];
resulta[] = misuma.s[];
arrastre = misuma.c4;
.
misuma.a[] = ope1[];
misuma.b[] = ope2[];
resulta[] = misuma.s[];
arrastre = misuma.c4;
.
Defino el prototipo de la funcion,
siendo equivalente a haber
escrito:
FUNCTION 7483 (a[4..1], b[4..1], c0)
RETURNS (s[4..1], c4);
Creo una instancia de sumador,
llamada misuma, de tipo 7483
Actuo sobre las puertas de esa
instancia, cuyo nombre se copia
del de las puertas del prototipo
Seccion VARIABLE
Seccion LOGICA
Seccion INCLUDE
Copyright Guillermo Jaquenod,1999
AHDL y las LPMs
LPM: Consorcio de fabricantes de software y de componentes
Bibliotecas completas y consistentes de Cadence, Intergraph,
Mentor Graphics, y Viewlogic support
Los fabricantes de componentes aseguran el uso eficiente de sus
recursos
Bloques constructivos genricos y parametrizados
Compuertas, FlipFlops,Sumador/Restador, Comparador,
Contadores, Decodificadores, Latches, Multiplicadores,
Multiplexadores, RAM/ROM, etc.
Parametrizados. Por ejemplo LPM_COUNTER ( LPM_WIDTH=8,
LPM_DIRECTION=Up, etc.)
Biblioteca estndar
La familia TTL de la prxima etapa
Copyright Guillermo Jaquenod,1999
Como se usa una LPM?
Definicion: similar al uso de una macrofuncion, el prototipo
indica no solo los nombres de las puertas, sino tambien el de
todos los posibles parametros
Instanciacion: al definir una variable usando LPMs, no solo se
crea una variable de tipo <funcion>, con el <nombre> dado,
sino que en ese momento tambien debe darse un cierto valor a
los parametros. Si no se define este valor se asumira para el
parametro su valor de default, y si no lo tuviera se dara un error
de compilacion
Referenciacion: similar al caso de la macrofuncion, al
referenciar la variable <nombre>, las puertas de esta variable
tendran el mismo nombre que las puertas de la <funcion>
Copyright Guillermo Jaquenod,1999
Ejemplo de uso de una LPM
INCLUDE "lpm_add_sub.inc";
SUBDESIGN lpm_add2 (
a[8..1], b[8..1] : INPUT;
c[8..1], carry_out : OUTPUT;)
VARIABLE
8bitadder : lpm_add_sub
WITH (LPM_WIDTH=8,
LPM_REPRESENTATION="unsigned");
BEGIN
8bitadder.cin = GND
8bitadder.dataa[] = a[]
8bitadder.datab[] = b[]
8bitadder.add_sub = GND
c[] = 8bitadder.result[]
carry_out = 8bitadder.cout
END;
DEFINICION: este INCLUDE es equivalente
a haber ingresado lo siguiente:
FUNCTION lpm_add_sub (
dataa[LPM_WIDTH-1..0],
datab[LPM_WIDTH-1..0],
cin, add_sub, clock, aclr)
WITH (LPM_WIDTH,
LPM_REPRESENTATION,
LPM_DIRECTION, LPM_PIPELINE,
ONE_INPUT_IS_CONSTANT)
RETURNS
(result[LPM_WIDTH-1..0], cout, overflow);
INSTANCIACION: se define que sera de 8
bits y sumara numeros sin signo
USO: se usa el nombre de la instancia con
los nombres de puertas de la LPM
Copyright Guillermo Jaquenod,1999
taller en AHDL #1
Especifique un registro parametrizado de n bits
(tipo 74LS374, con Reset asincronico activo bajo
y salida TRI-STATE)
Escriba el prototipo de su diseo
Cree el smbolo de su diseo
Creacin de un registro de n-Bits
Copyright Guillermo Jaquenod,1999
taller en AHDL #1
PARAMETERS ( NUM_FF);
SUBDESIGN mi_ls374 (
d[NUM_FF-1..0], clk, oe : INPUT;
q[NUM_FF-1..0] : OUTPUT;)
VARIABLE
ff[NUM_FF-1..0] : DFF;
BEGIN
ff[ ].clk = clk;
ff[ ].d = d[ ];
FOR i IN 0 TO NUM_FF-1 GENERATE
q[i] = TRI (ff[i].q, oe);
END GENERATE;
END;
FUNCTION mi_ls374
(d[NUM_FF-1..0], clk, oe)
WITH (NUM_FF=8)
RETURNS (q[NUM_FF-1..0]);
dn-1
...
d5
d4
d3
d2
d1
d0
oe
clk
qn-1
...
q5
q4
q3
q2
q1
q0
Copyright Guillermo Jaquenod,1999
taller en AHDL #2
Especifique un contador UP/DOWN parametrizado de
n bits, con:
nClearS: clear sincrnico (activo bajo)
nLoad: carga sincrnica (activa baja)
ClearA: clear asincrnico (activo alto)
Escriba el prototipo de su diseo
Cree el smbolo de su diseo
Creacin de un contador up/down de n-Bits
Copyright Guillermo Jaquenod,1999
taller en AHDL #2 (b)
PARAMETERS ( NUM_FF);
SUBDESIGN mi_udcnt (
clk,ud,ncl,nld,clra,d[NUM_FF-1..0]: INPUT;
q[NUM_FF-1..0] : OUTPUT;
)
VARIABLE
ff[NUM_FF-1..0] : DFF;
BEGIN
ff[ ].clk = clk; ff[ ].reset = clra;
IF ncl == GND THEN ff[].d = 0;
ELSIF nld == GND THEN ff[].d = d[];
ELSIF ud == VCC THEN ff[].d = ff[].q + 1;
ELSE ff[].d = ff[].q - 1;
END IF;
END;
Pregunta: porqu se
us IF..THEN..ELSE
en lugar de CASE?
nload
nclr
clra
clock
d0
..
..
..
d(n-1)
q0
..
..
q(n-1)
FUNCTION mi_udcnt (clk,ud
ncl, nld, clra ,d[NUM_FF-1..0])
WITH (NUM_FF)
RETURNS (q[NUM_FF-1..0]);
u/d
Copyright Guillermo Jaquenod,1999
taller en AHDL #3:
Diseo de un semaforo
Se pretende disear un semaforo, cuya secuencia
dependa de una entrada asociada a un sensor de luz
El semaforo tendra dos ciclos de operacin: uno diurno y
otro nocturno, de acuerdo al dibujo siguiente
Se supone que en cada flanco de reloj se produce un
cambio de estado
El diseo debe ser realizado en AHDL y empleando
maquinas de estado (primitiva MACHINE)
La compilacion debe ser usando como dispositivo al MAX
EPM7128SLC84-15
Analizar la forma de minimizar el uso de macroceldas
Copyright Guillermo Jaquenod,1999
Luz == 1
Luz == 0
Luz
Luz == X
Luz == X
Luz == X
Luz == X
Ciclo diurno Ciclo nocturno
taller en AHDL #3:
Diseo de un semaforo
Copyright Guillermo Jaquenod,1999
SUBDESIGN semaf01 (
timer,init,fotocelda : INPUT;
luz_roja,luz_amarilla,luz_verde : OUTPUT;)
VARIABLE
poste: MACHINE
OF BITS (rojo,amarillo,verde)
WITH STATES (
pase = B"001",alerta = B"010",stop = "100",
prepare = B"110",oscuro = B"000");
BEGIN
poste.clk = timer; poste.reset = init;
TABLE
poste,fotocelda => poste;
pase, X => alerta;
alerta, 0 => oscuro;
alerta, 1 => stop;
stop, X => prepare;
prepare, X => pase;
oscuro, X => alerta;
END TABLE;
(luz_roja,luz_amarilla,luz_verde)=
(poste.rojo,poste.amarillo,poste.verde);
END;
Copyright Guillermo Jaquenod,1999
Se desea realizar un sumador/acumulador parametrizado
para numeros sin signo (rango para n bits: 0..(2^n)-1)
Si en una suma se supera el valor maximo, el valor
registrado debe quedar saturado al maximo, y un
indicador satur debe marcar este suceso
El circuito tiene una linea de puesta a cero, y debe poder
realizar una suma en cada ciclo de reloj
El diseno debe ser realizado en AHDL, empleando
parametros y LPMs
Sumador acumulador con
saturacion
Copyright Guillermo Jaquenod,1999
S
U
M
A
D
O
R
S
A
T
U
R
A
D
O
R
A
C
U
M
U
L
A
D
O
R
Sumador acumulador con
saturacion
Cout
sumandos
suma
acumulada
Registro
de
saturacion
clear clock
satur
Copyright Guillermo Jaquenod,1999
Disenar un sistema de conteo, multiplexado y display con UPx
El reloj de 8 MHz, debe ser dividido por 2^23 para llegar a cerca
de 1 Hertz, y con el actualizar un contador BCD de tres digitos
Las salidas de los contadores seran multiplexadas para excitar
un codificador BCD a 7 segmentos y desde alli a un display
A partir de dicha senal de control del multiplexado tambien se
generaran tres salidas de seleccin de digito
El diseno debe ser escrito en AHDL mediante LPMs
Debe ser sincronico, empleando para TODOS los contadores el
mismo clock global de 8MHz
Las salidas de excitacin de segmentos y de seleccin de
digitos son activas en 0.
Contador/Reloj usando la UPx
Copyright Guillermo Jaquenod,1999
PRESCALER DE 23 ETAPAS
CONTADOR
BCD
DECENAS
B
C
D
A
7
S
E
G
M
E
N
T
O
S
CONTADOR
BCD
UNIDADES
CONTADOR
BCD
CENTENAS
8 MHz
Contador/Reloj en hardware
Copyright Guillermo Jaquenod,1999
Seal Pata del chip usando J1
Selector digito Centenas 49
Selector digito Decenas 51
Selector digito Unidades 48
Segmento A 40
Segmento B 41
Segmento C 35
Segmento D 36
Segmento E 33
Segmento F 39
Segmento G 37
Contador/Reloj en hardware
a
b
c
d
e
f
g
epm7128slc84
definir las patas 81
y 63 como salidas
forzadas a 0
definir las patas 80
y 64 como entradas
sin conectar
Copyright Guillermo Jaquenod,1999
Bibliografa
Thomas & Moorby. The Verilog Hardware Description Language,
4th.Edition. Kluwer Academic Publishers, 1998.
Michael J.S.Smith. Application Specific Integrated Circuits. Addison
Wesley 1997.
ALTERA Corp. MAX+PLUS II VHDL, Version 7.1. Altera Corp.,
December 1996.
J.Bhasker. A VHDL Primer, Revised Edition. Prentice Hall 1995.
S.S.Leung & M.AA.Shanblatt. ASIC System Design with VHDL: A
Paradigm. 2nd.Edition, Kluwer Academic Publishers, 1989
L.Ters et al. VHDL Lenguaje Estndar de Diseo Electrnico.
McGraw Hill 1998
J.Bhasker. A Guide to VHDL Syntax. Prentice Hall 1995.