Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Sesion11 MSI Con VHDL
Sesion11 MSI Con VHDL
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.
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.
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:
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;
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 ;
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 ;
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 ;
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 ;
30