Skip to content
Update ROM authored by Adrian Ghignone's avatar Adrian Ghignone
......@@ -7,12 +7,65 @@ Como su nombre indica, una ROM almacena información cuyo propósito no es ser m
En el caso de valores de configuración, es fundamental guardar su integridad, por lo que tiene sentido usar una ROM para ellos.
A diferencia de una RAM o una memoria secuencial, las ROM pueden implementarse como circuitos **combinacionales**. Simplemente se definen cuatro elementos:
- Un vector de registros (**reg[][]**) que almacena los valores de la memoria
- Un vector de registros que almacena los valores de la memoria
- Una entrada de dirección de lectura
- Una salida con el dato leído
- Un bloque combinacional que asigna el valor almacenado a cada posición
```vhdl
--VHDL
library ieee;
use ieee.std_logic_1164.all;
entity ROM is
port (
--Direccionamiento de 4 bits
address : in std_logic_vector(3 downto 0);
--Cada palabra en memoria tiene 4 bits
out_dat : out std_logic_vector(3 downto 0) );
end entity ROM;
--Como la memoria es de solo lectura, su tamaño y contenido
--son fijos y se definen al momento de crear el módulo
architecture ROM_ARQ of ROM is
begin
process (address) begin
case address is
when "0000" => out_dat <= "1111";
when "0001" => out_dat <= "1110";
when "0010" => out_dat <= "1101";
when "0011" => out_dat <= "1100";
when "0100" => out_dat <= "1011";
when "0101" => out_dat <= "1010";
when "0110" => out_dat <= "1001";
when "0111" => out_dat <= "1000";
when "1000" => out_dat <= "0111";
when "1001" => out_dat <= "0110";
when "1010" => out_dat <= "0101";
when "1011" => out_dat <= "0100";
when "1100" => out_dat <= "0011";
when "1101" => out_dat <= "0010";
when "1110" => out_dat <= "0001";
when "1111" => out_dat <= "0000";
when others => out_dat <= "0000";
end case;
end process;
end architecture ROM_ARQ;
```
```verilog
//VERILOG
module ROM (
//Direccionamiento de 4 bits
input wire[3 : 0] address,
......@@ -22,7 +75,6 @@ module ROM (
//Como la memoria es de solo lectura, su tamaño y contenido
//son fijos y se definen al momento de crear el módulo
//En este caso, se implementa un codificador BCD / Aiken
always @(address) begin
case (address)
......
......