Está en la página 1de 58

5/2/2006 1

Lenguaje de descripcin de
Hardware VHSIC
VHDL
Laboratorio de diseo digital
Ingeniera Electrnica
5/2/2006 2
VHDL: Antecedentes histricos
Primera descripcin de un diseo
mediante un lenguaje
Necesidad de intercambio
de informacin
Herramientas EDA
NETLIST
Describe los componentes de un circuito y su interconexin
El formato EDIF (Electronic Design Interchange Format)
es un estndar de los lenguajes de tipo Netlist
5/2/2006 3
VHDL: Antecedentes histricos
Uso de los lenguajes de tipo Netlist
Sugiere la idea de una descripcin de mayor nivel
de abstraccin (descripcin funcional)
Un lenguaje permite la edicin ms rpida y sencilla
Una descripcin con esquemas resulta ms fcil de entender
5/2/2006 4
VHDL: Antecedentes histricos
Necesidad de estandarizar los diseos
DoD
+
IEEE
Patrocinan el desarrollo en los 80s
Es estndar de IEEE en 1987
VHDL-87
El estndar se ampla en 1993
VHDL-93
Existen otros HDL populares como ABEL y VERILOG
5/2/2006 5
VHDL: Evolucin
Se inicia como un leguaje de modelado y especificacin.
Ligado a actividades de
Documentacin
Simulacin
Luego se incorporan herramientas de sntesis
capaces de manejar este tipo de descripciones
Ambientes integrados de diseo de ASICs
5/2/2006 6
VHDL: Evolucin
Es un lenguaje para el modelado, simulacin lgica
dirigida por eventos y sntesis de sistemas de Hardware
Atraviesa verticalmente los niveles
de abstraccin de la descripcin
desde el ms alto al ms bajo
Sntesis
Subsisten problemas y algunas construcciones
de alto nivel no resultan sintetizables
Depende de la herramienta
5/2/2006 7
VHDL: Ventajas:
Es un estndar
Facilita la documentacin, minimiza los errores
de comunicacin en el equipo de desarrollo e
incrementa la portabilidad de los diseos.
Flexibilidad
Distintas metodologas de diseo: Top-down,
Bottom-up, diseo jerrquico.
Diversos niveles de descripcin en los componentes
de un mismo circuito.
5/2/2006 8
VHDL:Ventajas
Independencia tecnolgica.
Los diseos pueden implementarse en
dispositivos de diferentes tecnologas.
Bibliotecas y paquetes.
Gestin de diseo entre miembros
de equipos de trabajo grandes.
Diseo enfocado a la reutilizacin.
5/2/2006 9
VHDL como lenguaje de alto nivel
Lenguaje fuertemente tipado
El compilador no permite asignar
un valor a un objeto a menos que
coincida con el tipo declarado
previamente para ese objeto.
Programas ms confiables y fciles de depurar
Necesidad de conversiones de tipo
5/2/2006 10
VHDL como lenguaje de alto nivel
Potente control de flujo
Control de condiciones: if-then, case
Control de iteraciones: for, while
Desarrollo y utilizacin de bibliotecas de diseo
Estructuracin de cdigo con funciones y procedimientos
5/2/2006 11
Flujo de diseo VHDL
Sntesis
Mapeo, rutas
y ubicacin
Verificacin
temporal
Anlisis Cdigo Compilacin Simulacin
Componente
frontal
Componente posterior
5/2/2006 12
VHDL como lenguaje de alto nivel
1 OBJETIVO Modelar Hardware
Modelo de estructura
VHDL incorpora
tres caractersticas.
Modelo de concurrencia
Modelo de tiempo
5/2/2006 13
VHDL: Modelo de estructura
Componentes y jerarqua
Dispositivo
VHDL
Entidad
Arquitectura
Declaracin de I/O
Descripcin
comportamental
Distintos
estilos
Interfaz
5/2/2006 14
VHDL: Modelo de estructura
Programa VHDL
Entidad
Archivo de texto
Arquitectura
Se pueden definir mltiples arquitecturas para una entidad.
Una entidad de nivel superior puede instanciar
mltiples entidades de niveles inferiores.
Diseo jerrquico
5/2/2006 15
VHDL: Modelo de estructura, uso jerrquico
Arquitectura A
Entidad A
Arquitectura C
Entidad C
Arquitectura B
Entidad B
Arquitectura D
Entidad D
Arquitectura E
Entidad E
5/2/2006 16
Objetos VHDL: Constantes, variables y seales
Un objeto VHDL es un elemento que guarda un valor
de un tipo de datos especfico. Sobre l pueden
invocarse operaciones coherentes con su tipo.
Compilador
Los objetos VHDL deben declararse en forma previa a
su utilizacin en cualquier unidad de diseo.
5/2/2006 17
Objetos VHDL: Constantes, variables y seales
Contribuyen a la legibilidad, mantenimiento
y portabilidad del programa. No cambian su
valor una vez inicializadas.
Constantes
constant nombre_constante: tipo := expresin ;
Cambian su valor con sentencias de asignacin.
En general son locales a los procesos.
No tienen significado fsico.
Variables
variable nombre_variable: tipo ;
nombre_variable := expresin ;
5/2/2006 18
Objetos VHDL : Constantes, variables y seales
Las seales son abstracciones de conexiones fsicas o buses.
Cambian su valor con sentencias de asignacin.
Tienen una analoga fsica directa.
Interconectan componentes de un circuito.
Sincronizan la ejecucin y suspencin de procesos.
Son visibles para todos los procesos y bloques de una
arquitectura.
Los puertos de una entidad son seales.
Seales
signal nombre_seal: tipo ;
nombre_seal <= expresin ;
5/2/2006 19
Componentes bsicos: Declaracin de entidad
Define el mdulo
entity nombre_entidad is
[ generic (lista propiedades);]
[ port (nombre_seal : modo tipo_seal );
port (nombre_seal : modo tipo_seal) ;
............
port (nombre_seal : modo tipo_seal ) ;]
[ declaraciones ]
[ begin
sentencias]
end [ nombre_entidad] ;
5/2/2006 20
Componentes bsicos: Declaracin de entidad
entity nombre_entidad is
end ;
Entidad
mnima
Permite utilizar parmetros en
la definicin de la entidad
generic
Al instanciar el componente se establece el valor
Ejemplo: cantidad de bits de un sumador
5/2/2006 21
Componentes bsicos: Declaracin de entidad
in: Entrada, se lee. No se le puede asignar valor.
out: Salida, se le asigna valor. No se puede leer.
inout: Entrada / Salida. Puede ser escrito por mltiples
fuentes, se puede producir la destruccin del chip.
Define las entradas y salidas
port
port (nombre_seal : modo tipo_seal) ;
Modo
Define los valores y operaciones legales
Tipo
5/2/2006 22
Componentes bsicos:Declaracin de arquitectura
architecture nombre_arquitectura of entidad is
[declaraciones]
begin
[sentencias concurrentes]
end [nombre_arquitectura];
Define el
comportamiento
del mdulo
Las sentencias concurrentes se
ejecutan en forma simultnea.
Se modela
HARDWARE
Estilo estructural
Estilo flujo de datos
Estilo algortmico
La arquitectura puede
modelarse en tres estilos
5/2/2006 23
Modelado de circuitos combinacionales
Problema:
pnico
habilitar
?
alarma
salir
puerta
ventana
garage
La salida alarma es 1 si pnico es 1, o si habilitar
es 1,salir es 0 y la casa no es segura. La casa es
segura si puerta, ventana y garage son 1.
5/2/2006 24
Modelado del circuito con esquemas:
pnico
habilitar
salir
ventana
puerta
garage
alarma
5/2/2006 25
Estilos de descripcin VHDL:
Descripcin Estructural
Descripcin de Flujo de datos
Descripcin Algortmica
N
i
v
e
l

