Construir memoria ROM a partir de ROM's dadas

Hola a todos! Estoy estudiando para rendir examen y me surgió una duda con respecto a memorias ROM que quisás alguna persona pueda aclararme. Se trata sobre el tamaño y la organización de una memoria ROM es decir en mi curso (que no se si es así en todos lados) un ejercicio común es construir una ROM a partir de otras ROM's dadas de memorias más chicas.
Por ejemplo un ejercicio me pide:

Se desea utilizar una ROM para implementar un comparador BCD (Decimal Empaquetado). El comparador recibe dos operandos representados en BCD de 8 bits cada uno y debe presentar a la salida el mayor de ellos representado en binario y un bit que indique cuál de los dos es el mayor (0 indica que el mayor es el operando presentado en la parte baja de la entrada ó que ambos son iguales y 1 indica que el mayor es el que está en la parte alta).

Se pide:

a) Determine el tamaño y la organización de la ROM de tamaño mínimo que permita resolver el problema planteado.

Construya dicha ROM. Para ello se dispone de compuertas básicas y las siguientes ROMs:
16K x 16 (se dispone de hasta 1 unidad)
16K x 8 (se dispone de hasta 1 unidad)
16K x 4 (se dispone de hasta 2 unidades)
64K x 1 (se dispone de hasta 1 unidad)


Entonces como primer paso se debe determinar el tamaño por letra se sabe que voy a disponer de dos operandos de 8 bits entonces tendría un tamaño de entrada de 16 bits como mínimo y luego necesitaría 8 bits de salida, un bit para ver indicar cuál es el mayor y 7 bits para representar el valor en binario de este ya que en BCD de 8 bits como máximo puedo representar el 99 y es representable con 7 bits. Hasta ahí va todo bien...mirando la solución dice algo así:

Por tanto se requiere la ROM mínima requerida es de 512 Kbits, organizada como 64 K palabras de 8 bits (64K x 8).

Esa primera parte no logro entenderla del todo, es decir se que si tengo una memoria A x B
se que la cantidad de entradas es [LATEX]\log_2A[/LATEX] y la cantidad de bits de salida es [LATEX]B[/LATEX] pero ¿de donde sale el 512 Kbits? es decir si a priori conozco la organización, por ejemplo 64k x 8 puedo conocer la cantidad de entradas y salidas.

Luego dice:

Para construir la ROM necesaria utilizamos la ROM de 16K x 16 disponible y formamos con ella una ROM de 32K x 8. Con las dos ROMs de 16K x 4 formamos una de 16K x 8, la que junto a la de 16K x 8 disponible formamos otra de 32K x 8. Con las dos de 32K x 8 que hemos construido se forma la de 64K x 8. Notar que no se requiere usar la ROM de 64K x 1.

¿Es correcto que piense que una memoria ROM de 16k x 16 sea equivalente a una de 32k x 8 porque son del mismo tamaño pero distintas organizaciones?

Por ultimo (disculpen por extenderme tanto) adjunto una imagen del circuito solución usando las ROM's antes mencionadas del cual no logro entender su funcionamiento, es decir que el circuito representa la ROM que se desea contruir pero me confunde porque en realidad las operaciones con los operandos en BCD no se ven en este, lo que se pide en la parte b) es un programa en alto nivel que cargue la ROM de forma adecuada pero en el circuito no se ve lo cual me resulta confuso y en si quería saber si alguien me puede explicar el uso de los OE(output enable) se que el CS(chip select) que está conectado a todos las ROM's directamente así que si este está en 0 entonces las salidas de las ROM's son 0 también pero no entiendo el OE porque distingue según las ROM's.

Saludos y gracias de antemano!
 

Adjuntos

  • ROM.JPG
    ROM.JPG
    44.5 KB · Visitas: 35
Hola jupa86

Encuentro muy confuso tu mensaje sin embargo por lo que mencionas en el último párrafo te puedo decir que:

Las entradas OE(Output Enable) Habilitan las salidas de datos de las ROM cuando son ciertas(Altas). Esto es, Cambian las salidas del tercer estado a estado activo; ese tercer estado es abierto.

Las entradas CS(Chip Select) esta entrada, cuando es cierta(Alta) está seleccionado todo el Chip(ROM).

Ahora Bien, hablando del circuito que adjuntaste:
Todas las ROM’s serán seleccionadas cuando la señal CS sea cierta(Alta).
Las líneas gruesas son algo llamado BUS. En tu circuito hay 2 BUSES, el de DIRECCIONES, a la izquierda de los rectángulos llamados ROM y el de DATOS a la derecha de los mismos rectángulos llamados ROM.
Hablando De BUS de direcciones podemos decir que todos los BIT’s llamados A0 están unidos entre sí, los BIT’s llamados A1 están unidos entre sí y así hasta A15.
Lo mismo ocurre con los BIT’s de BUS de datos, todos los D0 están unidos y así hasta D7.

Aproximadamente al centro del diagrama al lado Izquierdo ENTRA el BUS de direcciones.
Aproximadamente al centro del diagrama al lado derecho Sale el BUS de Datos.
Sobre el BUS de direcciones dice: A15.. A0, son 16 BIT’s.
Sobre el BUS de datos dice: D7.. D0, son 8 BIT’s.

