Este documento describe cómo conectar dispositivos de memoria y entrada/salida a un microprocesador. Explica los tipos principales de memoria RAM y ROM, sus terminales y cómo decodificar las direcciones de memoria para asignar rangos específicos a cada dispositivo. Luego, diseña circuitos decodificadores para asignar RAM de 8KB a direcciones FFFFFh-FE000h, E/S de 8 bits a 00477h-00476h y ROM de 1KB a 003FFh-00000h.
1. Microprocesadores Ciclo 0109
Guía #8
DECODIFICACION DE LA MEMORIA
El circuito que se vio en la guía pasada separó los canales de datos, direcciones y control,
del microprocesador, además de amplificar su capacidad de corriente para que puedan ser
conectados los diferentes dispositivos de entrada/salida o de memoria que se necesiten.
Los tipos principales de memoria presentes en un sistema basado en microprocesador son
Memorias RAM (Memoria de acceso aleatorio) y ROM (Memoria de solo lectura).
Terminales de los dispositivos de memoria:
Conexiones de direcciones: Sirven para seleccionar la localidad de memoria que se quiere
leer o escribir, el número de terminales depende del número de localidades de la memoria,
ejemplos:
Una memoria de 1K, tiene 1024 bytes pasamos este dato a hexadecimal (1024 = 400h), le
restamos 1 (400h-1h = 3FFh = 001111111111b ) , el numero de unos nos indica cuantas
terminales o líneas de dirección tiene en este caso 10 que irían de A0 a A9.
Memoria de 2K, 2*1024 = 2048 bytes, 2048 = 800h, 800h-1 = 7FFh = 011111111111b =
serian 11 líneas de dirección de A0 a A10
Memoria de 1M, 1024*1024 = 1048576 bytes, 1048576 = 100000h, 100000h-1 = FFFFFh
= 11111111111111111111b = 20 líneas de dirección A0 a A19
Conexiones para datos: Según el número de conexiones para datos se conoce de cuantos
bits es cada localidad de memoria, es decir si un dispositivo de memoria tiene 8
conexiones de datos indica que almacena 8 bits de datos en cada localidad de memoria.
El tamaño de las memorias se representa según el fabricante, algunos lo expresan como el
número de localidades de la memoria multiplicada por los bits de cada localidad, por
ejemplo:
1K x 8 = memoria de 1K localidades de 8 bits.
64K x 4 = memoria de 64K localidades de 4 bits
Y otros de acuerdo a su capacidad total:
8K (equivalente a 1K x 8)
256K (equivalente a 64K x 4)
Conexiones para la selección: Una o mas entradas para habilitar la memoria, generalmente
son negadas (Chip Select CS , Select S , Chip Enable CE , Output Enable OE )
2. Microprocesadores Ciclo 0109
Guía #8
Conexiones de control: Conexiones que sirven para indicar si una memoria se va a leer o
escribir (WR , RD )
Figura 1. Conexiones de los dispositivos de memoria.
Cuando se conecta un dispositivo de memoria o E/S a un microprocesador es necesario
decodificar el bus de direcciones para poder asignar al dispositivo una localidad de
memoria o un grupo de localidades especifico.
Ejemplo: Diseñe los circuitos necesarios para asignar
las siguientes direcciones a los dispositivos de
memoria y E/S que se muestran en el siguiente mapa
de memoria.
El diagrama de bloques general de la conexión de los dispositivos al microprocesador es
el que se muestra en la figura 2, ahora hay que diseñar esos circuitos decodificadores para
RAM, puerto E/S y ROM.
Figura 2.
3. Microprocesadores Ciclo 0109
Guía #8
Antes que nada tenemos que crear un circuito para separar el terminal M/ IO del
microprocesador para poder seleccionar si se leerá o escribirá un dispositivo de memoria o
de E/S
Cuando se quiere leer un dispositivo de Entrada/Salida el Pin RD y M/ IO están
en cero, entonces bastaría una OR entre ambos para tener un terminal que solo se
active (en bajo) cuando se quiere leer dispositivos de E/S.
Para leer dispositivos de memoria RD esta en cero y M/ IO en uno, por lo que
habría que negar a M/ IO antes de la OR para tener un terminal que solo se active
(en bajo) cuando se quiere leer dispositivos de memoria.
Lo mismo se aplicaría para cuando se quiere escribir, solo que esta vez seria con
los pines WR y M/ IO
El circuito es el siguiente:
Figura 3. Circuito de separación de M/ IO .
Ya teniendo este circuito podemos empezar a crear los decodificadores de los dispositivos
en el mapa de memoria, iniciaremos con la RAM que se quiere en las direcciones FFFFFh
a FE000h, descomponemos las direcciones en bits de la siguiente forma:
Como puede ver de A19 a A13 deben estar siempre a uno, las demás estarán cambiando
por lo que se debe crear un circuito que evalué que desde A19 hasta A13 estén en uno, lo
que indicaría que son direcciones de la RAM, ese circuito al tener las entradas todas en
uno debería de sacar un cero que active el selector de la memoria RAM.
4. Microprocesadores Ciclo 0109
Guía #8
La compuerta que tiene la tabla de verdad en el que si todas sus entradas son uno saca un
cero es la NAND.
Entonces bastaría un arreglo de NAND para decodificar las direcciones de la memoria
RAM así:
Puerto de E/S en las direcciones 00477H (Salida) y 00476H (Entrada)
Los bits de A19 a A16 no se utilizan ya que las direcciones de dispositivos de E/S son de
16 bits.
Como ve en los arreglos algunos bits de dirección deberán estar a 1 para ello usamos un
arreglo de NAND y para los que deban estar a 0 un arreglo de OR, A0 será la única que
estará cambiando.
ROM en las direcciones 003FFh a 00000h
5. Microprocesadores Ciclo 0109
Guía #8
Ya teniendo los circuitos decodificadores de direcciones hay que realizar las conexiones a
los dispositivos de memoria, memorias RAM hay disponibles 4K x 8 y ROM 1K x8
Según el rango de direcciones de la memoria RAM:
FFFFFH −
FE 000 H
Pasando a 01FFFH a decimal = 8191, sumándole 1 = 8192 , dividiéndolo
01FFFH
entre 1024 para saber cuantos Kbytes de memoria se necesitaran: 8192/1024 = 8.
Necesitaríamos dos memorias de 4Kx8 para poder alcanzar el rango de direcciones
necesarios de la memoria RAM, así que una de ellas estará manejando las direcciones
pares y la otra las impares, por lo que vamos a necesitar un circuito que separe las
direcciones válidas de la RAM en pares e impares auxiliándose de el pin A0 que será cero
en las direcciones pares y uno en las impares, la conexión final a la memoria RAM es:
El puerto de E/S es de 8 bits, la dirección 0477h es salida y la dirección 0476h entrada,
como los datos irán en ambas direcciones debemos colocar algo que nos proteja de cortos
y a la vez amplifique la capacidad de corriente del microprocesador para ellos utilizaremos
los buffer que habíamos visto en la guía pasada 74244, además de hacer un arreglo para
que me distinga entre la dirección par 0476h y la impar 0477h, el circuito queda de la
siguiente forma:
6. Microprocesadores Ciclo 0109
Guía #8
Finalmente para la memoria ROM se tienen disponibles memoria de 1K x 8
Según el rango de direcciones de la memoria ROM :
003FFH −
00000 H
Pasando a 003FFH a decimal = 1023, sumándole 1 = 1024 , dividiéndolo
003FFH
entre 1024 para saber cuantos Kbytes de memoria se necesitaran: 1024/1024 = 1.
Por lo que bastaría una memoria de 1K x 8.
El circuito queda de la siguiente forma:
Hay que notar que estos circuitos son para leer nada mas 8 bits, por lo que hasta el
momento no hemos trabajado con la parte alta del bus de datos del microprocesador D8 a
D15.