Post on 05-Feb-2018
1
VIII. Jerarquías de diseño en VHDL
2
Introducción
La descripción funcional describe al sistema en términos de sus operaciones. La
descripción estructural especifica cómo el sistema está hecho, cuales son sus
subsistemas o componentes y como es que ellos se interconectan.
La descripción estructural permite tener múltiples niveles de jerarquía y un
componente puede ser especificado, ya sea con una descripción funcional o
estructural.
En el segundo caso, tales componentes pueden a la vez contener una red de
elementos mas primitivos.
Finalmente, en el último nivel, éste es especificado por su comportamiento.
3
COMP 4
COMP
2
COMP
3
COMP
1
COMP 11
COMP 13
COMP 12
CO
MP
13
1
CO
MP
13
2
Diferentes jerarquias en un sistema
4
Componentes de una descripción estructural
En una descripción estructural, los componentes se comunican entre si a través de
señales.
Un componente puede ser un sistema individual especificado por medio de su Entidad
y Arquitectura, o bien puede ser insertado en la arquitectura con la palabra reservada
component.
Los componentes deben ser instanciados en la descripción estructural.
La instanciación de componentes es una proposición básica en una arquitectura
estructural.
Las diferentes instancias son concurrentes una con otra.
Un componente instanciado no está completo sin un mapa de sus puertos – una
referencia de cómo se hará la conexión entre los puertos del componente con las
señales del nivel jerárquico mas alto.
5
D
Clk
Q
A
BC
Dex
Clkex
En Clkin
Qout
Entity Dlatch_en is
port (
Dex, Clkex, En : in bit;
Qout : out bit
);
End Entity Dlatch_en;
DLatch
AND2
Architecture Struct of Dlatch_en is
Signal Clkin : bit;
Begin
gate: entity work.And2 (beh)
port map ( A => Clkex,
B => En,
C => Clkin );
latch: entity work.DLatch (beh)
port map ( D => Dex,
clk => Clkin,
Q => Qout );
End Architecture Struct;
Dlatch_en
6
Entity And2 is
port (
A, B : in bit;
C : out bit
);
End Entity And2;
Architecture Beh of And2 is
Begin
C <= A and B after 2 ns;
End Architecture Beh;
Entity Dlatch is
port (
D, Clk : in bit;
Q : out bit
);
End Entity And2;
Architecture Beh of Dlatch is
Begin
Process (clk, D)
begin
if clk = ‘1’ then
Q <= D after 3 ns;
end if;
end process;
End Architecture Beh;
7
Antes de que un componente pueda ser usado, éste debe ser instanciado.
La instanciación consiste en seleccionar una especificación compilada de la
librería y ligarla a la arquitectura donde será usada.
Cada instancia de un componente contiene dos partes:
nombre_de_la_instancia : entity
work.nombre_de_la_entidad ( nombre_de_la_arquitectura )
Donde “Work” es el nombre de la librería donde todos los elementos definidos
por el usuario son salvados.
Componentes e instanciación directa
de componentes
8
Instanciación Directa
Es la forma más simple de construir un sistema estructuralmente.
Se requiere la especificación compilada del componente a instanciar y la
proposición con la instanciación.
El nombre de la arquitectura es obligatorio cuando la entidad a instanciarse
tiene asociadas mas de una arquitectura. En otro caso, puede omitirse.
9
Mapeo de puertos por posiciones
Los mapas de puertos especifican las conexiones entre los puertos de una entidad
(componente) y las señales en la arquitectura donde los componentes son instanciados.
Existen dos formas para hacer el mapeo de puertos: Asociación de puertos posicional o
asociación de puertos por nombre.
En la asociación posicional, las señales en el mapa de puertos deben listarse en el
mismo orden en el cual se declararon los puertos en la entidad del componente. Para
que la asociación sea posible, las señales deben ser del mismo tipo.
Entity And2 is
port ( A, B : in bit;
C : out bit );
End Entity And2;
Architecture Beh of And2 is
Begin
C <= A and B after 2 ns;
End Architecture Beh;
So
me
Syste
m
X
Y
Z
Entity SomeSystem is
. . . .
End Entity SomeSystem;
Architecture Struct of SomeSystem is
Begin
. . .
gate: entity work.And2 (beh)
port map ( , , );
. . . .
End Architecture Struct;
A B
C
10
Mapeo de puertos por nombre
En el mapeo por posiciones se debe tener cuidado del orden para no cometer errores.
La asociación de puertos por nombre da mayor claridad y reduce la posibilidad de
cometer errores, por que para cada asociación debe especificarse:el nombre de la
señal a asociar, el símbolo “ => ” y el nombre del puerto como aparece en la entidad del
componente.
No importa el orden en que se realicen las asociaciones.
Entity And2 is
port ( A, B : in bit;
C : out bit );
End Entity And2;
Architecture Beh of And2 is
Begin
C <= A and B after 2 ns;
End Architecture Beh;S
om
eS
yste
m
X
Y
Z
Entity SomeSystem is
. . . .
End Entity SomeSystem;
Architecture Struct of SomeSystem is
Begin
. . .
gate: entity work.And2 (beh)
port map ( A => , B => , C => );
. . . .
End Architecture Struct;
A B
C
11
Asociaciones complejas
3
2
1
0
7
6
5
4
3
2
1
0
3
2
1
0
BANDERAS
MEMORIA
ACUMULADOR
OPERACIÓN_DE_REGISTROS
CF
ZF
OF
MF
Opcode(3)
Opcode(2)
Opcode(1)
Opcode(0)
OperandA(3)
OperandA(2)
OperandA(1)
OperandA(0)
OperandB(3)
OperandB(2)
OperandB(1)
OperandB(0)
Signal Banderas :
Bit_Vector ( 3 downto 0);
Signal Memoria :
Bit_Vector ( 7 downto 0);
Signal Acumulador :
Bit_Vector ( 3 downto 0);
Entity Op_Reg is
port (
CF : out bit;
ZF : out bit;
OF : out bit;
MF : out bit;
Opcode : in bit_vector( 3 downto 0);
OperandA : in bit_vector( 3 downto 0);
OperandB : in bit_vector( 3 downto 0)
);
End entity Op_Reg;
12
Asociaciones complejas
VHDL proporciona flexibilidad para asociaciones complejas. Tanto señales
como puertos pueden ser asignadas elemento a elemento o bien por bloques.
Cualquier asignación de señales y puertos es permitida, siempre que se
conserve que los elementos son compatibles (del mismo tipo y tamaño).
. . . .
Operation_Register : Entity Work.Op_Reg
port map (
CF => Flags(3),
ZF => Flags(2),
OF => Flags(1),
MF => Flags(0),
Opcode => Memoria ( 7 downto 4),
OperandA => Memoria (3 downto 0),
OperandB => Acumulador
);
. . . .
13
Puertos sin conexión
Es posible que un puerto no este conectado, para ello debe especificarse como abierto
(open).
El estándar de VHDL permite manejar esta situación simplemente sin agregar al mapa
de puertos al puerto que se quedará sin conexión. Sin embargo, las herramientas de
simulación muchas veces no dan estas facilidades por que el programa no puede
determinar si el puerto no aparece por que no estará conectado, o bien por olvido del
usuario.
Input1
Output1
Input2
Output2
Input3
SigA
SigB
SigC
SigD
SigE
Comp1Comp1 : Entity Work.SomeEntity
port map (
Inpu1 => SigA,
Input2 => SigB,
Input3 => SigC,
Output1 => SigD,
Output2 => SigE );
Input1
Output1
Input2
Output2
Input3
SigA
SigB
SigC
SigD
SigE
Comp2Comp2 : Entity Work.SomeEntity
port map (
Inpu1 => SigA,
Input2 => SigB,
Input3 => SigC,
Output1 => SigD,
Output2 => Open );
14
Instanciación por Componente
Para diseños grandes sería conveniente que todos los módulos se pudiesen
hacer por separado y que se pudiera hacer referencia a otros componentes
cuyo comportanmiento no ha sido aún especificado.
Para una especificación estructural sería suficiente con tener una declaración
de la interfaz del componente (como requisito del sistema).
La declaración de la interfaz del componente es llamada declaración del
componente (component declaration) y es ubicada en la parte declarativa del
cuerpo de la arquitectura (o en un paquete).
Instanciación Directa Instanciación del Componente
Instanciación del Componente
Declaración del Componente
Instanciación del Componente
15
Declaración de Componentes
La sintaxis para la declaración de componentes es muy similar a la declaración
de entidades, esto no es coincidencia puesto que los componentes y las
entidades juegan un papel similar en la definición de módulos externos.
Sintaxis: component nombre_del_componente is
generic ( lista de parámetros );
ports ( lista de puertos );
end component nombre_del_componente;
Ejemplo: Architecture Struct of Reg4 is
component DFF is
generic ( t_prop : time; -- tiempo de propagación
t_setup : time ); -- tiempo de ajuste
ports ( d, clk, rst : in Bit;
q : out Bit; );
end component DDF;
begin
. . . .
16
Entidades y Componentes
Existen dos diferencias importantes entre Entidades y Componentes:
La declaración de una Entidad define una interfaz de un módulo “real”, es
decir, un sistema o circuito que físicamente existe; el sistema es una
unidad de diseño separada y puede ser simulada individualmente,
analizada o sintetizada.
La declaración de un componente por otro lado define la interfaz de un
módulo “virtual” o que “no-existe”; es especificado dentro de una
arquitectura como para indicar que ahí se va a situar al componente “real”.
17
DClk
QRST
B
I
T
1DClk
QRST
B
I
T
0 DClk
QRST
B
I
T
3DClk
QRST
B
I
T
2
RegD(0)
RegQ(0) RegQ(1) RegQ(2) RegQ(3)
RegD(1) RegD(2) RegD(3)CLK
RstREG4B
Entity Reg4B is
port (
RegD : in bit_vector;
RegQ : out bit_vector;
Rst, Clk : in bit );
End entity Op_Reg;
Architecture Struct of Reg4B is
component DFF is
generic ( t_prop : time; -- tiempo de propagación
t_setup : time ); -- tiempo de ajuste
ports ( d, clk, rst : in Bit;
q : out Bit; );
end component DDF;
Begin
bit0: Component DDF
generic map ( t_prop => 2 nS, t_setup => 1 nS )
port map ( D => RegD(0), Q => RegQ(0), Rst => Rst, Clk => clk );
. . . .
End Architecture Struct;