El profesor dijo que el diseño de mi sistema integrado es incorrecto, ¿en qué me equivoqué?

El problema:

Su sistema integrado tiene un microprocesador de 8 bits, que tiene un bus de direcciones de 16 bits. Además, tiene un chip FLASH de 32 Kbytes y un chip RAM de 8 Kbytes. Desea ubicar el chip FLASH justo al comienzo del espacio de direcciones y la RAM al final del espacio de direcciones. Todos los chips de memoria tienen una sola línea de selección /CS, que está controlada por un chip OTP-ROM rápido de 32 x 8.

¿Qué va a programar en el contenido de la OTP-ROM y cómo lo conecta al microprocesador y los chips de memoria?

Obtuve solo 1.5p de 6 puntos usando una solución similar a la imagen que adjunté. El profe me dijo lo siguiente:

"Obtuviste un punto por la conexión correcta de las salidas del circuito OTP-ROM y ½ puntos por conectar las líneas de dirección a15 y a14 al circuito OTP-ROM. Aparte de eso, la conexión fue incorrecta y el contenido de la memoria no se proporcionó/resolvió en todo."

Por favor ayúdame en este problema. Cualquier consejo es apreciado.

¿Por dónde debo empezar? ¿Y qué debo programar en la opt-rom? ¿Una matriz de 32x8 llena de unos y ceros?

diagrama de bloques de la opt-rom (ver abajo):

http://oi42.tinypic.com/2m8605v.jpg

mi intento (incorrecto) de solución:

http://oi44.tinypic.com/13zxwdc.jpg

Podría estar confundido, pero ¿cómo puedes decodificar 32 posibilidades con solo 2 entradas?
Creo que si solo usa 2 entradas, solo tiene 4 ubicaciones de memoria posibles para acceder en la ROM. Debe poner sus comandos de selección de chip en esas ubicaciones de memoria.
El profesor puede esperar que sus entradas de ROM incluyan señales de solicitud de memoria de la CPU, o que decodifique las direcciones lo suficiente como para garantizar que la RAM solo se seleccione dentro de una sola región de 8K (si su RAM está visible en 0xE000-0xFFFF, es también sería visible en 0xC000-0xDFFF). No estoy seguro de por qué su diagrama usa un chip de RAM de 16 KB.
1. Debería haber especificado qué líneas de dirección de la OTP estaban conectadas, para dispositivos de 32 KB y 8 KB, necesita A4, A3 y A2 de la OTP para una granularidad de espacio de direcciones de 8 KB. 2. La línea OTP /CE debe ser siempre '0' (para asegurarse de que las líneas Flash y RAM /CS se controlen correctamente).
Por favor, no borre el contenido de la pregunta. El texto completo de la pregunta es necesario para la correcta comprensión de las respuestas y para futuros visitantes que tengan una pregunta similar.

Respuestas (2)

Me puse mi sombrero de maestro/profesor.

  • su texto menciona una RAM de 8Kb, su diagrama muestra 16Kb.

  • su ROM tiene 32 ubicaciones, por lo que necesita más de las 2 líneas de dirección que le conecta. Incluso si tiene la intención de conectar algunas líneas a un valor fijo, debe hacerlo.

  • la pregunta solicita explícitamente el contenido de PROM, que no proporciona. Sí, es una tabla de 32x8 de 1 y 0, ¡pero el punto es qué valor pones en cada ubicación! No necesitará especificar todas las ubicaciones de 32x8.

Te sugiero que te dibujes un mapa de memoria. El elemento más pequeño que debe asignar es de 8 Kb, entonces, ¿cuántos bloques tendrá que cubrir 64 Kb? ¿Cuántas líneas de dirección están involucradas en la selección de un bloque? Si es menor que el número requerido por la ROM, ¿qué vas a hacer con los demás? Para cada bloque, anote el valor de esas líneas de dirección y el valor de los dos bits de salida seleccionados. Ahora es casi trivial escribir el contenido de la PROM. Contendrá muchos bits de "no importa".

Nota al margen: solo los arqueólogos fabrican tales sistemas a partir de chips separados en estos días, e incluso los micro*controladores* están cambiando de 8 bits a 32 bits. Pero el diseño de algo como esto sigue siendo una buena prueba de su conocimiento general de la lógica digital.

