You are on page 1of 7

DISEÑO E IMPLEMENTACION DE MEMORIAS

RAM Y ROM EN VHDL


(Abril de 2018)
Carlos Eduardo Joven García.
Facultad de Ingeniería Electrónica y Telecomunicaciones. Universidad del Cauca
Popayán, Colombia
cejoven@unicauca.edu.co

Resumen- en este documento se señala la forma de diseño en


VHDL de la memoria RAM y la memoria ROM, para poder
implementarlas en la FPGA posteriormente, también se explica
cada bloque de los códigos para el caso.

Palabras claves – código, diseño, FPGA, memoria, RAM, ROM

I. INTRODUCCIÓN.

Hoy en día la palabra dispositivo es usada de forma continua, tanto


por personas que no entienden su significado, aunque si saben para
que sirve; en si la memoria es un dispositivo que posee la capacidad Ilustración 1: Bloque de declaración de librerías y puertos para la
de almacenar información en un intervalo de tiempo cualquiera y memoria RAM (entidad)
teniendo en cuenta se puede clasificar en RAM y ROM.
En la entidad de la RAM se declara .
Las memorias de primero escritura (RAM) son aquellas
que durante una escritura muestra en los terminales de salida la Una entrada de reloj ‘clk´, que es la que me define el tiempo de lectura
información que estaba previamente almacenada en la posición que y escritura, esto se define de acuerdo a los flancos de subida y bajada,
está siendo direccionada. Por el contrario, en el caso de las la entrada de direccionamiento ‘ddr´, es la que permite la posición en
memorias de primero lectura (ROM) no se muestra información en la que se va a guardar la entrada de datos que en este caso es ‘dato_in’,
los terminales de salida mientras se esté realizando la operación además la condición que me permite si se lee o escribe un dato es
correspondiente a la escritura. redwrit , que se describirá posteriormente, finalmente esta entidad
posee una variable de salida en forma de vector al igual que la variable
dato_in.

II. METODOLOGÍA

El proyecto consiste en deducir el código en VHDL, para


posteriormente implementarlo en la FPGA. El código para la memoria
RAM fue el siguiente.
Ilustración 2: Bloque de funcionamiento de la memoria RAM
(arquitectura) Ilustración 4: Bloque de declaración de librerías y puertos para
la memoria ROM (entidad)
En esta segunda ilustración se define la arquitectura de la memoria
RAM, y para esta sección fue necesario tener las siguientes partes. La entidad de la ROM ya desaparece la entrada ‘redwrit’, aunque se
conserva ‘clk’ ‘ddr’, el dato de salida, mirando de forma detallada se
 Una señal r que se denota como matriz de tipo m la cual cambia el nombre por ‘dato_sal’ y su vector es mucho mas grande,
permite almacenar los datos en cualquiera de las 16 pasa de ser de seis bits; e si se puede concluir que las memorias son
posiciones que permite el array. similares en el fenómeno de lectura.

 Un ‘clk’ que es el que permite el proceso de lectura y


escritura en la RAM, además existe la condición, que si la
variable (redwrit=’1’), ocurre el proceso de escritura y por
lo tanto la salida de la señal ‘r’ de tipo array junto con la
entrada ‘ddr’ convertida en tipo entero es igual al dato de
entrada.

 Si no, la salida de la salida el dato de salida es igual a la


señal r de tipo array junto con el direccionamiento de tipo
entero, y a este fenómeno se le llama lectura.

Para la FPGA se asignaron los siguientes pines que se pueden


contemplar en la siguiente imagen.

Ilustración 3: Asignación de pines de la memoria RAM para la

FPGA mediante la opción "Pin Planner".

Para la memoria ROM se hace algo parecido, pues con anterioridad


se sabe que este tipo de memoria solo sirve para la lectura, de esta Ilustración 5: Bloque de funcionamiento de la memoria ROM
forma se procede a explicar el siguiente código. (arquitectura)
En la arquitectura se procedió de la siguiente manera. III. APLICACIONES

 Se declara un vector de tipo array el cual me permite


