Práctica Memorias
lalo93939326 de Noviembre de 2013
2.139 Palabras (9 Páginas)408 Visitas
UPIITA – IPN
Materia: Circuitos Lógicos
Reporte 7. “Memorias”
- González Vázquez Eduardo Daniel
- León Juan Javier
- Vargas Alanis Michell Guadalupe
Equipo #6
LEED
Grupo: 2MM4
Resumen
Se analiza el funcionamiento de las memorias RAM y ROM
Abstract
The functionality of the counters, using the different types and configurations that exist, with multiple examples involved from the toy’s area to more industrial applications so we can observed its versatility and potential to be used in almost any area.
Introducción
Memoria RAM
RAM proviene de ("Random Access Memory") ó memoria de lectura aleatoria: es un dispositivo electrónico que se encarga de almacenar datos e instrucciones de manera temporal, de ahí el término de memoria de tipo volátil ya que pierde los datos almacenados una vez apagado el equipo; pero a cambio tiene una muy alta velocidad para realizar la transmisión de la información.
Memoria ROM
La memoria ROM, es un circuito integrado programado con unos datos específicos cuando es fabricado. Los chips de características ROM no solo se usan en ordenadores, sino en muchos otros componentes electrónicos también. Hay varios tipos de ROM.
Tipos de ROM
Hay 5 tipos básicos de ROM, los cuales se pueden identificar como:
ROM
PROM
EPROM
EEPROM
Memoria Flash
Desarrollo
1.- Implementar en FPGA una memoria de acceso aleatorio RAM de 64 bits con un bus de direcciones de 3 bits y un bus de datos de 8 bits, con terminales de control chip select “CS” y modo lectura o escritura “RD/WR”.
Para el desarrollo de esta memoria se utilizará la tarjeta de desarrollo Nexys 3.
El programa en VHDL quedó de la siguiente manera:
--Programa que simula el funcionamiento de una memoria RAM
entity ram is
Port ( cs : in STD_LOGIC;--Entrada de chip select
clk : in STD_LOGIC;--Reloj interno de la nexys
rdwr : in STD_LOGIC;--Entrada de lectura o escritura
ab : in STD_LOGIC_VECTOR (2 downto 0);--Entradas del selector
c : in STD_LOGIC_VECTOR (7 downto 0);--Control para la escritura
db : inout STD_LOGIC_VECTOR (7 downto 0));--Bus de datos
end ram;
architecture Behavioral of ram is
begin
data:process(cs,ab,c,clk)
variable d: STD_LOGIC_VECTOR (7 downto 0):="00000000";--Salida inicializada
variable d1: STD_LOGIC_VECTOR (7 downto 0):="00000001";--Salida de selector 000
variable d2: STD_LOGIC_VECTOR (7 downto 0):="00000011";--Salida de selector 001
variable d3: STD_LOGIC_VECTOR (7 downto 0):="00000111";--Salida de selector 010
variable d4: STD_LOGIC_VECTOR (7 downto 0):="00001111";--Salida de selector 011
variable d5: STD_LOGIC_VECTOR (7 downto 0):="00011111";--Salida de selector 100
variable d6: STD_LOGIC_VECTOR (7 downto 0):="00111111";--Salida de selector 101
variable d7: STD_LOGIC_VECTOR (7 downto 0):="01111111";--Salida de selector 110
variable d8: STD_LOGIC_VECTOR (7 downto 0):="11111111";--Salida de selector 111
variable p: integer range 0 to 100000:=0;--Variable para divisor de frecuencia
begin
if clk'event and clk='1' then
if p=100000 then--Realiza el divisor de frecuencia
p:=0;
if cs='1' then--Se activa la memoria
if rdwr='1' then--Se selecciona modo lectura
if ab="000" then d:=d1;--Se despliega el dato según el selector
elsif ab="001" then d:=d2;
elsif ab="010" then d:=d3;
elsif ab="011" then d:=d4;
elsif ab="100" then d:=d5;
elsif ab="101" then d:=d6;
elsif ab="110" then d:=d7;
elsif ab="111" then d:=d8;
else d:="00000000";
end if;
else--Se selecciona modo escritura
if ab="000" then d1:=c;--Se modifica el dato seleccionado
elsif ab="001" then d2:=c;
elsif ab="010" then d3:=c;
elsif ab="011" then d4:=c;
elsif ab="100" then d5:=c;
elsif ab="101" then d6:=c;
elsif ab="110" then d7:=c;
elsif ab="111" then d8:=c;
end if;
end if;
else d:="ZZZZZZZZ";--Chip select en 0
end if;
else p:=p+1;
end if;
db<=d;
end if;
end process;
end Behavioral;
Asignación de pines:
net "ab(0)" loc="M8";//Switches para el bus de dirección
net "ab(1)" loc="N8";
net "ab(2)" loc="U8";
net "cs" loc="T5";//Switch de chip select
net "rdwr" loc="V8";//Switch modo lectura o escritura
net "db(0)" loc="U16";//Leds para mostrar la información
net "db(1)" loc="V16";
net "db(2)" loc="U15";
net "db(3)" loc="V15";
net "db(4)" loc="M11";
net "db(5)" loc="N11";
net "db(6)" loc="R11";
net "db(7)" loc="T11";
net "c(0)" loc="V9";//Switches para el control
net "c(1)" loc="T9";
net "c(2)" loc="T10";
net "c(3)" loc="C4";
net "c(4)" loc="B8";
net "c(5)" loc="D9";
net "c(6)" loc="C9";
net "c(7)" loc="A8";
net "clk" loc="V10";//Reloj de la Nexys
Los resultados se muestran en las figuras siguientes:
Figura 1.- Se muestran los datos de la memoria
Figura 2.- Se escriben datos en la memoria
2.- Implementar en FPGA, una memoria ROM de 96 bits, distribuidos en 8 datos de 16 bits, con bus de dirección de 3 bits, selector de chip.
Los bus de datos contendrán la información necesaria para desplegar en cuatro displays las palabras HOLA y CIAO, es decir los segmentos y los ánodos del display, haciendo uso de un reloj.
Para el desarrollo de esta memoria se utilizará la tarjeta de desarrollo Nexys 3.
El programa en VHDL quedó de la siguiente manera:
--Programa que simula el funcionamiento de una memoria rom
entity rom is
Port ( cs : in STD_LOGIC;--Entrada de chip select
sel : in STD_LOGIC;--Entrada de selector HOLA CIAO
clk: in STD_LOGIC;--Reloj interno de la Nexys
ab : inout STD_LOGIC_VECTOR (2 downto 0);--Selector de bus de datos
db : inout STD_LOGIC_VECTOR (11 downto 0));--Salida de bus de datos
end rom;
architecture Behavioral of rom is
begin
romi:process(clk,sel)
variable p: integer range 0 to 100000:=0;--Variable para divisor de frecuencia
begin
if (clk'event and clk='1') then
if p=100000 then--Realiza división de frecuencia
p:=0;
if cs='0' then db<="ZZZZZZZZZZZZ";
else
if sel='0' then--Selecciona hola
if ab="011" then--Valor máximo para mostrar hola
ab<="000";--Valor de inicio de hola
else ab<=ab+1;
end if;
else--Selecciona ciao
if ab="111" then--Valor máximo para mostrar ciao
ab<="100";--Valor de inicio de ciao
else ab<=ab+1;
end if;
end if;
end if;
else p:=p+1;
end if;
if ab="000" then db<="100100010111";--Asignación de letras y ánodos de la forma hgfedcba
elsif ab="001" then db<="000000111011";
elsif ab="010" then db<="111000111101";
elsif ab="011" then db<="000100011110";
elsif ab="100" then db<="011000110111";
elsif ab="101" then db<="100111111011";
elsif ab="110" then db<="000100011101";
elsif ab="111" then db<="000000111110";
end if;
end if;
end process;
end Behavioral;
Asignación de pines:
net "clk" loc= V10;//Reloj de la Nexys
net "sel" loc= T9;//Selección HOLA CIAO
net "cs" loc= T10;//chip select
net "db(11)" loc= T17;//ánodo
net "db(10)" loc= T18;//ánodo
net "db(9)" loc= U17;//ánodo
net "db(8)" loc= U18;//ánodo
net "db(7)"
...