You are on page 1of 11

UPIITA-IPN Materia: Circuitos Lógicos.

Practica No.7 Memorias Equipo #6


López Landa Luis Adrián Hunab-ku: tecnoloyo
Castro Víctor Ernesto Grupo: 2MV7

Resumen.
Resumen.
En algunos procesos la información generada, no se tomaba con gran valor hasta que se vio en la
necesidad de recordar un estado de trabajo y hoy en día constituye un gran avance guardar
información, como ejemplo tenemos conceptos informáticos como Big Data, Machine Learning.
En lo correspondiente a control, se puede hacer un control difuso con base en todas las pruebas o
circunstancias.

En esta práctica se abarca el tema de almacenamiento de información en memorias y se muestran


aplicaciones básicas como el despliegue de mensajes de una marquesina, el guardar estados de
configuración de leds accediendo a diferentes localidades de la memoria. El diseño de un PWM.

Abstract.
In some process the generated data wasn’t considerate important and was discarded until the
need of record the work status. Now a days records the information imply a great technological
advance for example we can mention some modern informatics concepts like Big Data or Machine
Learning.
An example of control we can make a fuzzy control with base in all the tests that it made.

In this practice we cover the subject of save information in memory, we show some basic
application like the message deploy in an announcement, save the status of led´s configuration
accessing to different memory location. Also the record and deploy of a PWM.

Résumé
Dans certains cas, les données générées n'étaient pas considérables et ont été rejetées jusqu'à la
nécessité d'enregistrer le statut du travail. Maintenant, un jour, les enregistrements de
l'information impliquent une excellente avancée technologique, par exemple, nous pouvons
mentionner certains concepts informatiques modernes comme Big Data ou Machine Learning.

Un exemple de contrôle, nous pouvons faire un contrôle flou avec base dans tous les tests qu'il a
réalisés.

Dans cette pratique, nous couvrons le sujet de l'enregistrement des informations en mémoire,
nous montrons une application de base comme le déploiement du message dans une annonce,
sauvegardez l'état de la configuration de la console pour accéder à un emplacement de mémoire
différent. Également le record et le déploiement d'un PWM.
Introducción.
RAM es el acrónimo a Random Access Memory, en español, memoria de acceso aleatorio. Se
puede acceder a cualquier byte de memoria sin tener que acceder a los bytes previos. Este tipo de
memoria es la más común. Con el paso del tiempo se han ido mejorando dichas memorias, desde
su capacidad hasta su tamaño.

ROM es el acrónimo a Read Only Memory, en español, memoria de solo lectura, también es
llamada memoria no volátil, debido a que no se borra cuando el sistema se apaga. En esta
memoria tenemos muchas clasificaciones, las cuales gracias al avance tecnológico han sido
creadas:

 PROM. (Programmable Read Only Memory). El usuario podía programar la memoria, pero
no podía reescribir en ella.
 EPROM. (Erasable Programmable Read Only Memory). El usuario podía programar la
memoria, con la posibilidad de reescribirla, con una pequeña ventana donde se dejaban
pasar rayos ultra-violeta para borrar la memoria.
 EEPROM. (Electrically Erasable Programmable Read Only Memory). El usuario podía
programar la memoria, con la posibilidad de reescribirla, aplicando una corriente a la
memoria.
 Flash. La más nuevas de las memorias ROM, el usuario puede programar la memoria y
reescribirla, aplicando una corriente más pequeña a comparación con la EEPROM,
permitiendo la disminución de tamaño, actualmente vemos esta tecnología en las
memorias USB.

Desarrollo
Ejercicio 01 Memoria RAM.
Código.

Código memoria RAM escrito en Verilog


