Está en la página 1de 30

Sesión XI

2
• Escribir el código VHDL de circuitos MSI
• Usar instrucciones COMPONENT y PORT MAP
• Escribir el código VHDL de circuitos MSI con
funcionalidades especiales.

3
 La descripción estructural del cuerpo de la
arquitectura del diseño VHDL se transforma,
simplemente, en una descripción exacta del
esquema lógico que resuelve la función objeto del
diseño.

 Para la descripción estructural, el lenguaje VHDL se


apoya en las declaraciones de componentes.

4
 La cantidad de declaraciones de componentes tiene
correspondencia con la cantidad de componentes
distintos que formarán parte del circuito físico que
realiza la función lógica.

 El estilo estructural de un diseño VHDL es una


descripción textual del esquema del circuito que se
realiza en el diseño.
• Aquí solo se
interconectan salidas
con entradas de
componentes.
• La salida viene dada por
la operatividad de los
componentes, la cual no
se puede saber si no
conocemos el paquete
del cual ha sido leída.

6
• La declaración
“COMPONENT” posee
una estructura similar
a la de “ENTITY”, pero no
tiene la misma
connotación.

7
• Realizar la descripción en VHDL de tipo estructural de la
compuerta XOR
Y = /A*B + A*/B

8
Como se observa, en
la declaración “ENTITY”,
ya están declaradas
todas las señales
externas que
aparecen en la
función lógica que se
esta diseñando.

9
• La declaración “COMPONENT”
describe la interfaz de una “ENTITY”
(subcircuito) que será “alambrada”
en el diseño del sistema digital.

10
• La instanciación de componentes se puede hacer, realizando:

– Asociación posicional o implícita.


– Asociación nominal o explicita.

11
• En la asociación
posicional o implícita,
se indican las señales
que se conectan en
los terminales de los
componentes,
rigurosamente en la
misma posición en
que fueron
declarados en la
componente

12
• Esta asociación hace
irrelevante el orden de los
parámetros, por cuanto
dentro del paréntesis se
indican explícitamente las
señales que se conectan
a los terminales de las
componentes mediante el
símbolo => de
asignación.

13
14
Tabla de verdad del sumador completo de un bit:

15
Funciones resultantes:

16
Implementación con VHDL:

17
Se puede construir a partir de 4 sumadores completos.
La técnica es válida para cualquier número de bits.

18
Lo que hacemos es
instanciar cuatro
veces el
sumador completo
de un bit.
Para esto, se
utiliza la descripción
estructural con los
comandos
“COMPONENT” Y
“PORT MAP”.

19
El paquete std_logic_1164 no especifica que las señales STD logic
puedan ser usadas con operadores aritméticos. Se debe usar el
paquete std_logic_signed, o el std_logic_unsigned.

20
La diferencia entre “signed” y “unsigned” se nota claramente
cuando se completa bits para una suma. Si no tiene signo la
cantidad menor se completa con ceros a la izquierda. Si tiene
signo la cantidad menor se completa propagando a la izquierda el
bit de signo.
El paquete std_logic_arith usa ambos tipos con signo o sin signo
pero no define la suma para el tipo de std_logic_vector.
En este caso, los sumandos deben definirse del tipo SIGNED o
UNSIGNED.

21
La implementación del comparador se realiza ejecutando las
comparaciones de forma concurrente:

22
23
Código VHDL del sumador de 16 bits con señales de acarreo y sobrecarga
LIBRARY ieee ;
USE ieee.std_logic_1164.all ;
USE ieee.std_logic_signed.all ;

ENTITY Sumador16 IS
PORT ( Cin : IN STD_LOGIC;
X, Y : IN STD_LOGIC_VECTOR (15 DOWNTO 0) ;
S : OUT STD_LOGIC_VECTOR (15 DOWNTO 0) ;
Cout, Overflow : OUT STD_LOGIC) ;
END Sumador16;

ARCHITECTURE Comportamiento OF Sumador16 IS


SIGNAL Sum : STD_LOGIC_VECTOR(16 DOWNTO 0) ;
BEGIN
Sum <= (´0´ & X) + Y + Cin ;
S <= Sum(15 DOWNTO 0) ;
Cout <= Sum(16) ;
Overflow <= Sum(16) XOR X(15) XOR Y(15) XOR Sum(15) ;
END Comportamiento ;

24
Código VHDL de un Comparador de 4 bits
LIBRARY ieee ;
USE ieee.std_logic_1164.all ;
USE ieee.std_logic_unsigned.all ;

ENTITY comparador IS
PORT ( A, B : IN STD_LOGIC_VECTOR(3 DOWNTO 0) ;
AeqB, AgtB, AltB : OUT STD_LOGIC ) ;

END comparador ;

ARCHITECTURE Comportamiento OF comparador IS


BEGIN
AeqB <= '1' WHEN A = B ELSE '0' ;
AgtB <= '1' WHEN A > B ELSE '0' ;
AltB <= '1' WHEN A < B ELSE '0' ;
END Comportamiento ;

25
Código VHDL de un Comparador de 4 bits para números con signo
LIBRARY ieee ;
USE ieee.std_logic_1164.all ;
USE ieee.std_logic_arith.all ;

ENTITY comparador IS
PORT ( A, B : IN STD_LOGIC_VECTOR(3 DOWNTO 0) ;
AeqB, AgtB, AltB : OUT STD_LOGIC ) ;

END comparador ;

ARCHITECTURE Comportamiento OF comparador IS


BEGIN
AeqB <= '1' WHEN A = B ELSE '0' ;
AgtB <= '1' WHEN A > B ELSE '0' ;
AltB <= '1' WHEN A < B ELSE '0' ;
END Comportamiento ;

26
Código VHDL de un Codificador de prioridad
LIBRARY ieee ;
USE ieee.std_logic_1164.all ;

ENTITY prioridad IS
PORT ( w : IN STD_LOGIC_VECTOR(3 DOWNTO 0) ;
y : OUT STD_LOGIC_VECTOR(1 DOWNTO 0) ;
z : OUT STD_LOGIC ) ;

END prioridad ;

ARCHITECTURE Comportamiento OF prioridad IS


BEGIN
WITH w SELECT w3 w2 w1 w0 y1 y2 z
y <= "11" WHEN w(3) = '1' ELSE 0 0 0 0 d d 0
"10" WHEN w(2) = '1' ELSE
"01" WHEN w(1) = '1' ELSE
0 0 0 1 0 0 1
"00" ; 0 0 1 x 0 1 1
z <= '0' WHEN w = "0000" ELSE '1' ; 0 1 x x 1 0 1
END Comportamiento ;
1 x x x 1 1 1

27
Código VHDL de un sumador BCD de 1 dígito
LIBRARY ieee ;
USE ieee.std_logic_1164.all ;
USE ieee.std_logic_unsigned.all ;

ENTITY BCD IS
PORT ( X, Y : IN STD_LOGIC_VECTOR (3 DOWNTO 0) ;
S : OUT STD_LOGIC_VECTOR (4 DOWNTO 0) ;
END BCD ;

ARCHITECTURE Comportamiento OF BCD IS


SIGNAL Z : STD_LOGIC_VECTOR (4 DOWNTO 0) ;
SIGNAL Ajustar : STD_LOGIC ;
BEGIN
Z <= (´0´ & X) + Y ;
Ajustar <= ´1´ WHEN Z > 9 ELSE ´0´ ;
S <= Z WHEN (Ajustar = ´0´) ELSE Z + 6 ;
END Comportamiento ;

30

También podría gustarte