Está en la página 1de 7

LABORATORIO VIII

Bloque de Memoria

En los sistemas computacionales es necesario proveer una cantidad sustancial


de memoria. Si un sistema es implementado utilizando la tecnologa FPGA es
posible proporcionar una cierta cantidad de memoria mediante el curso de
recursos de memoria que existe en el dispositivo FPGA. Si se necesita memoria
adicional, que tiene que ser implementado mediante la conexin de los chips
de memoria externos a la FPGA. En este laboratorio vamos a examinar las
cuestiones generales que intervienen en la ejecucin de dicha memoria.
EL diagrama de mdulo de memoria de acceso aleatorio (RAM) que vamos a
implementar se muestra en la figura 1a. contiene 16 palabras de cuatro bits
(filas), el cual se accede a travs de un puerto de 4 bits de direcciones, un
puerto de datos de 4 bits y una entrada de control de escritura.
Consideraremos dos maneras diferentes de aplicacin de la memoria: el uso de
bloques de memoria dedicados en un dispositivo FPGA y el uso de un chip de
memoria independiente.

El chip FPGA cyclon III 3C16 que se incluye en la tarjeta DE0 proporciona
recursos de memoria dedicados llamados bloques M9K. Cada bloque M9K tiene
9216 bits de memoria, que puede ser configurado para implementar memorias
de varios tamaos. Un trmino comn usado para especificar el tamao de una
memoria es su relacin de aspecto, lo que da la profundidad en las palabras y
la anchura en bits (profundidad x anchura). Algunas relaciones de aspecto
apoyados por el bloque M9K son: 8K x 1, 4K x 1, 1K x 9, 512 x 18, 256 x 36.
Vamos a utilizar el modo 2K x 4 en este laboratorio, solo utilizando las primeras
16 palabras en la memoria.

(a) Organizacin de la memoria RAM


(b) Implementacin de memoria RAM

Figura 1. Mdulo de memoria RAM 16 x 4


Hay dos caractersticas importantes del bloque M9K que tienen que ser
mencionadas. En primer lugar, incluyen registros que se pueden utilizar para
sincronizar todas las seales de entrada y de salida a una entrada de reloj. Los
registros en los puertos de entrada siempre se deben utilizar, y los registros en
los puertos de salida son opcionales. En segundo lugar, el bloque M9K tiene
puertos separados para los datos que se escriben en la memoria y los datos
que se leen de la memoria. Teniendo en cuenta estos requisitos, vamos a
implementar el mdulo RAM de 16 x 4 modificado como se muestra en la
Figura 1b. Incluye registros encontrados para la direccin, la entrada de datos,
y escritura de puertos, y utiliza un puerto de salida de datos.

Parte I

Estructuras lgicas de uso comn, tales como sumadores, registros, contadores


y memorias, se pueden implementar en un chip FPGA utilizando mdulos LPM
(librera de mdulos con parmetros) en Quartus II. Altera recomienda que un
mdulo de memoria RAM se puede implementar mediante el uso de los LPMs
RAM. En este ejercicio se va a utilizar una de estas LPMs para implementar el
mdulo de memoria de la figura 1b.

1. Crear un nuevo proyecto Quartus II para implementar el mdulo de


memoria. Seleccionar el chip de la tarjeta cyclon III EP3C16F484C6, que
es el chip FPGA de la tarjeta de Altera DE0.

2. Puede aprender cmo se utiliza el MegaWizard Plug-in Manager para


generar un mdulo LPM deseado al leer el tutorial usando mdulos de
libreras en diseos VHDL. Este tutorial se proporciona en la seccin
Program University de la pgina web de Altera. En la primera pantalla
del MegaWizard Plug-in Manager elegir la RAM: 1-PORT LPM, que se
encuentra en la categora Memoria del compilador. Como se indica en la
figura 2, seleccione VHDL como el tipo de archivo de salida, y nombrar el
archivo ramlpm.vhd. En la siguiente pgina del asistente especificar un
tamao de memoria de 16 palabras de cuatro bits y seleccione M9K
como el tipo de bloque de memoria RAM. Avance a la pgina siguiente y
acepte la configuracin predeterminada para usar un solo reloj para los
registros de la memoria RAM: 1-PORT, y luego avanzar nuevamente a la
pgina que se muestra en la Figura 3. En esta pgina anular la seleccin
del ajuste de puerto de salida llamado 'Q' en la categora Qu puertos
deben Inscribirse? Esta configuracin crea un mdulo de memoria RAM
que coincide con la estructura de la figura 1b, con puertos de entrada
registradas y los puertos de salida no registrados. Acepte los valores
predeterminados para el resto de la configuracin en el asistente, y
luego crear una entidad en su VHDL de nivel superior presentar la
entidad generada en ramlpm.vhd. Incluya las seales de entrada y salida
apropiados en el cdigo VHDL para los puertos de memoria indicadas en
la figura 1b.

Figura 2. Seleccin de la RAM con el mdulo LPM

3. Compile el circuito. Observe en el Informe de Compilacin que el


compilador Quartus II utiliza 64 bits en uno de los bloques de memoria
M9K para implementar el circuito de memoria RAM.

4. Simular el comportamiento de su circuito y asegrese de que puede leer


y escribir datos en la memoria.
Parte II

Figura 3. Configuracin de puertos de entrada y salida en la RAM: 1-PORT LPM.

Ahora, queremos hacer el circuito de memoria en la FPGA de la tarjeta DE0, y