`timescale 1ns / 1ps
module mdl(
clk, //Clock
CS, //Chip select
RW, //Read - Write
AB, //Address bus - input
SW, //Switches - Input
DB //Data bus - Output
);
parameter DATA_BITS=8;
parameter ADDR_WIDTH=3;
parameter SIZE_RAM=1<<ADDR_WIDTH;
input clk;
input CS;
input RW;
input [ADDR_WIDTH-1:0]AB;
input [DATA_BITS-1:0]SW;
output [DATA_BITS-1:0]DB;
reg[DATA_BITS-1:0]DB_out;
reg[DATA_BITS-1:0]mem[0:SIZE_RAM-1];

assign DB=(CS&&!RW)?DB_out:8'bzzzzzzzz; //Aqui asignamos la memoria

always @(posedge clk)


begin: MEMORIA_RAM
if(CS==0)
begin DB_out=8'bzzzzzzzz;
end
else if (RW) begin mem[AB]=SW; end
else begin DB_out=mem[AB]; end
end

endmodule

Evidencias.

Figura 1 Escritura y lectura en la posición 1 de la memoria RAM


Figura 2 Escritura y lectura de la posición 4 de la memoria RAM.

Ejercicio 02. Memoria ROM


library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity rom is
generic (bits: integer:=8);
port(sel: in std_logic;
cs: in std_logic;
Clk_Ext: in std_logic;
an: out std_ulogic_vector(bits-1 downto 0):="11111111";
Dpy: out std_ulogic_vector(bits-1 downto 0):="11111111");
end rom;
architecture mem of rom is
type rom_array is array (0 to 3) of std_ulogic_vector (bits-1 downto 0);
--los datos de los segmentos del display tiene en el orden "abcdefgP"
para ánodo común
constant rom: rom_array :=
("10001001","11000000","11000111","10001000");--H,O,L,A
constant rom1: rom_array :=
("11000110","11001111","10001000","11000000");--C,I,A,O
constant rom2: rom_array :=
("11110111","11111011","11111101","11111110");
signal dato1,dato2: integer range 0 to 3;
begin
process (Clk_Ext)
begin
if Clk_Ext 'event and Clk_Ext='1' then --Activa el flip-flop en el franco
de subida
if cs='1' then
if sel='0' then
Dpy <= rom(dato1);
an <= rom2(dato1);
dato1<=dato1+1;
elsif sel='1' then
Dpy <= rom1(dato2);
an <= rom2(dato2);
dato2<=dato2+1;
end if;
else Dpy<="ZZZZZZZZ";
an<="ZZZZZZZZ";
end if;
end if;
end process;
end mem;

Selector

Figura 3.

En la figura 3 se muestra los datos almacenados empleando el reloj externo a una frecuencia de
aproximadamente 300hz con el chip selec en 1 y el selector en cero, como se puede observar los
datos almacenados son las letras H, O, L, A y los ánodos de los display.

Figura 4

En la figura 4 observamos los datos almacenados empleando el reloj externo a una frecuencia de
aproximadamente 300hz con el chip selec en 1 y el selector en uno, los datos almacenados son las
letras C, I, A, O y los ánodos de los display.
Chip selec

Figura 5

En la figura 5 el chip selec está en cero por lo tanto los datos se mandan a alta impedancia.

Figura 6.

En la figura 6 el reloj se trabajó a una frecuencia de aproximadamente 30hz.

Figura 7

En la figura 7 se muestra el reloj empleado para mostrar los datos almacenados el cual está
configurado para trabajar a frecuencias de 1hz hasta 1khz.
Figura 8.

En la figura 8 se muestran los valores de resistencia y capacitancia necesarios para trabajar a


determinada frecuencia utilizando el circuito integrado 555.

Ejercicio 4. Visualizador de marquesinas


Código
Marquesina en VHDL
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity marquesina_vhdl is
Port ( Selector : in STD_LOGIC_VECTOR(1 downto 0); --Declaramos las variables
Pulso : inout STD_LOGIC:='0';
Salida : out STD_LOGIC;
Salida2 : out STD_LOGIC;
Salida3 : out STD_LOGIC_VECTOR(7 downto 0);
Salida2 : out STD_LOGIC_VECTOR(39 downto 0);
Led : out STD_LOGIC;
clk : in STD_LOGIC);
end marquesina_vhdl;

architecture Behavioral of marquesina_vhdl is


signal count : integer :=1;
signal contador: integer:=0;
signal ms0: STD_LOGIC_VECTOR(11 downto 0):="110000111011"; --H
signal ms1: STD_LOGIC_VECTOR(11 downto 0):="000000111011"; --O
signal ms2: STD_LOGIC_VECTOR(11 downto 0):="111000111101"; --L
signal ms3: STD_LOGIC_VECTOR(11 downto 0):="000100011110"; --A
signal ms4: STD_LOGIC_VECTOR(7 downto 0):="01010101";--Ajedrez
signal ms5: STD_LOGIC_VECTOR(39 downto
0):="0101010101010101010101010101010101010101";--Ajedrez
begin
process(clk,selector,ms0,ms1,ms2,ms3)
begin
if(clk'event and clk='1') then
count <=count+1;
if(count = 50000) then
PULSO <= not PULSO;
contador<= contador+1;
if(contador>=9) then
contador<=0;
end if;
count <=1;
led<=pulso;
end if;
end if;
salida2<='1';
case selector is
when "01" => salida<=ms1(contador);
when "11" => salida<=ms2(contador);
when "10" => salida<=ms3(contador);
when "00" => salida3<=ms4;
salida4<=ms5;
when others => salida<='0';
end case;
end process;
end Behavioral;

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity pwm_vhdl is
Port ( Selector : in STD_LOGIC_VECTOR(1 downto 0);
Pulso : inout STD_LOGIC:='0';
Salida : out STD_LOGIC;
Salida2 : out STD_LOGIC;
Led : out STD_LOGIC;
clk : in STD_LOGIC);
end pwm_vhdl;

architecture Behavioral of pwm_vhdl is


signal count : integer :=1;
signal contador: integer:=0;
signal ms0: STD_LOGIC_VECTOR(9 downto 0):="0000000000";
signal ms1: STD_LOGIC_VECTOR(9 downto 0):="0000000001";
signal ms2: STD_LOGIC_VECTOR(9 downto 0):="0000011111";
signal ms3: STD_LOGIC_VECTOR(9 downto 0):="0111111111";
begin
process(clk,selector,ms0,ms1,ms2,ms3)
begin
if(clk'event and clk='1') then
count <=count+1;
if(count = 50000) then
PULSO <= not PULSO;
contador<= contador+1;
if(contador>=9) then
contador<=0;
end if;
count <=1;
led<=pulso;
end if;
end if;
salida2<='1';
case selector is
when "01" => salida<=ms1(contador);
when "11" => salida<=ms2(contador);
when "10" => salida<=ms3(contador);
when "00" => salida<=ms0(contador);
when others => salida2<='0';
end case;
end process;
end Behavioral;

Figura 9 PWM de 0ms con 10ms de duración


Figura 10 PWM de 1ms con 10ms de duración

Figura 11 PWM de 5ms con 10ms de duración.

Conclusiones
Castro Meneses Victor Ernesto.

En esta práctica aprendí a usar un reloj externo. Este me sirvió para variar la frecuencia a mi gusto.
De esta forma y por medio de un contador pude hacer una marquesina que decía hola y ciao, la
cual primero se encendía lentamente letra por letra, pero conforme aumentaba la frecuencia se
podía ver toda la palabra completa ya que el ojo no percibe el cambio de encendido y apagado y
da la apariencia de estar encendido todo el tiempo. También pude hacer una salida de pwm y la
utilicé para variar la luminosidad de un led y esto es muy práctico ya que se puede variar la
velocidad de un motor también y esto nos da muchas posibilidades para hacer proyectos

Lopez Landa Luis Adrian.

Se logró leer el reloj de un dispositivo externo a la tarjeta de desarrollo gracias a un


consejo que la misma IDE otorga. Se fue implementado con éxito el código para la
generación de un PWM muy preciso desde la tarjeta de desarrollo. Se fortalecieron
conocimientos básicos sobre el uso y funcionamiento de las memorias RAM y ROM. Esto
da apertura a la creación de programas más complejos con el uso de las memorias RAM
y ROM para almacenar datos importantes requeridos para el funcionamiento desde el
inicio o durante el transcurso de la ejecución.

Bibliografía.
Creative Commons. (s.f.). Comunidad informática. Recuperado el 23 de abril de 2017, de
http://es.ccm.net/contents/399memoria-de-solo-lectura-rom Iglesias,A.L.(5 de febrero de 2016).
About en español. Recuperado el 23 de abril de 2017, de
http://computadoras.about.com/od/conocermi-computadora/f/que-es-La-MemoriaRam.htm

You might also like