d
e

A
b
s
t
r
a
c
c
i

n
Lista de componentes interconectados
interconexin entre objetos del lenguaje
Descripcin comportamental p. p. dicha
5/2/2006 26
Elementos de diseo Estructural:
Describe la estructura del circuito como
interconexn entre componentes
Descripcin similar a un NETLIST
(lenguaje de descripcin de estructura)
La descripcin de tipo NETLIST se corresponde en
forma directa con su implementacin en hardware
Sntesis directa
de la descripcin
5/2/2006 27
--The IEEE standard 1164 package, declares std_logic, rising_edge(), etc.
library IEEE;
use IEEE.std_logic_1164.all;
entity alarma is
port ( panico, puerta,ventana,garage,salir,habilitar:in std_logic;
alarma: out std_logic
);
end alarma;
architecture alarm_est of alarma is
signal seguro: std_logic;
signal noseguro: std_logic;
signal nosalir: std_logic;
signal suena: std_logic;
component INV
port (I:in std_logic; O:out std_logic) ;
end component ;
component AND3
port (I0,I1,I2:in std_logic; O:out std_logic) ;
end component ;
component OR2
port (I0,I1:in std_logic; O:out std_logic) ;
end component ;
Estilo
Estructural
Modelado
VHDL
D
e
c
l
a
r
a
c
i
o
n
e
s
E
n
t
i
d
a
d
5/2/2006 28
begin
U1: INV
port map (
salir,nosalir
);
U2: AND3
port map (
garage,ventana,puerta,seguro
);
U3: INV
port map (
seguro,noseguro
);
U4: AND3
port map (
habilitar,nosalir,noseguro,suena
);
U5: OR2
port map (
panico,suena,alarma
);
end alarm_est;
Modelado
VHDL
Las sentencias expresan
la interconexin de los
componentes declarados
Estilo Netlist
Estilo
Estructural
(continuacin)
5/2/2006 29
Elementos de diseo Estructural:
Declaracin de componente:
component INV
port (I:in std_logic; O:out std_logic) ;
end component ;
Los componentes utilizados
deben estar definidos
Previamente en el diseo
Bibliotecas del entorno
Paquetes o bibliotecas adicionales
5/2/2006 30
Elementos de diseo Estructural:
Sentencia component:
U1: INV
port map ( salir,nosalir );
Nombre de una entidad ya definida
que se usar en la arquitectura.
Palabras clave que asocian una lista de los ports
de la entidad con seales en la arquitectura.
5/2/2006 31
Elementos de diseo de Flujo de Datos:
Describe el flujo de datos entre mdulos usando
ecuaciones de transferencia concurrentes.
Descripcin a nivel transferencia de registros (RTL)
Las estructuras a nivel RTL tienen una correspondencia
muy estrecha con su implementacin en hardware
Sntesis bastante directa
de la descripcin
5/2/2006 32
Elementos de diseo de Flujo de Datos:
Es un estilo de descripcin a mitad de camino entre una
descripcin estructural y una completamente abstracta
Describe interconexiones
entre objetos del lenguaje
Permite estructuras de tipo condicional
tpicas de una descripcin ms abstracta
Todas las sentencias de la descripcin son concurrentes.
5/2/2006 33
--The IEEE standard 1164 package, declares std_logic, rising_edge(), etc.
library IEEE;
use IEEE.std_logic_1164.all;
entity alarma is
port (
panico, puerta,ventana,garage,salir,habilitar:in std_logic;
alarma: out std_logic
);
end alarma;
architecture arch_flu of alarma is
signal seguro: std_logic;
signal noseguro: std_logic;
signal nosalir: std_logic;
signal suena: std_logic;
begin
nosalir <= not salir;
seguro <= puerta and garage and ventana;
noseguro <= not seguro;
suena <= habilitar and nosalir and noseguro;
alarma <= suena or panico;
end arch_flu;
Modelado
VHDL
Estilo
Flujo de Datos
Declaraciones
Sentencias
concurrentes
5/2/2006 34
VHDL: Modelo de concurrencia
Se modela HARDWARE usando SOFTWARE
Concurrente
Secuencial
Se utilizan sentencias concurrentes para describir el
comportamiento del circuito y poder simular.
Estas sentencias son
sensibles a seales
Los cambios en las
seales son eventos.
5/2/2006 35
VHDL: Modelo de tiempo
Dirigida por eventos
SIMULACIN
Mide el tiempo real
Ciclos de simulacin que se realizan
sin incrementos reales de tiempo
Interactan para soportar
concurrencia en la simulacin
Macroescala
Microescala
delay
Dos escalas
de tiempo
5/2/2006 36
VHDL: Modelo de concurrencia / Tiempo
Cada paso de simulacin consiste en la ejecucin
de una sentencia concurrente.
Cambian su valor al
finalizar cada ciclo
de simulacin
Seales
delay
Estos cambios disparan a
su vez otras sentencias
concurrentes
Otros pasos de
simulacin
5/2/2006 37
Elementos de diseo de Flujo de Datos:
Sentencias concurrentes que se disparan cuando cambia el
valor de alguno de los argumentos de las asignaciones.
Asignacin concurrente de seal:
nosalir <= not salir;
Asignacin condicional: WHEN ... ELSE
architecture mux_flu of mux is
begin
salida <= a when selec = 0 else b;
end mux_flu;
5/2/2006 38
Elementos de diseo de Flujo de Datos:
Asignacin con seleccin:WITH...SELECT...WHEN
with estado select
semaforo <= rojo when 01,
verde when 10,
amarillo when 11,
no funciona when others;
Se modela
Hardware
Simulaciones incorrectas o
imposibilidad de sntesis.
Expresiones con
valores indefinidos
Las asignacines condicional y con
seleccin deben cubrir todos los
posibles valores de la expresin
5/2/2006 39
Elementos de diseo algortmico:
Es una descripcin de funcionalidad
con un alto nivel de abstraccin.
Se necesitan instrucciones ms complejas para:
No es suficiente asignar valores a seales.
Realizar clculos.
Acumular resultados intermedios.
Repetir una secuencia de operaciones.
5/2/2006 40
Elementos de diseo algortmico:
Se necesitan instrucciones de ejecucin secuencial
similares a los lenguajes software de alto nivel
Sentencias concurrentes
bastante particulares.
PROCESOS
Describen comportamiento en forma secuencial
pero su ejecucin conjunta es concurrente
Introducen variables locales para soportar los clculos.
5/2/2006 41
Elementos de diseo algortmico:
PROCESOS
Instrucciones secuenciales.
Sensibles a
Sincronizan procesos entre s. SEALES
El significado en hardware es ms difuso, las instrucciones
se ejecutan cuando cambian ciertos argumentos.
Sntesis mucho
ms complicada
5/2/2006 42
--The IEEE standard 1164 package, declares std_logic, rising_edge(), etc.
library IEEE;
use IEEE.std_logic_1164.all;
entity alarma is
port (
panico,puerta,ventana,garage,salir,habilitar:in std_logic;
alarma: out std_logic
);
end alarma;
architecture arch_alarAlg of alarma is
begin
process (panico, puerta,ventana,garage,salir,habilitar)
variable nosalir, seguro,noseguro,suena: std_logic;
begin
nosalir := not salir;
seguro := ventana and puerta and garage;
noseguro := not seguro;
suena := noseguro and nosalir and habilitar;
alarma <= panico or suena;
end process;
end arch_alarAlg;
Estilo
Algortmico
Modelado
VHDL
5/2/2006 43
Elementos de diseo algortmico:
El bloque PROCESS
Compuesto por un conjunto de instrucciones secuenciales
Permite estructuras ms abstractas
como la ejecucin de bucles
En un programa puede haber varios bloques PROCESS
Cada bloque PROCESS es
una instruccin concurrente
5/2/2006 44
Elementos de diseo algortmico:
Cmo se activa el bloque PROCESS?
La forma habitual es con una lista de sensibilidad
Existe la posibilidad de usar un WAIT
explcito en algn lugar del bloque
5/2/2006 45
Elementos de diseo algortmico:
Activacin habitual del bloque PROCESS
process (panico, puerta,ventana,garage,salir,habilitar)
Lista de sensibilidad
Lista de
seales
Cada vez que cambia
alguna de las seales se
ejecuta el bloque
5/2/2006 46
Elementos de diseo algortmico:
Activacin del bloque PROCESS con wait
wait on lista-sensible until condicin for timeout
Los tres parmetros son optativos.
El que se verifique antes continuar la ejecucin del bloque.
Si el bloque tiene una lista sensible no puede tener wait.
wait on pulso;
wait until contador > 6;
wait on interrupcin for 25 ns;
wait on reloj, sensor until contador > 5 for 50 ns;
Ejemplos
5/2/2006 47
Elementos de diseo algortmico:
EJECUCION
El bloque PROCESS
tiene dos estados posibles
SUSPENDIDO
El proceso debe tener una lista sensible o un wait, en
caso contrario se ejecuta en forma indefinida.
En simulacin no se podra salir
nunca del lazo del process.
5/2/2006 48
Elementos de diseo algortmico:
Sentencia condicional IF...THEN...ELSE
if condicin then
sentencias
elsif condicin then
sentencias

