Вы находитесь на странице: 1из 51

VHDL

El nombre proviene de VHSIC Hardware


Description Language, donde VHSIC significa Very
High Speed Integrated Circuits.
Es un lenguaje formal de especificacin de hardware
que se basa en construcciones dentro de los dominios
de Comportamiento y Estructura, soporta el diseo,
la verificacin y la sntesis de sistemas electrnicos
complejos, siendo capaz de modelar tiempos.

Unidad de Diseo

ENTITY

ARCHITECTURE

La unidad VHDL
bsica de diseo, se
usa para modelar un
bloque de hardware y
consta de una
declaracin del
elemento a modelar
(Entity) y una
arquitectura del
mismo
(Architecture).

Declaracin de entity
A

entity NAND2 is
port(A,B: in BIT;
F: out BIT);

end NAND2;
Representa la visin externa del bloque

Architecture
architecture A1 of NAND2 is
begin

F <= NOT(A and B);


end A1;

Representa la visin interna del bloque

Modelos
Comportamiento
Estructura
Tiempo

Entity
ENTITY ffrs IS
PORT ( set, reset : IN
BIT ;
q, qb
: BUFFER BIT);
end ffsr;
set

Q/
reset

Comportamiento
ARCHITECTURE comportamiento OF FFRS IS
BEGIN
q <= NOT ( qb AND set ) AFTER 2 ns;
qb <= NOT ( q AND reset ) AFTER 2 ns;
END comportamiento;

set

Eventos en el lado derecho


disparan las asignaciones
concurrentes, se calculan los
valores que deber tomar el lado
derecho en el suguiente ciclo de
simulacin o en el tiempo que
indique el retardo AFTER.

reset

q
qb
2ns

Concurrencia
q <= NOT ( qb AND set ) AFTER 2 ns;
qb <= NOT ( q AND reset ) AFTER 2 ns;

Concurrencia de las sentencias


La primera sentencia es la nica que se ejecuta en el
tiempo en que set cambi. La segunda sentencia no se
ejecutar hasta que ocurra el cambio en q o en la seal
reset. Si no ocurre ningn evento en reset antes de 2 ns
en que ocurrir el cambio en q ser este ltimo evento el
que despierte la segunda asignacin. Esta programar un
nuevo valor 0 para qb dentro de 2ns.

Planificacin
Event scheduling
La asignacin del nuevo valor de q no
ocurre instantneamente sino que de
acuerdo a la clusula AFTER deber ocurrir
a los 2ns. El mecanismo para retrasar el
nuevo valor es llamado event scheduling
(planificacin del evento). Al asignar un
nuevo valor a q el mismo fue planificado
para que ocurra 2 ns mas tarde.

Estructura
ARCHITECTURE netlist OF ffrs IS
COMPONENT nand2
PORT ( a, b : IN BIT;
c : OUT BIT );
END COMPONENT;
BEGIN
U1 : nand2
PORT MAP ( set, qb, q );
U2 : nand2
PORT MAP ( reset, q, qb );
END netlist;

Instancias
En el rea de sentencias hay dos sentencias de
instancia de componentes. Cada sentencia crea
una instancia de un componente en el modelo

Control Secuencial
Algunas construcciones nos permiten el control
condicional dentro del proceso, es decir,
sentencias que son ejecutadas cuando una cierta
condicin es verdadera o no. Otras nos
permiten el control iterativo.

Control Secuencial
ARCHITECTURE secuencial OF ffrs IS
BEGIN
PROCESS ( set, reset )
BEGIN
IF set = 1 AND reset = 0 THEN
q <= 0 AFTER 2 ns;
qb <= 1 AFTER 4 ns;
ELSIF set = 0 AND reset = 1 THEN
q <= 1 AFTER 4 ns;
qb <= 0 AFTER 2 ns;
ELSIF
q <= 1 AFTER 2 ns;
qb <= 1 AFTER 2 ns;
END IF;
END PROCESS;
END secuencial;

Procesos y Componentes
La unidad bsica de la descripcin de
comportamiento es el process mientras que
la unidad bsica de la descripcin de
estructura es el component.
Ninguno de los dos puede exitir fuera del
cuerpo de la arquitectura, la cual constituye
una unidad de biblioteca analizable en forma
separada.

Modelo de Tiempo
Comienzo simulacin

Actualizar seales

Ejecutar proceso

Fin simulacin