Gracias por su respuesta. Mencionaste que necesito cubrir 64Kb, ¿por qué? Mi memoria consta de FLASH de 32Kb y RAM de 8 Kb, ¿verdad? Eso significa que el mapa de memoria sería 32+8=40Kb, y luego necesitaría 5 bloques para cubrirlo.
Entonces, si tengo 5 bloques, cada uno de los cuales consta de 8 bits, y tengo líneas de dirección de 16 bits disponibles, entonces necesitaría 3 líneas de dirección (5*8=40/16=2.5). ¿Estoy en lo correcto?
No. ¿Y qué quiere decir con un número fraccionario de líneas? Un mapa de memoria muestra la memoria vista desde la CPU . ¿Cuánta memoria puede manejar su CPU?
¿Cuánta memoria puede manejar su CPU? Por lo tanto, aborda 8 bits de datos a través de líneas de dirección de 16 bits, y tengo 8 bloques para cubrir (64/8 = 8). ¿Significa eso que necesito las líneas de dirección a15 a a12 conectadas a la ROM y el resto a tierra?
Su primer comentario anterior es en su mayoría un galimatías, el segundo tiene algo de sentido. Pero, ¿cuántas líneas de dirección necesitas para seleccionar 1 de 8 bloques? ¡ Y luego dibuja ese mapa de memoria!
¿Cuántas líneas de dirección necesita para seleccionar 1 de 8 bloques? No lo sé, pero en este caso puedo usar 3 líneas de dirección para abordar los 8 bloques completos (2 ^ 3 = 8), ¿verdad?
Un mapa de memoria muestra la memoria vista desde la CPU . última pregunta: todavía estoy confundido sobre cómo obtuviste los 64kb. ¿Quiere decir que el mapa de memoria, que se ve desde la CPU, consta de la ROM (32kb) y el chip ubicado al comienzo del espacio de memoria (nuestra flash de 32kb)?
a) Definitivamente sabes cuántas líneas necesitas para seleccionar 1 de 8: 3 líneas, ¡tú mismo lo dices! b) Su CPU tiene 16 líneas de dirección, por lo que tiene un rango de direcciones de 2^16 ubicaciones. Depende de usted asignar la RAM y la FLASH a ese rango de direcciones.
Si los únicos dispositivos de memoria son la RAM y la memoria flash, solo se necesita examinar A15 para seleccionar entre ellos. Hoy en día es común decodificar completamente las direcciones para evitar tener dispositivos seleccionados en espacios de direcciones "no utilizados", pero históricamente era común decodificar las direcciones de forma mucho más flexible.

Buena respuesta de @Woutervanooijen. Déjame ampliar un poco en lo que te equivocaste.

El dispositivo de memoria más pequeño es 8K, debe poder afirmar /CS en los límites de 8K. Esto significa dividir un espacio de memoria de 64K en 8 bloques. Los primeros 4 son el Flash y el último es la RAM. La ROM OTP necesita el microprocesador A13, A14 y A15 como entradas en las líneas de dirección OTP A0 A1 A2 y conecta a tierra el resto. Tus salidas Dx están bien.

Los contenidos de la ROM OTP son muy simples. Las primeras 4 ubicaciones son 11111110 y la octava ubicación es 11111101. El resto puede dejarlo en 11111111. (Tenga en cuenta que en su caso pueden ser XXXXXX01 y XXXXXX10 y XXXXXXX11. Solo se usan los 2 bits de datos menos significativos).

Hay otras combinaciones posibles para la ROM. Por ejemplo, podría usar las 3 líneas de dirección altas y duplicar las entradas de datos en 8 grupos de 4.

Los problemas como este están escritos para ser resueltos y en clases más grandes están escritos para ser calificados fácilmente al buscar ciertos resultados clave. Las respuestas a menudo están integradas en el problema con pistas como el tamaño de RAM en este caso. Se supone que debe preguntarse "¿Cuánto de la OTP necesito? ¿Necesito las 32 entradas? ¿Cuál es el bloque más pequeño que necesito abordar?" etc. Un calificador buscará errores obvios, como usar 0000001 en lugar de 11111110 para afirmar /CS.

El error del dispositivo de 16K llamaría mi atención si estuviera calificando. Buscaría otros papeles con el mismo error porque parece que fue copiado sin revisar. Muchos maestros usan tareas A y B o pruebas ligeramente diferentes para detectar ese tipo de cosas.

¡Así que POR ESO siempre apestaba en este tipo de pruebas! Hubiera conectado A15 directamente al pin CS del flash, luego configurado la ROM como un inversor, con A15 en el lado de entrada y la RAM CS en la salida... ROM en la mitad inferior del espacio de direcciones, 4 imágenes con alias de la RAM en la parte superior, cumple con las especificaciones y sería más fácil para el tipo de diseño de PCB.