Академический Документы
Профессиональный Документы
Культура Документы
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
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
reset
q
qb
2ns
Concurrencia
q <= NOT ( qb AND set ) AFTER 2 ns;
qb <= NOT ( q AND reset ) AFTER 2 ns;
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.
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
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
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
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
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
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.
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
4;
SIGNAL s: INTEGER;
Sentencia BLOCK
(equivalente a hoja de diseo)
ARCHITECTURE ...
BEGIN
ALU: BLOCK
GUARDED BLOCKS
ARCHITECTURE latch_guard OF latch IS
BEGIN
G1: BLOCK(clk = 1) -- expresin de guarda
BEGIN
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;
END COMPONENT;
...
u1: and2 GENERIC MAP(10 ns, 12 ns, 3)
PORT MAP(a, b, c);
SACTIVE
SLAST_EVENT
SLAST_VALUE
SLAST_ACTIVE
.
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
Atributo LAST_EVENT
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;
sDELAYED [(time) ]
sSTABLE [(time) ]
sQUIET [(time) ]
sTRANSACTION
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.
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
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;