Est basado en la
respuesta a
estmulos:
El modelo
responde cuando
hay un estmulo y
luego espera el
siguiente estmulo.

VHDL tiene un modelo de tiempo en dos etapas que se


denomina ciclo de simulacin

Ciclo de Simulacin
Actualizar seales
Durante la primera etapa del ciclo de
simulacin se propagan valores a travs de
las vas de datos (seales). Esta etapa se
completa cuando todas las vas hayan sido
actualizadas con sus nuevos valores
correspondientes a dicho ciclo

Ciclo de Simulacin
Ejecutar proceso

Durante la segunda etapa, aquellos procesos


que se hallen activos (es decir los que reciban
informacin mediante sus canales sensibles)
son puestos en funcionamiento hasta que sean
suspendidos.

Retardos
En este modelo siempre hay cierto retardo
entre el tiempo en que un proceso pone un
valor en el camino de datos y el tiempo en
el cual el camino refleja dicho valor. En
particular, si no se asigna un retardo al
camino de datos el sistema usa un retardo
delta. Este retardo no actualiza el tiempo
del reloj de simulacin sino que requiere el
pasaje a un nuevo ciclo de simulacin

Conductor de una seal


Un conductor (driver) para una seal se define
por el proceso que asigna valores a la seal.
Los valores que viajan por los caminos de datos
en un tiempo dado estn contenidos en dicho
conductor, el cual consta de una coleccin de
parejas (tuplas) valor/tiempo llamadas
transacciones.

Asignacin concurrente
Los conductores son creados por sentencias de
asignacin de seales.
Una asignacin concurrente de seal dentro de
una architecture produce un conductor para
cada asignacin de seal. Asignaciones mltiples
producirn conductores mltiples de seal.

Creacin de un conductor
ARCHITECTURE t1 OF d1 IS
BEGIN
a <= b AFTER 10 ns ;
a <= c AFTER 10 ns ;
END t1;

FUNCIN DE RESOLUCIN

La seal a est siendo manejada por dos


fuentes, b y c.
Cada asignacin concurrente crear un
conductor para la seal a, esto no es admitido a
menos que se defina una funcin de resolucin
(resolved signals).
La forma en que esto se resuelve queda a cargo
del diseador.

Retardos
VHDL incluye dos tipos de retardo para
controlar el efecto de la asignacin de una
pareja valor/tiempo en la forma de onda
proyectada para la seal:
retardo inercia

retardo transporte

Transporte
B

B <= transport A after 20 ns;

10

20

30

40

Significado transporte
El retardo de transporte es similar al retardo
en un cable donde la salida siempre tiene
lugar sin importar el tiempo de duracin de
la seal.
s <= transport value after time_expression;

Comportamiento transporte
A
1
0
10ns

20ns

30ns 40ns

Las
transacciones
agendadas
para ocurrir
antes del
retardo de
transporte se
mantienen
como puede
verse con el 1

RETARDO INERCIAL
B

B <= A after 20 ns;


A

B
0

10

20

30

40

Significado inercial
El retardo inercial (default) se usa para
representar componentes que requieren que
el valor de las entradas persista por un
tiempo dado antes de que el componente
responda.

Consecuencia del retardo inercial


Las
transacciones
agendadas
para ocurrir
antes del
retardo de
transporte se
descartan

A
1
0
10ns 20ns 30n 40n
s
s

Asignacin elegida
WITH s SELECT
Q <= I0 AFTER 10 ns WHEN 0,

I0
Q
I1

I1 AFTER 10 ns WHEN 1,

I2

I2 AFTER 10 ns WHEN 2,

I3

I3 AFTER 10 ns WHEN 3,
X AFTER 10 ns WHEN
S

SIGNAL s: INTEGER;

OTHERS;

Asignacin condicional
S

s <= 0 WHEN a=0 and b=0 ELSE


1 WHEN a=1 and b=0 ELSE
2 WHEN a=0 and b=1 ELSE

3 WHEN a=1 and b=1 ELSE


a

4;

SIGNAL s: INTEGER;

Sentencia BLOCK
(equivalente a hoja de diseo)

ARCHITECTURE ...
BEGIN
ALU: BLOCK

SIGNAL qbus ...


BEGIN
--comportamiento de ALU
END BLOCK;

GUARDED BLOCKS
ARCHITECTURE latch_guard OF latch IS
BEGIN
G1: BLOCK(clk = 1) -- expresin de guarda
BEGIN

