Práctica No. 2 Dispositivos de Memoria Datos de la práctica Carrera INGENIERIA ELECTRONICA Semestre Grupo Tipo Practica Laboratorio Simulación Fecha Asignatura Unidad Temática No Alumnos por practica 2 No. Alumnos por reporte 2 Nombre del Profesor Nombre(s) de Alumno(s) Tiempo estimado Comentarios Vo. Bo Del Profesor OBJETIVOS: Objetivo General Determinar la capacidad de un dispositivo de memoria con base en sus entradas y salidas. Combinar ICs de memoria para formar módulos de memoria con un tamaño de palabra más grande y/o mayor capacidad Objetivos Específicos 1. Comprender y utilizar en forma correcta la terminología asociada con los sistemas de memoria 2. Distinguir entre los diversos tipos de ROM y citar algunas aplicaciones comunes 3. Utilizar el programa Circuit Maker para simular circuitos digitales de memoria ROM o memoria RAM. MEDIOS A UTILIZAR: Laboratorio de Simulación PC Software ISE, Adept y Circuit Maker. Kit FPGA Basys 2. 1
INTRODUCCION La memoria es un medio físico capaz de almacenar información (programas y datos) de forma temporal o permanente. Aunque conceptualmente parezcan sencillas, presentan una gran variedad de tipos, tecnología, estructura, prestaciones y costos. Ninguna tecnología es óptima para satisfacer todas las necesidades de un computador, por lo que existe una jerarquía de subsistemas de memoria. La capacidad de la memoria es una forma de especificar la cantidad de bits que puede almacenar un dispositivo de memoria. La capacidad se puede expresar como el producto: número de palabras x tamaño de la palabra o por una cantidad específica de bits. El arreglo de las memorias indica que está compuesta por n palabras de m bits cada una. Cada una de estas palabras tiene asociado una dirección (código binario) para acceder a ella para escribir o leer un dato. Las designaciones comunes para expresar la capacidad de una memoria son: 1K = 2 10 = 1024 1M = 2 20 = 1024 K 1G = 2 30 = 1024M 1T = 2 40 = 1024G En esta guía de laboratorio analizaremos de manera general el funcionamiento de un modulo de memoria ROM y RAM, asi mismo seremos capaces de aumentar el tamaño de la palabra y su capacidad. TRABAJO PREVIO 1. Traer la guía de Laboratorio de manera digital. 2. Descargar los Archivos.V subidos en el blog de la asignatura en la sección de la Unidad II 2
DESARROLLO O PROCEDIMIENTO: UNIVERSIDAD NACIONAL DE INGENIERIA I Parte Memoria ROM (Modulo de 8X8 usando ISE) 1. Cree un nuevo proyecto en ISE Project Navigator llamado rom8. 2. Recordemos un poco la configuración inicial mostrada en la Figura 1. para poder trabajar con el programa ISE y el Kit FPGA. 3. Agregue una nueva fuente (New Source) usando un modulo verilog (Verilog Module) con el nombre rom8 asignando como entradas las tres líneas de dirección, en este caso serian: [2:0]addr y como salidas las líneas de datos de 8 bits [7:0] M. 4. Después de agregadas las entradas y salidas termine de escribir el código del programa mostrado a continuación: 3
module rom8( input [2:0] addr, //Entrada de Direcciones de Memoria output [7:0] M //Salida de Datos ); parameter N=8; //Tamaño de la palabra parameter N_WORDS=8; //Numero de palabras en la memoria reg [N-1:0] rom [0:N_WORDS-1]; parameter data = 'h00c8f9af64956cd4; //Datos almacenados en Memoria parameter IXLEFT = N*N_WORDS -1; //Maximo de Direcciones de Memoria integer i; //wire temp; initial begin for (i=0; i<n_words; i=i+1) rom[i] = data [(IXLEFT-N*i)-:N]; end assign M = rom[addr]; endmodule 5. El módulo de memoria ROM tendrá el siguiente mapa de Memoria y su distribución. (b) (a) Figura 2 (a) Mapa de Memoria (b) Distribución 4
6. Despues de verificar la sintaxis del programa usando la opción Check Sintax, realice un archivo.ucf con los nombres de los pines a utilizar en la tarjeta FPGA. 7. Teniendo todos los archivos necesarios compile el programa usando la opción Generate Programming File para poder obtener el archivo.bit. 8. Antes de introducir el archivo.bit a la tarjeta verifique que el jumper este en la opción de PC. 9. Introduzca el archivo.bit usando el software ADEPT. Actividades Visualizacion de los Datos de la Memoria Lineas de Direccion Clear Señal de Cambio Ejercicio 1 Ejercicio 2 Fig. 3 Diagrama de Funcionamiento de la Memoria ROM 1. Compruebe los valores almacenados en las direcciones de Memoria de la ROM. 2. Cambie los valores almacenados dentro de la Memoria y compruebe otra vez. 3. Modifique el programa del modulo de Memoria para que tenga una entrada de habilitación en ALTO (CS). Esto debe realizarse en un nuevo proyecto. II Parte Memoria ROM con generación de líneas de dirección. 1. Después de realizado el primer ejercicio generaremos de manera automática las líneas de dirección mediante un contador de tres bits. Este nuevo proyecto contara de un modulo top llamado romtop, el cual llamara al archivo rom y agregaremos los otros archivos.v pertenecientes al contador, a los archivos antirebotes y al divisor de frecuencias de reloj. (Los Archivos que se agregaran serán dados por el docente asignado) 5
2. El archivo romtop tendrá el siguiente código de programa: module romtop( input mclk, input [3:0]btn, output [7:0] ld ); wire [2:0] addr; wire [7:0] M; wire clk25, clk190, clr, go1; wire [3:0] btnd; assign clr = btn[3]; assign ld = M; clkdiv U1 (.clk(mclk),.clr(clr),.clk190(clk190),.clk25(clk25)); debounce4 U2 (.inp(btn),.cclk(clk190),.clr(clr),.outp(btnd)); clock_pulse U3 (.inp(btnd[0]),.cclk(clk25),.clr(clr),.outp(go1)); counter # (.N(3)) U4 (.clr(clr),.clk(go1),.q(addr)); rom8 U5 (.addr(addr),.m(m)); endmodule 3. El diagrama de bloque de este nuevo proyecto quedara de la siguiente forma: btn[0] btn[3] mclk 50 Mhz btn[3] clr debounce4 cclk clk190 clr clkdiv btnd[0] btn[3] clr cclk clk25 clock_pulse btn[3] clr clk go1 addr[2:0] rom8 M[7:4] ld[7:4] counter M[3:0] ld[3:0] 6
4. Despues de haber creado y editado el archivo romtop.v agregue los archivos.v usando la opción del click derecho Add Copy of Source. Seleccione los archivos rom8, counter, clkdiv, debounce4 y clock_pulse. 5. Cree un archivo.ucf con las teminales a emplear en este proyecto y luego compílelo para poderlo introducir a la tarjeta FPGA con el ADEPT. Actividades. 1. Compruebe el funcionamiento del ejercicio siguiendo el diagrama de la Figura 3. 2. Explique con sus palabras el desarrollo de todo el ejercicio siguiendo el diagrama de bloques. III Parte Modulo ROM 16 x 8 con Core Generator 1. Cree un nuevo proyecto llamado romcore. Después de creado el proyecto agregue los archivos.v del ejercicio anterior a excepción del archivo rom8. Los archivos a agregar serian: romtop : Archivo top del proyecto counter : Archivo para el contador clkdiv : Divisor de reloj debounce4 : Antirebote clock_pulse : generación de pulso de reloj 2. Cambie en el archivo romtop el numero del contador a 4 bits y el número de líneas de dirección a 4bits. 3. Cree un archivo de texto con el contenido como se muestra en la figura y guárdela como prueba.coe 7
4. Para poder generar un core en ISE agreguen un nuevo archivo dándole click derecho encima del archivo romtop en la opción de New Source y seleccionando el tipo de archivo como IP Core Generator. Este archivo se llamara rom8. 5. Despues de seleccionado el archivo usando el IP Core Generator aparecerá la siguiente ventana 6. En esa ventana localicen la librería de Memory Interface Generators seleccionando la opción de Distributed Memory Generator. 7. Luego aparece la ventana de configuración del Core Generator para Memoria, en la cual generaran un modulo de memoria tipo ROM de 16 x 8 y cargaran el archivo prueba.coe generado en el inciso 3. Las siguientes figuras muestran el proceso final. 8
9
8. Después de seleccionado todo para el modulo de memoria tipo ROM de 16 x 8 denle en la opción generar. Luego de ciertos minutos aparecerá agregado el core a la lista de archivos del proyecto. 9. Antes de generar el archivo.bit haremos unas modificaciones al archivo romtop exactamente en el llamado del archivo rom8 quedando como muestra la siguiente figura. module romtop( input mclk, input [3:0]btn, output [7:0] ld ); wire [3:0] addr; wire [7:0] M; wire clk25, clk190, clr, go1; wire [3:0] btnd; assign clr = btn[3]; assign ld = M; clkdiv U1 (.clk(mclk),.clr(clr),.clk190(clk190),.clk25(clk25)); debounce4 U2 (.inp(btn),.cclk(clk190),.clr(clr),.outp(btnd)); clock_pulse U3 (.inp(btnd[0]),.cclk(clk25),.clr(clr),.outp(go1)); counter # (.N(4)) U4 (.clr(clr),.clk(go1),.q(addr)); rom8 U5 (.a(addr),.spo(m)); endmodule IV. Trabajo a Entregar 1. Salve todos los archivos simulados en memoria que tenga disponible y presente un reporte con lo desarrollado en esta práctica de laboratorio e incluya conclusiones. En total usted deberá tener los siguientes archivos: 1. Modulo de memoria ROM con líneas de dirección usando switch. 10
2. Modulo de memoria ROM con líneas de dirección usando switch y entrada de habilitación CS. 3. Modulo de memoria ROM con generación de líneas de dirección mediante contador. 4. Modulo de memoria ROM con generación de líneas generados por el IP Core Generator. 11