MSI Medium Scale Integration: Operaciones Aritméticas Decodificadores Multiplexores Memorias
MSI Medium Scale Integration: Operaciones Aritméticas Decodificadores Multiplexores Memorias
Decodificadores
Multiplexores
Memorias
Un medio sumador (Half Adder) es un circuito lógico digital básico que realiza la suma de dos bits,
produciendo como resultado dos salidas:
1. Suma (S): Representa el bit resultante de la suma de los dos bits de entrada.
2. Acarreo (Co): Representa el bit de acarreo que se genera cuando la suma de los dos bits de entrada
excede 1.
Entradas y salidas
A Suma
•Entradas: A, B (los dos bits que se desean sumar)
•Salidas: S (suma), Co (acarreo)
B Σ HA Acarreo
Medio Sumador (Half Adder).
A Suma
Tabla de Verdad
B Σ HA Acarreo
A
0
0
B
0
1
Co (Acarreo)
0
0
S (Suma) Decimal
0
1
0
1
1 0 0 1 1
Funciones lógicas 1 1 1 0 2
•Suma: S=A⊕B
•Acarreo: Co=A⋅B
Sumador Completo (Full Adder).
A diferencia del medio sumador, el sumador completo considera el acarreo que viene de una suma anterior, lo
que permite encadenar sumadores para sumar números binarios de varios bits.
Suma (S)
Σ
A
B
Ci FA Acarreo (Co)
Sumador Completo (Full Adder).
Tabla de Verdad
A B Ci Co (Acarreo) S (suma) Decimal
Suma (S)
Σ
0 0 0 0 0 0 A
B
0 0 1 0 1 1
Ci FA Acarreo (Co)
0 1 0 0 1 1
0 1 1 1 0 2
1 0 0 0 1 1
1 0 1 1 0 2
1 1 0 1 0 2
1 1 1 1 1 3
Las salidas se definen como:
+ C(3)
C(2)
A(3)
B(3)
C(1)
A(2)
B(2)
C(0)
A(1)
B(1)
Ci
A(0)
B(0)
Problema del acarreo en sumadores
En un sumador en serie (Ripple Carry), cada bit debe
esperar el resultado del acarreo del bit anterior.
Esto causa que el tiempo de propagación crezca
S(4) S(3) S(2) S(1) S(0) linealmente con el número de bits, lo cual vuelve lento el
sumador.
A(3..0)+B(3..0)=S(4..0)
C(1)
Σ Σ Σ
C(0) C(2) C(3)
Σ
Ci
A(0) A(1) A(2) A(3)
B(0) FA B(1) FA B(2) FA B(3) FA
74LS83 Sumador Binario o SN74LS83N es un circuito integrado “CI” de 4 Bit con acarreo rápido y encapsulado DIP-16. El
74LS83 tiene cuatro etapas independientes de circuitos sumadores completos en un solo paquete. Se usa comúnmente en
aplicaciones donde están involucradas operaciones aritméticas.
Sirve para realizar operaciones de un sumador completo binario de 4 bits de alta velocidad con acarreo interno; acepta 2
palabras binarias de 4 bits (A1 – A4, B1 – B4) y una entrada de acarreo (C0). Genera una suma de salida binaria (R1 – R4) y
una salida de acarreo (C4) desde el bit de mas significativo.
Sumador con Acarreo Anticipado (Carry look ahead adder)
A Carry Look-Ahead Adder (CLA) es un tipo de sumador rápido que mejora la velocidad respecto a los sumadores en
serie (ripple carry adders), porque anticipa los acarreos en lugar de esperar que se propaguen bit a bit.
Concepto básico
En un sumador binario tradicional, el acarreo de salida de cada bit depende del acarreo de entrada anterior. Esto
genera una propagación en cadena (ripple) que hace lento al circuito cuando hay muchos bits.
El CLA evita este problema calculando de forma paralela si cada posición de bit:
•Genera un acarreo (Generate, G)
•Propaga un acarreo (Propagate, P)
Suma (S):
𝑆𝑖 = 𝑃𝑖 ⊕ 𝐶𝑖
Acarreos (C):
𝐶𝑖+1 = 𝐺𝑖 + 𝑃𝑖 ⋅ 𝐶𝑖
Ventaja principal:
En lugar de esperar a que el acarreo
avance bit por bit, el CLA calcula en
paralelo todos los acarreos.
Esto reduce el tiempo de
propagación y hace que sea mucho
más rápido para sumas de gran
cantidad de bits.
Sumador BCD
Ejercicio:
Diseñar un sumador BCD, es decir, la suma de dos palabras de 4 bits en BCD,
Y el resultado también estará en BCD.
Restador completo
Así como existe el sumador completo (Full Adder), también podemos definir un restador completo (Full Subtractor).
Un restador completo es un circuito combinacional que resta tres bits de entrada:
Resta (S)
𝑅
A
B
Pi FS Préstamo (Po)
Restador Serial de 4 bits (Ripple Carry).
- P(3)
P(2)
A(3)
B(3)
P(1)
A(2)
B(2)
P(0)
A(1)
B(1)
Pi
A(0)
B(0)
R(4) R(3) R(2) R(1) R(0)
A(3..0)-B(3..0)=R(4..0)
P(1)
𝑅 𝑅 𝑅
P(0) P(2) P(3)
𝑅
Pi
A(0) A(1) A(2) A(3)
B(0) FS B(1) FS B(2) FS B(3) FS
CC
B(3) B’(3)
B(2)
B’(2)
B(1)
B’(1)
B(0)
B’(0)
Pb
Pb
Multiplicador
Partiendo de la multiplicación decimal:
246 246
X 35
X 35
2*5+2 4*5+3 6*5+0 1230
2*3+1 4*3+1 6*3+0 738
8 6 1 0 8610
Multiplicador 3 x 2 bits
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity restador_4bits is
Port (
A : in STD_LOGIC_VECTOR(3 downto 0);
B : in STD_LOGIC_VECTOR(3 downto 0);
Restador de 4 bits
R : out STD_LOGIC_VECTOR(4 downto 0)
);
end restador_4bits;
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity multiplicador_4bits is
Port (
A : in STD_LOGIC_VECTOR(3 downto 0);
B : in STD_LOGIC_VECTOR(3 downto 0); Multiplicador de 4 bits
P : out STD_LOGIC_VECTOR(7 downto 0)
);
end multiplicador_4bits;
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
entity divisor_simple is
Port (
A,B : in UNSIGNED(7 downto 0);
Q : out UNSIGNED(7 downto 0);
R : out UNSIGNED(7 downto 0) );
end divisor_simple;
Divisor de 8 bits
architecture Behavioral of divisor_simple is
begin
process(A, B)
begin
if B /= 0 then
Q <= A / B;
R <= A mod B;
else
Q <= (others => '0');
R <= (others => '0');
end if;
end process;
end Behavioral;
Vhdl para operaciones aritméticas
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity sumador_restador is
Port (
A : in STD_LOGIC_VECTOR(3 downto 0);
B : in STD_LOGIC_VECTOR(3 downto 0);
M : in STD_LOGIC; -- 0 = suma, 1 = resta
R : out STD_LOGIC_VECTOR(4 downto 0) Sumador–Restador controlado de 4 bits
);
end sumador_restador;
Implementar el hardware para la siguiente función cuadrada, Considera que 𝑋 es de 2 bits y 𝑌 e Z es de 3 bits, simúlalo en Quartus
library ieee;
𝑋 2 − 12𝑌
use ieee.std_logic_1164.all;
use iee.numeric_std.all;
entity fabcd2 is
port( x: in unsigned(1 downto 0);
y: in unsigned(2 downto 0);
R: out signed(7 downto 0));
end;
Un decodificador es un circuito o dispositivo que convierte datos codificados en un formato legible o utilizable.
En electrónica digital, transforma una entrada binaria en una salida específica, activando una única línea de salida
correspondiente al código de entrada. Por ejemplo, un decodificador 2-a-4 recibe 2 bits y activa una de 4 salidas.
2𝑛
𝑛 𝑆𝑎𝑙𝑖𝑑𝑎𝑠
𝐸𝑛𝑡𝑟𝑎𝑑𝑎𝑠 𝐷𝑒𝑐𝑜𝑑𝑖𝑓𝑖𝑐𝑎𝑑𝑜𝑟
𝑛: 2𝑛
𝐻𝑎𝑏𝑖𝑙𝑖𝑡𝑎𝑐𝑖𝑜𝑛
• Decodificadores No Excitadores
• Decodificadores Excitadores
Decodificador Excitador BCD a 7 segmentos (7448, 7447)
Mediante la interacción
De las líneas RBO y RBI y
Una combinación en
común de un cero generado
En RBO y un cero en las
Entradas A,B,C,D. se presenta
La anulación de los displays
Mas significativos.
Decodificadores No excitadores
Si para un decodificador con salida en alta o un decodificador con salida en baja, donde cada salida es una
combinación de productos o productos negados asociados a las variables de entrada, y una función es:
𝑓 = 𝑚0 + 𝑚1 + 𝑚2 + ⋯ + 𝑚𝑛
Un decodificador puede verse como una herramienta para generar directamente los minitérminos o sus
complementos de una función lógica. Luego, con un conjunto de compuertas OR (y a veces AND, NOT,
según el caso) se pueden combinar las salidas del decodificador para construir cualquier función
booleana.
Si el decodificador es de 𝑛 entradas y 2𝑛 salidas, cada salida representa un minitérmino (una combinación
única de 0’s y 1’s de las entradas). Una función booleana puede escribirse como una suma de
minitérminos (forma SOP). Estas se conectan con compuertas OR a las salidas correspondientes a los
minitérminos que hacen la función igual a 1.
Decodificador con salida activa en alta y Minterminos
𝑆𝑖 𝑓 𝑎𝑏𝑐 = (2,3,5)
𝑆0
𝑆1
𝑎 𝐸2 𝑆2
𝑆3 𝑓 𝑎𝑏𝑐 = (2,3,5)
𝑏 𝐸1
𝑆4
c 𝐸0 𝑆5
𝑆6
𝑆7
Decodificador con salida activa en alta y Maxterminos
𝑆𝑖 𝑓 𝑎𝑏𝑐 = ෑ(0,1,4,6,7)
𝑆0
𝑆1
𝑎 𝐸2 𝑆2
𝑆3 𝑓 𝑎𝑏𝑐 = ෑ(0,1,4,6,7)
𝑏 𝐸1
𝑆4
c 𝐸0 𝑆5
𝑆6
𝑆7
Decodificador con salida activa en baja y Minterminos
𝑆𝑖 𝑓 𝑎𝑏𝑐 = (2,3,5)
𝑆0
𝑆1
𝑎 𝐸2 𝑆2
𝑆3 𝑓 𝑎𝑏𝑐 = (2,3,5)
𝑏 𝐸1
𝑆4
c 𝐸0 𝑆5
𝑆6
𝑆7
Decodificador con salida activa en baja y Maxterminos
𝑆𝑖 𝑓 𝑎𝑏𝑐 = ෑ(0,1,4,6,7)
𝑆0
𝑆1
𝑎 𝐸2 𝑆2
𝑆3 𝑓 𝑎𝑏𝑐 = ෑ(0,1,4,6,7)
𝑏 𝐸1
𝑆4
c 𝐸0 𝑆5
𝑆6
𝑆7
Expansión de decodificadores
La expansión de decodificadores se logra cuando un decodificador por sí solo no es suficiente para cubrir
todas las salidas que se requieren, y entonces se combinan varios para aumentar el número total de salidas
disponibles.
𝑆𝑒𝑎 𝑓 𝑎𝑏𝑐𝑑 = ෑ 2,5,6,9,11,13 b 𝐸2 𝑆0
c 𝐸1
d 𝐸0
a 𝐸𝐻 𝑆7
𝐸2 𝑆8
𝐸1
𝐸0
𝐸𝐻 𝑆15
Se tiene decodificadores 3:8 con salida baja/alta
Expansión de decodificadores
𝑆0
A 𝐸1 𝑆1
𝑓(𝑎𝑏𝑐𝑑)
B 𝐸0 𝑆2
ab\cd 00 01 11 10 𝑆3
00 0 𝑐 + 𝑑ҧ
01 0 0 𝑐
11 0 0 0 𝑐+𝑑
𝑓 𝑎𝑏𝑐𝑑 = ෑ(1,4,5,11,13,14,15)
10 0 𝑐𝑑
Expansión de decodificadores
𝑓 𝑎𝑏𝑐𝑑 = ෑ(1,4,5,11,13,14,15)
Vhdl para funciones con de decodificadores
Un multiplexor (MUX) es un circuito digital combinacional que selecciona una de varias entradas y la envía a la salida,
dependiendo del valor de unas líneas de control o selectores.
Definición básica:
Un MUX funciona como un “selector” controlado por señales binarias:
• Tiene 2𝑛 entradas de datos.
• Tiene 𝑛 líneas de selección.
• Tiene 1 salida.
2𝑛
𝐸𝑛𝑡𝑟𝑎𝑑𝑎𝑠 𝑀𝑢𝑙𝑡𝑖𝑝𝑙𝑒𝑥𝑜𝑟 𝑆𝑎𝑙𝑖𝑑𝑎
2𝑛 : 1
𝐻𝑎𝑏𝑖𝑙𝑖𝑡𝑎𝑐𝑖𝑜𝑛
𝑛 𝑙𝑖𝑛𝑒𝑎𝑠 𝑑𝑒 𝑠𝑒𝑙𝑒𝑐𝑐𝑖𝑜𝑛
Multiplexores
𝑬𝑯 𝑬𝟑 𝑬𝟐 𝑬𝟏 𝑬𝟎 𝑺𝟏 𝑺𝟎 Z
4
1 * * * * * * 0 𝐸𝑛𝑡𝑟𝑎𝑑𝑎𝑠
0 * * * 𝐷0 0 0 𝐷0 𝑀𝑢𝑙𝑡𝑖𝑝𝑙𝑒𝑥𝑜𝑟 𝑆𝑎𝑙𝑖𝑑𝑎
0 * * 𝐷1 * 0 1 𝐷1 4: 1
0 * 𝐷2 * * 1 0 𝐷2
0 𝐷3 * * * 1 1 𝐷3 𝐻𝑎𝑏𝑖𝑙𝑖𝑡𝑎𝑐𝑖𝑜𝑛
2 𝑙𝑖𝑛𝑒𝑎𝑠 𝑑𝑒 𝑠𝑒𝑙𝑒𝑐𝑐𝑖𝑜𝑛
𝑍 = 𝐸𝐻 (𝑆ഥ1 𝑆0 𝐷0 + 𝑆ഥ1 𝑆0 𝐷1 + 𝑆1 𝑆0 𝐷2 + 𝑆1 𝑆0 𝐷3 )
Multiplexores (como selector).
Cte.
‘1’
Var. 𝑀𝑢𝑙𝑡𝑖𝑝𝑙𝑒𝑥𝑜𝑟 Cte. ‘1’ Var.
4: 1
𝐻𝑎𝑏𝑖𝑙𝑖𝑡𝑎𝑐𝑖𝑜𝑛
𝑆1 𝑆0
Multiplexores (como generador de funciones).
𝑆𝑒𝑎 𝑓 𝑎𝑏 = (1,2,3)
0 𝐸0
1 𝐸1
1 𝐸2 Z 𝑓(𝑎𝑏)
1 𝐸3
𝑆1 𝑆0
ab
𝑀𝑢𝑙𝑡𝑖𝑝𝑙𝑒𝑥𝑜𝑟
4: 1
Multiplexores (como generador de funciones).
0 𝐸0
𝑆𝑒𝑎 𝑓 𝑎𝑏𝑐𝑑 = (1,2,3,7,12,14,15)
1 𝐸1
1 𝐸2
1 𝐸3
0 𝐸4
0 𝐸5 Z 𝑓(𝑎𝑏𝑐𝑑)
𝑀𝑢𝑙𝑡𝑖𝑝𝑙𝑒𝑥𝑜𝑟 0 𝐸6
16: 1 1 𝐸7
0 𝐸10
ab
1 𝐸15
𝑆3 𝑆2 𝑆1 𝑆0
a b c d
Multiplexores (Expansión)
𝐸0
Mediante la conexión de la línea 𝐸1
𝐸2
De habilitación con el bit mas 𝐸3
significativo de la función y la 𝑀𝑢𝑙𝑡𝑖𝑝𝑙𝑒𝑥𝑜𝑟
Integración de la compuerta OR 4: 1
𝑎 𝐸𝐻
se logra la expansión de multiplexores 𝑆1 𝑆0
𝑓(𝑎𝑏𝑐)
𝑏 𝑐
𝑆1 𝑆0
𝐸4
𝐸5
𝐸6
𝐸7
𝑀𝑢𝑙𝑡𝑖𝑝𝑙𝑒𝑥𝑜𝑟
𝐸𝐻 4: 1
Multiplexor
𝑓 𝑎𝑏𝑐𝑑 = (1,2,3,6,7,9,12,13,15)
𝑑 𝑎
𝐸0 b 𝐸0
ab\cd 00 01 11 10 𝑐
00 1 1 1 𝑐+𝑑 𝑐 𝐸1 𝑏ത
𝑓(𝑎𝑏𝑐𝑑) 𝐸1 𝑓(𝑎𝑏𝑐𝑑)
01 1 1 𝑐 𝑐 𝑎
𝐸2 𝑎ത 𝐸2
𝑑
11 1 1 1 𝑐ҧ + 𝑑
𝑐 𝑎.
ത
𝑐𝑑
ҧ 𝐸3 𝐸3
10 1 𝑑 𝑆1 𝑆0 𝑏 𝑆1 𝑆0
𝑎 𝑏 c 𝑑
𝑎𝑏 𝑎ത + 𝑏
𝑎 + 𝑏ത 𝑎ത
Multiplexor
Densidad /
Memoria Tipo Escritura Borrado / Reprogramación Velocidad Ciclos de vida Uso típico
Costo
CD-R, DVD-R,
Alta densidad, almacenamiento
WORM (Write Once, Read Many) No volátil Una sola vez No reprogramable Rápida lectura Permanente
bajo costo legal, distribución de
software
Programable con 100 – 1,000 Baja densidad, Desarrollo y pruebas
EPROM (Erasable PROM) No volátil UV (lento) Lenta
programador ciclos costo medio de firmware
Lectura rápida,
Eléctrica, por Alta densidad, SSD, USB, firmware en
Flash No volátil Eléctrica (bloques completos) escritura 10⁴ – 10⁶
bloques/páginas barato MCUs
media
Menor Configuraciones,
Más lenta que
EEPROM No volátil Eléctrica, por bytes Eléctrica (byte a byte) 10⁵ – 10⁶ densidad, másBIOS, parámetros de
Flash
cara usuario
Muy rápida Baja densidad,
Automotriz, médico,
FeRAM No volátil Eléctrica, por bytes Muy rápida 10¹² – 10¹⁴
(tipo RAM) alto costo sistemas críticos
Ilimitados Cachés de CPU,
Baja densidad,
SRAM (Static RAM) Volátil Libre Pierde datos sin energía Muy rápida mientras haya buffers de alta
muy cara
energía velocidad
Ilimitados Muy alta Memoria principal en
Más lenta que
DRAM (Dynamic RAM) Volátil Libre Pierde datos sin energía (requiere refresco) mientras haya densidad, PC, laptops,
SRAM
energía barata servidores
FIFO Vs LIFO
FIFO Vs LIFO
Característica FIFO (First In, First Out) LIFO (Last In, First Out)
Traducción "Primero en entrar, primero en salir" "Último en entrar, primero en salir"
Una fila de personas en un banco: el primero Una pila de platos: el último que se coloca arriba es el
Analogía práctica
que llega es el primero en ser atendido. primero que se retira.
Los datos se leen en el mismo orden en que
Orden de acceso Los datos se leen en orden inverso al que se escribieron.
se escribieron.
Estructura física Cola (Queue). Pila (Stack).
Buffers de comunicación (UART, USB,
Pila de llamadas en microprocesadores, almacenamiento
Uso típico en hardware Ethernet), pipelines en procesadores, gestión
temporal de variables locales, manejo de interrupciones.
de colas de impresión.
Se suelen usar punteros de lectura (Read
Implementación en Se usa un único puntero de pila (Stack Pointer) que sube y
Pointer) y escritura (Write Pointer) que
memoria baja según inserción o extracción.
avanzan circularmente.
Mantiene el orden original de los datos (ideal Permite recuperar lo más reciente de forma inmediata
Ventaja principal
para flujos de información). (ideal para recursión y deshacer operaciones).
Acceso restringido: solo al dato más antiguo
Desventaja Acceso restringido: solo al último dato ingresado.
pendiente de salir.
Las memorias RAM y ROM
ROM
Read Only Memory
PROM
ROM de máscara
Programmable ROM
EPROM
Erasable PROM
UV EPROM EEPROM
Ultraviolet EPROM Electrically EPROM
Memorias ROM
SRAM DRAM
Descripción de memoria RAM
A2 2
2 ROM
A1 1 ROM 1
8x4 8x4
A0 0 0
3 2 1 0 3 2 1 0
ROM 8x8
D7D6D5D4 D3D2D1D0
Realizar una ROM 64kx8 con dos ROM 64kx4
Expansión de longitud de palabra en memorias RAM
CS WE OE
A2 2
A1 1 RAM 2
1 RAM
A0 0 8x4 8x4
0
3 2 1
RAM 0 3 2 1 0
8x8
D7D6D5D4 D3D2D1D0
Expansión del ancho de palabra en memorias RAM
CS WEOE
A3
A2 2 2
A1 1 RAM
8x4 1 RAM
8x4
A0 0 0
3 2 1 0 3 2 1 0
RAM16x4
D3D2D1D0
Expansión de número de palabras en memorias RAM
Diseñar una memoria de 3072 localidades considerando la integración de dos memorias de 512, una de 1024 y dos de 256
mas una de 512, considera que se requiere resguardar un espacio de 128 localidades dentro de La memoria de 1024,
implementa la lógica que controle a la expansión de dicha memoria
0x000
512 𝑀 0 = 512
𝑀1 = 512 0x200
512
0x400
𝑀2 = 896
1024
𝑀2 = 128 Espacio Reservado
𝑀3 = 256 0x800
256
0x900
𝑀4 = 256
256
0xA00
𝑀5 = 512
512
0xC00
Memorias VHDL (RAM)
library IEEE;
use IEEE.STD_LOGIC_1164.ALL; entity RAM256x8 is
use IEEE.NUMERIC_STD.ALL; Port (
clk : in std_logic;
entity RAM8x8 is we : in std_logic;
Port ( clk : in std_logic; -- Reloj addr : in unsigned(7 downto 0); -- 8 bits -> 256 direcciones
din : in std_logic_vector(7 downto 0);
we : in std_logic; -- Write Enable (1 = escribe)
dout : out std_logic_vector(7 downto 0)
addr : in unsigned(2 downto 0); -- Dirección (3 bits -> 8 posiciones)
);
din : in std_logic_vector(7 downto 0); -- Dato de entrada end RAM256x8;
dout : out std_logic_vector(7 downto 0) -- Dato de salida );
end RAM8x8; architecture Behavioral of RAM256x8 is
type ram_type is array (0 to 255) of std_logic_vector(7 downto 0);
architecture Behavioral of RAM8x8 is signal RAM : ram_type := (others => (others => '0'));
type ram_type is array (0 to 7) of std_logic_vector(7 downto 0); begin
signal RAM : ram_type := (others => (others => '0'));
begin process(clk)
process(clk) begin
if rising_edge(clk) then
begin
if we = '1' then
if rising_edge(clk) then
RAM(to_integer(addr)) <= din;
if we = '1' then end if;
RAM(to_integer(addr)) <= din; -- Escritura dout <= RAM(to_integer(addr));
end if; end if;
dout <= RAM(to_integer(addr)); -- Lectura end process;
end if;
end process; end Behavioral;
end Behavioral;
Memorias VHDL (RAM con lectura asíncrona y escritura
síncrona)
process(clk)
begin
if rising_edge(clk) then
if we = '1' then
RAM(to_integer(addr)) <= din;
end if;
end if;
end process;
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
entity ROM256x8 is
entity ROM8x8 is Port (
Port ( addr : in unsigned(7 downto 0);
addr : in unsigned(2 downto 0); -- Dirección (3 bits -> 8 posiciones) dout : out std_logic_vector(7 downto 0)
dout : out std_logic_vector(7 downto 0) -- Dato de salida );
); end ROM256x8;
end ROM8x8;
architecture Behavioral of ROM256x8 is
architecture Behavioral of ROM8x8 is type rom_type is array (0 to 255) of std_logic_vector(7 downto 0);
type rom_type is array (0 to 7) of std_logic_vector(7 downto 0); constant ROM : rom_type := (
constant ROM : rom_type := ( 0 => x"00",
0 => "00000000", -- Dirección 0 1 => x"11",
1 => "00000001", -- Dirección 1 2 => x"22",
2 => "00000010", -- Dirección 2 3 => x"33",
3 => "00000100", -- Dirección 3 4 => x"44",
4 => "00001000", -- Dirección 4 5 => x"55",
5 => "00010000", -- Dirección 5 6 => x"66",
6 => "00100000", -- Dirección 6 7 => x"77",
7 => "01000000" -- Dirección 7 others => x"FF" -- Relleno con FF
); );
begin begin
dout <= ROM(to_integer(addr)); dout <= ROM(to_integer(addr));
end Behavioral; end Behavioral;
Memorias VHDL ROM con salida síncrona (lectura con reloj)
entity ROM8x8_sync is
Port (
clk : in std_logic;
addr : in unsigned(2 downto 0);
dout : out std_logic_vector(7 downto 0)
);
end ROM8x8_sync;
Diseñar con memorias el desplegado de una agenda, con 1 displays matricial (5 x 8 o 8 x 8), la cual contendrá
datos compuestos de Nombre y Numero Telefónico con la posibilidad de desplazarse de izquierda a derecha y viceversa