q <= GUARDED d AFTER 5 ns;


qb <= GUARDED NOT(d) AFTER 7 ns;
END BLOCK G1;
END latch_guard;

Generic
USE WORK.std_logic_1164.ALL;
ENTITY and2 IS
GENERIC(rise, fall : TIME; load : INTEGER);
PORT ( a,b : in std_logic ;
c : out std_logic) ;
END and2;

ARCHITECTURE load_depend OF and2 IS


SIGNAL internal : std_logic;
BEGIN
internal <= a AND b;
c <= internal AFTER (rise + (load * 2 ns)) WHEN internal = '1'
ELSE internal AFTER (fall + (load * 3 ns));
END load_depend;

Uso del generic


COMPONET and2

GENERIC(rise, fall: TIME; load: INTEGER);


PORT(ina, inb: IN STD_LOGIC;
out1: OUT STD_LOGIC);

END COMPONENT;

...
u1: and2 GENERIC MAP(10 ns, 12 ns, 3)
PORT MAP(a, b, c);

Atributos funcin de las seales


SEVENT

Retorna verdadero si ocurri un evento en S durante el


corriente delta, de lo contrario devuelve falso.

SACTIVE

Retorna verdadero si ocurri una transicin en S


durante el corriente delta, else falso.

SLAST_EVENT

Retorna el tiempo transcurrido desde la transicin


previa de la seal S.

SLAST_VALUE

Retorna el valor previo de S antes del ltimo evento.

SLAST_ACTIVE

Retorna el tiempo transcurrido desde la transaccin


previa de la seal.

Atributos EVENT y LAST_VALUE

.
El atributo EVENT es til para determinar flancos de
reloj. Probando si la seal tiene un valor particular y si acaba de
cambiar su valor se puede deducir que ha ocurrido un flanco en
la seal. Ejemplo:

Ejemplo de event
ENTITY ffd IS
PORT(
d, clk : IN BIT;
q : OUT BIT );
END ffd;
ARCHITECTURE dff OF dff IS
BEGIN
PROCESS(clk)
BEGIN
IF ( clk = 1) AND ( clkEVENT ) THEN
q <= d;
END IF;
END PROCESS;
END dff;

Last_value
Este ejemplo muestra como se usa la entrada clk para transferir
la entrada d a la salida q durante el flanco de subida de clk. Lo
que el ejemplo ignora es que un cambio de X a 1 tambin
actuar como flanco cuando no lo es. Para evitar este
inconveniente se usa el atributo LAST_VALUE

La sentencia IF del ejemplo se transforma en:


IF ( clk = 1 ) AND ( clkEVENT ) AND ( clkLAST_VALUE = 0 ) THEN
q <= d;
END IF;

Atributo LAST_EVENT

Este atributo retorna el tiempo desde un evento


previo en la seal. Resulta muy til para probar las
restricciones de tiempo de ffs tales como tiempos de
setup o tiempos de hold, o bien anchos de pulsos.

Aplicacin de atributos
DATA

CLK

Setup
Time

Hold
Time
Flanco
Referencia

Cdigo de la aplicacin
ENTITY ffd IS
GENERIC ( setup_time, hold_time : TIME );
PORT(
d, clk : IN BIT;
q : OUT BIT );
BEGIN
setup_check : PROCESS ( clk )
BEGIN
IF ( clk = 1) AND ( clkEVENT ) THEN
ASSERT ( dLAST_EVENT >= setup_time )
REPORT " Violacin de Setup"
SEVERITY ERROR;
END IF;
END PROCESS setup_check;
END ffd;

Atributos de clase de la seal

Se usan para crear seales especiales, basadas en otras seales.


Estas seales especiales retornan informacin al diseador acerca
de la seal a la cual est ligado el atributo. La informacin es
similar a la que dan los atributos de funcin, con la diferencia que
estas seales especiales se pueden usar en cualquier lugar en que se
pueda usar una seal, incluyendo listas de sensibilidad.
Los atributos de seal retornan informaciones tales como si una
seal ha permanecido estable por un cierto tiempo, y cuando ha
ocurrido una transaccin en una seal. Tambin pueden crear una
versin retardada de la seal.

sDELAYED [(time) ]

crea una versin retrasada de la seal a la cual se


liga, del mismo tipo, (si no se especifica time
asume delta).

sSTABLE [(time) ]

crea una seal booleana que es verdadera siempre