utilizar los interruptores deslizantes para cargar algunos datos en la memoria
creada. Tambin queremos mostrar el contenido de la memoria RAM en los
displays de 7 segmentos.

1. Crear un nuevo proyecto Quartus II que se utilizar para implementar el


circuito deseado en la tarjeta DE0.

2. Crear otro archivo VHDL con el mdulo lpmram y que incluya los pines
de entrada y salida necesarios de la tarjeta DE0. Los interruptores SW3-0
cambian la entrada de un byte de datos en la ubicacin RAM identificado
por una direccin de 4 bits especificado con los interruptores SW7-4.
Utilice SW9 como la seal de escritura y utilizar KEY0 como entrada de
reloj. Muestre el valor de la seal de escritura en LEDG0. Mostrar el valor
de la direccin en la display HEX3 de 7 segmentos, mostrar los datos
que se introducen en la memoria en HEX1, y muestran los datos ledos
de la memoria en HEX0.

3. Poner a prueba el circuito y asegurarse de que las 16 localidades de


memoria se pueden cargar correctamente.
Parte III

En lugar de crear instancias directamente con el mdulo LPM, podemos


implementar la memoria requerida especificando su estructura en el cdigo
VHDL. En un diseo VHDL-especificado es posible definir la memoria como una
matriz multidimensional. Una matriz 16 x 4, que tiene 16 palabras de 4 bits por
palabra, puede ser declarada por las declaraciones siguientes:

TYPE mem IS ARRAY (0 TO 15) OF STD LOGIC VECTOR (3 DOWNTO 0);


SIGNAL memory array: mem;

En el chip cyclon III FPGA, una instruccin de este tipo puede ser implementada
ya sea mediante el uso de los flip-flops que cada elemento lgico contiene o,
de manera ms eficiente, mediante el uso de bloques M9K. Hay dos maneras
de asegurar que se utilizarn los bloques M9K. Una de ellas es el uso de un
mdulo de LPM de la Biblioteca del parametrizado de mdulos, como vimos en
la Parte I. El otro es para definir los requisitos de memoria mediante el uso de
un estilo adecuado de cdigo VHDL a partir del cual el compilador Quartus II
puede inferir que un bloque de memoria debe ser usado.

Lleve a cabo los siguientes pasos:

1. Crear un nuevo proyecto que se utilizar para implementar el circuito


deseado en la tarjeta DE0.

2. Escribir un archivo VHDL que proporcione la funcionalidad necesaria,


incluida la capacidad de cargar la memoria RAM y leer su contenido
como se hace en la parte II.

3. Cargar el archivo de asignacin de pines de la tarjeta DE0.

4. Compilar el circuito y descargarlo al chip FPGA.

5. Pruebe la funcionalidad de su diseo mediante la aplicacin de algunos


valores de entrada y observe la salida. Describir las diferencias que
observa en comparacin con el circuito de la parte II.

Parte IV
Para esta parte se creara un tipo de mdulo de memoria, en la que hay un
puerto para la direccin de una operacin de lectura, y un puerto separado que
da la direccin de una operacin de escritura. Lleve a cabo los siguientes
pasos.

1. Crear un nuevo proyecto Quartus II para su circuito. Para generar el


mdulo de memoria deseada, abrir el MegaWizard Plug-in Manager y
seleccionar RAM: 2-PORT LPM en la categora Memory Compiler. En la
pgina 3 del Asistente elegir el ajuste With one read port and one write
port, en la categora denominada How will you be using the dual port ram?
Avanza a travs de las pginas 4 a 7 y seleccionar las mismas opciones
que en la Parte II. En la pgina 8 elegir la configuracin i dont care, en la
categora Mixed port read-during-write for single input clock RAM. Esta
configuracin especifica que no importa si la memoria da salida a los
nuevos datos que se escriben, o los viejos datos almacenados
previamente, en el caso de que la escritura y lectura direcciones son los
mismos.
La pgina 10 del Asistente se muestra en la Figura 4. Se hace uso de una
caracterstica que permite que el mdulo de memoria se va a cargar con
los datos inicial cuando se programa el circuito en el chip FPGA. Como se
muestra en la figura, seleccione la opcin S, utilizar este archivo de
ajuste de los datos de contenido de la memoria, y especifique el nombre
de archivo ramlpm.mif. Para obtener informacin sobre el formato de un
archivo de inicializacin de memoria (MIF), consulte la Ayuda Quartus II.
Usted tendr que crear este archivo y especificar algunos valores de
datos que se almacenan en la memoria. Finalice el Asistente y luego
examinar el mdulo de memoria generada en el archivo ramlpm.vhd
Figura 4. Especificacin de inicializacin de un archivo de memoria (MIF)

2. Escribir un archivo VHDL que utilice la memoria de doble puerto. Para


ver el contenido de la RAM, aadir a su diseo la capacidad de mostrar
el contenido de cada palabra de cuatro bits (en formato hexadecimal) en
el display de 7 segmentos HEX0. Haga que se desplace las posiciones de
memoria de cada palabra en el display durante aproximadamente un
segundo. Mostrar cada byte, mostrar su direccin (en formato
hexadecimal) en el display de 7 segmentos HEX2. Use la seal de reloj
de 50 MHz, CLOCK_50, de la tarjeta DE0, y utilizar KEY0 como seal de
reset. Para la direccin de escritura y los datos correspondientes utilizar
los mismos interruptores, LED y pantallas de 7 segmentos como en las
partes anteriores de este ejercicio.

3. Poner a prueba el circuito y verificar que los contenidos iniciales de la


memoria coinciden con su archivo ramlpm.mif.