Problemas Mapas SOL
Problemas Mapas SOL
Problemas Mapas SOL
FFFFF
F0000 RAM
9FFFF
RAM
80000
3FFFF
EPROM
00000
Fig. 1 Fig. 2
a) Rellene las siguiente tabla usando las filas precisas para caracterizar los circuitos que necesite
b) Indique las ecuaciones de los «chip-selects» que gobiernen el funcionamiento de los distintos
circuitos empleados si se desea que no haya imágenes.
Apartado A)
Al procesador se debe conectar una memoria de 256 KB para almacenar el programa a partir de la dirección
del reset. El sistema también posee una zona de datos de otros 128 KB a continuación de la memoria de
programa. Adicionalmente, la pila ocupa 16 KB.
Para realizar el sistema dispone de todos aquellos circuitos de memoria que desee, del tamaño y
formato que considere más oportuno de forma que emplee el menor número de circuitos posible.
Rellene una fila de la siguiente tabla para cada una de las memorias que necesite.
Mem4
Apartado B)
Genere las ecuaciones de los Chip Select que permiten mapear las memorias usadas en el apartado anterior
suponiendo que todas ellas disponen de una señal CS activa a nivel alto. Utilice para ello una
decodificación completa.
CS1= /A19·/A18
CS2= /A19·A18·/A17
CS3= A19·A18·A17·A16·A15·A14
Apartado C)
Se mapea un periférico que tiene 32 posiciones de 8 bits en el mapa de memoria a partir de la dirección
0xAF000. Para la generación de su CS se emplean las 8 líneas de mayor peso del bus de direcciones.
Indique el rango de direcciones que ocupa el periférico en la memoria, la ecuación del CS (activo a nivel
bajo) y el número de imágenes.
b) Indique las ecuaciones de los CS de todas las memoria RAM que haya dibujado anteriormente y
complete la siguiente tabla sabiendo que los 512 KB de memoria deben estar ubicados a partir de la
dirección 0x100000 del mapa de memoria del microprocesador. Debe realizar la decodificación
completa (sin imágenes) para todas las memorias que haya utilizado.
D[7..0] D[7..0]
D[7..0] D[7..0]
A[16..0] A[16..0]
A[16..0] A[16..0]
EPROM EPROM
CSEPROM1 CSEPROM2
CS CS
/RD /RD
/OE /OE
ç
CS EPROM1= A20·A19·A18·A17
CS EPROM2= /A20·/A19
0x3FFF FFFF
memorias
volátiles
0x1000 0000
0x0FFF FFFF
periféricos
0x0800 0000
0x07FF FFFF
memorias no
volátiles
0x0000 0000
Las direcciones generadas por este procesador (y las indicadas en el mapa anterior) son direcciones
de palabra (no de byte).
En este mapa se desean ubicar las siguientes memorias:
Una memoria FLASH de 256 K x 32 en la dirección más baja posible del mapa
Un par de memorias SDRAM de 2 M x 32 formando un bloque de 4 M x 32, en la dirección
más baja posible del mapa
Una memoria SRAM de 64 K x 32 en la dirección más alta posible del mapa
Tenga en cuenta que todas las entradas de selección de chip (CSn) de estas memorias son activas a
nivel bajo.
En estas circunstancias, conteste a los siguientes apartados:
Apartado A. ¿Cuántos bits tiene el bus de direcciones, A, de este microprocesador? Justifique la respuesta.
Apartado B. Indique, para cada chip de memoria, su capacidad en bytes y la anchura, en bits, de su bus de
direcciones.
FLASH
1M 18
SDRAM0/1
8M 21
SRAM
256 K 16
Apartado C. Obtenga la expresión booleana de la señal de selección de chip para la memoria FLASH,
CSnFLASH. Recuerde que dicha memoria desea ubicarse en la posición más baja posible del mapa. Debe
emplearse decodificación completa.
Puesto que la memoria FLASH es no volátil deberá ubicarse en la zona más baja del mapa, es decir, a
partir de la dirección 0x0000 0000. De los 30 bits A[29..0] del bus de direcciones del microprocesador,
los 18 de menor peso A[17..0] se conectarán directamente al bus de direcciones de la FLASH.
La FLASH ocupará, por tanto, las direcciones desde 0x0000 0000 hasta 0x0003 FFFF. Para todas ellas
los bits restantes del bus de direcciones A[29..18] valen todos 0, con lo que:
CSnFLASH = A29 + A28 + A27 + A26 + A25 + A24 + A23 + A22 + A21 + A20 + A19 + A18
Apartado D. Obtenga las expresiones booleanas de las señales de selección de chip para las memorias
SDRAM0 y SDRAM1, CSnSDRAM0 y CSnSDRAM1. Recuerde que dichas memorias desean ubicarse en las
posiciones más bajas posibles del mapa, formando un bloque de 4 M x 32 (2 M + 2 M). Debe emplearse
decodificación incompleta para minimizar la complejidad de esta lógica.
Puesto que las memorias SDRAM son volátiles deberán ubicarse en la zona del mapa reservada para tal
fin y, dentro de ella, en las posiciones más bajas, es decir, a partir de la dirección 0x1000 0000. De los 30
bits A[29..0] del bus de direcciones del microprocesador, los 21 de menor peso A[20..0] se conectarán
directamente al bus de direcciones de las SDRAM. El siguiente bit, A21, se empleará para direccionar SDRAM0
(A21 = 0) o SDRAM1 (A21 = 1).
Los restantes bits del bus de direcciones A[29..22] valen, en este rango, desde 0100 0000B (para la
dirección 0x1000 0000) hasta 1111 1111B (para la dirección 0x3FFF FFFF). La decodificación más simple,
dentro de este rango y para este caso, es que las memorias SDRAM ocupen el rango en que estos bits valen
desde 0100 0000B hasta 0111 1111B, (en este rango A[29..28] = 01B) es decir, desde la
dirección 0x1000 0000 hasta 0x1FFF FFFF. Con todo ello:
̅̅̅̅
CSnSDRAM0 = A29 + A 28 + A21
CSnSDRAM1 = A29 + A28 + ̅̅̅̅
̅̅̅̅ A21
Apartado E. Con la decodificación anterior ¿cuántas imágenes hay de cada chip de SDRAM en el mapa del
microprocesador? Indique el rango de direcciones y el número de ellas ocupado por las memorias SDRAM en
el mapa de memoria del microprocesador.
Los bits A[27..22] (6 en total) del bus de direcciones del microprocesador no se emplean en la
decodificación, con lo que el número de imágenes será 26 = 64.
Las memorias SDRAM ocupan, según la decodificación anterior, todas las direcciones que tienen sus
dos MSBs a 01B, es decir, desde 0x1000 0000 hasta 0x1FFF FFFF, en total 0x1000 000 = 256 M direcciones.
Por otro lado, 256 M ocupados/4 M por imagen = 64 imágenes, confirmando el cálculo anterior.
Apartado F. Indique, para cada una de las siguientes direcciones, el chip (FLASH, SDRAM0, SDRAM1 o
SRAM) al que corresponde.
Dirección Chip
0xF FFFF
periféricos
0xF 8000
0xF 7FFF
memorias de
lectura
y escritura
0x4 0000
0x3 FFFF
memorias de
solo lectura
0x0 0000
Las direcciones generadas por este procesador (y las indicadas en el mapa anterior) son direcciones
de palabra (no de byte). Periféricos y memoria comparten el mismo mapa.
En este mapa se desean ubicar los siguientes recursos:
Una memoria PROM de 32 K x 16 en la dirección más baja posible del mapa
Un par de memorias SRAM de 64 K x 16 formando un bloque de 128 K x 16, en la dirección
más baja posible del mapa
Un timer que ocupa 8 direcciones consecutivas, en la dirección más alta posible del mapa
Tenga en cuenta que todas las entradas de selección de chip (CSn) de estos recursos son activas a
nivel bajo.
En estas circunstancias, conteste a los siguientes apartados:
Apartado A. ¿Cuántos bits tiene el bus de direcciones, A, de este microprocesador? Justifique la respuesta.
Apartado B. Indique, para cada chip de memoria, su capacidad en bytes y la anchura, en bits, de su bus de
direcciones.
Memoria Capacidad (bytes) Anchura de su bus de direcciones (bits)
PROM
64 K 15
SRAM0/1
128 K 16
Apartado C. Obtenga la expresión booleana de la señal de selección de chip para la memoria PROM,
CSnPROM. Recuerde que dicha memoria desea ubicarse en la posición más baja posible del mapa. Debe
emplearse decodificación completa.
Puesto que la memoria PROM es de solo lectura deberá ubicarse en la zona más baja del mapa, es decir,
a partir de la dirección 0x0 0000. De los 20 bits A[19..0] del bus de direcciones del microprocesador, los 15
de menor peso A[14..0] se conectarán directamente al bus de direcciones de la PROM.
La PROM ocupará, por tanto, las direcciones desde 0x0 0000 hasta 0x0 7FFF. Para todas ellas los bits
restantes del bus de direcciones A[19..15] valen todos 0, con lo que:
Apartado D. Obtenga las expresiones booleanas de las señales de selección de chip para las memorias
SRAM0 y SRAM1, CSnSRAM0 y CSnSRAM1. Recuerde que dichas memorias desean ubicarse en las posiciones más
bajas posibles del mapa, formando un bloque de 128 K x 16 (64 K + 64 K). Debe emplearse decodificación
incompleta, recordando que, a la vista del mapa de memoria genérico de este procesador, no puede haber
ninguna imagen de las memorias SRAM fuera de la zona asignada a memorias de su tipo.
Puesto que las memorias SRAM son de lectura y escritura deberán ubicarse en la zona del mapa
reservada para tal fin y, dentro de ella, en las posiciones más bajas, es decir, a partir de la
dirección 0x4 0000. De los 20 bits A[19..0] del bus de direcciones del microprocesador, los 16 de menor
peso A[15..0] se conectarán directamente al bus de direcciones de las SRAM. El siguiente bit, A16, se
empleará para direccionar SRAM0 (A16 = 0) o SRAM1 (A16 = 1).
Por otro lado, el bloque SRAM no podrá ubicarse a partir de direcciones iguales o superiores a
0xD 8000 = 0xF 8000 (límite de los periféricos) – 128 K (tamaño del bloque) puesto que, en caso contrario,
direcciones pertenecientes al bloque SRAM se solaparían con la zona reservada a periféricos.
Los restantes bits del bus de direcciones A[19..17] valen, en este rango (0x4 000~0xD 7FFF),
desde 010B (para la dirección 0x4 0000) hasta 110B (para la dirección 0xD 7FFF). La decodificación más
simple, dentro de este rango y para este caso, es que las memorias SRAM ocupen el rango en que estos bits
valen desde 010B hasta 011B, (en este rango A19 = 0 y A18 = 1) es decir, desde la dirección 0x4 0000
hasta 0x7 FFFF. Con todo ello:
Apartado E. Con la decodificación anterior ¿cuántas imágenes hay de cada chip de SRAM en el mapa del
microprocesador? Indique el rango de direcciones y el número de ellas ocupado por las memorias SRAM en
el mapa de memoria del microprocesador.
El bit A17 del bus de direcciones del microprocesador no se emplea en la decodificación, con lo que
el número de imágenes será 21 = 2.
Las memorias SRAM ocupan, según la decodificación anterior, todas las direcciones que tienen sus
dos MSBs a 01B, es decir, desde 0x4 0000 hasta 0x7 FFFF, en total 0x4 0000 = 256 K direcciones.
Por otro lado, 256 K ocupados/128 K por imagen = 2 imágenes, confirmando el cálculo anterior.
Apartado F. Obtenga la expresión booleana de la señal de selección para el timer, CSnTIMER. Recuerde que
dicho recurso desea ubicarse en la posición más alta posible del mapa. Debe emplearse decodificación
completa.
Puesto que un timer es un periférico (que ocupa 8 direcciones) deberá ubicarse en la zona del mapa
reservada para tal fin y, dentro de ella, en las posiciones más altas, es decir, a partir de la
dirección 0xF FFFF – 7 = 0xF FFF8). Los 3 bits de menor peso del bus de direcciones A[2..0] son
empleados por el periférico, y los 17 bits restantes A[19..3] se emplean en la decodificación. En el rango
ocupado por el periférico todos estos bits están a 1, con lo que:
19
CSnTIMER = ∑ ̅𝐴̅̅𝑘̅
𝑘=3
Apartado G. Indique, para cada una de las siguientes direcciones, el recurso (PROM, SRAM0, SRAM1, timer o
«ninguno») al que corresponde.
Dirección Chip
0xE00F FFFF
Bus perifericos
0xE000 0000
0xDFFF FFFF
Perifericos
externos
0xA000 0000 0x9FFF FFFF
Memoria externa
0x6000 0000
0x5FFF FFFF
Perifericos
internos
0x4000 0000
0x3FFF FFFF
SRAM
0x2000 0000 Memoria interna
0x1FFF FFFF
Flash
0x0000 0000 Memoria interna
En el que todas las direcciones son direcciones de palabra. En este mapa se desean ubicar las
siguientes memorias, todas ellas de longitud de palabra igual a 32 bits:
Una memoria ROM en el rango de direcciones de 0xE00F F000 a 0xE00F FFFF (esta memoria
será accedida como si fuese un periférico, las demás lo serán como memorias).
Una memoria SRAM externa con una capacidad de 512 KByte en la dirección más baja posible del
mapa.
Un par de memorias EEPROM externas formando un bloque de 4 M direcciones, en la posición
más alta posible del mapa
Estas memorias son tales que las entradas de selección de chip de las memorias volátiles son activas a
nivel bajo, y las del resto de memorias lo son a nivel alto.
Apartado A. ¿Cuántos bits tiene el bus de direcciones de este sistema? Justifique la respuesta.
ROM 4 K x 32 12
SRAM 128 K x 32 17
EEPROM0/1 2 M x 32 21
Apartado C. Obtenga la expresión booleana de la señal de selección de chip para la memoria SRAM,
CSXSRAM. Recuerde que dicha memoria desea ubicarse en la posición más baja posible del mapa. Debe
emplearse decodificación completa.
Puesto que la memoria SRAM es externa y debe ubicarse en las posición más baja posible del mapa, debe
situarse a partir de la dirección 0x6000 0000. De los 32 bits A[31..0] del bus de direcciones del procesador, los 17 de
menor peso A[16..0] se conectarán directamente al bus de direcciones de la SRAM.
La SRAM ocupará, por tanto, las direcciones desde 0x6000 0000 hasta 0x6001 FFFF. Además es una
memoria volátil, por lo que según el enunciado su entrada de selección de chip es activa a nivel bajo, por todo ello:
17
̅̅̅̅̅
𝐶𝑆𝑋𝑆𝑅𝐴𝑀 = 𝐴31 + 𝐴 ̅̅̅̅̅
30 + 𝐴29 + ∑ 𝐴𝑖
𝑖=28
Apartado D. Obtenga las expresiones booleanas de las señales de selección de chip para las memorias
EEPROM0 y EEPROM1, CSXEEPROM0 y CSXEEPROM1. Recuerde que dichas memorias desean ubicarse en la
posición más alta posible del mapa, formando un bloque de 4 M direcciones. Debe emplearse
decodificación incompleta para minimizar la complejidad de esta lógica.
Puesto que las memorias EEPROM son externas, deberán ubicarse en la zona del mapa reservada para tal fin y,
dentro de ella, en las posiciones más altas, es decir, justo debajo de la dirección 0x9FFF FFFF. De los 32 bits
A[31..0] del bus de direcciones del microprocesador, los 21 de menor peso A[20..0] se conectarán directamente al
bus de direcciones de las EEPROM. El siguiente bit, A21, se empleará para direccionar EEPROM0 (A21 = 0) o EEPROM1
(A21 = 1).
Los diez restantes bits del bus de direcciones A[31..22] valen, desde la dirección siguiente a la SRAM
(0x6002 0000) hasta la última dirección que pueden ocupar las memorias EEPROM (0x9FFF FFFF):
desde 0110 0000 00B hasta 1001 1111 11B. La decodificación más simple, dentro de este rango, es
fijar A[31..22] = 100X XXXX XXB, que no se solapa con la SRAM y que alcanza la dirección más alta,
0x9FFF FFFF.
Puesto que las memorias EEPROM son no volátiles sus señales de selección de chip serán, de acuerdo al
enunciado, activas a nivel alto, con lo que:
𝐶𝑆𝑋𝐸𝐸𝑃𝑅𝑂𝑀0 = 𝐴31 ⋅ ̅̅̅̅̅
𝐴30 ⋅𝐴̅̅̅̅̅ ̅̅̅̅
29 ⋅A21
𝐶𝑆𝑋𝐸𝐸𝑃𝑅𝑂𝑀1 = 𝐴31 ⋅ 𝐴̅̅̅̅̅ ̅̅̅̅̅
30 ⋅𝐴29 ⋅𝐴21
Apartado E. Con la decodificación anterior ¿cuántas imágenes hay de cada chip de EEPROM en el mapa
del procesador? Indique el rango de direcciones y el número de ellas ocupado por las memorias
EEPROM en el mapa de memoria del microprocesador.
Los bits A[28..22] (7 en total) del bus de direcciones del procesador no se emplean en la decodificación,
con lo que el número de imágenes de cada chip será 27 = 128.
Las memorias EEPROM ocupan, según la decodificación anterior, todas las direcciones que van desde
la 0x8000 0000 hasta 0x9FFF FFFF, es decir, 512 M direcciones.
Puesto que cada imagen de las dos memorias EEPROM ocupa 4 M direcciones, el número total de imágenes
debe ser 512 M/4 M = 128 imágenes, en concordancia con el resultado anterior.
Apartado F. Indique, para cada una de las siguientes direcciones, el chip (ROM, EEPROM0, EEPROM1 o
SRAM) al que corresponde.
Dirección Chip
Apartado A. Indique, para cada una de estas memorias, su organizacion y las anchuras, en bits, de sus buses de
datos y direcciones. Indique tambien la anchura del bus de direcciones del periferico.
MEM0 32 Kx32 32 15
MEM1 4 Kx32 32 12
Apartado B. Para la decodificacion de MEM0 se emplea la OR logica de los 3 bit mas significativos del bus de
direcciones del procesador.
Indique (justificando las respuestas):
Rango de direcciones (primera y ultima, en hexadecimal) ocupadas por MEM0 en el mapa de memoria
del procesador
Numero total de direcciones ocupadas por MEM0 en el mapa
Numero de imagenes de MEM0 en el mapa
Tamano de cada imagen de MEM0 en el mapa
Tipo de decodificacion (completa o incompleta) empleada para MEM0
Rellena la tabla adjunta con los resultados pedidos.
Al emplearse la OR de los 3 bit más significativos y ser el chip select de MEM0 activo a nivel bajo, MEM0
ocupa todas las direcciones del mapa que comienzan, en binario, por 000. Puesto que el procesador Cortex-M0
tiene un bus de direcciones de 32 bit, las direcciones ocupadas por MEM0 van desde 0x0000 0000 hasta
0x1FFF FFFF. Esto son 0x2000 0000 direcciones, es decir 512 M (direcciones de byte). Dado que MEM0 alberga
128 KB, existen 512 M/128 K = 4096 imágenes de MEM0. Por otro lado, de los 32 bit del bus de direcciones del
procesador, 3 se emplean en la decodificación de MEM0, 2 (los de menor peso) se descartan al hacer la conversión
de direcciones de byte (del procesador) a direcciones de palabra (de la memoria) y 15 van a MEM0, de manera que
quedan 32–3–2–15 = 12 sin usar, por lo que debe haber 212 = 4096 imágenes, como ya se había calculado y la
decodificación es incompleta.
Rango de direcciones
0x0000 0000 a 0x1FFF FFFF
Numero de direcciones
512 M
Numero de imagenes
4096
Tipo de decodificacion
Incompleta
Apartado C. Para la decodificacion de MEM1 se emplea la funcion logica (A es el bus de direcciones del
procesador):
28
MEM1 ocupa todas las direcciones del mapa que comienzan, en binario, por 0010 0000 0000 0, es decir
desde 0x2000 0000 hasta 0x2007 FFFF. Esto son 0x8 0000 direcciones, es decir 512 K (direcciones de byte). Dado
que MEM1 alberga 16 KB, existen 512 K/16 K = 32 imágenes de MEM1. Por otro lado, de los 32 bit del bus de
direcciones del procesador, 13 se emplean en la decodificación de MEM1, 2 (los de menor peso) se descartan al
hacer la conversión de direcciones de byte (del procesador) a direcciones de palabra (de la memoria) y 12 van a
MEM1, de manera que quedan 32–13–2–12 = 5 sin usar, por lo que debe haber 25 = 32 imágenes, como ya se había
calculado y la decodificación es incompleta.
Rango de direcciones
0x2000 0000 a 0x2007 FFFF
Numero de direcciones
512 K
Numero de imagenes
32
Tipo de decodificacion
Incompleta
Apartado D. A la vista de todo lo anterior y conociendo las particularidades de la arquitectura del procesador
ARM Cortex-M0 ¿puede asegurarse que alguna de entre MEM0 y MEM1 deba ser forzosamente una memoria no
volatil? En caso afirmativo indique cual (o cuales) deben ser forzosamente no volatiles. Justifique sus
respuestas.
En las direcciones 0x0000 0000 y 0x0000 0004 del mapa de memoria de un procesador ARM Cortex-M0
deben ubicarse el valor inicial de SP y PC respectivamente, lo que obliga a que esas direcciones estén ubicadas en
alguna memoria no volátil. Puesto que esas direcciones se corresponden con MEM0, esta debe ser, forzosamente, no
volátil.