que la seal de referencia no haya tenido eventos
durante el tiempo especificado.

sQUIET [(time) ]

crea una seal booleana que es verdadera siempre


que la seal de referencia no haya tenido
transacciones o eventos durante el tiempo
especificado.

sTRANSACTION

crea una seal del tipo BIT que invierte su valor


con cada transaccin o evento que ocurra en s.

Atributo DELAYED.
Tiene la misma funcionalidad que la asignacin de seal con retardo tipo
transporte, con la diferencia que ac no es necesario declarar una nueva
seal.
Veamos un ejemplo de su uso. Un mtodo para modelar dispositivos
ASIC consiste en colocar retardos relativos al camino de la seal (pathrelated) en los pines de entrada del elemento de biblioteca.
Antes del proceso de layout se colocan "recipientes" para los retardos en
las pines de entrada. Luego de completado el layout se llenan esos
recipientes con los valores reales de dichos retardos (back annotation) y
se vuelve a realizar la simulacin. Un mtodo para conseguir esta back
annotation de los retardos es usar valores genricos especificados en la
configuracin del dispositivo.

Uso de generics
a_ipd

c_opd
nand2

b_ipd

ENTITY nand2 IS
GENERIC ( a_ipd, b_ipd, c_opd : TIME );
PORT(
a,b, : IN BIT;
c : OUT BIT );
END nand2;

Delayed
ARCHITECTURE int_signals OF nand2 IS
SIGNAL inta, intb : BIT;
BEGIN
inta <= TRANSPORT a AFTER a_ipd;
intb <= TRANSPORT b AFTER b_ipd;
intc <= inta NAND intb AFTER c_opd;
END int_signals;
ARCHITECTURE attr OF nand2 IS
BEGIN
c <= aDELAYED(a_ipd) NAND bDELAYED(b_idp)
AFTER c_opd;
END attr;

Retardo de seales
En el ejemplo precedente se muestran dos mtodos de retardar las
seales de entrada por el retado de camino (path delay) mediante
dos arquitecturas diferentes para la entity nand2.
El primer mtodo usa seales internas transporte-retardadas.
Luego se hace el NAND de ambas y se asigna a la salida con
cierto retardo inercial.
El segundo mtodo hace uso del atributo de seal predefinido
DELAYED. Las seales de entrada a y b se retardan usando
valores genricos a_ipd (retardo del camino de a) y b_ipd. El
NAND de los valores retardados se asigna al puerto de salida c.

Otra aplicacin del atributo DELAYED es probar el tiempo de


hold. Para ello usamos una versin retrasada de la seal clk.

Reporte de errores
ENTITY ffd IS
GENERIC ( setup_time, hold_time : TIME );
PORT(
d, clk : IN BIT;
q : OUT BIT );
BEGIN
setup_check : PROCESS ( clk )
BEGIN
IF ( clk = '1') AND ( clk'EVENT ) THEN
ASSERT ( d'LAST_EVENT >= setup_time )
REPORT "Violacion de Setup"
SEVERITY ERROR;
END IF;
END PROCESS setup_check;

Violacin de hold
hold_check : PROCESS ( clk'DELAYED(hold_time) )
BEGIN
IF ( clk'DELAYED(hold_time) = '1') AND (
clk'DELAYED(hold_time)'EVENT ) THEN
ASSERT ( d'LAST_EVENT = 0 ns ) OR (
d'LAST_EVENT > hold_time )
REPORT "Violacion de Hold"
SEVERITY ERROR;
END IF;
END PROCESS hold_check;
END ffd;

EL TESTBENCH

architecture test_arch of test is


signal ina,inb,inc,ind : std_logic ;
signal out1, out2 : std_logic;

entity test
is
end test;

component and2
generic(rise, fall : time; load : integer);
port ( a, b : in std_logic;
c : out std_logic);
end component;
begin
-- Tplh= rise+2*load Tphl= fall+3*load
U1: and2 generic map(10 ns, 12 ns, 3)
port map(ina, inb, out1);
U2: and2 generic map(9 ns, 11 ns, 5)
port map(inc, ind, out2);
ina <= '0', '1' after 50 ns, '0' after 100 ns;
inb <= '0', '1' after 75 ns, '0' after 125 ns;
inc <= '0', '1' after 25 ns, '0' after 75 ns;
ind <= '0', '1' after 50 ns, '0' after 100 ns;
end test_arch;

Вам также может понравиться