else
sentencias
end if ;
Esta estructura puede anidarse.
elsif y else son optativas. Conviene
contemplar todos los posibles casos.
El resultado de la sntesis
est ms optimizado
5/2/2006 49
Elementos de diseo algortmico:
Sentencia condicional IF...THEN...ELSE
-- Ejecucin secuencial
process ( a, b, c )
begin
if a > b then
p <= 2;
elsif a > c then
p <= 3;
elsif (a = c and c = b) then
p <= 4
else p <= 5;
end if ;
end process ;
-- Ejecucin concurrente
p < = 2 when a > b else
3 when a > c else
4 when (a = c and c = b) else
5 ;
La lista sensible debe incluir todas las
seales cuyo cambio es importante.
En asignaciones tiene su
equivalente concurrente.
5/2/2006 50
Elementos de diseo algortmico:
Sentencia de seleccin CASE
case expresin is
when caso1 = >
instrucciones
when caso2 = >
instrucciones

when others = >
instrucciones
end case ;
-- Ejemplo
case nota is
when 10 = > acta <= SOB;
when 8 to 9 = > acta <= DIS;
when 6 to 7 => acta <= BUE;
when 4 | 5 => acta <= APR;
when others = > acta <= INS;
end case ;
La expresin de seleccin debe ser discreta.
No puede haber casos duplicados.
Se deben cubrir todas las opciones de seleccin.
5/2/2006 51
Elementos de diseo algortmico:
Sentencia de bucles WHILE Y FOR
bucle_id:
for identificador in rango loop
instrucciones
end loop;
Entero o enumerado
Bucle_id:
while condicin loop
instrucciones
end loop;
-- Lazo while
cuenta := 5;
while cuenta >= 0 loop
tabla (cuenta) <= cuenta * 2;
cuenta := cuenta - 1;
end loop;
-- Lazo for
for cuenta in 5 downto 0 loop
tabla (cuenta) <= cuenta * 2;
end loop;
5/2/2006 52
Elementos de diseo algortmico:
Interrupcin de los bucles
Detiene una iteracin del
bucle y pasa a la siguiente
next bucle_id when condicin ;
Detiene la ejecucin
y sale del bucle
exit bucle_id when condicin ;
fuera:
while a < 10 loop
-- varias sentencias
dentro:
for i in 0 to 10 loop;
-- varias sentencias
next fuera when i = a;
end loop dentro;
end loop fuera;
Interrumpe el for
y sigue en el while
5/2/2006 53
Sentencia configure:
Cuando un diseo incluye varias arquitecturas
posibles para la misma entidad
Se debe indicar al compilador con cul de ellas
se desea trabajar.
Sentencia configure
Si no se indica la arquitectura objetivo el
compilador toma alguna desicin por defecto
5/2/2006 54
Sentencia configure: Sintaxis
entity Mux2 is
Port ( a : in bit;
b : in bit;
ctrl : in bit;
z : out bit );
end Mux2;
-- Definicin arquitectura Algoritmica para la entidad mux2
-- Definicin arquitectura Flujo para la misma entidad
-- Uso de sentencia configure
configuration confmux2 of mux2 is
for Algoritmica
end for;
end;
Se liga la arquitectura
Algortmica con la
entidad mux2
5/2/2006 55
Modelado de circuitos secuenciales
Para la descripcin se utilizan los recursos ya analizados.
Se describen circuitos temporizados
Es necesario recoconocer un flanco activo de reloj.
Expresin reconocida por
Synopsis para describir un
flanco ascendente de reloj
Se depende de una
herramienta de sntesis
clkevent and clk = 1
Atributo
event
5/2/2006 56
Ejemplo de cdigo para un registro de desplazamiento
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_unsigned.all;
--Registro con reset sincrnico load paralelo y corrimiento
--lgico a la izquierda, con prioridades en ese orden.
-- Se dejo la salida paralela (bout) para claridad en
--simulacin, corresponde mantener slo la salida s.
entity regis is
port (
din: in STD_LOGIC_VECTOR (3 downto 0);
clk: in STD_LOGIC;
l: in STD_LOGIC;
r: in STD_LOGIC;
shl: in STD_LOGIC;
s: out STD_LOGIC;
bout: out std_logic_vector (3 downto 0)
);
end regis;
5/2/2006 57
Registro de desplazamiento: Continuacin
architecture register_arch of regis is
begin
process (clk)
variable dout : std_logic_vector (3 downto 0);
variable aux: std_logic_vector (2 downto 0);
begin
aux := (r,l,shl);
if ( clk'event and clk = '1') then
case conv_integer (aux) is
when 4 | 6 | 7 => dout := ('0','0','0','0');
when 2 | 3 => dout := din;
when 1 => dout := dout (2 downto 0) & '0';
when others => null;
end case;
s <= dout(3);
bout<= dout;
end if;
end process;
end register_arch;
Flanco ascendente del reloj.
5/2/2006 58
Bibliografa
Pardo Carpio F. - Tecnologa Informtica - Universidad
de Valencia - 1996.
Villar, Teres, Olcoz, Torroja - VHDL Lenguaje estndar
de diseo electrnico - Mc Graw Hill - 1998
Wakerly J. F. - Diseo digital: principios y prcticas
Prentice Hall - 2001

También podría gustarte