Está en la página 1de 4

Qu es la ROM?

Una ROM es un circuito combinacional con n entradas de direccin y b bits de


salida [1]. Segn Wakerly, una ROM ni siquiera es una memoria debido a que se
trata de un circuito combinacional que representa la tabla de verdad de una
funcin lgica de n entradas y b salidas, cuya estructura bsica se muestra en la
figura 1.

Figura 1: Estructura bsica de ROM [tomada de (Wakerly, 2006)]

Esto quiere decir que se puede implementar cualquier circuito combinacional en


una ROM, como un multiplexor, un codificador, un sumador, o prcticamente
cualquier circuito lgico cuya cantidad de combinaciones no sea excesiva (de lo
contrario, no sera conveniente) del cual se conozca el valor de salida esperado
por cada entrada. En otras palabras, una ROM funciona tambin como una tabla
de consulta o LUT [2].

Cmo funciona?
Desde el punto de vista elctrico (no tan necesario cuando slo interesa
programar una ROM en VHDL), cmo es que se fabrica un ROM? cules son
sus componentes internos y cmo se realizan las interconexiones?
En la figura 2 se muestra el diagrama lgico de una ROM "simple" de 84 (es
decir, de 3 bits de entrada y cuatro bits de salida). Una explicacin somera sobre
cmo funciona la ROM se describe en los siguientes puntos respecto a la figura
2:

El decodificador (74138 en la imagen) se encarga de recibir la direccin


de 3 bits de la ROM y traducirla a una lnea para la seleccin de uno de los
8 valores posibles contenidos en la memoria. En el ejemplo, la entrada
es 101, que habilita la salida ROW5_L (debido a que las salidas estn
complementadas, el valor de salida es 0 en caso de estar activa).

Debido a que la fuente de alimentacin de las lneas verticales es 5V, este


voltaje llegar directamente hasta la salida a menos que se active un diodo e
impida su llegada. Para que un diodo conduzca, se necesita una diferencia
de potencial entre sus dos terminales (5V de un lado y 5V del otro dan
como resultado un circuito abierto).

Todos los diodos que estn conectados con salidas del decodificador no
activas (cuyo voltaje es 5V) se comportarn como circuito abierto y sern
ignorados. Solamente los diodos conectados a la salida activa del
decodificador cambian el valor en memoria (por lo que a los diodos
tambin se les conoce como "1" de la ROM).

Siguiendo el ejemplo, en la lnea ROW5_L hay solamente un diodo, por lo


que el valor en las cuatro salidas, antes de su inversin, es: 1101.
Finalmente esas salidas son invertidas para reflejar el valor almacenado en

la ROM, mismo que es 0010 (donde solamente hay un 1, correspondiente


al diodo de la lnea).

Para qu se utilizar en nuestro caso?


Lo mejor de la ROM es que puede almacenar los valores de cualquier funcin
lgica o los parmetros necesitados por otros bloques. Para el metrnomo en
VHDL necesitamos utilizar aproximadamente 300 divisores de frecuencia pero,
y si fuera un solo divisor que mandara llamar el valor del contador a una ROM?
Entonces, solamente tendramos que crear una ROM con los trescientos valores
que necesitamos.
Lo incluso an mejor es que los valores de los contadores ya los tenemos y es
cuestin de acomodarlos de una forma en la que VHDL comprenda. Eso significa
que podemos crear un pequeo programa en C, Java, Python, PHP, o cualquier
otro lenguaje, para imprimir todo el contenido de la ROM con un solo ciclo
(alguien dijo prctico?).
Antes que nada, necesitamos dos cosas:
1. Conocer la cantidad de bits de direccin que nos permitirn acceder a 300
direcciones diferentes.
2. La cantidad de bits necesarios a la salida (longitud de palabra de la ROM).
Para conocer la cantidad de bits de direccin obtenemos el logaritmo binario de
300 y lo redondeamos al entero superior ms cercano:

Bits de direccion=log2(300)=8.23=9

Para la cantidad de bits de salida necesitamos conocer el valor del contador ms


alto. En este caso, se utiliz la herramienta de clculo de escalas para divisores
de frecuencia con los siguientes parmetros:

Frecuencia de entrada: 3125000 Hz (3.125 MHz)

Frecuencia mnima deseada de salida: 0.016666666667 Hz (1 BPM)

Frecuencia maxima deseada de salida: 5 Hz (300 BPM)

Incremento entre elementos: 0.016666666667 Hz (1 BPM)

lo que da una una escala mxima de 187500000. Siguiendo la misma ecuacin


para el clculo de bits de salida:

Bits de salida=log2(187500000)=27.48=28
Por lo tanto, hablamos de una ROM de 30028, con entrada de direccin de 9
bits. En el listado 1 se muestra el cdigo en VHDL para la ROM con los datos de
los contadores para el divisor de frecuencia. Existen diversas formas de
implementar una ROM, como se describe en la XST User Guide (de la cual se
tom como base la ROM with registered output).

También podría gustarte