almacenar cualquier dato en cualquier posición para su
posterior lectura.

 Se declara una señal ‘me_rom’, la cual ya trae 16 datos ✓ Las memorias ROM, por sus características de no
que se leerán posteriormente. permitir modificar su información almacenada, son generalmente
usadas por fabricantes de productos electrónicos con funciones
específicas y que no necesitan de modificación alguna de
 Se declara una segunda señal llamada ‘dat_tempo’, la
información.
cual tiene un vector de seis bits, la cual me permite
almacenar en ella los valores pedidos por la dirección.

 La señal ‘dat_tempo’ es igual a la señal ‘me_rom’ por la ✓ Las memorias RAM, por el contrario, sí permiten
dirección convertida en entero. modificar su información, siendo estas de uso más comercial que
las memorias ROM, pues, por ejemplo, en los teléfonos celulares
 En el proceso se designa un rising_edge el cual se ejecuta o los ordenadores, se necesita modificar la información con
en cada uno de los flancos del reloj, al cumplirse esto el relativa frecuencia, por lo que siempre vienen con una memoria
dato de salida es igual a la señal ‘dat_tempo’. RAM incorporada con suficiente capacidad como para un buen
funcionamiento del dispsitivo.

Para el montaje en la FPGA se asignaron los puertos a pines de la


misma, de la siguiente manera:

Ilustración 3: Asignación de pines de la memoria ROM para la

FPGA mediante la opción "Pin Planner"


ANEXOS

Código de la memoria RAM en VHDL


---- diseño de la memoria ram-- carlos eduardo joven garcia--

--- declaracion de las librerias --

library ieee;

use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;

---declaracion de la entidad--

entity m_ram is

---declaracion de los puertos --

port (clk, redwrit: in std_logic;


ddr: in std_logic_vector (3 downto 0);
dato_in: in std_logic_vector (3 downto 0);
dato_out: out std_logic_vector(3 downto 0) );

end m_ram ;

---declaracion de la arquitectura--

architecture funcional of m_ram is


--- este tipo de datos me permite crear una matriz de 4 bits que se pueden guardar en 16
direcciones--
---- m es la matriz--
type m is array (15 downto 0) of std_logic_vector (3 downto 0);

signal r : m ;

begin

process (clk) begin


--- declaracion del proceso de escritura---

if (clk' event and clk= '1') then

if (redwrit= '1')then

r(conv_integer(ddr))<= dato_in;

--- declaracion del proceso de lectura--


else
dato_out<= r(conv_integer(ddr));
end if ;

end if ;

end process ;

end funcional ;

código de la memoria ROM en VHDL

--- diseño de la memoria rom -- Carlos Eduardo Joven Garcia ---

--declaracion de las librerias--

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;

--declaracion de la entidad--

entity m_rom is

--- declaracion de los puertos---

port (clk : in std_logic;


ddr : in std_logic_vector (3 downto 0);
dato_sal : out std_logic_vector (5 downto 0) );

end m_rom ;

---declaracion de la arquitectura

architecture funcional of m_rom is

---declaracion de una cadena de posiciones, para la posterior lectura

type tam_mem_type is array (15 downto 0) of


std_logic_vector (5 downto 0);
--- datos que se leeran--
signal me_rom : tam_mem_type :=
(0 =>"000000",
1 =>"000001",
2 =>"000010",
3 =>"000011", -- Asignacion de valores
4 =>"000100",
5 =>"000101",
6 =>"000110",
7 =>"000111",
8 =>"001000",
9=> "001001",
10=>"001010",
11=>"001011",
12=>"001100",
13=>"001101",
14=>"001110",
15=>"001111");

signal dat_tempo:std_logic_vector(5 downto 0);----- señal de tipo vector para almacenar


valores en ella, la palabra que me pida la dir

begin
dat_tempo<=me_rom(conv_integer(ddr));

process (clk) begin


if rising_edge (clk) then
dato_sal<=dat_tempo; ----me_rom (conv_integer (unsigned(ddr)));
end if;
end process;
end funcional;