DISEÑO E IMPLEMENTACION DE MEMORIAS RAM Y ROM EN VHDL (Abril de 2018) Carlos Eduardo Joven García. Facultad de de Ingeniería Ingeniería Electrónica Electrónica y Telecomuni Telecomunicaciones caciones.. Universidad Universidad del Cauca Cauca Popayán, Colombia Colombia
[email protected]
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.
R esumen- en este
código, diseño, FPGA, memoria, RAM, ROM P alabras claves claves – código,
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 de almacenar información en un intervalo de tiempo cualquiera y teniendo en cuenta se puede clasificar en RAM y ROM. Las memorias de primero escritura (RAM) son aquellas que durante una escritura muestra en los terminales de salida la información que estaba previame p reviamente nte almacenada en la posición p osición que está siendo direccionada. Por el contrario, en el caso de las memorias de primero lectura (ROM) no se s e muestra información en los terminales de salida mientras se esté realizando la operación correspondiente a la escritura.
II.
METODOLOGÍA
El proyecto consiste en deducir el código en VHDL, para posteriormente implementarlo implementarlo en la FPGA. El código para la memoria memoria RAM fue el siguiente.
Ilustración 1: Bloque de declaración d e librerías y puertos para la memoria RAM (entidad)
En la entidad de la RAM se declara d eclara . Una entrada de reloj ‘clk´, que es la que me define el tiempo de lectura
y escritura, esto se define de acuerdo a los flancos de subida y bajada, la entrada de direccionamiento ‘ddr´, es la que permite la posición en la que se va a guardar la entrada de datos que en este caso es ‘dato_in’,
además la condición que me permite si se lee o escribe un dato es redwrit , que se describirá posteriormente, finalmente esta entidad posee una variable de salida salida en forma de vector vector al igual que la variable variable dato_in.
Ilustración 2: Bloque de funcionamiento de la memoria RAM (arquitectura)
En esta segunda ilustración se define la arquitectura de la memoria RAM, y para esta sección fue necesario tener las siguientes partes.
Una señal r que se denota como matriz de tipo m la cual permite almacenar los datos en cualquiera de las 16 posiciones que permite el array.
Ilustración 4: Bloque de declaración de librerías y puertos para la memoria ROM (entidad) La entidad de la ROM ya desaparece la entrada ‘redwrit’, aunque se conserva ‘clk’ ‘ddr’, el dato d e salida, mirando de forma detallada se cambia el nombre por ‘dato_sal’ y su vector es mucho mas grande,
pasa de ser de seis bits; e si se puede concluir que las memorias son 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 forma se procede a explicar el siguiente código.
Ilustración 5: Bloque de funcionamiento de la memoria ROM (arquitectura)
En la arquitectura se procedió de la siguiente manera.
Se declara una señal ‘me_rom’, la cual ya trae 16 datos
Se declara una segunda señal llamada ‘dat_tempo’, la
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
dirección convertida en entero.
APLICACIONES
Se declara un vector de tipo array el cual me permite almacenar cualquier dato en cualquier posición para su posterior lectura. que se leerán posteriormente.
III.
En el proceso se designa un rising_edge el cual se ejecuta en cada uno de los flancos del reloj, al cumplirse esto el dato de salida es igual a la señal ‘dat_tempo’.
Para el montaje en la FPGA se asignaron los puertos a pines de la misma, de la siguiente manera:
Ilustración 3: Asignación d e pines de la memoria ROM p ara la FPGA mediante la opción "Pin Planner"
Las memorias ROM, por sus características de no ✓ 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 información.
Las memorias RAM, por el contrario, sí permiten modificar su información, siendo estas de uso más comercial que las memorias ROM, pues, por ejemplo, en los teléfonos celulares o los ordenadores, se necesita modificar la información con relativa frecuencia, por lo que siempre vienen con una memoria RAM incorporada con suficiente capacidad como para un buen funcionamiento del dispsitivo. ✓
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--
direcciones--
architecture funcional of m_ram is --- este tipo de datos me permite crear una matriz de 4 bits que se pueden guardar en 16 ---- 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", 4 =>"000100", 5 =>"000101", 6 =>"000110", 7 =>"000111", 8 =>"001000", 9=> "001001", 10=>"001010", 11=>"001011", 12=>"001100", 13=>"001101", 14=>"001110",
-- Asignacion de valores
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;