Por medio de la circuiteria formada por inversores y compuertas AND de 3 entradas seleccionan QUÉ ROM deja salir los datos almacenados en la dirección actual. Lo hacen habilitando las entradas OE, Output Enable.
Sin embargo para El ROM 16K x 16 dejan pasar los datos de D7 a D0 habilitando los 8 Buffer de 3 estados que están conectados a las salidas D0 a D7 y, pasan los datos de D15 a D8 por los Buffers conectados a sus respectivas salidas De D8 a D15. En tu diagrama solo están representados estos buffers por uno solo para cada juego de 8 BIT’s de datos.

Nota, en tu circuito, que OE de la ROM 16K x 16 Está habilitada, conectada al Vcc. Por lo tanto los datos en su memoria estarán presentes en sus salidas D’s (Desde D0, hasta D15) de acuerdo a la dirección que tenga en sus entradas A’s (Desde A0 hasta A13).

Espero esta palabrería te sirva para continuar con tu proyecto.

saludos
a sus ordenes
 
MrCarlos muchas gracias por tu tiempo y tu respuesta. Ahora que comprendo un poco más la situación gracias a tu explicación voy a intentar describir lo que entendí a ver si voy más encaminado:
1) La primera ROM la de 16kx16 ya que su entrada OE está en 1(a Vcc) entonces sus salidas están habilitadas es decir no saldrán en Alta Impedancia pero por esta razón se encuentran conectados los Tri-State a sus salidas para seleccionar cuál es la que va a formar parte de la salida de la ROM original. De este modo si fue seleccionada con el Tri-State la salida de mas arriba la que va de D15..D8 entonces TODAS las demás salidas saldrán en Alta Impedancia (valor Z) y entonces la salida de la ROM original, es decir la que contruí toma el valor D15...D8.

2)Ahora tengo una pregunta, ¿el uso de AND's e inversores es como un Decodificador? es decir solamente se busca seleccionar una o un grupo de ROM's (caso de las ROM's de 16kx4) o existe un criterio en este circuito de selección de ROM's, es decir un orden de selección a medida que cambian las direcciones. Quisás mi confusión mas grande venga de que en la parte b) del problema me dicen lo siguiente:

b) Escriba un programa en un lenguaje de alto nivel que genere el contenido de la ROM compuesta.
Indique cuál es el contenido que deberá estar almacenado en la posición 0x1939 de la ROM de 16K x 8.


Y en esta representando la memoria como unsigned char rom[65536] y mediante el uso de un bucle for for (i = 0; i++; i < 65536) se recorre la ROM cargando en cada dirección el valor adecuado, entonces si el programa es del estilo:

void carga_rom() {

int I, op1, op2, op1bcd, op2bcd;
unsigned char rom[65536];

for (i = 0; i++; i < 65536) {
op1bcd = i / 256;
op2bcd = i % 256;
op1 = (op1bcd / 16) * 10 + op1bcd % 16;
op2 = (op2bcd / 16) * 10 + op2bcd % 16;
if (op1 > op2) // el de la parte alta es mayor
rom = op1 | 0x80;
else
rom = op2;
}

Entonces me da la nocion de un orden en la selección de las ROM's es decir cada ROM colabora con ciertos rangos de las direcciones de la ROM que se construyó en el apartado anterior, entonces lo que mas me cuesta entender es como se carga esta ROM a partir de las ROM más pequeñas.

Gracias nuevamente MrCarlos y espero se entienda mejor ahora.

Saludos!
 
Hola jupa86

1) Sí, efectivamente, así es. Por medio de los Tri-State seleccionan D0 a D7 ó D8 a D14. Según el grupo de 8 Tri-States que estén habitados.

2) Si, efectivamente, se puede considerar que las AND y los Inversores forman algo que podemos llamar DECODIFICADOR. Este decodificador lo controlan por medio de los BIT’s A14 y A15 del BUS de direcciones.
Analiza el diagrama adjunto.

Siento Mucho no poder ayudarte con el inciso b); como te mencioné en mi mensaje anterior, no comprendo bien el contenido de la primera parte de tu mensaje original.
(Encuentro muy confuso tu mensaje sin embargo por lo que mencionas en el último párrafo te puedo decir que)

Por lo tanto no sé qué debería haber en la memoria de los diferentes ROM’s.
Para poder grabar las ROM falta, en tu diagrama, una entrada que se llama W(Write).

saludos
a sus ordenes
 

Adjuntos

  • ROM Selector.jpg
    ROM Selector.jpg
    189.4 KB · Visitas: 20
Muchisimas gracias MrCarlos! La verdad impecable tu ayuda! Y el archivo adjunto me ayudo aún más a entender las cosas! Si no te preocupes mi mayor duda era lo que tu me aclaraste con las respuestas y el archivo adjunto.

Solo una cosa más ¿cómo se llama el programa que usas? es decir con el que hiciste el circuito que adjuntaste. Yo uso el ALTERA MAX+PLUS 2 pero ese parece estar bueno.

Saludos!
 
Última edición:
Hola jupa86

El programa con el que hice el diagrama se llama CirquitMaker 2000, por aquí, no recuerdo donde, deje un enlace de donde se puede bajar para instalarlo en tu computadora.

saludos
a sus ordenes
 
Atrás
Arriba