Download i386EX - ¡Bienvenido a paloalto.unileon.es!

Document related concepts
no text concepts found
Transcript
Apuntes sobre el microprocesador i386EX y
memorias para sistemas empotrados.
José María Foces Morán, 2006.
Reconocimiento-NoComercial-CompartirIgual 2.5
Usted es libre de:
•
copiar, distribuir y comunicar públicamente la obra
• hacer obras derivadas
Bajo las condiciones siguientes:
Reconocimiento. Debe reconocer los créditos de la obra de la
manera especificada por el autor o el licenciador.
No comercial. No puede utilizar esta obra para fines
comerciales.
Compartir bajo la misma licencia. Si altera o transforma esta
obra, o genera una obra derivada, sólo puede distribuir la obra
generada bajo una licencia idéntica a ésta.
•
Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la
licencia de esta obra.
• Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del
titular de los derechos de autor
Los derechos derivados de usos legítimos u otras limitaciones reconocidas por ley
no se ven afectados por lo anterior.
Paginación de documento completo:
1
El microprocesador i386ex: Introducción.
i386EX es el nombre comercial de un microprocesador de la compañía Intel al
que dedicaremos el presente capítulo entero. La letra i significa “intel”, el
número 386 indica que el microprocesador tiene un ancho de palabra de 32 bits
y que su arquitectura es del tipo intel 86, por fin, EX significa “embedded”, es
decir, un tipo de microprocesador pensado para su uso en proyectos
empotrados. Los sistemas computadores empotrados o, de una forma más
corta, sistemas empotrados, son sistemas basados en microprocesador que,
generalmente se emplean para un propósito concreto, para una aplicación
concreta. Un ejemplo de sistema empotrado puede ser el sistema de control de
consumo de los automóviles modernos: se trata de un computador que ejecuta
un sistema operativo de tiempo real en miniatura sobre el que se ejecutan un
cierto número de programas de aplicación, cada uno de los cuales lleva a cabo
unas funciones concretas. Estos programas, se sincronizan entre sí utilizando
primitivas ofrecidas por el sistema operativo, para construir un verdadero
sistema de aplicaciones cooperativas que, eventualmente, logran monitorizar,
registrar, procesar y controlar diversas partes del motor del automóvil para que
el consumo y las emisiones resulten óptimas.
A diferencia de los computadores normales, o de propósito general, los
microprocesadores empotrados suelen incluir elementos adicionales además de
su núcleo computacional. El núcleo está constituido por una ruta de datos y una
unidad de control internas con el mismo estilo que el núcleo del
microprocesador MIPS estudiado en el texto de los profesores Patterson y
Hennessy. Los elementos adicionales incluidos sirven para que el diseño del
computador empotrado resulte más fácil y menos costoso. Algunos de los
elementos sólo se usan en sistemas empotrados, por ejemplo, el WDT (Watch
Dog Timer, Temporizador de vigilancia) del i386EX.
El i386EX a vista de pájaro.
El microprocesador empotrado i386EX fue presentado por la compañía Intel a
mediados de los 90. Esta implementación de la arquitectura x86 es una
implementación estática, la cula, logra reducir notablemente el consumo de
potencia; este requerimiento resulta esencial en ciertas aplicaciones empotradas
de pequeño tamaño.
Organización General i386EX ©1999, José M Foces Morán -- 1
Paginación de documento completo:
2
Una de las características más interesantes de este microprocesador es que
implementa la arquitectura x86 completa y, por tanto, resulta fácil y directa la
ejecución de software compatible con el standard PC. Además, el i386EX, puede
funcionar con tensiones de 3.3V, incluye una unidad de gestión de consumo
eléctrico y una gran variedad de periféricos, casi todos ellos compatibles con los
del PC.
El microprocesador i386EX posee un bus de datos de 16 bits, aunque su
arquitectura interna es de 32 bits. El bus de direcciones es más amplio que el de
uno de sus predecesores, entre otros el i386SX y, llega a los 26 bits, con lo que la
capacidad de direccionamiento en bytes es de 64Mb.
La arquitectura IA, como hemos estudiado en los capítulos anteriores dedicados
a ella, posee un modo protegido especialmente pensado para el diseño de
sistemas operativos multitarea, gestión de memoria virtual paginada y
segmentada. Todos estos aspectos también están incluidos en el i386EX.
Poder diseñar software para este microprocesador empleando plataformas
basadas en PC es una gran ventaja dado el abanico tan amplio de posibilidades
y precios. No sólo puede diseñarse el software, además, puede verificarse en
una plataforma PC antes incluso de que el hardware esté listo, lo cual es otra
ventaja muy notable.
Como hemos mencionado anteriormente, la mayoría de los periféricos incluidos
en el microprocesador i386EX, se hallan presentes en el PC, con lo cual se
facilitan los diseños dada la popularidad de la plataforma PC hoy en día. Los
periféricos incluidos en el chip del i386EX constituyen bloques funcionales
esenciales para el diseño de sistemas empotrados, así, nos encontramos con
decodificadores de direcciones, controladores de interrupciones y de DMA,
temporizadores, registros de control de refresco de memorias DRAM, puertos
de comunicaciones y otros.
El funcionamiento con tensiones tan bajas como los 3.3V hace que sea fácil el
diseño de sistemas de bajo consumo, basados en batería o pilas y, la ventaja
adicional de un menor ruido electromagnético inducido. El sistema de control
de consumo del chip incluye un modo exclusivo llamado SMM. El modo
System Management Mode sirve para la ejecución controlada de ciertas rutinas
que pueden apagar algunos subsistemas del microprocesador cuando no es
necesario su funcionamiento y, de este modo, reducir el consumo de potencia.
El microprocesador i386EX posee un modo de funcionamiento denominado idle.
En este modo, se suprime el reloj de la CPU y se mantiene el de los periféricos,
de este modo, gracias a su implementación estática, la CPU consigue mantener
su estado hasta que tenga lugar un determinado evento externo, momento en el
que la unidad de control de reloj vuelve a proveer el reloj a la CPU y ésta puede
retomar el flujo de ejecución de instrucciones anterior.
En este capítulo, estudiaremos cada uno de los bloques funcionales del
microprocesador i386EX y su interfaz de bus: el medio que nos permitirá
conectar el microprocesador con las memorias y quizás con otros elementos de
comunicación externa, como por ejemplo, un controlador Ethernet. Además,
Organización General i386EX ©1999, José M Foces Morán -- 2
Paginación de documento completo:
3
describiremos los diferentes tipos de memorias usadas en el diseño de
sistemas empotrados.
El i386EX no es el único microprocesador empotrado de la compañía Intel, otra
familia denominada i960, está formada por un gran número de procesadores
empotrados basados en tecnología RISC de muy altas prestaciones. Estos
últimos procesadores se emplean en subsistemas de entradas/salidas que se
emplean en computadores de muy alto rendimiento, como por ejemplo, en
servidores de red. Existen en el mercado otros microprocesadores empotrados
con unas excelentes prestaciones y características, por ejemplo, la familia 68x32
de Motorola. Algunos de los microprocesadores empotrados de Motorola
contienen procesadores de protocolos, ideales para su uso en sistemas de
comunicaciones.
La tabla siguiente contiene una comparación de características entre los
diferentes miembros de la familia 386 de microprocesadores y
microprocesadores empotrados de la compañía Intel:
Frecuencia de reloj EXTB EXTC CXSA CXSB
DX
SX
SX Estático
16 MHz
-
-
-
3.0V 5.0V 5.0V -
20 MHz
3.0V -
-
-
25 MHz
3.3V 5.0V 5.0V 3.3V 5.0V 5.0V 5.0V
33 MHz
-
5.0V 5.0V 3.3V 5.0V 5.0V 5.0V
40 MHz
-
-
5.0V -
5.0V 5.0V -
-
-
5.0V
Tabla 1. Frecuencias y tensiones de alimentación de la familia 386 (Cortesía de
Intel Corp).
Los bloques funcionales periféricos del i386EX.
El microprocesador empotrado i386EX contiene un gran número de bloques
funcionales interesantes en el diseño de sistemas empotrados y, de la familia
386, es el que más elementos integrados contiene. La tabla siguiente compara
las características de los otros miembros de la familia 386. Esta tabla nos sirve
ahora para presentar la terminología que vamos a emplear en el resto del
capítulo, eso sí, con el aviso de que la información presentada no es exhaustiva
y, por tanto, si esa información fuese necesaria, la única fuente fiable es el
propio manual y hoja técnica de la casa Intel. El sitio web de Intel dedicado a la
provisión de información técnica y de soporte tiene el siguiente URL:
http://developer.intel.com
Organización General i386EX ©1999, José M Foces Morán -- 3
Comentario [JMF1]:
Paginación de documento completo:
4
Versión /
Característica
EXTB
CXSA
CXSB
DX
SX
25, 33
25,
33,
40
16,
25,
33
16,
20,
25,
33
16,
20,
25,
33
25,
33,
40
3.0,
3.3
5V
5.0
3.0,
3.3
5.0
5.0
5.0
Implementación
estática
Sí
Sí
Sí
Sí
-
-
Sí
Modo de gestión
del sistema
Sí
Sí
Sí
Sí
-
-
-
Gestión de
potencia
Sí
Sí
Sí
(1)
Sí
(1)
-
-
Sí
Puerta A20
compatible PC
Sí
Sí
Sí
Sí
-
-
-
64Mb
64Mb
64Mb
64Mb
4Gb
16Mb
16Mb
Ancho de dirección 26
26
26
26
32
24
24
Número de canales 2
de DMA
2
-
-
-
-
-
Temporizadores y
contadores
3
3
-
-
-
-
-
Temporizador de
vigilancia
Sí
Sí
-
-
-
-
-
Señales de
selección de chip
8
8
-
-
-
-
-
Patillas de e/s de
propósito general
24
24
-
-
-
-
-
2
2
(8259A) (8259A)
-
-
-
-
3
3
-
-
-
-
-
Sí
Sí
-
-
-
-
-
Frecuencia de reloj 25
Vcc
Espacio de
Direccionamiento
Controlador de
interrupciones
Puertos serie
Unidad de gestión
de refresco de
DRAMs
EXTC
Organización General i386EX ©1999, José M Foces Morán -- 4
Static
SX
Paginación de documento completo:
5
Empaquetado
físico
PQFP
132,
PQFP
132,
PQFP
100,
PQFP
100,
PGA
132,
TQFP
144
TQFP
144
SQFP
SQFP
100
100
PQFP
132
PQFP
100
PQFP
100
Tabla 2. Características de algunos microprocesadores de la familia 386 de
Intel.
En la tabla aparecen dos entradas correspondientes al microprocesador i386EX,
específicamente, EXTB y EXTC. La explicación es que existen diversas
versiones distintas del chip que son funcionalmente equivalentes pero que
presentan entre sí ciertas diferencias a nivel eléctrico, de temporización y
operativo. A estas diferencias la compañía Intel las llama steppings. El
microprocesador i386EX ha pasado por tres steppings: A, B y C. Actualmente,
sólo está disponible el stepping C.
En las secciones que siguen, vamos a detallar más las características y usos de
cada uno de los subsistemas anteriores del microprocesador i386ex
exclusivamente.
Organización General i386EX ©1999, José M Foces Morán -- 5
Paginación de documento completo:
6
i386EX
Address Bus
CSU
JTAG
Reloj y Potencia
Controlador de
DMA, acceso
directo a memoria
WDT/ Monitor
de Bus
Árbitro
del Bus
SIO 1 y 2
SSIO
I/O Ports
ICU
Unidad
de
control
del bus
Núcleo computacional
microprocesador
i386 SX
Cola de
prerrecojida de
instrucciones
Datapath y Unidades de
Ejecución
Data Bus
Figura 1. Diagrama de bloques del microprocesador i386EX.
Organización General i386EX ©1999, José M Foces Morán -- 6
Paginación de documento completo:
7
™ UNIDAD DE GESTIÓN DE POTENCIA ELECTRICA Y DE RELOJ –CLOCK
GENERATION AND POWER MANAGEMENT UNIT.
El circuito de generación de reloj incluye un contador de división por 2, un
divisor programable para la generación de un reloj pre-escalado (PSCLK), un
contador de división por 2 para las entradas de velocidad en baudios y, por
último, la circuitería de reset sincronizado. La señal CLK2, provista
externamente, constituye el elemento fundamental de temporización de todo el
chip. Internamente es dividido por 2 y, de ahí, se derivan dos fases de reloj
llamadas PH1 y PH2. Estas dos fases presentan un ciclo de trabajo del 50%. La
unidad de gestión de potencia se aprovecha de otras dos fases de reloj
específicas para ella, las PH1C y PH2C y los periféricos internos también
reciben señales de reloj específicas, PH1P y PH2P.
En su modo Idle, este microprocesador suprime la señal de reloj del núcleo
computacional. A este núcleo, de ahora en adelante, lo llamaremos CPU
simplemente. Las señales PH1C y PH2C están en bajo y alto respectivamente,
sin embargo, los relojes de los periféricos sí siguen funcionando.
El modo llamado Powerdown suprime los relojes de la CPU y de sus periféricos
internos con estados de PH1C y PH2C conocidos e iguales que en el caso Idle.
En este caso la unidad de bus interfaz, BIU, no responderá a peticiones de
DMA, ni de refresco de memorias DRAM ni tampoco peticiones de cesión de
bus, HOLD, porque todos los relojes del dispositivo están suprimidos.
™ UNIDAD DE GENERACIÓN DE SEÑALES DE SELECCIÓN DE CHIP – CHIP SELECT UNIT,
C S U.
El procesador se comunica con la memoria y con los periféricos externos a
través de un conjunto de líneas de status, control, direcciones y datos a los que
colectivamente nos referimos con el término BUS. Los diferentes tipos de ciclos
de bus permiten al procesador gestionar los procesos de comunicación de
información de forma que ésta llegue a su destino con fiabilidad.
La CSU decodifica todos los ciclos de bus y activa las señales de selección de
chip que correspondan a cada ciclo. Las señales de activación de chip o Chip
Seletcs son el medio a través del cual se le indica a un chip periférico o a un chip
de memoria que tiene que responder a la solicitud efectuada en el ciclo de bus
actual, es decir, qué conjunto de chips de memoria o de periféricos son los que
que tienen que responder a esta transacción y no otros.
Organización General i386EX ©1999, José M Foces Morán -- 7
Paginación de documento completo:
8
En los sistemas basados en microprocesadores convencionales, esto es, no
empotrados, la generación de chip selects la lleva a cabo un sistema externo
llamado decodificador de direcciones. Este sistema, generalmente se diseña con
lógicas programables, FPGA, PAL, etc. Algunos chip sets modernos incorporan
esta capacidad controlable vía software en el arranque del sistema
microprocesador. A pesar de que conceptualmente la decodificación de
direcciones se reduce a implementar funciones lógicas combinacionales, el
número y la complejidad de éstas hace que sea todo un reto lograr una solución
que sea viable económica y técnicamente. Por tanto, es una gran ventaja que
esta lógica se halle integrada en el i386EX.
La CSU es capaz de generar 8 señales de selección de chip separadas. Cada una
de las patillas de selección de chip puede estar asociada a una región del mapa
de memoria o del mapa de entradas y salidas. El esquema de asociación es muy
flexible en cuanto a las direcciones base y los tamaños de las regiones asociadas
a cada patilla.
™ LA UNIDAD DE CONTROL DE INTERRUPCIONES – ICU, INTERRUPT CONTROL UNIT.
La unidad ICU del i386EX procesa interrupciones que proceden del exterior del
microprocesador y de algunos de sus periféricos internos. Una interrupción es
una forma de indicación o aviso de que ha ocurrido un evento, una situación de
algún modo especial. Las interrupciones toman forma de señales eléctricas,
flancos o niveles digitales. Estas señales eléctricas son entregadas a la unidad
ICU donde se les asignará una prioridad y esperarán a ser convenientemente
procesadas.
La unidad ICU se compone de dos controladores de interrupciones
funcionalmente equivalentes a los de un PC. El nombre con el que se conoce a
estos controladores es 8259A. Internamente, al igual también que en el caso de
un PC, los dos 8259A’s están conectados en cascada.
Cada uno de los 8259s puede aceptar un máximo de 8 interrupciones. El
diseñador del sistema puede decidir si las interrupciones correspondientes a
cada una de las 8 líneas de entrada está representada por un flanco positivo o
por un nivel alto. Esta opción se programa usando un registro del 8259.
Internamente al ICU, las interrupciones pendientes, aquellas que aún no han
recibido servicio, son registradas por éste en uno de sus registros internos
llamado Interrupt Request Register (IRR) el cual contiene un bit por cada línea de
interrupción. Cuando llega una de éstas, se activa el bit correspondiente del
registro IRR, entonces, un circuito de resolución de prioridad establece cuál de
los bits de interrupción activos posee la prioridad más alta y, por tanto, debe ser
Organización General i386EX ©1999, José M Foces Morán -- 8
Paginación de documento completo:
9
propagado hasta la línea de interrupción “central” del núcleo
computacional del EX: la CPU. La resolución de prioridades puede ser
programada de diversos modos: circular, fija, etc.
™ UNIDAD DE CONTROL DE TEMPORIZADORES – TCU, TIMER CONTROL UNIT.
Al igual que en el caso anterior, también esta unidad presenta una
compatibilidad completa con el elemento correspondiente de un PC. En este
caso el contador/temporizador 82C54. La unidad TCU contiene tres contadores
independientes de 16 bits, cada uno de ellos es capaz de manejar relojes de
hasta 8 MHz. Los contadores poseen seis modos programables que permiten
que se comporten como: contadores de eventos, indicadores de tiempo
transcurrido, monoestables programables y otros. Todos estos modos son
programables vía software.
™ TEMPORIZADOR DE VIGILANCIA – WDT, WATCHDOG TIMER UNIT.
El WDT consiste en un contador de cuenta atrás de 32 bits que se decrementa
con cada ciclo de la señal PH1P, permitiendo así un máximo de 4300 millones
de cuentas. Cuando el contador de cuenta atrás llega a cero, el contador lleva a
estado activo al pin WDTOUT durante 16 ciclos de CLK2. Esta señal puede
usarse para provocar una interrupción, o para indicar al usuario que se ha
producido una situación en la que la señal #ready está “colgada”. El WDT
también puede usarse en un modo monitor de bus o como temporizador de
propósito general.
™ UNIDAD ASÍNCRONA DE TRANSMISIÓN/RECEPCIÓN SERIE – SIO, ASYNCHRONOUS
SERIAL I/O.
El i386EX contiene dos puertos serie compatibles con la UART (Universal
Asynchronous Receiver Transceiver, Receptor Transceptor Universal
Asíncrono) de la compañía National, NS16450. Los dos canales son full-duplex.
Un canal serie recibe datos en forma de un flujo de bits en formato serie
asíncrono. Esto significa que cada uno de los bits de un carácter recibido va
acompañado de un marco de bits formado por un bit de comienzo fijo y por
uno o más bits de final, también fijos. En medio de los bits de comienzo (start) y
de final (stop) se “enmarcan” los 8 bits de la palabra. Este número de bits por
palabra puede ser distinto a 8 también.
Organización General i386EX ©1999, José M Foces Morán -- 9
Paginación de documento completo:
10
Cuando el SIO recibe una trama completa de bits, extrae los bits de
delimitación de trama y almacena en un registro la secuencia de bits de la
palabra o dato. Más tarde, estos 8 bits podrán ser leídos desde la CPU del EX y
allí podrán ser analizados, quizás almacenados en un buffer para su análisis
posterior. Todas estas opciones dependerán, lógicamente, del uso que se le vaya
a dar a la información recibida y, por tanto, estarán enteramente bajo el control
del programador del sistema. Por supuesto, también es posible el proceso
inverso en el que el programador escribe un carácter en un registro de salida del
SIO para que éste lo formatee adecuadamente y lo transmita bit a bit al
elemento conectado al otro lado de la línea serie.
Los SIO ofrecen otras funciones de interés en la construcción de software de
comunicaciones como pueden ser la lectura de status del SIO desde la CPU del
EX: errores en la recepción debidos a desacuerdos en la paridad de los datos,
errores de enmarcado de datos, errores de velocidad, etc.
Cada canal serie del SIO incluye un conjunto completo de señales de modem
que son completamente programables: #cts, #rts, #dsr, #dtr, #ri y #dcd. Otras
opciones programables del SIO permiten al programador especificar la longitud
de cada carácter transmitido/recibido: 5, 6, 7 u 8 bits. También se pueden
programar el número de bits de parada (stop) que pueden ser 1, 1,5 o 2 y, por
último, la paridad empleada que puede ser par, impar, forzada o ninguna. El
generador de velocidad de reloj puede funcionar entre 0 y 512Kbaudios.
™ UNIDAD DE TRANSMISIÓN SERIE SÍNCRONA - SSIO, SYNCHRONOUS SERIAL I/O
UNIT.
Esta unidad de transmisión serie síncrona, bidireccional y full-duplex, puede
funcionar con relojes distintos en transmisión y recepción. Cada una de las dos
unidades puede generar el reloj o usar el del otro extremo. El reloj de entrada es
de un máximo de 12,5 MHz, el SIO puede funcionar a un máximo de 5 Mbits
por segundo. Cada canal posee un buffer doble. Los canales pueden funcionar
con un máximo de 16 bits por palabra transmitida/recibida y comparten tanto
el generador de reloj como el multiplicador por 2. El SSIO puede ser
programado para producir interrupciones al ICU bajo ciertas circunstancias.
™ UNIDAD DE TRANSMISIÓN/RECEPCIÓN DE DATOS EN PARALELO- PIO, PARALLEL I/O
UNIT.
El i386EX posee tres puertos de propósito general de 8 bits de ancho cada uno.
Todas sus patillas son bidireccionales y emplean niveles de entrada y de salida
Organización General i386EX ©1999, José M Foces Morán -- 10
Paginación de documento completo:
11
CMOS. Todas las patillas tienen dos modos de funcionamiento: normal y
periférico. En modo normal, cada patilla está conectada al bit del puerto
paralelo que corresponda, en modo periférico, el pin estará asociado con un
periférico específico del i386EX. El puerto 3 es el que más potencia posee.
™ UNIDAD DE DMA Y DE ARBITRAJE DEL BUS- DMA AND BUS ARBITER UNIT.
El controlador de DMA del i386EX es un controlador con dos canales
independientes. Es un controlador muy versátil y, en muchos aspectos, superior
al 8237A presente en el PC. Puede ser configurado para funcionar exactamente
igual que un 8237A, eso sí, con sólo dos canales. Cada uno de los canales puede
ser programado para que el controlador transfiera datos entre el espacio de i/o
y memoria, memoria e i/o en cualquier ancho de 8 o 16 bits. Cada canal posee
un registro temporal que puede ensamblar y desensamblar datos desde o hacia
fuentes o destinos desalineados o alineados, mejorando así notablemente el
ancho de banda del bus.
El árbitro del bus, que es parte del controlador de DMA, es el elemento que,
dentro del i386EX, arbitra el uso del bus frente a solicitudes de periféricos
externos o internos. El árbitro recibe solicitudes procedentes de los dos canales
de DMA, del bus master del i386EX y del controlador de refresco de memorias
dinámicas (RCU).
Cada uno de los canales de DMA contiene tres componentes principales: el
peticionador, el destino y la cuenta de bytes. Estos componentes están
identificados por el contenido de ciertos registros programables que definen al
dispositivo de i/o o de memoria que está siendo provisto de servicio por parte
del controlador de DMA. El peticionador es el dispositivo que requiere y
solicita servicio del controlador de DMA. Sólo el peticionador es considerado
capaz de iniciar o terminar un proceso de DMA. El destino es el dispositivo con
el que el peticionador desea establecer la comunicación de datos a través del
bus del i386EX. El DMA considera que el destino es incapaz de controlar el
proceso. La cuenta de bytes establece la cantidad de datos que deben ser
transferidos.
Organización General i386EX ©1999, José M Foces Morán -- 11
Paginación de documento completo:
12
™ LA UNIDAD DE CONTROL DE REFRESCO DE MEMORIAS DINÁMICAS- RCU,
REFRESH CONTROL UNIT.
La unidad de control de refresco simplifica el diseño de controladores de
memoria gracias a sus registros internos de dirección y de reloj. La integración
de la unidad RCU en el i386EX permite que el controlador externo de memorias
dinámicas pueda usar los chip-selects, la lógica de generación de estados de
espera (wait states) y las líneas de status.
La unidad RCU del i386EX contiene cuatro funciones básicas.
1) Temporizador de intervalos de tiempo que lleva la cuenta de tiempo
transcurrido.
2) Lógica de solicitud de bus que le permite ganar el bus del i386EX y así
poder refrescar las memorias dinámicas externas. La unidad RCU es la
unidad que posee mayor prioridad a la hora de ganar el bus.
3) Lógica para generar las direcciones de fila de las memorias dinámicas
de forma que puedan refrescarse filas específicas completas.
4) Lógica para indicar el inicio de un ciclo de refresco.
Además, la RCU contiene un contador de direcciones de 13 bits que conforma la
dirección de memoria que se va a refrescar pudiendo así funcionar con DRAMS
de hasta 13 filas de celdas de memoria lo cual permite usar prácticamente todos
los tamaños adecuados al tamaño del espacio de memoria máxima
direccionable por el i386EX, 64Mb.
™ UNIDAD DE AUTOTEST JTAG- JTAG TEST-LOGIC UNIT.
La unidad de autotest JTAG provee el acceso a las patillas de los dispositivos y
a otras patillas testeables del i386EX. La funcionalidad cumple la norma IEEE
1149.1 y, de este modo, el i386EX posee cinco patillas llamadas #trst, tck, tms,
tdi y tdo dedicadas a la interfaz JTAG. Además, el i386EX contiene una
máquina de estados que implementa el Puerto de Acceso de Autotest (Test
Access Port, TAP), un registro de instrucciones de 4 bits, un registro de
identificación de 32 bits y un registro de bypass de 4 bits. La unidad JTAG
contiene también la lógica necesaria para generar el reloj y las señales de control
para la cadena de Boundary Scan.
Organización General i386EX ©1999, José M Foces Morán -- 12
Paginación de documento completo:
13
Puesto que la lógica de la unidad JTAG contiene su propio reloj y su señal
de reset, puede funcionar autónomamente. De este modo, mientras el resto del
microprocesador está en modo reset o powerdown, la unidad JTAG puede leer y
escribir varias cadenas de registros.
En la figura 1 podemos encontrar un diagrama de bloques del microprocesador
i386Ex. En la sección que sigue revisaremos los conceptos e ideas
fundamentales acerca del núcleo computacional del i386EX- core.
El núcleo computacional del i386EX: conceptos e ideas esenciales.
El microprocesador empotrado i386EX contiene un núcleo computacional
basado en una implementación estática de un microprocesador de la casa Intel
llamado 80386SX. Este microprocesador posee una arquitectura de 386 de Intel
completa y como producto comercial presentaba dos frecuencias de reloj, 16 y
25 MHz. El 386SX posee un bus de datos de 16 bits y un bus de direcciones de
24 bits, por tanto, su potencia de direccionamiento es de 16Mb máximo. Este
microprocesador fue usado con amplio éxito en las primeras generaciones de
computadores personales PC.
™ ¿QUÉ AÑADE EL I386EX CON RESPECTO AL I386SX?
El núcleo computacional del i386EX, además de la funcionalidad del i386SX,
añade un modo de ejecución llamado System Management Mode (SMI), 2 líneas
de direcciones más y el hecho de ser una implementación estática.
El modo SMM permite que el procesador i386EX pueda ejecutar algunos
programas de gestión completa del sistema de forma transparente a los
programas de aplicación y al propio sistema operativo. Podría decirse que este
modo trasciende al propio sistema operativo y también al posible BIOS.
Fundamentalmente este modo sirve para gestionar los cambios de estado del
sistema de gestión de potencia del microprocesador. La arquitectura de este
modo se compone de los siguientes elementos:
1. La línea de interrupción #smi que sirve para invocar el modo
SMM.
2. Una salida nueva, #smiact, que sirve para identificar este modo
de ejecución hacia los periféricos externos.
3. Una instrucción nueva, rsm (resume), que sirve para abandonar
el modo SMM y retornar a la ejecución normal.
4. Debido a que el microcódigo que ejecuta las instrucciones en
modo SMM es diferente del microcódigo “normal”, hay ciertas
instrucciones que ven modificado su número de ciclos de reloj.
Organización General i386EX ©1999, José M Foces Morán -- 13
Paginación de documento completo:
14
La otra mejora mencionada, el número de líneas del bus de direcciones, ha sido
incrementado en este procesador de 24 a 26, por tanto, el espacio de
direccionamiento alcanzable por este procesador llega a los 64Mb. Una mejora
notable teniendo en cuenta el crecimiento de los sistemas operativos que
incorporan API’s complejas e interfaces humanas basadas en GUI’s –ventanas,
ratón etc.
™ UN VISTAZO A LA MICROARQUITECTURA DEL CORE I386SX.
Antes de describir las características de la pipeline (cauce) del i386SX vamos a
establecer un contexto sencillo que nos permita comprender mejor esta
excelente y elegante idea.
Alrededor del año 1955 la compañía IBM contrató a Frederick P. Brooks para
que trabajase en el equipo de ingenieros que colaboraron en el diseño del
computador Stretch, el primer supercomputador del mundo estrenado allá por
el año 1961. Se trataba de un computador científico, pionero en un gran número
de conceptos heredados en los modernos computadores con arquitecturas RISC,
entre otros una técnica conocida como pipelining, ejecución encauzada.
Fueron John Cocke y Harwood Kolsky los que inventaron la ejecución encauzada
de instrucciones. La ejecución de una instrucción en un computador suele
conllevar una serie de pasos cuya secuencia y función suelen ser bastante
constantes. Estas fases incluyen la recogida de la instrucción desde la memoria,
su decodificación, la generación y validación de acceso a la posición de
memoria donde se encuentran los operandos de la instrucción, la realización de
la operación correspondiente con los operandos y, por fin, la última fase suele
consistir en salvar el resultado recién producido, dentro de un registro o en una
posición de memoria, esta última posibilidad depende mucho del tipo de
arquitectura del set de instrucciones involucrado. En la arquitectura de Intel sí
es posible salvar el resultado de una operación lógica o aritmética directamente
en memoria.
La ejecución encauzada de instrucciones consiste en asociar una unidad
funcional autónoma que lleve a cabo cada una de las fases anteriores
perteneciente a una secuencia de instrucciones presentes en memoria. Así la
última unidad funcional estaría efectuando la última fase de ejecución de una
determinada instrucción, la fase anterior estaría trabajando en ese mismo
espacio de tiempo en la instrucción anterior la cual se encontraría en su fase de
penúltima fase de ejecución. Procediendo de este modo nos encontraríamos a la
primera fase del cauce de ejecución (pipeline) recogiendo una instrucción
Organización General i386EX ©1999, José M Foces Morán -- 14
Paginación de documento completo:
15
procedente de la memoria, esta instrucción estaría separada por n
instrucciones de la instrucción que está en último lugar en el cauce.
Mediante esta técnica la ejecución de una instrucción lleva exactamente el
mismo tiempo en ejecutarse que en el caso en el que no se emplea la ejecución
encauzada de instrucciones. ¿Cuál es pues la mejora? Ancho de banda de ejecución
de instrucciones: el cauce está trabajando simultáneamente sobre n instrucciones,
en cada ciclo de reloj el trabajo realizado es n fases de una instrucción, antes el
trabajo realizado era 1 fase solamente: hemos multiplicado por n la tasa de
ejecución de instrucciones.
John Cocke de IBM inventó esta técnica y, años más tarde, sentó las bases de lo
que más tarde llegó a ser una tecnología, una arquitectura, una nueva forma de
computador: los computadores RISC utilizando el término acuñado por el
profesor David Patterson de la Universidad de California en Berkeley, otro
pionero de la computación moderna. El profesor Patterson fue el diseñador del
primer microprocesador RISC, el RISC I, el cual fue la base de un excelente
microprocesador RISC, el SPARC de Sun Microsystems. Las ideas de John
Cocke no solo incluían la ejecución encauzada de instrucciones, también
produjo importantes pistas en la traducción eficiente de código de alto nivel
que se ajustase eficazmente a los requerimientos de la arquitectura del set de
instrucciones subyacente. De su mismo grupo en IBM, Joel Birnbaum, llegó a
ser el Director de los Laboratorios de Hewlett-Packard donde se produjo otra
arquitectura RISC de gran éxito, la Arquitectura de Precisión, que últimamente
se la conoce con el nombre comercial PA-RISC.
Resulta muy conveniente para nosotros comprender que el núcleo del i386EX
contiene un cauce de ejecución porque esto afecta de forma muy notable al
diseño de sistemas basados en este microprocesador así como las estrategias de
comprobación de dichos sistemas: ocurre con mucha frecuencia que al observar
el bus de un microprocesador encauzado se producen efectos en el bus que
pueden conducirnos a confusiones. Conociendo estos aspectos de la
microarquitectura sin duda ayudará a ahorrar tiempo y esfuerzo. Podríamos
incluso decir que, de algún modo, es peor conocer otros microprocesadores noencauzados antes de abordar un diseño basado en el EX. Obviamente esto no es
cierto, pero sí que ocurre que los efectos del cauce producen una confusión
instantánea mayor en el experto que en el no experto: la ingenuidad del no
experto le hará tomarse las paradojas del bus como una componente más de su
falta de experiencia.
¿Cuáles son las características del cauce de ejecución del i386SX (EX)? El núcleo
386Sx contiene ocho sub-bloques funcionales internos principales. El cauce
interno del 386Sx puede estar trabajando en paralelo sobre un máximo de seis
instrucciones en un instante dado. Cuando el procesador recoge instrucciones
procedentes de la memoria, éstas son albergadas primero en una cola de
instrucciones llamada la cola de instrucciones no decodificadas, prefecth buffer.
Organización General i386EX ©1999, José M Foces Morán -- 15
Paginación de documento completo:
16
Posteriormente , la primera instrucción del buffer es sometida a un proceso
de decodificación primario y traducida a una forma binaria más próxima a la
que necesitan las unidades de ejecución para, de hecho, efectuar la ejecución de
la instrucción.
La cola de instrucciones no decodificadas posee una profundidad de 16 bytes.
En esos 16 bytes, normalmente, cabe la forma binaria de varias instrucciones.
Recordemos que este procesador utiliza longitud variable de instrucciones, así,
podemos encontrar instrucciones que tienen un ancho desde un byte, de dos, de
tres y mas tamaños. La unidad funcional encargada de acceder a la memoria en
busca de los “paquetes de bytes de instrucciones” es la unidad de bus del
procesador (BIU) anteriormente descrita brevemente. Esta unidad, si no está
siendo usada por el controlador de Refresco de Memorias dinámicas (RCU),
efectúa continuamente ciclos de bus definidos del tipo recogida de instrucción con
un ancho definido de 16 bits, de forma que la cola siempre tienda a estar llena.
Cuando la unidad de control microprogramada del núcleo computacional
i386SX recoge una instrucción que ha sido ya decodificada lo que ocurre es una
búsqueda dentro de la ROM de microcódigo (CROM): esta CROM contiene el
microcódigo correspondiente a cada macroinstrucción. De este modo el
microcódigo dirige, o controla, el funcionamiento de la ALU, del desplazador
en bloque (barrel shifter) y de la lógica de multiplicación y división.
Si la instrucción requiere algún operando procedente de la memoria, la
dirección de éste es construida utilizando las unidades de segmentación y de
paginación del microprocesador: al final de este proceso relativo a direcciones
de operandos, la unidad de bus (BIU) recibe una dirección física, real de
memoria y la definición de un ciclo de bus que va a ser llevado a cabo sobre esa
dirección de memoria.
Como podemos ver, tenemos varias unidades funcionales trabajando en
paralelo:
1. Una unidad funcional, la BIU recogiendo 2 bytes más de instrucciones
desde la memoria y emplazándolos en el último puesto en la cola de
instrucciones no decodificadas.
2. La cola de instrucciones no decodificadas proveyendo una instrucción
completa al decodificador de instrucciones de primer nivel.
3. El decodificador de instrucciones de primer nivel efectuando una
primera decodificación de la instrucción y del modo de
direccionamiento empleado en la misma.
4. Una unidad de ejecución efectuando una operación aritmética, lógica o
un desplazamiento.
5. Un acceso a la memoria principal en busca de un operando.
6. La retroescritura de un resultado en un registro del fichero de
registros del procesador o quizás en una posición de memoria.
Organización General i386EX ©1999, José M Foces Morán -- 16
Paginación de documento completo:
17
Este grado de paralelismo en el cauce del núcleo i386SX multiplica la
productividad de ejecución de instrucciones (instruction execution bandwidth)
por 6 o ligeramente menos, dependiendo lógicamente de los conflictos que se
produzcan entre las 6 etapas en sus exigencias de uso exclusivo de recursos
arquitecturados del procesador. Este aumento del rendimiento supuso un reto
para los ingenieros de Intel porque está comprobado que resulta notablemente
más difícil encauzar un procesador que usa un formato de instrucción de
longitud variable que un procesador que utiliza un ancho fijo –el caso de los
procesadores RISC, por ejemplo el procesador MIPS. Pero, lo lograron: a base
de una gran complejidad del hardware la arquitectura CISC del i386 contiene
un cauce de ejecución de instrucciones eficaz y funcionalmente correcto.
Usando las palabras de uno de los ingenieros del equipo de diseño del 386 en su
versión con bus externo completo de 32 bits conocida como 80386DX, Pat
Gelsinger:
“La arquitectura interna y los atributos físicos del 80386 hicieron que su diseño
fuese especialmente difícil: nuestra estrategia consistió en descomponer el problema,
establecer una metodología y por último seleccionar las herramientas de CAD que nos
permitiese implementar los conceptos.
Empleamos tanto el método top-down (de arriba abajo) como el bottom-up (abajoarriba). El flujo top-down consistió en la definición de la arquitectura externa, de la
arquitectura interna, de la lógica de transferencia de registros interna (RTL) y de la
lógica detallada final.
El flujo de abajo arriba consistió en el diseño detallado de los transistores y de las
células y su disposición horizontal, después el diseño de los circuitos de los bloques
(ALU, PLA, etc) y finalmente el diseño global de los circuitos y su disposición física...
Conforme la definición de la arquitectura externa llegó a asentarse, el equipo de
diseño comenzó a trabajar en la arquitectura interna de la máquina de la cual resultó su
microarquitectura. El resultado es el esquema de 8 bloques funcionales principales
siguiente:”. ©IEEE Design & Test 1987, Patrick P. Gelsinger, Intel Corp.
El diseño del microprocesador i386EX con todos sus periféricos integrados, un
verdadero computador dentro de un chip, debe haber sido más complicado aún
que el de la versión DX. A pesar de ello, los procesos de fabricación de circuitos
integrados han mejorado notablemente desde el momento en que la versión DX
del 386 apareció en el mercado y lo mismo ha ocurrido con los entornos
integrados de ingeniería de diseño, test, fabricación gestión de proyectos de
CAD electrónico. Sin duda alguna el i386EX es un microprocesador muy
complejo, pero, el esfuerzo de estudio y comprensión de este microprocesador
redundará en grandes ventajas a la hora de comprender el funcionamiento de
un computador moderno, sofisticado y por supuesto será una gran ventaja a la
hora de diseñar con otros microprocesadores de complejidad parecida.
Organización General i386EX ©1999, José M Foces Morán -- 17
Paginación de documento completo:
18
El siguiente gráfico resume la mejora de rendimiento del i386EX al
incorporar ejecución encauzada con respecto a otros microprocesadores que no
la incorporan.
Procesador no encauzado
Tiempo transcurrido
Recogida
instr 1
Decodificación instr 1
Ejecución
instr 1
Recogida
instr 2
Decodificación instr 2
Ejecución
instr 2
Recogida
instr 2
Recogida
instr 3
Recogida
instr 4
W
resultado 1
Recogida
instr 5
Decod 1
Decod 2
Decod 3
Decod 4
Cauce de ejecución del i386EX
BIU
Recogida
instr 1
Unidad de
decodificación
Una unidad de
ejecución
MMU
Exec 1
Exec 2
Exec 3
Addr &
MMU
Decod 5
Exec 4
Addr &
MMU
Figura 2. El cauce de ejecución del i386EX.
™ EL RESTO DE UNIDADES FUNCIONALES DEL NÚCLEO COMPUTACIONAL 386SX.
El resto de elementos del cauce de ejecución del microprocesador 386SX son los
siguientes:
1. La unidad de bus del núcleo computacional. Este elemento es el medio
por el cual el procesador se comunica con su entorno: el resto de
periféricos del microprocesador i386EX. Esta unidad acepta peticiones
procedentes de las unidades de generación de direcciones de memoria
y de la unidad de recogida anticipada de instrucciones. Al mismo
tiempo, la unidad asigna una prioridad a cada una de las unidades
internas susceptibles de efectuar solicitudes. Esta unidad, por último,
genera las señales que definen el ciclo de bus actual, las señales de
concesión del bus, etc.
2. La unidad de recogida anticipada de instrucciones lleva a cabo la
función de búsqueda anticipada de instrucciones procedentes de la
memoria. Cuando la BIU no está ocupada realizando ciclos de bus a
favor de las unidades de recogida de operandos (para poder ejecutar
una determinada instrucción), esta unidad continuamente está
solicitando ciclos de bus de lectura de instrucciones. Estos ciclos de bus
Organización General i386EX ©1999, José M Foces Morán -- 18
Paginación de documento completo:
19
tienen un ancho de 16 bits en modo real. Estos bytes de
instrucciones son almacenados en la cola de instrucciones no
decodificadas. Esta cola tiene una profundidad de 16 bytes.
Estos ciclos de bus de recogida de instrucciones poseen una prioridad
más baja que los ciclos de bus correspondientes a transferencias de
datos. Usando esta técnica se consigue una utilización mayor del ancho
de banda disponible del bus.
3. Unidad de decodificación de instrucciones. Esta unidad acepta bytes
procedentes de la cola de recogida anticipada y los traduce a
direcciones de memoria dentro de la memoria de microcódigo. Las
instrucciones decodificadas son entonces almacenadas en una cola de
instrucciones de profundidad 3 donde esperan a ser procesadas por
parte de una de las unidades de ejecución. Los datos inmediatos
incluidos como constantes dentro de los bits que representan a la
instrucción y los offsets constantes son también tomados desde esta
cola. La unidad de decodificación lleva a cabo su tarea cuando hay al
menos un espacio en la cola de 3 instrucciones y además hay bytes
suficientes para formar una instrucción completa en la cola de
instrucciones no decodificadas.
4. Unidades de ejecución. La cola de instrucciones provee instrucciones a
las unidades de ejecución para ser ejecutadas.
a. La unidad de control microprogramada del i386SX contiene un
hardware paralelo que es capaz de efectuar multiplicaciones con
mucha rapidez así como divisiones y los cálculos de las
direcciones efectivas.
b. El datapath contiene una ALU, un fichero de 8 registros
arquitecturados, un desplazador rápido de 64 bits capaz de
efectuar varios desplazamientos en un solo ciclo de reloj. La ruta
de datos efectúa las operaciones solicitadas por la unidad de
control.
c. La unidad de chequeos de protección comprueba que las
direcciones de memoria de operandos no violan el esquema de
protección entre espacios virtuales.
5. Unidad de segmentación. La unidad de segmentación traduce
direcciones lógicas en direcciones lineales a petición de la unidad de
ejecución. La caché de descriptores de segmento incorporada dentro
del propio chip almacena el conjunto de descriptores de memoria que
están en uso actualmente de modo que la formación de direcciones sea
lo más rápida posible, es decir, que no se necesite acceder a memoria
principal en busca de un descriptor para formar la dirección de
memoria de un operando. Además esta unidad chequea que no se
producen violaciones de segmentación en los ciclos de bus formados.
Organización General i386EX ©1999, José M Foces Morán -- 19
Paginación de documento completo:
20
Las direcciones físicas formadas son truncadas a direcciones
físicas de 26 bits.
6. La unidad de paginación. Esta unidad forma las direcciones de
memoria física, reales. Esta unidad contiene un buffer de
almacenamiento de traducciones recientes, Translation Lookaside
Buffer. Este buffer almacena direcciones físicas correspondientes a
direcciones virtuales de instrucciones y operandos. Cuando una
traducción no se encuentra en el buffer, automáticamente se examina la
tabla de páginas presente en memoria principal, se guarda esa
traducción en el TLB y se efectúa el ciclo de bus solicitado.
Organización General i386EX ©1999, José M Foces Morán -- 20
Paginación de documento completo:
21
Núcleo computacional 386SX
32
Cache de páginas
PLA de control y de
atriibutos
lineales
Recogida de código y de páginas
32
es
Bus de direccion
Bus de direcciones efectivas
Bus de direcciones efectivas
32
Sumador
32
Registro de
descriptores
PLA de límites y
atributos
Datapath
Multiplicador, divisor y
desplazador rápido
Bus de control interno
32
Unidad de control
del bus
Drivers de
direcciones
Control de
tamaño del
bus y
encauzamiento del
bus
#be0,
#be1,
A25:1
m/#io
d/#c
#lock
#ads #na
#ready
Anticipador de recogida
de instrucciones
Cola de instrucciones
de 16 bytes
ALU
Fichero de registros
Control de prioridad de
acceso al bus
Sumador de 3 entradas
32
Árbitro
del Bus
Unidad de paginación
Bus de direcciones reales
Unidad de segmentación
hold
intr
nmi
#error
#busy
reset
#smiact
pereq
Status
flags
Control
de la
ALU
Unidad
de
Control
Microprogramada y
ROM de
microcódigo
32
Flujo de
código
Transceptores y
Multiplexores
Decodificador de
instrucciones
Cola de 3
instrucciones
decodificadas
Bus de la ALU dedicado
32
Figura 3. Núcleo computacional 386SX.
Organización General i386EX ©1999, José M Foces Morán -- 21
d15:0
Paginación de documento completo:
22
El bus del microprocesador i386ex (Parte 1).
El bus del microprocesador i386EX.
La versión del microprocesador i386EX con encapsulado PQFP contiene 132
patillas. De las 132 patillas algunas de ellas están especialmente dedicadas a la
conexión de periféricos internos del microprocesador, otras conectan los tres
puertos de i/o de propósito general y, un último grupo de patillas engloban la
funcionalidad del bus del i386EX. Debemos comprender ahora que esta es una
funcionalidad compleja y extensa que no se reduce a un simple número de
líneas de conexión que transportan señales digitales y que se suelen representar
gráficamente agrupadas. Quizás sea un buen momento para repasar los
conceptos e ideas más importantes acerca de los procesos de i/o en sistemas
computadores y su conexión con periféricos, recuerda consultar el capítulo 8
del texto de los profesores P&H.
El bus del i386EX está formado por una serie de aspectos que vamos a
desarrollar progresivamente en este tema. Todos estos aspectos posibilitan la
comunicación del microprocesador con todos los elementos externos
conectados a éste de una forma que garantice que las comunicaciones se van a
producir de forma fiable y que el esquema permita ampliaciones y
modificaciones. Estos aspectos incluyen los siguientes:
1. Eléctricos. Los dispositivos conectados a cualquiera de las versiones del
i386EX deben cumplir con los niveles máximos y mínimos de tensión, de
carga y de disipación de potencia aceptables por el i386EX.
2. Operativos. Los dispositivos conectados al bus del i386EX deben poder
entender los comandos, órdenes y semánticas derivadas de las acciones
del microprocesador, en otro caso, el diseñador de sistemas empotrados
deberá incorporar la lógica de adaptación que posibilite la comunicación.
3. De temporización. Los dispositivos conectados al bus del i386EX deben
cumplir las especificaciones de tiempos máximos y mínimos en los que
será necesario presentar datos estables en los buses.
4. Otras especificaciones. De tipo mecánico, de seguridad, etc.
BUS i386EX I. ©1999, José M Foces Morán -- 1
Paginación de documento completo:
23
™ LAS PATILLAS DEL I386EX QUE FORMAN PARTE DEL BUS BÁSICO.
Para comenzar vamos a explorar los nombres y las funciones de cada una de las
señales que forman parte del bus del i386EX. En la tabla sólo aparecen las
señales incluidas en el bus y que son compatibles con otros microprocesadores
no empotrados de intel basados en la arquitectura IA, es decir, no aparecen
listadas aquellas señales relacionadas con la funcionalidad concreta de algún
periférico interno del microprocesador y algunas señales que la documentación
de original del microprocesador sí incluye como formando parte del bus.
Nosotros estudiaremos esas señales en el capítulo de diseño de hardware para
sistemas empotrados; entonces tendremos ocasión de estudiar el resto de
componentes internos de este microprocesador.
Patilla Tipo
Nombre y función cuando la señal está
asertada
a25:1
o
El todo importante Bus de Direcciones
#ads
O
Address Status
El procesador informa de que las líneas de definición del
ciclo de bus y el bus de direcciones están estables. Esto
significa que ha dado comienzo un nuevo ciclo de bus
justo en el flanco activo de reloj que tuvo lugar unos
pocos ns atrás y que el tiempo de éste está
transcurriendo ya.
#bhe
O
Byte High Enable
El procesador informa de que en el ciclo de bus
presente va a ser usada la ruta alta del bus de datos
(d8:15).
#ble
O
Byte Low Enable
El procesador informa de que en el ciclo de bus
presente va a ser usada la ruta baja del bus de datos
(d0:7).
#bs8
I
Bus Size
El ciclo de bus actual corresponde a una zona de
memoria o de i/o capaz de transferencias de datos
limitadas a 8 bits.
BUS i386EX I. ©1999, José M Foces Morán -- 2
Paginación de documento completo:
24
#busy
Busy
I
El coprocesador de punto flotante está ocupado.
Si esta señal se encuentra asertada en el flanco de
bajada de #reset, el procesador llevará a cabo un autotest interno.
Clk2
Clock
ST
(Schmit
Trigger).
D15:0
I/O
La señal de reloj que constituye el parámetro
fundamental de temporización de todas las operaciones
del microprocesador.
Data Bus
Estas líneas transportan los datos procedentes del
microprocesador en los ciclos de escritura y los datos
destinados al microprocesador en los ciclos de lectura.
D/#C
O
Data/control
Si esta línea se encuentra asertada, el ciclo de bus es del
tipo “control”(interrupción, halt o lectura de una
instrucción).
Su estado no-asertado significa que el ciclo de bus
actual es un ciclo de lectura o de escritura de datos.
#error
I
Error.
El coprocesador de punto flotante está en un estado de
error.
#flt
I
Float.
Esta línea fuerza al i386EX a dejar todas las líneas del
bus en estado flotante (excepto la línea TDO).
Hlda
O
Bus Hold Acknowledge
El procesador ha cedido el control del bus a otro bus
master que previamente lo ha solicitado.
Hold
I
Bus Hold Request
Cuando el i386EX explora esta señal asertada procederá
a ceder el bus a otro bus master. La indicación de cesión
del bus se efectúa a través de hlda.
BUS i386EX I. ©1999, José M Foces Morán -- 3
Paginación de documento completo:
25
#lock
O
Lock
El procesador indica a los bus masters potenciales que
en el ciclo de bus presente no pueden solicitar el bus.
M/#io
O
Memory i/o
A través de esta línea de definición de ciclo bus, el
i386EX indica si el ciclo de bus actual se aplica al mapa
de memoria o al de entradas y salidas (i/o).
#na
I
Next address (Use address pipelining).
Mediante la aserción de esta línea, el sistema externo
indica que puede aceptar ciclos de bus encauzados, esto
es, en medio del ciclo actual, el procesador fuerza la
salida del ciclo de bus siguiente.
Nmi
ST
Nonmaskable interrupt request
Entrada de interrupción no enmascarable. Cuando el
i386EX recibe este tipo de interrupción detiene el flujo
de ejecución actual y ejecuta un ciclo de bus de
reconocimiento de interrupción y salta a un vector fijo
donde se encuéntrala rutina de servicio de esta
interrupción.
Pereq
I
Processor Extensión request
El coprocesador de punto flotante tiene datos listos
para enviar al procesador.
Reset
St
Reset
Suspende cualquier operación en curso y efectúa un
proceso de reset de la CPU.
Vcc
P
System Power
La entrada de tensión de alimentación nominal
conectada externamente al plano de alimentación de la
placa de circuito impreso.
Vss
G
System ground
La referencia general desde la que se consideran todas
las tensiones del microprocesador.
BUS i386EX I. ©1999, José M Foces Morán -- 4
Paginación de documento completo:
26
W/#r
O
Write/#Read
Indica si el ciclo actual es de escritura o de lectura.
Forma parte de las señales de definición de ciclo de bus,
las cuales son válidas coincidiendo con el flanco activo
de la señal #ads.
Tabla 1. Las señales que constituyen el bus básico del i386EX.
La unidad BIU del i386EX- Bus Interface Unit.
El bloque funcional del i386EX que provee todas las funciones mencionadas es
la unidad BIU. Es importante comprender que esta unidad de comunicaciones
masivas del microprocesador constituye un bloque funcional independiente,
autónomo que es usado por el resto de bloques funcionales incluidos en el
microprocesador. Entre estos bloques funcionales internos del i386EX se
encuentra el propio núcleo computacional SX (Ver figura 1 del capítulo de
introducción al i386ex).
La unidad BIU gestiona un complejo canal de comunicaciones, compartido por
un gran número de otros bloques funcionales internos y también externos. El
canal de comunicaciones debe poder conectar cualquier bloque interno con
cualquier bloque externo. Los bloques internos ya los conocemos. Los bloques
externos están formados por todas las posibilidades de elementos de memoria y
de i/o existentes.
El procesador usa la memoria para salvar los programas que ejecuta y los datos
que manejan estos programas. También, el procesador, se comunica con otros
elementos que le sirven como puentes hacia otros computadores o hacia el
usuario. Cuando un sistema computador se encuentra en funcionamiento, el
flujo de información que pasa por el bus gestionado por la unidad BIU es
continuo: no hay pausas, la ejecución de los programas provoca el que
continuamente se estén transfiriendo informaciones de todo tipo entre el
interior y el exterior del microprocesador.
™ UN AGRUPAMIENTO DE LAS SEÑALES DEL I386EX.
Las señales del bus constituyen el sustrato físico a través del cual circulan las
corrientes eléctricas. Los niveles de tensión presentes en estas líneas representan
los estados lógicos 0 o 1 y, a su vez, dependiendo del nivel de aserción de cada
una de ellas su semántica.
BUS i386EX I. ©1999, José M Foces Morán -- 5
Paginación de documento completo:
27
Datos e instrucciones se representan del mismo modo: cadenas de bits de
acuerdo con los esquemas de codificación concretos de cada caso, pero, siempre
son cadenas de bits, de símbolos 0 o 1. Esto significa que las instrucciones y los
datos con los que funciona el microprocesador poseen una misma
representación y, por tanto, pueden ser transmitidos utilizando el mismo medio
físico de transmisión. Ciertamente, las instrucciones llegan al i386EX a través
del bus de datos y, los datos que serán procesados por esas instrucciones,
también llegan al i386EX a través del bus de datos.
Recordaremos ahora que, tanto instrucciones como datos, residen en memoria,
en zonas separadas de la misma y que, para poder ser transferidos al
microprocesador, es necesario informar a la memoria acerca de su ubicación.
Las instrucciones y los datos se hallan almacenados en direcciones de memoria
conocidas. La forma más sencilla de representar una dirección de memoria es en
el código conocido como binario natural, es decir, una dirección de memoria es
un entero no negativo que, a bajo nivel, está representado en base binaria.
¿Puede usarse el mismo bus, llamado bus de datos, para transmitir direcciones
de memoria? La respuesta es, claramente sí, de hecho, algunos
microprocesadores de la compañía Intel, compartían el bus de datos y a través
de ese mismo bus, se transmitían datos y direcciones de memoria. A los buses
que emplean esta forma de multiplexar datos y direcciones se les conocía con el
término buses multiplexados, pero, es una práctica abandonada casi por
completo. Hecha esta digresión, hagamos énfasis en que el i386EX utiliza dos
conjuntos de líneas separada, uno para enviar direcciones y el otro para enviar
y recibir datos. El bus de datos, según podemos observar en la tabla adjunta se
denota por d0:15 y, el bus de direcciones se denota por A1:26.
A través del bus de datos, el EX recibe las instrucciones que forman parte de los
programas y los datos que éstas procesan. También, a través del bus de datos, el
procesador envía los datos que han de ser almacenados en la memoria.
A través del bus de direcciones el microprocesador envía las direcciones de
memoria en donde residen instrucciones y datos: este bus siempre contiene la
representación binaria de la dirección de memoria involucrada en cualquier
transferencia.
Puesto que el bus de datos posée un ancho de 16 bits, un máximo de una word
(En modo real de ejecución, una word tiene un ancho de 16 bits) podrá ser
transferida en una transferencia simple. El entero correspondiente a una dirección
de memoria que está presente en el bus de direcciones es el número de word
que va a ser leída o escrita en el ciclo de bus presente, es decir, el número
binario presente en el bus es la dirección de la word que va a ser transferida a
través del bus de datos. Es muy importante comprender que, si el contenido del
BUS i386EX I. ©1999, José M Foces Morán -- 6
Paginación de documento completo:
28
bus es, por ejemplo, 00000003h, el objeto direccionado en memoria será la
word número 3. El gráfico de la figura 1 ilustra esta idea.
El byte bajo de la word 3, su
dirección de byte es la 6
Byte alto
Byte bajo
7
El byte alto de la word 3, su
dirección de byte es la 6+1
6
5
La word
direccionada
es la número
3
4
3
Bus de
direcciones.
2
1
Contenido = 3
0- 7
0
8- 15
i386EX
Nº
wor d
Bus de datos 0-15
Figura 1. El bus de direcciones contiene el número de word direccionada.
Continuando con la relación entre el bus de direcciones y el de datos ¿El único
ancho de dato transferible por el EX es 16 bits? Claramente no, lo que hemos
explicado es que en una sola transacción el EX es capaz de transferir un máximo
de 16 bits (una word), pero, ciertamente, son aceptables otros anchos de datos:
el i386EX puede transferir una doble word (dword) pero, necesitará más de un
ciclo de bus para poder efectuar esa transferencia. El EX también puede
solicitar la transferencia de un solo byte. A continuación, estudiaremos este caso
y, mas adelante, haremos una revisión exhaustiva de todos los casos de
transacciones que necesitan más un ciclo de bus.
BUS i386EX I. ©1999, José M Foces Morán -- 7
Paginación de documento completo:
29
El bus del i386EX
Bus de datos
16 bits
Ruta baja 0:7
Resto de grupos
Bus de direcciones
25 bits
Ruta alta 8:15
Figura 2. Los grupos de señales del bus del i386EX que conocemos hasta el
momento.
™ LAS SEÑALES DE HABILITACIÓN DE SUB-RUTAS DEL BUS DE DATOS.
El bus de datos del ex está formado por 16 líneas, por tanto, el EX, como hemos
explicado anteriormente, puede transferir como máximo una Word en un solo
ciclo de bus pero, también es capaz de efectuar transferencias de un solo byte a
través del bus de datos. La organización vista en el apartado anterior deja claro
que esto es perfectamente posible, entonces, vamos a estudiar cómo:
1. Toda word presente en memoria se compone de dos bytes y, como
sabemos, su dirección de word no es la misma que la dirección de
byte de cada uno de los bytes que la conforman. Existe una relación
sencilla entre la dirección de word y las direcciones de byte de cada
uno de sus bytes. Sin embargo, sí es importante tener en cuenta que
programáticamente, en lenguaje de ensamblaje, las direcciones que
manejamos son siempre direcciones de byte, las cuales, cuando el
procesador las envía al bus direcciones, aparecen traducidas a
direcciones de word. ¿Cómo indica el procesador su necesidad de leer
o escribir un byte independiente si siempre utiliza direcciones de
word? La respuesta son las señales de habilitación de bytes
individuales.
2. Las señales de habilitación de bytes individuales reciben los nombres
#ble (Byte bajo, low) y #bhe (Byte alto, high) (Ver tabla 1). Si en una
transacción de bus aparece la señal #ble activada y #bhe no aparece
activada, eso significa que se va a utilizar sólo la ruta baja del bus de
datos (low) para transferir un byte a través de ella. Pero ¿Qué byte es el
que se va a transferir (Da igual que se trate de leer o escribir)? Es
sencillo: la dirección de la word en la que está incluido este byte ya la
conocemos, en binario natural es el propio bus de direcciones, y dentro
de la word, sólo hay un byte bajo (low): ¡encontrado! La figura 2 ilustra
este ejemplo.
BUS i386EX I. ©1999, José M Foces Morán -- 8
Paginación de documento completo:
30
Este nivel 0 en la señal #ble significa que
el procesador necesita usar la ruta baja del
bus de datos
#ble
El byte residente en la
dirección (de byte) número 6
es el único byte direccionado
en esta transacción
#ble
Byte alto
Byte bajo
7
6
La word direccionada es
la número 3
i386EX
Nº
wor d
5
Bus de
direcciones.
4
Contenido = 3
2
3
1
0- 7
8-15
0
Bus de datos 0-15
Figura 3. El microprocesador indica que necesita usar la ruta baja del bus
de datos mediante la aserción de la línea #ble.
3. Supongamos ahora que el procesador necesita efectuar una transacción
sobre el byte que está en la dirección de memoria 7. Vamos a deducir,
paso a paso, el estado del bus de direcciones y de las señales de
habilitación de bytes:
a. Este byte reside en la dirección de word número 7/2 = 3, luego
ya conocemos el contenido del bus de direcciones, un 3
representado en binario haciendo uso de las líneas a1:25. Como
esta dirección de memoria sólo nos indica la word direccionada
nos falta determinar qué posición ocupa el byte 7 dentro de la
word 3: la alta o la baja.
b. Como 7/2 tiene resto (Un 1, lógicamente), concluimos que como
el primer byte de una word es el bajo, en este caso la referencia
es al byte alto de la word número 7/2=3.
BUS i386EX I. ©1999, José M Foces Morán -- 9
Paginación de documento completo:
31
c. Pero ¿Cómo indica el EX que desea efectuar una transacción de
un solo byte y que en este caso es el byte alto de la word cuyo
número aparece en el bus de direcciones? El EX aserta la línea
de habilitación de byte alto cuyo nombre es #bhe. En la figura 4
aparece ilustrado este ejemplo.
Este nivel 1 en la señal #ble significa que
el procesador no necesita usar la ruta baja
del bus de datos
#ble
Este nivel 0 en la señal #bhe significa que
el procesador necesita usar la ruta alta del
bus de datos
#bhe
El byte residente en la
dirección (de byte) número 7
es el único byte direccionado
en esta transacción
#ble
#bhe
Byte alto
Byte bajo
7
6
La word direccionada es
la número 3
i386EX
Nº
wor d
5
Bus de
direcciones.
4
3
Contenido = 3
2
1
0-7
8- 15
0
Bus de datos 0-15
Figura 4. Transacción de 8 bits sobre el byte presente en la dirección de byte 7.
Este byte se encuentra en la word número 7/2=3 en su parte alta.
BUS i386EX I. ©1999, José M Foces Morán -- 10
Paginación de documento completo:
32
Antes de continuar resumiremos un principio ya conocido en este curso: el
objeto más pequeño que posee una dirección de memoria única es el byte, un
agregado de 8 bits.
Realizaremos un último ejemplo que ilustre el significado de las líneas de
habilitación de bytes: una transacción de una word completa ¿Qué estado
presentan las señales de habilitación de bytes en estas transacciones? El ejemplo
que vamos a realizar es, un tanto, simplista: imaginemos una situación en la que
el microprocesador necesita leer una word completa, concretamente la –
famosa- word número 3. En esta situación, ambas señales de habilitación de
bytes estarán activas. Esto, podríamos preverlo ya, puesto que, si se ha de leer
una word, se han de leer los bytes que forman parte de ella, esto es, su byte bajo
y su byte alto, por tanto, deberán habilitarse ambas rutas. Debemos insistir en
que el planteamiento de este problema es simplista y que, pronto, añadiremos
una cierta complejidad a este problema y, también sabremos cómo resolver los
problemas derivados de esa complejidad (pista: Endianismo y alineamiento de
datos en la arquitectura IA). Por ahora, resolvamos este caso sencillo, para ello,
estudiad la ilustración de la figura 6.
Ahora, resumamos dónde nos encontramos, para ello, vamos a incluir las líneas
de byte enables en el agrupamiento de señales del i386EX. Posteriormente,
continuaremos estudiando un grupo de señales que, en cada ciclo de bus,
definen su tipo, es decir, si se trata de un ciclo de bus de lectura o de escritura,
por ejemplo.
El bus del i386EX
Bus de datos
16 bits
bidireccional
Ruta baja 0:7
Resto de grupos
Bus de direcciones
25 bits
Unidireccional
Byte enables
#ble
#bhe
Ruta alta 8:15
Figura 5. Los grupos de señales del Bus del i386EX vistos hasta ahora.
BUS i386EX I. ©1999, José M Foces Morán -- 11
Paginación de documento completo:
33
#ble
#ble
Este nivel 0 en la señal #ble significa que
el procesador necesita usar la ruta baja del
bus de datos
#bhe
Este nivel 0 en la señal #bhe significa que
el procesador necesita usar la ruta alta del
bus de datos
#bhe
La word direccionada es la
número 3 y como se han
activado ambos byte enables,
ambos bytes, bajo y alto,
serán transferidos a través de
las rutas alta y baja del bus
de datos
Byte alto
Byte bajo
Nº
wor d
7
6
5
i386EX
Bus de
direcciones.
4
Contenido = 3
2
3
1
0- 7
8- 15
0
Bus de datos 0-15
Figura 6. Ambos byte enables activados: Un ciclo en el que se transfiere una
word entera (sus dos bytes).
™ NOCIONES ACERCA LOS TIPOS DE TRANSFERENCIAS POSIBLES CON EL BUS DEL I386EX.
Anteriormente, hemos comentado la existencia de dos mapas de memoria
desde el punto de vista del microprocesador i386EX: el mapa de memoria
principal y el mapa de i/o (mapa de entradas y salidas). El mapa de memoria
corresponde al conjunto de chips de memoria que colectivamente constituyen
la memoria principal del computador. El mapa de i/o corresponde al conjunto
de chips de dispositivos que posibilitan el intercambio entrada de datos con el
BUS i386EX I. ©1999, José M Foces Morán -- 12
Paginación de documento completo:
34
exterior (Los periféricos). Los dispositivos pertenecientes al mapa de i/o
cumplen ciertas funciones de comunicación que, de momento, no detallaremos.
Las formas de acceso a la memoria y a los dispositivos suelen ser muy
diferentes, esto podéis constatarlo consultando el capítulo 8 del libro de texto de
los profesores Patterson y Hennessy y, el hecho de que la memoria principal
quizá forme parte de una jerarquía de memorias completa, hace conveniente la
existencia de un mapa de i/o completamente separado del mapa de memoria
general. Esta es la razón de la existencia de instrucciones especiales de
transferencia al mapa de i/o en el i386EX: las instrucciones in y out de la
arquitectura IA transfieren datos desde un registro arquitecturado del
microprocesador a una dirección de i/o y, a la inversa. Ahora, motivaremos la
existencia de un grupo de señales del bus que, en todo ciclo de bus, definen sus
atributos principales, lo cual, es esencial, por ejemplo, en los sistemas de
verificación digital de sistemas basados en microprocesador.
La verificación del hardware de los sistemas empotrados es una tarea que
requiere mucha experiencia y una gran atención a los detalles. La integración
del software con el hardware requiere esas mismas habilidades pero en
disciplinas que, en cierto modo, se consideran separadas: los programas de
computador y las señales eléctricas. Resulta esencial contar con herramientas
que permitan conocer el estado del microprocesador y el estado algorítmico del
software que está ejecutando. El microprocesador i386EX contiene algunas
señales de definición de ciclo de bus y algunas otras no pertenecientes a este
grupo que se emplean para informar a las herramientas de verificación acerca
del estado del bus en cada ciclo.
Las lineas de definición de ciclo de bus son usadas por el diseñador de
sistemas empotrados para organizar los accesos a la memoria y al sistema de
entradas y salidas, también, los instrumentos y herramientas de verificación y
pruebas de hardware, usan estas líneas para dar información útil al diseñador
sobre el funcionamiento del sistema. Este conjunto de líneas, en cada ciclo de
bus iniciado por el procesador, indican si el ciclo de bus actual es de lectura o
de escritura, si se lee un dato o una instrucción, si la dirección de word
presente en el bus de direcciones y los byte enables corresponden al mapa de
memoria principal o al mapa de i/o además de algunos otros atributos de los
ciclos de bus. El bus del i386ex es un bus de procesador-memoria. La definición
de este término corresponde a la claisificación de buses dada en el capítulo 8 de
P&H y, se trata de un bus síncrono que, además, indica el comienzo de los
ciclos de bus de forma asíncrona (Flanco activo de #ads)y establece el final de
los mismos explorando una señal particular denominada #ready (También, su
flanco activo). Estudiemos, entonces, con más detalle estos mecanismos de
comienzo y de final de los ciclos de bus.
BUS i386EX I. ©1999, José M Foces Morán -- 13
Paginación de documento completo:
35
™ EL I386EX ES UN SISTEMA DIGITAL SÍNCRONO (CON ALGUNAS PARTES NOTABLEMENTE
ASÍNCRONAS).
Los sistemas síncronos cambian de estado en ciertos instantes precisos
marcados por una señal llamada señal de reloj (Equivalente a la señal clk
empleada en el capítulo 5 de P&H). La señal de reloj del i386EX es una señal de
pulsos periódicos que suele presentarse con un ciclo de trabajo del 50%. Los
flancos de subida de la señal de reloj, la cual, se denomina clk2, marcan los
cambios de estado del microprocesador. Internamente, el microprocesador
divide esta señal por 2 y forma una nueva señal de reloj llamada clkout o
processor clock. La unidad interna del i386EX encargada de generar clkout y
otras referencias es la CPMU (Clock and Power Management Unit).
clk2
clkout
(ph1)
clk2
clkout
Estado T1
Estado T2
i386EX
Ciclo de bus mínimo
ph2
Figura 7. La señal de reloj clk2 provista desde el exterior y la señal clkout
resultante de dividir clk2 por 2. clkout es propiamente el equivalente a la señal
clk del microprocesador del cap. 5 de P&H.
?
?
?
PH2
PH1
PH2
clk2
ph1
ph2
reset
Figura 8. Las señales ph1 y ph2, resultantes de la división de clk2 por 2. Se las
denomina fases y sirven para sincronizar el acceso a periféricos, etc.
BUS i386EX I. ©1999, José M Foces Morán -- 14
Paginación de documento completo:
36
La recepción de un reset lleva al procesador a su
estado inicial (boot o arranque).
clk2
reset
boot
clkout
i386EX
Figura 10. Sincronización del microprocesador i386EX con el flanco de bajada de
la señal de reset.
La señal que emplean los periféricos internos del microprocesador i386EX se
deriva de clk2 y su nombre es ph1p. Los periféricos conectados al
microprocesador pueden sincronizarse con éste mediante esta señal ya que
ph1p es una réplica de clkout. Todas las entradas al i386EX son muestreadas en
los flancos de subida de clkout si #ready está activa y todas las salidas están
estables en este mismo flanco cuando #ads está activa , de esta forma, el diseño
con dispositivos activados por flancos es directo. Resaltaremos esta última frase
por su gran importancia:
Todas las entradas al i386EX son muestreadas en los flancos de subida
de clkout si #ready está activa y, todas las salidas están estables en
este mismo flanco cuando #ads está activa.
Con estas ideas acerca de la naturaleza síncrona del i386EX y de su bus,
podemos continuar con la descripción del conjunto de señales de definición de
ciclos de bus y su temporización.
BUS i386EX I. ©1999, José M Foces Morán -- 15
!
Paginación de documento completo:
37
™ LA SEÑAL DE INDICACIÓN DE COMIENZO DE UN NUEVO CICLO DE BUS –ADDRESS
STROBE, #ADS.
Los flujos de datos y de instrucciones del microprocesador son posibles gracias
a las transferencias de información entre éste y la memoria. Estas transferencias
de información están formadas por uno o varios ciclos de bus. Un ciclo de bus
es una secuencia de cambios de estado en las señales del bus cuyo objetivo es la
transferencia de un dato simple:
•
El micro lee una instrucción (Siempre procedente de la memoria)
efectuando un ciclo de bus de lectura de instrucción cuyo ancho
de dato es siempre una word. Si la representación de la
instrucción estuviese formada por un número cualquiera de bytes,
el procesador sigue leyendo words usando el bus y, a partir de
estas words, la cola de instrucciones (Parte de la pipa del i386ex)
extrae el número de bytes que contienen la representación binaria
completa de la instrucción.
•
El micro escribe un dato del tipo dword (alineada en frontera de
word) efectuando dos ciclos de bus de escritura seguidos con un
ancho de 16 bits (word) cada uno de ellos, cumpliendo el convenio
de ordenación little-endian (Extremista inferior).
La señal #ads representa el inicio de un nuevo ciclo de bus. El instante de
tiempo en el que se inicia el ciclo de bus es el flanco activo de clk2 anterior al
flanco activo de #ads. En el momento preciso en el que el microprocesador
aserta #ads, las señales de definición del ciclo de bus deben estar estables, es
decir, la lógica externa puede muestrear estas señales y actuar en consecuencia
puesto que en este instante (#ads↓) tenemos garantía de que están estables y
que representan adecuadamente el ciclo de bus que necesita el i386EX para
satisfacer la semántica de la instrucción que está siendo ejecutada. La señal #ads
activa significa, también, que la dirección de word contenida en el bus de
direcciones está estable y que, por tanto, puede ser decodificada por un
decodificador de direcciones externo. Normalmente, no será necesario usar un
decodificador de direcciones externo ya que el i386EX puede decodificar hasta 8
espacios de direccionamiento separados y generar las señales de selección de
chip correspondientes internamente, sin necesidad de lógica adicional.
¿Cuáles son, entonces, las señales de definición de ciclo de bus? Describiremos
las tres más importantes:
BUS i386EX I. ©1999, José M Foces Morán -- 16
Paginación de documento completo:
38
•
w/#r: Identifica a este ciclo como de lectura o de escritura.
•
m/#io: La dirección contenida en el bus de direcciones
corresponde al espacio de memoria principal o al espacio de i/o.
•
d/#c: Este ciclo de bus es de control (p.ej. la lectura de una
instrucción) o de datos (cualquier lectura o escritura de datos).
El cronograma perteneciente a la figura 10, representa el inicio de un ciclo de
lectura de una word completa y alineada:
•
A partir de #ads↓, es decir, el flanco activo de #ads, las señales
w/#r, d/#c y m/#io representan el ciclo de bus especificado.
•
La dirección de word presente en el bus de direcciones, está ya
estable y, por tanto, puede ser decodificada.
•
Los byte enables también están estables y por tanto el sistema
externo puede activar los chips que constituyen las columnas de
byte alto y bajo que correspondan en el sistema de memoria.
Estado T1
Fase 1 (ph1)
Estado T2
Fase 2 (ph2)
Ciclo de bus mínimo
clk2
clkout
clk2
#ads
i386EX
w/#r
clkout
#ads
w/#r
d/#c
m/#io
A1:25
d/#c
m/#io
A1:25
Memoria
Dirección de memoria
(word)
válida
#ble
#bhe
Figura 10. Inicio de un ciclo de bus de lectura de una word completa y alineada.
BUS i386EX I. ©1999, José M Foces Morán -- 17
Paginación de documento completo:
39
¿Qué señales del i386EX conocemos hasta ahora?
El bus del i386EX
Reloj externo
clk2
Reloj del procesador
clkout
Bus de datos
16 bits
bidireccional
A0:7
Bus de direcciones
25 bits
Unidireccional
A8:15
Inicio de ciclo de bus
#ads
Byte enables
#ble
#bhe
Definición de ciclo de bus
w/#r m/#io d/#c
Figura 11. Los grupos de señales del bus del i386EX que conocemos hasta el
momento.
™ CÓMO FINALIZA UN CICLO DE BUS: LA SEÑAL DE INDICACIÓN DE FIN DE CICLO DE BUS,
#READY.
En el epígrafe anterior hemos explicado cómo transcurre el inicio de un ciclo de
bus, pero, no hemos explicado cómo termina, es decir, cuál es el momento
preciso en el que el dato transferido es almacenado en su destino. El
almacenamiento de este dato no puede producirse mientras el dispositivo que
lo produce está aun escribiéndolo en el bus de datos y, por tanto, estas señales
estén aún adquiriendo valores estables.
Recordemos que todas las memorias comienzan a decodificar la dirección
provista en su bus de direcciones en el momento en que se activa la señal de
habilitación de chip (chip select) correspondiente. El tiempo que transcurre
entre la habilitación del chip y el instante en el que la memoria es capaz de dar
el dato con fiabilidad en su bus de datos, se conoce como tiempo de acceso. El
tiempo de acceso de cada memoria es un parámetro medido por el fabricante en
unas determinadas condiciones ambientales y de alimentación eléctrica. En el
diseño de un computador se incluye un elemento llamado generador de
BUS i386EX I. ©1999, José M Foces Morán -- 18
Paginación de documento completo:
40
estados de espera (wait states), este circuito es el encargado de determinar
cuándo puede terminar un acceso a una memoria con garantías de que el dato
que se lee esté estable.
El circuito generador de estados de espera, básicamente, lo que hace es
comenzar una cuenta atrás en el momento en el que se habilita el chip (aprox.
#ads) y, cuando la cuenta llega a cero, activar una señal de fin de ciclo (#ready).
La activación de esta señal es la indicación de que puede leerse el dato presente
en el bus de datos con fiabilidad y, por tanto, dar por terminado el ciclo
presente. La unidad CSU (Chip Select Unit) del i386EX puede generar
automáticamente #ready sin necesidad de ninguna lógica adicional externa. De
algún modo, podemos considerar esto un caso excepcional: normalmente los
procesadores no son capaces de terminar sus ciclos de bus de esta forma y
necesitan un generador de wait states externo.
La CSU del i386ex gestiona hasta 8 canales de selección de chip, los cuales, son
configurados individualmente por el diseñador del sistema cuando éste
arranca, como parte del proceso de boot del sistema, para que se activen cuando
se producen accesos a determinados rangos de direcciones de memoria en
funcionamiento normal del sistema, esto es, posterior al arranque. La unidad
CSU activará el canal de chip select que corresponda. Además, esta unidad
también es capaz de temporizar el acceso según la explicación anterior y
generar la señal #ready internamente y, por tanto, poder terminar los ciclos de
bus que se lleven a cabo.
En los sistemas basados en microprocesadores que no son empotrados, como es
el caso del Pentium III, el decodificador de direcciones ha de ser provisto
externamente, así como el generador de estados de espera (wait states). Estos
elementos en un computador como el mencionado, forman parte de un
conjunto de chips llamado chip set que típicamente cumple, entre otras, las
siguientes funciones:
•
Decodificación de direcciones
•
Generación de estados de espera
•
Refresco de las memorias dinámicas
•
Multiplexación de fila/columna en el acceso a memorias
dinámicas
•
Gestión de interrupciones
•
Acceso directo a memoria
La señal de entrada al i386EX que le capacita para reconocer el final de los
ciclos de bus se denomina #ready. En esta sección nos proponemos comprender
BUS i386EX I. ©1999, José M Foces Morán -- 19
Paginación de documento completo:
41
su significado y sus usos; por el momento no estamos interesados en conocer
los detalles técnicos de las diversas formas de generar #ready, ya sea usando la
CSU o un circuito externo.
Un ciclo de bus se extiende durante al menos dos estados de bus: un estado
inicial denominado T1 y un estado siguiente a éste que se denomina T2.
Empleando una terminología más antigua, T1 es el estado de direcciones y T2
es un estado de datos. Un ciclo de bus se compone de un estado T1 seguido de,
al menos, un estado T2, esta es una formulación más completa que la anterior.
El tiempo de acceso de una memoria suele ser muy superior al tiempo de ciclo
del procesador, por esta razón el procesador siempre que accede a la memoria
debe esperar al dato solicitado. La unidad de tiempo mínima e indivisible de la
que se componen las esperas es un estado de bus completo, el procesador no
puede esperar medio estado de bus, por ejemplo. Supongamos que el
procesador inicia un ciclo de bus contra un dispositivo lento, el cual, no puede
garantizar que tendrá el dato listo al final de T2: no queda más remedio que
añadir una, dos o más unidades de tiempo de longitud igual a un estado de bus
cada una de ellas. A estas unidades de tiempo se les llama estados de espera.
La señal #ready se muestrea al final del estado T2, síncronamente con clkout o
ph2 (Recordad la llamada ! de la página 16). Para comprender el momento
preciso en el que el microprocesador muestrea #ready dentro de T2, será
necesario consultar la figura 11. #ready es muestreada en el
flanco de bajada de ph2 dentro de T2: si en ese instante el estado de #ready es 0,
el ciclo de bus se da por concluido, si en ese instante el estado de #ready es 1, el
procesador espera otro estado T2 completo y en ese estado otra vez volverá a
muestrear #ready en el flanco de bajada de ph2. El cronograma siguiente
completa el cronograma que ilustraba el inicio de un ciclo de bus, en este caso,
supondremos que un generador externo de estados de espera, devuelve #ready
en el tiempo adecuado al tiempo de acceso de la memoria.
BUS i386EX I. ©1999, José M Foces Morán -- 20
Paginación de documento completo:
42
Estado T1
Fase 1 (ph1)
Estado T2
Fase 2 (ph2)
Ciclo de bus mínimo
clk2
ph2
clk2
#ads
#ready
#ready
D0:15
Datos
listos
w/#r
i386EX
A1:25
clkout
#ads
w/#r
d/#c
m/#io
d0:15
Generador
externo de
wait states
d/#c
m/#io
A1:25
Dirección de memoria
(word)
válida
Memoria
#ble
#bhe
Figura 12. Ciclo de lectura completo.
™ ¿ES POSIBLE QUE EL MICROPROCESADOR NO NECESITE REALIZAR CICLOS DE BUS?
La unidad de bus del microprocesador i386EX, cuyo acrónimo es BIU, está
compartida por todos bloques funcionales que forman parte del mismo. La BIU
realiza ciclos de bus a petición del núcleo computacional (Ruta de datos), del
controlador de DMA (Direct Memory Access, controlador de acceso directo
memoria) y del controlador de refresco de DRAMs. Con este cuadro en mente,
no es difícil imaginarse una situación en la que el controlador de DMA no tiene
ninguna transferencia pendiente, al controlador de refresco le falta tiempo aún
para iniciar el refresco de la fila que corresponda y, por último, la cola de carga
anticipada de instrucciones del cauce de ejecución (pipa) está llena y, las
instrucciones presentes en el cauce no efectúan operaciones de lectura ni de
BUS i386EX I. ©1999, José M Foces Morán -- 21
Paginación de documento completo:
43
escritura en memoria. En este caso, no sería necesario llevar a cabo ningún ciclo
de bus ¿Qué estado presentarían las señales del bus en ese estado?
El bus del i386EX puede permanecer en un estado, llamémoslo quieto, mientras
no haya solicitudes de ciclos de bus. El tiempo mínimo en el que el bus puede
estar en estado quieto (idle) es, como en el caso de los estados de espera, un
estado de bus. Estos ciclos de bus quietos se componen de un solo estado, cuyo
nombre es Ti. Lógicamente, estos ciclos idle no se componen de estado de
direcciones (T1) y estado de datos (T2) ya que no hay direcciones de memoria
estables en el bus de direcciones y, tampoco hay transferencias de datos. La
característica distintiva de estos ciclos es que, no habiéndose iniciado ningún
ciclo de bus y habiendo finalizado el último, la señal #ads no pasa a estado
activo. En la figura 12, el ciclo de bus que sigue al ciclo inicial de lectura es un
ciclo idle.
Estado T1
Fase 1 (ph1)
Estado T2
Fase 2 (ph2)
Idle bus cycle
Ciclo de bus mínimo
clk2
ph2
#ads
#ready
Figura 12. El ciclo de bus idle.
™ UN DIAGRAMA DE ESTADOS DEL BUS DEL I386EX.
Vamos a plasmar en forma de diagrama de estados todos los estados de bus
que conocemos hasta este momento. Esta formalización nos ayudará a entender
mejor estas ideas y conceptos, además, el bus del i386EX contiene otras facetas
que iremos desvelando progresivamente y, será necesario resumir las nuevas
funcionalidades con diagramas cada vez más complejos.
BUS i386EX I. ©1999, José M Foces Morán -- 22
Paginación de documento completo:
44
Por el momento, construyamos el diagrama de estados general del bus del
procesador. Los círculos representan los estados, las flechas representan las
transiciones entre estados y, las etiquetas que acompañan a las transiciones
representan las condiciones lógicas que tienen que darse para que esa transición
concreta se produzca.
#ready asertada
& no hay
solicitud de
ciclo de bus
Ti
Sí hay una
solicitud de
ciclo de bus
no hay
ninguna
solicitud
de ciclo de bus
T1
siempre
T2
#ready asertada
& SI hay
solicitud de
ciclo de bus
#ready no
asertada
Figura 13. Diagrama de estados básico del bus del i386EX.
m/#io d/#c w/#r Tipo de ciclo de bus
0
0
0
Ciclo de reconocimiento de interrupción
(Interrupt Acknowledge Cycle).
0
0
1
-
0
1
0
Lectura de datos procedente del espacio de i/o
0
1
1
Escritura de datos hacia el espacio de i/o
1
0
0
Lectura de instrucción desde memoria
1
0
1
Ciclo de halt o shutdown
1
1
0
Lectura de datos desde memoria
1
1
1
Escritura de datos en memoria
Tabla 2. Los tipos de ciclo de bus posibles en un i386EX.
BUS i386EX I. ©1999, José M Foces Morán -- 23
Paginación de documento completo:
45
El bus del microprocesador i386ex (Parte 2).
Transferencias de datos multibyte y su alineamiento.
Desde el punto de vista del programador, la memoria principal se compone de
un cierto número de posiciones cada una de las cuales puede almacenar 8 bits
de información (1 byte). También, cada una de esas posiciones corresponde a
una dirección de memoria, es decir, las direcciones de memoria que forman los
programas en ejecución son direcciones de byte. ¿Significa esto que un
programa sólo puede referenciar datos tan simples como un byte? Claramente,
podemos imaginarnos que no es así: a pesar de manejar direcciones de byte, un
programa puede con datos formados por 1, 2, 4 8 o mas bytes y cuya dirección
base es la del byte que está en su base; el resto de los bytes están almacenados a
continuación al byte base.
La arquitectura IA especifica que el ordenamiento de los bytes que forman
parte de un dato multibyte almacenado en la memoria principal es little-endian
(Usando la traducción del profesor Gregorio Fernández: extremista inferior).
Como sabemos (Consultad el capítulo 3 de P&H) el orden extremista inferior
consiste en almacenar el byte de menos peso en la dirección base y, los
siguientes, lógicamente, en las direcciones siguientes. Ilustremos la ordenación
little-endian con el ejemplo que aparece en la figura 1.
BUS i386EX II. ©1999, José M Foces Morán -- 1
Paginación de documento completo:
46
La word que está presente en el registro AX se almacenaría
en la dirección 1AB21h del modo representado en la figura.
Registro AX
ah
al
cf
12
1AB24
1AB23
cf
1AB22
12
1AB21
1AB20
1AB1F
Memoria
del
Sistema
Figura 1. La ordenación little-endian en la arquitectura IA.
™ LOS ESPACIOS DE DIRECCIONAMIENTO DE MEMORIA Y DE I/O EN EL I386EX CON MAS
DETALLE.
Recordemos que los microprocesadores de la arquitectura IA poseen dos
espacios de direccionamiento separados a nivel lógico y físico: el espacio de
memoria y el de i/o. En el espacio de memoria es donde se proyecta la memoria
principal del computador y, en el espacio de i/o es donde se proyectan los
puertos (registros) de comunicación con el exterior del sistema: las entradas y
salidas.
Los programas pueden acceder a los dos espacios. El acceso al espacio de
memoria se produce mediante el uso de instrucciones de transferencia de datos
tales como mov y de otras instrucciones que, en esta arquitectura CISC,
producen accesos a la memoria principal. El acceso al espacio de i/o se produce
usando instrucciones de acceso al espacio de entradas y salidas: las
instrucciones in y out, por ejemplo.
BUS i386EX II. ©1999, José M Foces Morán -- 2
Paginación de documento completo:
47
64 Kbytes
ffffh
26 bits efectivos
0005h
0000005h
0004h
0000004h
0003h
Bus de direcciones
+ 2 byte enables
0002h
0001h
0000h
i386EX
Bus de direcciones
+ 2 byte enables
0000003h
64 Mbytes
3ffffffh
0000002h
0000001h
0000000h
8 bits
(1 byte)
Espacio
de i/o
16 líneas
efectivas
8 bits
(1byte)
m/#io
0
1
(Puertos de entrada/
salida)
Espacio
de
memoria
Figura 2. Los espacios de memoria y de i/o en el i386EX.
La división entre los dos espacios es una división lógica, forma parte de la
arquitectura del set de instrucciones del microprocesador i386EX, la cual, a su
vez, tiene una realización física: los espacios de direccionamiento separados. Sin
embargo, si el diseño de un determinado computador exige que haya memoria
presente en un rango de direcciones de i/o, no hay ninguna dificultad en llevar
a cabo ese esquema, salvo la obligación de acceder a esa zona de memoria a
través de instrucciones especiales de acceso al espacio de i/o, esto es, in y out,
por ejemplo. Del mismo modo, si en un rango de direcciones del espacio de
memoria resulta necesario ubicar registros de un dispositivo de i/o, no hay
impedimento salvo, otra vez, el hecho de tener que acceder a esos puertos a
través de instrucciones de acceso a memoria.
Las posibilidades mencionadas son reales. Los buffers de acceso a ciertas
tarjetas de expansión de memoria se producían en el espacio de i/o. También, el
acceso a algunos chips adaptadores de i/o para red local se produce en el
espacio de direccionamiento de memoria.
Un último comentario acerca del particionamiento de espacios en el i386EX y
los tamaños de cada uno de ellos. Intel ha considerado que un tamaño de 64K
bytes para el espacio de i/o resulta suficiente: la dirección de puerto incluida en
las instrucciones de i/o está limitada a 16 bits, esto es 64K bytes (Consultad la
instrucciones in y out en el capítulo del Set de Instrucciones de la arquitectura
IA).
BUS i386EX II. ©1999, José M Foces Morán -- 3
Paginación de documento completo:
48
™ ORGANIZACIÓN FÍSICA DE LA MEMORIA EN LOS SISTEMAS BASADOS EN EL
MICROPROCESADOR I386EX.
A pesar de que el programador ve la memoria como un array de bytes cada uno
de ellos con su dirección particular, los sistemas basados en el microprocesador
i386EX se realizan físicamente usando un esquema ligeramente distinto. Puesto
que físicamente el microprocesador i386EX ofrece un bus de 16 bits, la forma
más conveniente de organizar la memoria consiste en particionar el espacio de
direccionamiento en filas de una word completa. De este modo el procesador
podrá leer una word de 16 bits en un solo ciclo, aprovechándose del ancho
completo de su bus. El bus de direcciones facilita también la construcción de
este esquema puesto que su contenido es número de word direccionada en
cada ciclo de bus: la dirección de word.
0000005h
0000004h
0000003h
64 Mbytes
3ffffffh
0000002h
0000001h
0000000h
8 bits
(1byte)
Figura 3. Cómo ve un programador el espacio de direccionamiento de memoria
organizado en posiciones que contienen 1 byte cada una de ellas.
BUS i386EX II. ©1999, José M Foces Morán -- 4
Paginación de documento completo:
49
Dirección de byte número...
Dirección de byte número...
3fffffeh
3ffffffh
0000005h
0000004h
i386EX
0000007h
0000006h
0000003h
0000005h
0000004h
0000002h
0000003h
0000002h
0000001h
0000001h
0000000h
0000000h
8 bits
(1byte)
8 bits
(1byte)
Byte alto de
cada word
32 Mwords
3ffffffh
Número de word =
Contenido del bus
de direcciones
Byte bajo de
cada word
Figura 4. Cómo “ve” el i386EX el sistema de memoria organizado en filas de
una word cada una de ellas.
En los apartados que siguen, explicaremos algunos ejemplos de instrucciones
de lectura de datos desde memoria y cómo se traducen a ciclos de bus de
lectura. En estos ejemplos se ilustra cómo la unidad de bus del i386EX (BIU)
ejecuta ciclos de bus respondiendo a peticiones efectuadas por el core (Núcleo
computacional formado básicamente por la ruta de datos equivalente al cap. 5
de P&H).
™ LECTURA DE UN DATO DE UN BYTE DE ANCHO.
1. Un microprocesador i386EX ejecuta la instrucción mov ah, [5]. El registro
de segmento activo es ds cuyo contenido es 0. Vamos a explicar cómo
tiene lugar la transferencia.
BUS i386EX II. ©1999, José M Foces Morán -- 5
Paginación de documento completo:
50
•
Semántica de la instrucción. Lo que el programador desea que
ocurra es la transferencia del byte que está ubicado en la dirección
de memoria (de byte) 5 a la parte alta (ah) del registro ax.
•
Rutas del bus de datos empleadas. El sistema de memoria está
diseñado de forma que la ruta del bus de datos empleada para las
direcciones de byte impares (como en este caso) es la ruta alta,
esto es, d8:15. Esto significa que el byte solicitado será entregado
al i386EX a través de la ruta d8:15.
•
Líneas de habilitación de bytes. El procesador indica su
necesidad de usar sólo la parte alta del bus activando la línea de
habilitación de byte alto, #bhe. La línea #ble, permanecerá inactiva
en estado 1.
•
Bus de direcciones. Las líneas del bus de direcciones contendrán,
conforme a su definición, la dirección de word direccionada, en
este caso será: 5/2 = 2.
BUS i386EX II. ©1999, José M Foces Morán -- 6
Paginación de documento completo:
51
d8:15
f8h
f8h
f8h
d0:7
f8h
f8h
f8h
f8h
f8h
3ffffffh
3fffffeh
3ffffffh
f8h
f8h
f8h
ah
0000005h
al
i386EX
0000004h
0000006h
0000003h
0000004h
0000002h
0000003h
0000002h
0000001h
0000001h
0000000h
0000000h
8 bits
(1byte)
8 bits
(1byte)
0000007h
0000005h
f8h
Dirección de byte de esta celda.
32 Mwords
f8h
f8h
Dirección de word
Número de word =
Contenido del bus
de direcciones
Contenido de esta celda (1 byte)
Byte alto de
cada word
Byte bajo de
cada word
Bus de direcciones
a1:25 = 0000002h
#bhe
#ble
El i386EX está ejecutando mov ah, ds:[5]
Figura 5. Cómo el i386EX usa el bus para satisfacer la transacción
derivada de la instrucción mov ah, ds:[5].
2. Un microprocesador i386EX ejecuta la instrucción mov al, [5] (Debemos
fijarnos que, en este caso, el registro de destino es al, no ah). El registro de
segmento activo es ds cuyo contenido es 0. Vamos a explicar cómo tiene lugar
la transferencia.
BUS i386EX II. ©1999, José M Foces Morán -- 7
Paginación de documento completo:
52
•
Semántica de la instrucción. Lo que el programador desea que
ocurra es la transferencia del byte que está ubicado en la dirección
de memoria (de byte) 5 a la parte baja (al) del registro ax.
•
Rutas del bus de datos empleadas. El sistema de memoria está
diseñado de forma que la ruta del bus de datos empleada para las
direcciones de byte impares (como en este caso) es la ruta alta,
esto es, d8:15. Esto significa que el byte solicitado será entregado
al i386EX a través de la ruta d8:15 aunque el destino del dato sea
la parte baja de un registro.
•
Líneas de habilitación de bytes. El procesador indica su
necesidad de usar sólo la parte alta del bus activando la línea de
habilitación de byte alto, #bhe. La línea #ble, permanecerá inactiva
en estado 1.
•
Bus de direcciones. As líneas del bus de direcciones contendrán,
conforme a su definición, el número de word direccionada, en este
caso será: 5/2 = 2.
¿Cómo es posible, en este caso, la entrega del dato en la parte baja del
registro ax? Parece que no hay una ruta que lo haga posible, sin
embargo, el microprocesador i386EX, a diferencia del i486, sí incluye
una red interna de intercambio de bytes que nos permite hacer llegar
al microprocesador un dato por una ruta del bus de datos y enrutar el
dato hacia la otra mitad del registro de destino. Ciertamente, este
microprocesador incluye esta red, la cual aparece en la figura 6.
BUS i386EX II. ©1999, José M Foces Morán -- 8
Paginación de documento completo:
53
Red de intercambio
de bytes externa
Red de intercambio de bytes
ah
al
i386EX
ah
al
i486GX
Figura 6. El i386EX incluye una red de intercambio de bytes, mientras que, el
microprocesador empotrado i486GX no, por tanto, el diseñador ha de proveerla
en forma de un circuito conextado externamente al bus del procesador.
BUS i386EX II. ©1999, José M Foces Morán -- 9
Paginación de documento completo:
54
d8:15
f8h
f8h
f8h
f8h
d0:7
f8h
f8h
<
f8h
3ffffffh
f8h
f8h
3fffffeh
3ffffffh
f8h
f8h
f8h
f8h
f8h
ah
0000005h
al
i386EX
0000004h
0000006h
0000003h
0000004h
0000002h
0000003h
0000002h
0000001h
0000001h
0000000h
0000000h
8 bits
(1byte)
8 bits
(1byte)
0000007h
0000005h
f8h
32 Mwords
f8h
f8h
Dirección de byte de esta celda.
Dirección de word
Número de word =
Contenido del bus
de direcciones
Contenido de esta celda (1 byte)
Byte alto de
cada word
Byte bajo de
cada word
Bus de direcciones
a1:25 = 0000002h
#bhe
#ble
El i386EX está ejecutando mov al, ds:[5]
Figura 7. Cómo el i386EX usa el bus para satisfacer la transacción
derivada de la instrucción mov al, ds:[5].
™ LECTURA DE UN DATO DE UNA WORD DE ANCHO.
1. Un microprocesador i386EX ejecuta la instrucción mov ax, [2]. El
registro de segmento activo es ds cuyo contenido es 0. Vamos a explicar
cómo tiene lugar la transferencia.
BUS i386EX II. ©1999, José M Foces Morán -- 10
Paginación de documento completo:
55
•
Semántica de la instrucción. Lo que el programador desea que
ocurra es la transferencia de la word que está ubicada en la
dirección de memoria (¡de byte!) número 2. Ciertamente, la
instrucción hace referencia a la word que tiene por dirección base
(¡dirección de byte!) la número 2 y cuyo siguiente byte se
encuentra en la dirección 3. El esquema lógico (little endian) que
entiende el programador es el siguiente:
0000005h
0000004h
ax
7fh
ah
50h
0000003h
7fh
0000002h
64 Mbytes
3ffffffh
0000001h
7fh
al
0000000h
8 bits
(1byte)
Figura 8. Semántica de la instrucción mov ax, [2] usando el esquema lógico de
la memoria desde el punto de vista del programador.
Ahora bien, la memoria, físicamente, no está organizada como en la figura y sin
embargo, el programador espera que se produzca el efecto explicado en la
misma ¿Cómo tiene lugar esta transacción teniendo en cuenta la organización
real de la memoria? En este caso particular, esto resulta directo:
•
Rutas del bus de datos empleadas. Puesto que las direcciones de
byte 2 y 3 residen en la misma word física (2/2 = 3/2 = 1), el byte
alto del dato sale por la ruta alta y, el byte bajo sale por la ruta
baja.
•
Líneas de habilitación de bytes. El procesador indica su
necesidad de usar ambas partes, alta y baja del bus de datos,
activando la línea de habilitación de byte alto, #bhe y la línea de
habilitación de byte bajo #ble.
•
Bus de direcciones. Las líneas del bus de direcciones contendrán,
conforme a su definición, el número de word direccionada, en este
caso será: 3/2 = 2/2 = 1.
BUS i386EX II. ©1999, José M Foces Morán -- 11
Paginación de documento completo:
56
El siguiente esquema ilustra cómo, en este caso, al residir la word lógica (la que
entiende el programador) en una única fila de word física, el microprocesador
sólo efectúa un ciclo de lectura sobre la dirección de word 1 y, con ambos byte
enables activados, indicando que el micro está interesado en los dos bytes de la
word direccionada.
f8h
f8h
d0:76ch
f8h
6ch
6ch
6ch
f8h
6ch
f8h
6ch
f8h
6ch
ah
al
6ch
f8h 6ch
6ch
f8h
6ch
3ffffffh
6ch
f8h
f8h
3fffffeh
f8h
6ch
f8h
6ch
3ffffffh
0000005h
0000004h
i386EX
0000007h
0000006h
0000003h
0000005h
0000004h
0000002h
0000003h
f8h
0000002h
32 Mwords
d8:15
f8h
Dirección de word
6ch 0000001h
0000001h
0000000h
8 bits
(1byte)
8 bits
(1byte)
0000000h
Dirección de byte de esta celda.
Número de word =
Contenido del bus
de direcciones
Contenido de esta celda (1 byte)
Byte alto de
cada word
Byte bajo de
cada word
Bus de direcciones
a1:25 = 0000002h
#bhe
#ble
El i386EX está ejecutando mov ax, ds:[2]
Figura 9. Lectura de una word cuya dirección base lógica es 2 y, por tanto, sus
dos bytes residen en la misma word física.
BUS i386EX II. ©1999, José M Foces Morán -- 12
Paginación de documento completo:
57
2. Un microprocesador i386EX ejecuta la instrucción mov ax, [5]. El registro
de segmento activo es ds cuyo contenido es 0. Vamos a explicar cómo
tiene lugar la transferencia.
•
Semántica de la instrucción. Lo que el programador desea que
ocurra es la transferencia de la word que está ubicada en la
dirección base 5 y cuyo byte alto reside en la dirección siguiente,
esto es, la dirección 6. El esquema lógico (little endían) que
entiende el programador es el siguiente:
7fh
0000006h
4bh
0000005h
0000004h
0000003h
0000002h
ax
7fh
ah
4bh
al
64 Mbytes
3ffffffh
0000001h
0000000h
8 bits
(1byte)
Figura 10. Semántica de mov ax, [5] teniendo en cuenta el modelo de la
memoria correspondiente al programador.
Observando ahora la memoria física, organizada en filas de words, nos daremos
cuenta de que esta transferencia no resulta posible porque los bytes bajo y alto
residen en words físicas distintas. La solución consiste en efectuar dos ciclos de
bus seguidos, cada uno de ellos de un byte de ancho. El primero de ellos
direccionará la word a la que pertenece el byte con dirección 6, esto es: 6/2 = 3.
El segundo de ellos direccionará la word a la que pertenece el byte con
dirección 5, esto es: 5/2 = 2. Es decir, la transferencia de una word lógica se
descompondrá en dos ciclos de bus seguidos, cada uno de los cuales lée un
solo byte de la word resultante:
Primer ciclo de bus de ancho un byte.
•
Bus de direcciones. Como ya hemos mencionado, este ciclo de
bus tiene lugar sobre la dirección de byte 6 cuya dirección de
word es 6/2 = 3: El bus de direcciones contiene un 3.
BUS i386EX II. ©1999, José M Foces Morán -- 13
Paginación de documento completo:
58
•
Rutas del bus de datos empleadas. El byte en el que está
interesado el procesador es el que está en la dirección 6 (dirección
par), por tanto, la ruta del bus de datos empleada será la ruta baja,
d0:7.
•
Líneas de habilitación de bytes. El procesador indica en este ciclo
de bus sólo usará la ruta baja activando sólo el byte enable bajo
#ble.
•
El byte contenido en la dirección 6 será entregado al procesador
a través de la ruta de datos inferior. La red de intercambio de
bytes enrutará este byte a la parte alta del registro ax.
BUS i386EX II. ©1999, José M Foces Morán -- 14
Paginación de documento completo:
59
d8:15
6ch
6ch
6ch
6ch
6ch
6ch
6ch
6ch
3ffffffh
3fffffeh
3ffffffh
6ch
6ch 6ch
6ch
6ch
6ch
0000005h
ah
al
0000004h
i386EX
Dirección de byte de esta celda.
0000007h
0000005h
f8h
0000006h
6ch 0000003h
0000004h
0000002h
0000002h
0000001h
0000001h
0000000h
0000000h
8 bits
(1byte)
8 bits
(1byte)
0000003h
32 Mwords
d0:76ch
6ch
El circuito intercambiador de
bytes enruta el dato
procedente de la ruta de
datos inferior a la
parte alta del registro
Dirección de word
Número de word =
Contenido del bus
de direcciones
Contenido de esta celda (1 byte)
Byte alto de
cada word
Byte bajo de
cada word
Bus de direcciones
a1:25 = 0000003h
#bhe
#ble
El i386EX está ejecutando el primer ciclo de
bus de ancho 1 byte correspondiente a la
instrucción mov ax, ds:[5]
Figura 12. El primero de los dos ciclos necesarios para leer la word lógica
residente en la dirección base 5 (desalineada en frontera de word física).
Segundo ciclo de bus de ancho un byte.
•
Bus de direcciones. Este ciclo de bus tiene lugar sobre la dirección
de byte 5 cuya dirección de word es 5/2 = 2: El bus de direcciones
contiene un 2.
BUS i386EX II. ©1999, José M Foces Morán -- 15
Paginación de documento completo:
60
•
Rutas del bus de datos empleadas. El byte en el que está
interesado el procesador es el que está en la dirección 5 (dirección
impar), por tanto, la ruta del bus de datos empleada será la ruta
baja, d8:15.
•
Líneas de habilitación de bytes. En este ciclo de bus el
procesador indica que sólo usará la ruta alta, de este modo,
activará sólo el byte enable alto #bhe.
•
El byte contenido en la dirección 5 será entregado al procesador
a través de la ruta de datos alta. La red de intercambio de bytes
enrutará este byte a la parte inferior del registro ax.
BUS i386EX II. ©1999, José M Foces Morán -- 16
Paginación de documento completo:
61
d8:15
f8h
f8h
f8h
f8h
d0:7
f8h
El circuito intercambiador de
bytes enruta el dato
procedente de la ruta de
datos alta a la
parte inferior del registro
f8h
f8h
f8h
f8h
f8h
3ffffffh
3ffffffh
f8h
f8h
f8h
6ch
f8h
ah
al
f8h
0000005h
0000004h
i386EX
Dirección de byte de esta celda.
0000007h
0000005h
f8h
0000006h
6ch 0000003h
0000004h
0000002h
0000002h
0000001h
0000001h
0000000h
0000000h
8 bits
(1byte)
8 bits
(1byte)
0000003h
32 Mwords
f8h
3fffffeh
Dirección de word
Número de word =
Contenido del bus
de direcciones
Contenido de esta celda (1 byte)
Byte alto de
cada word
Byte bajo de
cada word
Bus de direcciones
a1:25 = 0000002h
#bhe
#ble
El i386EX está ejecutando el primer ciclo de
bus de ancho 1 byte correspondiente a la
instrucción mov ax, ds:[5]
Figura 13. El segundo de los dos ciclos necesarios para leer la word lógica
residente en la dirección base 5 (desalineada en frontera de word física).
Al final de estos dos ciclos de bus seguidos, el registro ax contiene el dato que
espera el programador, esto es, 6cf8h.
BUS i386EX II. ©1999, José M Foces Morán -- 17
Paginación de documento completo:
62
™ LECTURA DE UN DATO DE ANCHO UNA DWORD (WORD DOBLE, O SEA, UN DATO DE 4
BYTES DE ANCHO).
Una dword está compuesta de 4 bytes seguidos en memoria y, pueden, por
tanto, darse varios casos dependiendo del alineamiento de ésta en memoria. Si
la dword está alineada, puesto que el bus tiene un ancho de 2 words, la
transferencia completa se realizará ejecutando dos ciclos de bus de ancho una
word seguidos. Si la dword no está alineada, pueden presentarse dos casos: que
el byte bajo se encuentre en una dirección par o impar. En estos últimos dos
casos el número de ciclos de bus seguidos será de tres: dos ciclos de un byte
cada uno más otro de una word. Vamos a realizar un ejemplo en el que se lea
una dword desalineada con su byte bajo residente en una dirección impar. El
resto de los casos se deja como ejercicio propuesto.
Un microprocesador i386EX ejecuta la instrucción mov eax, [5]. El registro
de segmento activo es ds cuyo contenido es 0. Vamos a explicar cómo tiene
lugar la transferencia.
• Semántica de la instrucción. Cargar en el registro eax la dword que reside
en la dirección base 5. La visión lógica está ilustrada en la figura
siguiente:
00h
0000008h
81h
0000007h
7fh
4bh
0000006h
0000005h
0000004h
0000003h
0000002h
eax
00h
81h
7fh
ah
0000001h
4bh
al
0000000h
8 bits
(1byte)
Figura 14. La semántica de la instrucción mov eax, [5].
Esta transferencia, dada la estructura del sistema de memoria, necesita dos
ciclos de bus de 1 byte y un ciclo de bus de 1 word.
BUS i386EX II. ©1999, José M Foces Morán -- 18
64 Mbytes
3ffffffh
Paginación de documento completo:
63
Primer ciclo de bus, ancho un byte.
•
Bus de direcciones.Este ciclo de bus tiene lugar sobre la dirección
de byte 8 cuya dirección de word es 8/2 = 4: El bus de direcciones
contiene un 4.
•
Rutas del bus de datos empleadas. El byte en el que está
interesado el procesador es el que está en la dirección 8 (dirección
par), por tanto, la ruta del bus de datos empleada será la ruta baja,
d0:7.
•
Líneas de habilitación de bytes. El procesador indica en este ciclo
de bus sólo usará la ruta baja activando sólo el byte enable bajo
#ble.
•
El byte contenido en la dirección 8 será entregado al procesador
a través de la ruta de datos inferior. La red de intercambio de
bytes enrutará este byte a la parte alta de la sub-word superior del
registro eax.
BUS i386EX II. ©1999, José M Foces Morán -- 19
Paginación de documento completo:
64
d8:15
d0:7
00h
00h
00h
00h
00h
00h
3ffffffh
3fffffeh
00h
00h
ah
1ffffffh
00h
al
0000005h
eax
0000009h
i386EX
0000007h
81h
0000005h
4bh
0000008h
0000006h
00h 0000004h
7fh 0000003h
0000004h
0000002h
0000003h
0000002h
0000001h
0000001h
0000000h
0000000h
8 bits
(1byte
)
8 bits
(1byte
)
Dirección de byte de esta celda.
Contenido de esta celda (1 byte)
Byte alto
de
cada word
32 Mwords
00h
00h
<
00h
00h
00h
Dirección de word
Número de word
=
Contenido del bus
de direcciones
Byte bajo
de
cada word
Bus de direcciones
a1:25 = 0000004h
#bhe
#ble
Figura 15. El primer ciclo de bus de la serie de tres ciclos seguidos necesarios
para producir la transferencia mov eax, [5].
Segundo ciclo de bus, ancho una word.
•
Bus de direcciones. Este ciclo de bus tiene lugar sobre la dirección
de byte 6 cuya dirección de word es 6/2 = 3: El bus de direcciones
contiene un 3.
•
Rutas del bus de datos empleadas. El procesador está interesado
en los dos bytes que forman esta word, así que activa ambas rutas.
•
Líneas de habilitación de bytes. Ambos están activados.
BUS i386EX II. ©1999, José M Foces Morán -- 20
Paginación de documento completo:
65
d8:15 81h
81h
d0:7
7fh
81h
81h
81h
81h
7fh
7fh
7fh
7fh
81h
7fh
7fh
81h
81h
7fh
81h
7fh
81h
81h
ah
7fh
7fh
3ffffffh
al
3fffffeh
81h
7fh
81h
7fh
81h
7fh
3ffffffh
0000005h
eax
0000009h
i386EX
0000007h
81h
0000005h
4bh
0000008h
0000006h
00h 0000004h
7fh 0000003h
0000004h
0000002h
0000003h
0000002h
0000001h
0000001h
0000000h
0000000h
8 bits
(1byte)
8 bits
(1byte)
32 Mwords
81h
81h
Dirección de byte de esta celda.
Dirección de word
Número de word =
Contenido del bus
de direcciones
Contenido de esta celda (1 byte)
Byte alto de
cada word
Byte bajo de
cada word
Bus de direcciones
a1:25 = 0000003h
#bhe
#ble
Figura 16. El segundo ciclo de bus de la serie de tres ciclos seguidos
necesarios para producir la transferencia mov eax, [5].
Tercer ciclo de bus, ancho un byte.
•
Bus de direcciones.Este ciclo de bus tiene lugar sobre la dirección
de byte 5 cuya dirección de word es 5/2 = 2: El bus de direcciones
contiene un 2.
BUS i386EX II. ©1999, José M Foces Morán -- 21
Paginación de documento completo:
66
•
Rutas del bus de datos empleadas. El byte en el que está
interesado el procesador es el que está en la dirección 5 (dirección
impar), por tanto, la ruta del bus de datos empleada será la ruta
baja, d8:15.
•
Líneas de habilitación de bytes. El procesador indica en este ciclo
de bus sólo usará la ruta alta activando sólo el byte enable alto #bhe.
•
El byte contenido en la dirección 5 será entregado al procesador
a través de la ruta de datos superior. La red de intercambio de
bytes enrutará este byte a la parte baja de la sub-word inferior del
registro eax.
d8:15 81h
81h
81h
81h
81h
d0:7
81h
81h
81h
81h
81h
81h
3ffffffh
81h
81h
81h
eax
3ffffffh
81h
81h
ah
3fffffeh
81h
81h
al
81h
81h
0000005h
81h
0000005h 4bh
i386EX
0000007h
0000006h
00h 0000004h
7fh 0000003h
0000004h
0000002h
0000002h
0000001h
0000001h
0000000h
0000000h
8 bits
(1byte)
8 bits
(1byte)
0000003h
Dirección de byte de esta celda.
32 Mwords
81h
Dirección de word
Número de word =
Contenido del bus
de direcciones
Contenido de esta celda (1 byte)
Byte alto de
cada word
Byte bajo de
cada word
Bus de direcciones
a1:25 = 0000001h
#bhe
#ble
Figura 17. Último ciclo de bus correspondiente a mov eax, [5].
BUS i386EX II. ©1999, José M Foces Morán -- 22
Paginación de documento completo:
67
La temporización de los ciclos de bus anteriores consiste, a su vez, en la
temporización de cada uno de los tres ciclos de forma independiente. El gráfico
incluido en la figura siguiente representa la temporización de los tres ciclos
seguidos. Debemos recordar que el procesador no ejecuta la secuencia formada
por estos tres ciclos atómicamente, en principio. Hay ciertas instrucciones cuyos
ciclos de bus sí se ejecutan con garantías de atomicidad: la atomicidad del
proceso forma parte de la semántica de la instrucción. Hay otras instrucciones a
las que hay que acompañar de un prefijo llamado lock para que los ciclos de
bus derivados sí sean atómicos, es decir, que tengan lugar en el tiempo sin
interrupción o división posible.
Tal como discutimos en la sección dedicada al contexto de un programa en
ejecución (Capítulo de Programación Estructurada), cuando dos hilos de
ejecución comparten una parte de su estado, han de existir mecanismos
formales por los cuales uno de los hilos pueda tomar control exclusivo sobre el
mismo y, así, garantizar que los cambios producidos en las variables
compartidas tienen lugar atómicamente, garantizando que los valores finales
son los esperados. Nos referimos aquí, particularmente, a las instrucciones de
que garantizan que pueden producir la lectura del valor de una variable, su
modificación y su escritura en memoria sin interrupción posible. El set de
instrucciones del i386EX contiene instrucciones de este tipo y, para asegurarse
(vía hardware) de que tiene acceso exclusivo al bus, fuerza a 0 la señal #lock. La
activación de la señal #lock es un aviso a los otros posibles bus masters
presentes en el bus de que, mientras esta línea se encuentre asertada no pueden
solicitar el bus a través de la activación de otra señal llamada hold. Veremos
estos procesos con más detalle en párrafos posteriores de este mismo capítulo.
Por ahora, nos quedaremos con la idea de que los siguientes tres ciclos de bus,
en determinadas circunstancias, podrían ser interrumpidos.
BUS i386EX II. ©1999, José M Foces Morán -- 23
Paginación de documento completo:
68
Estado T1
Fase 1 (ph1)
Estado T2
Fase 2 (ph2)
Ciclo de bus mínimo
clk2
Ciclo de bus mínimo
ph2
#ads
#ready
D0:15
--00h
817fh
4b--h
w/#r
d/#c
m/#io
A1:25
Dirección de memoria
(word)
4
Dirección de memoria
(word)
3
Dirección de memoria
(word)
2
#ble
#bhe
ciclo de bus 1
ciclo de bus 2
ciclo de bus 3
Figura 18. Temporización de los tres ciclos seguidos (back-to-back)
correspondientes a la instruccion mov eax, [5]
BUS i386EX II. ©1999, José M Foces Morán -- 24
Paginación de documento completo:
69
El bus del microprocesador i386ex (Parte 3).
Ciclos de bus especiales del i386EX.
Los ciclos de bus que hemos estudiado hasta este momento constituyen el
conjunto básico de ciclos de bus del microprocesador i386EX. Además, otros
tipos de ciclos permiten que este procesador pueda integrarse en sistemas de
tiempo real gracias a los procesos de interrupción, ejecutar instrucciones
especiales de detención del procesador y compartir el bus con otros dispositivos
capaces de controlarlo (bus masters). En el siguiente cuadro resumiremos los
tipos de ciclos de bus del i386EX.
Ciclos de bus del i386EX
Básicos
Especiales
byte
word
dword
alineados
desalineados
Lectura
Datos
Memoria
Escritura
Instrucciones
i/o
Datos
Memoria
i/o
Figura 1. Los tipos de ciclos de bus básicos del i386EX.
BUS i386EX III. ©1999, José M Foces Morán -- 1
Paginación de documento completo:
70
™ EL CICLO DE BUS DE RECONOCIMIENTO DE INTERRUPCIÓN.
Una interrupción es el proceso por el cual un evento en el exterior del
procesador provoca que éste abandone temporalmente el flujo de ejecución de
instrucciones actual y salte a otro programa al cual denominamos rutina de
servicio de interrupción (En Inglés Interrupt Service Routine, ISR). Al ejecutar la
isr, el microprocesador pone en marcha los mecanismos que tratan la situación
representada por el evento, la cual es considerada excepcional, creada por la
interrupción. Cuando estos procesos han sido iniciados con fiabilidad, el
microprocesador puede retornar al contexto de programa abandonado y
continuar su ejecución.
tiempo
programa en
ejecución
rutina de
servicio (isr) #1
iret
rutina de
servicio #2
iret
rutina de
servicio #3
iret
Interrupción #1
Interrupción #2
Interrupción #3
Figura 2. El concepto de interrupción y de rutina de servicio de interrupción
(isr).
El núcleo computacional SX posee una capacidad muy limitada de interrupción,
tan sólo una línea de interrupción llamada intr. Por esta razón, este
microprocesador es complementado mediante un circuito capaz de capturar un
número mayor de interrupciones y multiplexarlas todas ellas a través del único
canal de interrupción presente en el microprocesador, esto es, la línea intr. Este
elemento es conocido como ICU (Interrupt Control Unit, Unidad de Control de
Interrupciones) y, el i386EX contiene dos ICU’s. Claramente, cuando uno de los
BUS i386EX III. ©1999, José M Foces Morán -- 2
Paginación de documento completo:
71
icu recibe una interrupción, éste activa la línea intr del núcleo computacional y
entonces, el microprocesador responde al icu de una forma preestablecida:
solicitándole cual es el vector correspondiente a la interrupción que ha tenido
lugar. Este vector contiene la toda la información que necesita el núcleo para
saltar a la isr correspondiente. Esta secuencia de operaciones en las que el
núcleo y el icu intercambian información a través del bus se conoce como ciclo
de bus de reconocimiento de interrupción. El estudio detallado del funcionamiento
del icu lo trataremos en la práctica dedicada al bus ISA, el canal serie y las
interrupciones. En esta sección sólo estamos interesados en comprender este
ciclo de bus, en el cual, el objetivo consiste en entregar al núcleo el número de
vector de interrupción correspondiente a la interrupción que ha tenido lugar.
Para que el procesador atienda las interrupciones que le son entregadas a través
de su patilla intr, es necesario que el bit IF del registro FLAGS tenga un valor 1,
esto es, que la recepción de interrupciones mascarables (patilla intr) esté
habilitada. La instrucción que pone este bit a 1 es sti y, cli lo borra. Suponiendo
que IF es 1 y que intr está activada porque un ICU la ha activado, cuando el
procesador, inmediatamente después de terminar la instrucción que esté
ejecutando ahora mismo, muestrea intr activada, comienza el proceso de
aceptación (reconocimiento) de interrupción el cual consiste en los siguientes
pasos1:
1. Primer ciclo de bus de iack (Interrupt ACKnowledge).:
a. Se inicia con #ads activa y el siguiente conjunto de señales de
definición de ciclo de bus: m/#io, d/#c y w/#r en 0
b. #lock en 0: el núcleo se apropia del bus impidiendo que otros bus
master puedan solicitarlo.
c. La dirección de byte es 4.
d. El bus de datos está flotante.
e. Puesto que la unidad ICU es un periférico interno del i386EX, ella
misma será capaz de generar #ready. En sistemas basados en
microprocesadores no-empotrados donde el controlador de
interrupciones es un chip externo, posiblemente formando parte
de un chip set, el decodificador de direcciones será el encargado
de generar #ready.
2. El procesador introduce ahora cuatro ciclos idle seguidos.
3. Nuevo ciclo de bus de iack.
a. Se inicia con #ads activa y el siguiente conjunto de señales de
definición de ciclo de bus: m/#io, d/#c y w/#r en 0
1
Si buscáis mas detalles en este proceso, consultad la práctica sobre interrupciones y bus ISA.
BUS i386EX III. ©1999, José M Foces Morán -- 3
Paginación de documento completo:
72
b. #lock en 0: el núcleo se apropia del bus impidiendo que otros bus
master puedan solicitarlo.
c. La dirección de byte es 0.
d. El ICU que capturó la interrupción calcula el número de vector
que le corresponde y lo escribe en el bus de bus de datos de forma
que el núcleo pueda leerlo al final del ciclo.
e. Puesto que la unidad ICU es un periférico interno del i386EX, ella
misma será capaz de generar #ready. En sistemas basados en
microprocesadores no-empotrados donde el controlador de
interrupciones es un chip externo, posiblemente formando parte
de un chip set, el decodificador de direcciones será el encargado
de generar #ready.
Estado T1
Fase 1 (ph1)
Estado T2
Fase 2 (ph2)
Ciclo de bus mínimo
clk2
Ciclo de bus mínimo
ph2
#ads
#ready
número
de
vector
D0:15
w/#r
d/#c
m/#io
A1:25
Dirección de memoria
(word)
2
2
#ble
#bhe
#lock
ciclo de bus
iack 1
4 ciclos
idle
ciclo de bus
iack 2
Figura 3. Temporización de los ciclos de reconocimiento de interrupción (iack).
BUS i386EX III. ©1999, José M Foces Morán -- 4
Paginación de documento completo:
73
™ CICLOS DE BUS HALT Y SHUTDOWN.
La instrucción hlt hace que el microprocesador i386EX deje de ejecutar
instrucciones, a este estado se le conoce como estado halt. El procesador puede
volver a ejecutar instrucciones si se le provoca una interrupción NMI (una
interrupción no mascarable que usa una patilla específica llamada nmi), una
interrupción intr o un reset. La instrucción hlt es, por supuesto, una instrucción
privilegiada, así que, si el procesador está ejecutando en modo protegido, la
rutina que ejecute hlt debe poseer un nivel de privilegio 0.
El estado de shutdown es muy parecido al de halt, la diferencia es que shutdown
tiene lugar a causa de que el procesador ha recibido una excepción mientras
estaba procesando otra y además en el procesamiento de la segunda, se ha
encontrado con un error de protección. El procesador no puede recuperarse de
esta circunstancia, así que procede a abandonar la ejecución de instrucciones,
algo equivalente a la ejecución de la instrucción hlt.
Externamente, los estados halt y shutdown presentan un aspecto bastante
similar. La secuencia de señales correspondiente a la ejecución de la instrucción
hlt es la siguiente:
1. #ads está activa.
m/#io y w/#r están en estado 1.
d/#c está en estado 0.
El bus de direcciones y los byte enables forman una dirección de byte 2
(halt) o de 0 (shutdown).
2. #ready puede ser generada internamente gracias a una programación
especial de la unidad de gestión de reloj y potencia. Si #ready se
genera externamente, deben añadirse wait states.
™ EL CICLO DE BUS DE REFRESCO DE DRAM’S.
En la introducción de este capítulo donde dimos la lista de bloques funcionales
incluidos en el microprocesador i386EX, vimos que este microprocesador
contiene casi toda la lógica necesaria para producir el refresco de las memorias
dinámicas. Ciertamente, la unidad RCU (Refresh Control Unit) simplifica el
diseño del controlador de memoria. La unidad RCU contiene sus registros
específicos y, también genera un ciclo de bus específico de refresco. En este
apartado estudiaremos el cronograma del ciclo de bus de refresco. En el
BUS i386EX III. ©1999, José M Foces Morán -- 5
Paginación de documento completo:
74
capítulo dedicado al desarrollo de software para sistemas empotrados
estudiaremos con más detalle la estructura de registros de la RCU (Estudio del
caso de la placa de evaluación de Intel EV386EX).
El ciclo de bus de refresco transcurre mediante la secuencia de señales
siguiente:
1. Activación de #ads.
•
m/#io y d/#c toman valor 1.
•
d/#c y #refresh toman valor 0.
•
#bhe y #ble ambos 1.
•
A1:25 representan la dirección de word contenida en el
registro RAC (Contador de dirección de refresco,
Refresh Address Counter).
2. El ciclo termina como cualquier ciclo de bus, mediante la activación de
#ready. Esta activación puede obtenerse externamente o internamente
empleando la CSU (Chip Select Unit).
BUS i386EX III. ©1999, José M Foces Morán -- 6
Comentario [N1]: w/#r
Paginación de documento completo:
75
Estado T1
Fase 1 (ph1)
Estado T2
Fase 2 (ph2)
Ti
idle
Ciclo de bus mínimo
clk2
Ti
idle
Ciclo de bus mínimo
ph2
#ads
#ready
datos
estables
D0:15
indefinido
alta Z
w/#r
d/#c
m/#io
A1:25
2
#ble
#bhe
ciclo de bus
cualquiera
ciclo de bus
haltshutdown
La CPU
permanece en
este estado
hasta recibir
intr, nmi o
reset
Figura 4. Temporización del ciclo de bus de halt-shutdown.
Es crucial que el refresco de las memorias se produzca lo antes posible,
recordaremos que el periodo de refresco es de unos 4ms, si no se respeta este
tiempo máximo, las memorias dinámicas pueden sufrir corrupción de datos,
por tanto, en caso de que el bus esté siendo usado por un determinado bus
master, es esencial que el árbitro del bus (Bus arbiter) conceda el bus ante una
petición de la RCU lo antes posible. La RCU es el bus master con mayor
prioridad. El nivel de detalle adecuado acerca del arbitraje del bus durante los
ciclos de refresco puede encontrarse en el manual de usuario del
microprocesador i386EX.
BUS i386EX III. ©1999, José M Foces Morán -- 7
Paginación de documento completo:
76
Estado T1
Fase 1 (ph1)
Estado T2
Fase 2 (ph2)
Ciclo de bus mínimo
T1
clk2
T2
Ciclo de bus mínimo
T2
ph2
#ads
#ready
datos
estables
D0:15
alta Z
w/#r
d/#c
m/#io
Dirección de la word que se va a
refrescar
A1:25
#ble
#bhe
#refresh
ciclo de bus
cualquiera
ciclo de bus
de refresco
ciclo de bus
cualquiera
Figura 5. Ciclo de bus de refresco
™ EL BUS DEL I386EX ES UN RECURSO COMPARTIDO.
El bus del i386Ex puede verse como un medio de comunicación compartido
entre varias unidades funcionales internas del microprocesador y, posiblemente
también, varias unidades externas. El procesador contiene un circuito que
arbitra la concesión del bus a las unidades funcionales que lo soliciten,
empleando un protocolo. Este protocolo emplea las líneas hold y hlda. Los
masters internos del procesador son los posibles peticionadores del bus y son
estos:
•
Unidad de refresco de memorias dinámicas (RCU)
BUS i386EX III. ©1999, José M Foces Morán -- 8
Paginación de documento completo:
77
•
Núcleo (core) computacional SX.
•
Controlador de DMA interno 1 (DMA, Direct Memory
Access, Controlador de acceso directo a memoria).
•
Controlador de DMA interno 2.
Cuando el árbitro del bus interno recibe una petición de bus a través de una de
las cuatro posibles líneas de petición, aserta la línea HOLD del núcleo. El
núcleo, entonces, termina el posible ciclo de bus no-bloqueado que está
ejecutándose ahora y, cuando esto ha ocurrido, aserta su línea HLDA
informando al árbitro del bus de que ya puede asertar su línea hlda y así
informar al solicitante de que tiene el bus.
i386EX
Unidad de
refresco de
memorias
dinámicas RCU
HOLD
Árbitro
del Bus
HLDA
Núcleo
microprocesador
na#
i386 SX
Cola de
prerrecojida de
instrucciones
Unidades de
Ejecución
Controlador de
DMA, acceso
directo a memoria
bs8#
r eady#
Unidad de
control del
bus
(Bus
Interface
Unit,
BIU)
ads#
w/ r #
m
/ i o#
d/ c#
l ock#
Wor d Address Bus
1- 25
bl e#
bhe#
Dat a Bus
0- 15
Figura 6. El bus arbiter arbitra el acceso al bus por parte de elementos externos y
unidades funcionales internas del procesador.
Esquema de aspectos acerca de la temporización de hld y hlda. La señal hold
del i386EX es asíncrona con respecto a clk2. El microprocesador responde así
ante hold activa:
BUS i386EX III. ©1999, José M Foces Morán -- 9
Paginación de documento completo:
78
•
Termina el ciclo de bus actual
•
Des-aserta #wr, #rd, #smiact, #ucs, #cs6:0 y #refresh y
pone en tri-estado el resto de salidas excepto hlda.
•
Aserta hlda, esto significa que el solicitante ya tiene el
bus y por tanto puede comenzar a introducir ciclos de
bus inmediatamente.
El elemento que ha solicitado el bus debe mantener hold activa durante tantos
ciclos como le resulte necesario poseer el bus. Cuando el solicitante termina de
usar el bus, des-aserta hold y, en respuesta a esto, el microprocesador des-aserta
hlda. Ahora el microprocesador vuelve a tener el bus, la unidad funcional
interna que lo va a usar será la elegida por el árbitro: probablemente un ciclo de
refresco o un ciclo de bus solicitado por el núcleo (la lectura de una instrucción
o algún ciclo de bus de lectura/escritura de memoria o i/o) o, por último, una
transferencia vía DMA que aún pudiera estar pendiente).
Dada la naturaleza urgente que tiene el refresco de las memorias dinámicas,
cuando el microprocesador ha concedido el bus a un master externo y recibe
una petición de refresco, puede hacer que la señal hlda pase a estado inactivo,
en cuyo caso, el master puede o puede no desactivar hold. Si ocurre lo último,
podrían corromperse datos en las memorias dinámicas, por tanto, para
garantizar un funcionamiento fiable del computador, será necesario diseñar los
bus masters externos de forma que si sensan hlda desacertada, cedan el bus
inmediatamente al i386EX.
Si el núcleo está en posesión del bus y se produce una solicitud, el núcleo no le
indica al árbitro que puede conceder el bus, hasta que ha terminado el ciclo de
bus actual.
Cuando el núcleo no está en posesión del bus, aún es posible la ejecución de
instrucciones directamente desde la cola de anticipación, particularmente si las
instrucciones allí presentes no solicitan ningún ciclo de bus de lectura –posible.
Si las instrucciones presentes en la cola solicitan un solo ciclo de escritura,
entonces, gracias al write buffer (Cola de escrituras anticipadas que es de
profundidad 1, pero que, además del dato a escribir, guarda también la
dirección del mismo), no será necesario detener el flujo de ejecución de
instrucciones durante el tiempo en que el núcleo no esté en posesión de bus.
™ CICLOS DE BUS INDIVISIBLES –SEÑAL #LOCK.
Los sistemas basados en el microprocesador i386EX pueden contener otros
dispositivos bus master. Estos dispositivos pueden solicitar el bus y,
consiguientemente, usarlo para introducir sus propios ciclos de bus.
BUS i386EX III. ©1999, José M Foces Morán -- 10
Paginación de documento completo:
79
La actualización de variables del tipo semáforo ha de hacerse de forma que la
lectura-modificación-y-escritura transcurran como operaciones secuenciales
indivisibles; si no es así, estas variables pueden tomar valores incorrectos,
valores que no se corresponderían con el estado verdadero del recurso para el
que fueron pensadas. Una de las maneras en que puede garantizarse la
actualización correcta de las variables semáforo es haciendo que el hardware
subyacente pueda garantizar el acceso exclusivo a las celdas de memoria que
contienen el valor de la variable semáforo. En un sistema basado en el i386EX,
la serie de operaciones r(read)-m(modify)-w(write), puede no producirse de
forma indivisible si, por ejemplo, en medio de r-m, otro bus master solicita el
bus y le es concedido. Para garantizar la atomicidad de las operaciones r-m-w, el
bus del i386EX contiene una señal llamada #lock, que, cuando está asertada,
indica al resto de bus masters que el bus no puede ser solicitado. De esta forma,
ningún bus master asertará hold. Además, mientras #lock esté asertada, el
procesador no reconoce la activación de hold.
Hay ciertas instrucciones que, cuando son ejecutadas por el i386EX, activan
#lock automáticamente, como por ejemplo:
•
la instrucción xchg en el formato reg-mem o mem-reg.
•
La actualización de descriptores de memoria (en modo
protegido).
•
Ciclos de reconocimiento de interrupciones (Vistos
anteriormente en este mismo capítulo).
Si el programador desea forzar a que una instrucción genere ciclos indivisibles
puede usar el prefijo de instrucción llamado lock. No todas las instrucciones
garantizan la activación de lock en respuesta al prefijo, pero sí algunas de ellas.
En el ejemplo siguiente, el programador desea forzar r-m-w atómico en el
incremento de una variable que reside en memoria:
lock inc dword ptr fs:[bx+si]
Temporización de la señal #lock. #lock permanece activada desde el primer
flanco de clk2 perteneciente a la secuencia de ciclos indivisibles hasta el
momento en que la señal #ready es muestreada asertada. El tiempo máximo
que #lock puede estar asertada será de unos 9 ciclos de bus más 15 pulsos de
clk2. Esta situación sólo es posible en el tratamiento de interrupciones en modo
protegido.
BUS i386EX III. ©1999, José M Foces Morán -- 11
Paginación de documento completo:
80
™ LOS CICLOS DE BUS SOBRE DISPOSITIVOS O MEMORIA QUE POR DISEÑO POSEEN UN
ANCHO DE 8 BITS.
Al estudiar el bus del i386EX y, mas concretamente, su bus de direcciones,
mencionamos que éste siempre contiene el número de word direccionada en la
memoria. Esto está ocasionado por el hecho de que el bus es de 16 bits: la
memoria será un dispositivo de 16 bits. Sin embargo, hay dispositivos que en su
diseño original presentan un ancho de 8 bits solamente y, no tiene sentido
cablear dos en paralelo para formar un bus de 16 bits.
Podemos imaginar un dispositivo de comunicaciones serie que, por simplicidad
de su diseño, ha sido provisto de un bus de sólo 8 bits: el dispositivo, cuando se
comunica con los elementos externos a los que está conectado, traduce cada
dato recibido en formato serie a un byte que será posteriormente enviado al
host (el microprocesador probablemente). En este caso, si conectásemos dos
dispositivos en paralelo para formar un bus de 16 bits, uno de ellos, estaría sin
conexión serie, no tendríamos fuente ni destino de datos para él: no tiene
sentido formar el bus de 16 bits a base de dos dispositivos de 8. La pregunta
ahora es ¿Cómo conectar un dispositivo de 8 bits de ancho al microprocesador
i386EX?
La señal #bs8 de entrada al i386EX. Para permitir la conexión de dispositivos
de 8 bits al bus de 16 del i386EX, el microprocesador incorpora una señal
llamada #bs8 que, cuando se activa, indica al procesador que el dispositivo es
de 8 bits de ancho y que por tanto, no puede utilizar la ruta de datos superior
en ningún acceso al dispositivo, ya sea en transacciones mono-byte o multibyte.
El decodificador de direcciones será el encargado de activar #bs8 al principio de
cada ciclo de bus cuya dirección de memoria se corresponda con una zona que
está implementada con dispositivos de ancho 8 bits. Los dispositivos de ancho 8
bits pueden ser tanto memoria como dispositivos de i/o. Sí tiene sentido
utilizar zonas de memoria conectadas al microprocesador vía una interfaz de 8
bits: el cableado, sobre todo en prototipos, será notablemente más sencillo.
Cuando el i386EX inicia un ciclo de bus y, en el estado T2 muestrea #bs8
activada, generará la secuencia y número de ciclos de bus adecuada, coherente
con la semántica de la instrucción que se esté ejecutando. Del mismo modo que,
con un ancho de bus de 16 bits, fuimos capaces de efectuar transacciones que
involucraban datos de tipo dword y datos desalineados, también con un
esquema de bus de 8 bits, el i386EX puede realizar las mismas transacciones.
BUS i386EX III. ©1999, José M Foces Morán -- 12
Paginación de documento completo:
81
El bus de 8 bits del i386EX está formado por los siguientes elementos:
•
La ruta inferior del bus de datos ( d0:7).
•
El byte enable de esta ruta, #ble.
•
El bus de direcciones de byte:
ƒ
El bus de direcciones de words a25:1
ƒ
La línea a0 que coincide con #ble.
Ciclos de escritura. En los ciclos que siguen se supone que en T2 la señal #bs8
ha sido muestreada activa.
•
Si el ciclo de bus actual es de ancho un byte con #bhe
activa y #ble inactiva, el procesador copia el byte
contenido en la ruta alta, d8:15, a la ruta baja d0:7. Es
necesario que el procesador se comporte de este modo
pues su única vía de conexión con el dispositivo es la
ruta baja y, al principio del ciclo de bus de escritura, el
microprocesador aún no sabe que la dirección de
memoria formada corresponde con un dispositivo de 8
bits.
•
Si el ciclo de bus actual es de un byte de ancho con
#bhe inactiva y #ble inactiva, no es necesario tener en
cuenta el estado de #bs8 porque el ciclo es ya de 8 bits
de ancho y esos 8 bits se van a entregar a través de la
ruta de conexión activa, d0:7.
•
Si el ciclo de bus actual es de ancho una word con #bhe
y #ble activas y el procesador muestrea #bs8 activa en
T2 (cuando #ready es muestreada activa), el procesador
espera a que este ciclo termine y, seguidamente ejecuta
otro ciclo de bus con los 8 bits superiores, d8:15
copiados a la ruta inferior del bus de datos, d0:7,
desactivando en este segundo ciclo #ble, esto es , el
primer ciclo transcurre con la [inexistente] línea A0 a
valor 0 y el segundo con A0 a valor 1.
Ciclos de lectura. En los ciclos que siguen se supone que en T2 la señal #bs8 ha
sido muestreada activa.
•
Si el ciclo actual es de ancho un byte con #bhe activa y
#ble inactiva, el procesador registra en un latch de
entrada no arquitecturado el dato entregado a través de
d0:7 e internamente, a través de la red de intercambio
de bytes, lo enruta hacia la posición alta en su registro
de destino.
BUS i386EX III. ©1999, José M Foces Morán -- 13
Paginación de documento completo:
82
•
Si el ciclo de bus actual es de ancho un byte con #bhe
inactiva y #ble activa, lo mismo que en el ciclo de
escritura, el estado de #bs8 es ignorado.
•
Si el ciclo actual es la lectura de una word que presenta
ambos #bhe y #ble activos, el procesador termina el
ciclo actual registrando en el latch superior no
arquitecturado el dato leído desde la ruta d0:8,
seguidamente, ejecuta otro ciclo de bus con #ble
inactiva y registra el dato leido en el latch inferior. Al
final, ambos latches son transferidos directamente al
registro arquitecturado de destino.
Los ciclos de bus sobre dispositivos de ancho 8 bits, necesarios para satisfacer la
lectura o la escritura de una dword transcurren de forma similar, teniendo en
cuenta que los ciclos de 16 bits se descomponen en ciclos de 8 bits seguidos y,
que la única ruta de comunicación con el procesador es la ruta d0:7 del bus de
datos. Propuesta: estudiar con detalle el flujo de operaciones de bus necesarias
para completar la lectura y la escritura de una dword que reside en
2. La dirección de byte 0.
3. La dirección de byte 1.
4. La dirección de byte 2.
Funcionando con el bus de 16 bits ¿Por qué razón el orden temporal que siguen
los ciclos de bus correspondientes a una dword desalineada siempre empieza
con la dirección de word más alta? Pista: Tiene que ver con el instante preciso
en el que el procesador muestrea de #bs8.
BUS i386EX III. ©1999, José M Foces Morán -- 14
Paginación de documento completo:
83
Estado T1
Fase 1 (ph1)
Estado T2
Fase 2 (ph2)
Ciclo de bus mínimo
clk2
ph2
#ads
#ready
datos
hacia el
bus (sup)
D0:7
datos
procedentes
del bus (inf)
datos
hacia el
bus (inf)
datos
procedentes
del bus (sup)
w/#r
d/#c
v á l i d o
m/#io
v á l i d o
v á l i d o
A1:25
#bhe
#ble
#bs8
Escritura
del byte
bajo
Escritura
del byte
alto
Lectura
del byte
alto
Lectura
del byte
bajo
Figura 7. Ciclos de 16-bits sobre un dispositivo de 8 bits (Usando #bs8).
Ciclos de bus del i386EX
Básicos
byte
word
dword
alineados
Especiales
Dynamic bus size
8
16
Refresco
Reconocimiento
de interrupción
halt
shutdown
desalineados
Lectura
Datos
Memoria
Escritura
Instrucciones
i/o
Datos
Memoria
i/o
Figura 8. Los tipos de ciclos de bus conocidos hasta el momento.
BUS i386EX III. ©1999, José M Foces Morán -- 15
Paginación de documento completo:
84
El bus del i386EX
Reloj externo, clk2
Reloj del procesador
clkout
Bus de direcciones
25 bits
Unidireccional
Bus de datos
16 bits
bidireccional
A0:7
A8:15
Byte enables
#ble
#bhe
Definición de ciclo de bus
w/#r m/#io d/#c #refresh
Inicio de ciclo de bus
#ads
Fin del ciclo de bus
#ready
#bs8
(intr)
irqXX
#cs0:7
#ucs
hold
hlda
#lock
Figura 9. La parte del bus conocida hasta el momento.
BUS i386EX III. ©1999, José M Foces Morán -- 16
Paginación de documento completo:
85
Memorias dinámicas (DRAM).
Tipos de memorias empleadas en el diseño de sistemas empotrados.
Antes de estudiar con detalle la unidad BIU (Bus Interfaz Unit) del
microprocesador i386EX resulta conveniente conocer cuales son los tipos de
memorias más usadas en el diseño de sistemas empotrados. La unidad BIU es el
medio por el cual el núcleo computacional SX y el resto de periféricos incluidos
en el i386EX se comunican de una forma ordenada, previsible y segura con la
memoria y el resto de elementos de entradas/salidas añadidos externamente.
El subsistema de memoria de un computador contiene los datos y las
instrucciones que forman parte de los programas que se ejecutan en él.
Conceptualmente está claro el propósito de este subsistema y no sería difícil
realizar un diseño a nivel de bloques que fuese cómodo, flexible, potente y fácil
de integrar en el bus del microprocesador. ¿Por qué conceptualmente fácil?
Porque de hecho, los dispositivos de memoria disponibles pueden tener un alto
coste cuando se exige cierta facilidad de uso y para mantener los costes bajos
quizás haya que recurrir a tecnologías más baratas a cambio de una mayor
complejidad.
En esta sección estudiaremos ciertos aspectos tecnológicos relativos a las
diferentes clases de memorias. Estos aspectos nos permitirán comprender mejor
sus modelos funcionales y, así, podremos diseñar pequeños sistemas de
memoria adecuados al bus y otras facilidades del i386EX.
Comencemos por un tipo de memoria de acceso aleatorio, volátil que constituye
el bloque constructivo básico de los sistemas de memoria principal de
prácticamente cualquier computador: las memorias dinámicas, DRAM.
Memorias DRAM. ©1999, José M Foces Morán -- 1
Paginación de documento completo:
86
Las memorias dinámicas DRAM- Dynamic Random Access Memory.
Por supuesto, estas memorias son memorias realizadas con semiconductores.
La célula básica de memoria dinámica, capaz de almacenar un bit de
información, está basada en un condensador: cuando el condensador está
cargado la información que contiene la celda es un 1, cuando el condensador
posee mucha menos carga que cuando está cargado del todo, la información
contenida es un 0.
El acceso a la celda de memoria DRAM se lleva a cabo a través del canal de un
transistor MOS: cuando el canal está cerrado, la diferencia de tensión entre las
bornas del condensador se propaga hacia el exterior y, por tanto, puede usarse
para excitar a un determinado elemento de entrada. El problema es que ese
elemento de entrada a pesar de su alta impedancia sensará la tensión en bornas
del condensador con la resistencia del canal en serie además de su propia
impedancia, esto, forzará una pequeña corriente que, al final, descargará el
condensador y hará que éste pierda la información almacenada. Esta celda de
memoria puede leerse como hemos visto, pero las lecturas son destructivas,
hacen que el condensador pierda casi toda la carga necesaria para una lectura
posterior del mismo dato, por tanto, será necesario regenerar el 1 –o el 0- antes
de que se pierda. A este proceso de regeneración de la carga presente en el
condensador de la celda DRAM se le conoce con el nombre de refresco. El
gráfico que sigue, la celda básica DRAM, puede ayudarnos a comprender mejor
el proceso.
Memorias DRAM. ©1999, José M Foces Morán -- 2
Paginación de documento completo:
87
Comentario [N1]: Error al
escribir AMPLIFICAR en la parte
izquierda la parte del medio (color
naranja)
C
S
Fil
a
Número de
palabra
Esta línea permite
el acceso a la puerta
(gate) de S y así
poder controlar el
canal de S.
En esta línea aparece el bit
almacenado en C cuando el
transistor S tiene su canal
cerrado
Este amplificador es sensible
a la carga de C. Es el
encargado de apmplificar la
potencia del 0 o del 1 hacia el
bus externo.
0
0
dn
#cs
0
0
w/#r
Interfaz
con el bus
Columna
Este amplificador excita la
linea roja siguiendo un
patrón de niveles/tiempo
adecuado a las características
del condensador.
Figura 1. Celda básica de una memoria DRAM
La interfaz de la celda de memoria con el bus externo se compone de las
siguientes señales:
1. Una línea de datos. En los ciclos de lectura, el dato leído procedente de
la celda de memoria aparece en esta línea llamada dn. En los ciclos de
escritura, el procesador pone el dato en esta línea para que la memoria
lo lea a continuación.
2. Una línea llamada cs o chip select. Esta línea sirve para activar el chip en
el que se encuentra la celda que se desea usar en el ciclo actual. Más
tarde, cuando veamos los chips y módulos de memoria, quedará más
claro el propósito de esta línea. Por ahora basta decir que esta línea ha
de estar activa si deseamos producir lecturas y escrituras sobre la celda
recién explicada, perteneciente a un determinado chip de memoria de
nuestro sistema. Puesto que el nombre de la línea, #cs, viene
Memorias DRAM. ©1999, José M Foces Morán -- 3
Paginación de documento completo:
88
acompañado del símbolo de nivel de aserción bajo, el chip se
selecciona forzando un nivel bajo (0) en esta línea.
3. Una línea llamada w/#r: Un 1 en esta línea indica que el ciclo presente
es de escritura (write), es decir, que el dato presente en la línea dn va a
ser transferido a la celda de memoria. Un 0 en esta línea indica que el
ciclo es de lectura y que, por tanto, el dato contenido en la celda va a
ser transferido al exterior a través de la línea dn.
La lógica digital (La circuitería digital) que activa los buffers tri-estado de
lectura y escritura corresponde con el esquema de funcionamiento explicado en
los tres puntos anteriores y su diseño es directo.
Veamos el proceso de escritura con más detalle. Para escribir un valor 0 o 1 en
la celda es necesario que este bit aparezca en la línea de datos dn en primer
lugar, posteriormente se tiene que asertar la línea de selección de fila y, un
cierto tiempo más tarde, el condensador se cargará (o se descargará) al valor
representado por dn. El tiempo de esta escritura incluye el tiempo de activación
de las puertas lógicas de entrada, el tiempo de reacción de los amplificadores de
escritura, el tiempo de conmutación del transistor de acceso (también llamado
transistor de paso) y por último el tiempo de carga del propio condensador, el
cual, dependerá de la tensión de excitación procedente del amplificador de
escritura y de su capacitancia.
Ahora veamos el proceso de lectura. Para leer un valor almacenado en la celda,
en primer lugar el amplificador sensible precarga la línea de bit (columna) a un
valor de tensión aproximadamente igual a Vcc/2. Ahora se aserta la línea de
selección de palabra (fila), esto provoca el cierre del canal del transistor de
acceso lo que, a su vez, fuerza a que el nivel presente en el condensador
aparezca en la línea de datos (columna). El amplificador sensible toma ese valor
y lo amplifica, entonces el dato ya se encuentra presente en un formato
eléctricamente compatible con las puertas lógicas de acceso al exterior. Ahora el
dato puede “salir” al bus y su información puede ser empleada para excitar a
los elementos conectados -el microprocesador.
En el proceso de lectura ha aparecido un problema –grave. La lectura ha
implicado la descarga del condensador y, por tanto, la destrucción de la
información allí almacenada de forma que es necesario recargar esa
información inmediatamente. Los amplificadores sensibles y de escritura
contienen la lógica necesaria para regenerar el contenido del condensador
recién leído de forma automática: el valor sensado y amplificado es puesto de
nuevo en la columna de dato y empleado para volver a escribirlo dentro del
condensador. A este proceso se le conoce como refresco y, como hemos visto, es
inherente a toda lectura, por tanto, la lectura de una celda de memoria dinámica
implica su refresco automático. Este refresco automático es esencial para lograr
una celda útil y fiable. ¿Cuál es la desventaja, además de la complejidad del
circuito integrado? ¡El tiempo! Además del tiempo de lectura del dato
solicitado incurrimos un tiempo adicional, en el cual, el chip no está disponible
Memorias DRAM. ©1999, José M Foces Morán -- 4
Paginación de documento completo:
89
para lecturas ni escrituras, esto, como veremos, afecta al ancho de banda
efectivo usable de una memoria.
El refresco de las celdas tiene todavía una componente más que debemos tener
en cuenta. El condensador C tiene unas pérdidas como todo condensador,
típicamente podemos decir que en 4 ms pierde por completo su carga. Para
lograr que no pierda la información almacenada es necesario que con una
periodicidad inferior a 4ms se refresque el contenido de cada condensador. Este
requerimiento complica el diseño de sistemas de memoria basados en DRAM
porque será necesario incluir un elemento que lleve la cuenta de qué fila tiene
que ser refrescada y el tiempo máximo que puede transcurrir antes del refresco.
A este elemento dentro del sistema microprocesador se le conoce con el término
controlador de memoria. El microprocesador i386EX contiene un contador de filas
y un temporizador especialmente dedicados al refresco de las memorias
dinámicas. La unidad del EX dedicada al refresco se llama RCU (Refresh
Control Unit).
¿Son tan importantes las memorias dinámicas como para que el EX integre su
lógica de control? Ciertamente, las memorias dinámicas, en una gran variedad
de formatos, funcionalidades, potencias y rendimientos, constituyen el medio
más barato que existe de diseñar los sistemas de memoria principal de los
computadores modernos. Los chips de memoria dinámica poseen un nivel de
integración y un precio que, aunque sea necesario incluir un controlador
específico que complica el diseño notablemente, aún resultan muy convenientes
en comparación con otras tecnologías como las memorias SRAM en sus
diversas formas. La figura siguiente ilustra la cuota de mercado que
corresponde al uso de memorias DRAM en sistemas computadores desde el
año 1992 al 2000: claramente, 2/3 de las memorias usadas son memorias
DRAM.
En el diseño de sistemas empotrados las memorias DRAM juegan un papel de
importancia parecida al del mercado general. Los sistemas empotrados
modernos requieren memorias principales amplias y con gran ancho de banda a
causa de los procesamientos de datos numéricos de alto grado de complejidad
empleados. Las tarjetas de bus VME de alto rendimiento incorporan
microprocesadores Pentium y procesadores RISC de alto rendimiento que son
en todo similares a los empleados en la estaciones de trabajo de ingeniería.
Memorias DRAM. ©1999, José M Foces Morán -- 5
Paginación de documento completo:
90
Porcentaje de uso de DRAMs
2000
Año
1997
1994
1991
1988
1985
1982
0
20
40
60
80
Porcentaje
Figura 2. Cuota de mercado de las memorias DRAM (Fuente: Dataquest).
Los computadores empotrados basados en tarjetas de bus VME, históricamente
han sido usados en aplicaciones militares como el cálculo de órbitas de satélites
y trayectorias de misiles. Hoy en día se emplean como nodos de computadores
de procesamiento paralelo masivo que actúan como supercomputadores de
bajo coste. Las cantidades de memoria y las características exigidas por este tipo
de computadores son de una magnitud comparable a las de las workstations y
PCs de alto rendimiento.
Pero ¿Cómo se organiza la conexión de las celdas de memoria DRAM al bus de
un microprocesador como el EX? Obviamente, la organización de la celda vista
no es suficiente para conectarse al bus mencionado y construir así un sistema de
memoria principal. En la sección que sigue vamos a estudiar cómo se organiza
una memoria real que posibilite una conexión reproducible y flexible a
cualquier tipo de bus de microprocesador.
™ LA ORGANIZACIÓN DE UN CHIP DE MEMORIA DINAMICA.
El diseño de los chips de memoria dinámica, al igual que el resto de chips
comerciales, está condicionado por una serie de límites que tienen que ver con
aspectos económicos, productivos, de tasa de defectos, costes de investigación y
desarrollo, etc. Desde el punto de vista técnico, tradicionalmente, una de los
retos de la integración de estos chips ha sido el número de patillas que ofrecen
Memorias DRAM. ©1999, José M Foces Morán -- 6
100
Paginación de documento completo:
91
al exterior el cual siempre se ha de mantener lo más bajo posible y, también, la
inclusión de la lógica de precarga y refresco.
La forma más común en la que se presentan estos chips consiste en disponer las
celdas formando una matriz de igual número de filas y columnas. Internamente,
la dirección de memoria de un bit de una celda vendrá dada por su dirección de
fila y su dirección de columna. Por tanto, cuando a una memoria le pidamos un
bit que se encuentra en una determinada posición en la matriz, deberemos
proveerle la fila y la columna en la que se encuentra. Teóricamente tendríamos
un número de líneas de entrada a la memoria representando el número de fila y
otro número (en nuestro caso un número igual) representando la columna. Sin
embargo, el esquema desarrollado por los fabricantes consiste en utilizar las
mismas líneas de entrada para representar tanto la fila como la columna donde
se encuentra el dato, pero, si utilizamos las mismas líneas ¿Cómo distingue la
memoria la fila de la columna? La solución consiste en multiplexar en el tiempo
la fila y la columna: utilizar las mismas líneas para representar la fila, en primer
lugar y, en segundo lugar, la columna. Imaginemos una memoria de 1 Mbit,
esta memoria tendría 1024 filas y 1024 columnas y, por tanto, el número de
líneas de entrada para representar fila y columna sería de log2 1024 = 10. Para
efectuar un acceso a una determinada posición de memoria seguiríamos el
siguiente esquema:
1. Formaríamos la dirección su dirección de fila e indicaríamos que esta
dirección de fila está lista a la entrada del chip mediante la aserción de
una línea adicional llamada “fila preparada” (en Inglés Row Address
Strobe). Esta línea suele presentarse con un nivel de aserción bajo, esto
es, su nombre suele ser #ras. El chip ahora almacenaría esta dirección
de fila en un latch interno.
2. Una vez almacenada la dirección de fila, ya se puede formar la
dirección de columna a la entrada del chip y, por tanto, deberemos
indicárselo a través de una línea especialmente dedicada a este efecto:
#cas (Column Address Strobe). La memoria tiene la fila y la columna
listas, así que, a partir de este instante, comienza el acceso al bit
correspondiente. Como hemos explicado anteriormente, el acceso
puede ser de escritura o de lectura.
¿Qué hemos ganado a costa de la complejidad añadida por las líneas #ras, #cas
y el latch de fila? Hemos ahorrado las 10 patillas de columna y, esto es muy
importante ya que esas 10 patillas incrementan notablemente el coste del
empaquetado físico de la memoria y, este empaquetado, cuando se han
amortizado los costes de investigación, diseño e ingeniería del chip en si, es la
parte más costosa del chip final. Esta es la organización de un chip de memoria
dinámica típico.
Memorias DRAM. ©1999, José M Foces Morán -- 7
Paginación de documento completo:
92
Como las direcciones que aparecen en el bus del microprocesador no
representan “filas y columnas”, será necesario convertir la dirección de
memoria del formato índice-secuencial al formato fila-columna. Esta conversión
se efectúa mediante un circuito combinacional. Este circuito no ofrece ninguna
dificultad conceptual, se trata de implementar una tabla de verdad. El problema
con esta tabla es el número de variables de entrada y de salida, ambos muy
grandes. Una de las soluciones consiste en implementar la tabla usando lógicas
programables, por ejemplo, empleando una PLA que tenga la arquitectura y
complejidad adecuadas, capturar la tabla de verdad o función lógica en un
lenguaje de programación como Abel y generar los vectores de programación
del dispositivo.
Dato solicitado en un ciclo #r
Bus de direcciones del sistema microprocesador
CAS#
Latch de índice de
columna
10 bits
Decodificador de
columna
RAS#
10 bits
Decodificador de
fila
1024 Filas
Latch de
índice de
fila
Dataout
1024 Columnas
Celda seleccionada
Figura 3. Ejemplo de organización de un chip de memoria DRAM de 1 Mbit.
Memorias DRAM. ©1999, José M Foces Morán -- 8
Paginación de documento completo:
93
™ TEMPORIZACIÓN DE LOS ACCESOS A LAS MEMORIAS DINAMICAS.
En esta sección estudiaremos con detalle cómo tiene lugar un acceso a una
memoria dinámica a lo largo del tiempo empleando la figura siguiente:
tRAS
tA = Tiempo de acceso
tprecarga
#ras
#cas
Bus de
direcciones
del EX
Bus de
memoria
Row Address
Column Address
w/#r
Bus de
datos
Dato
tc = Tiempo de ciclo
Puesto que la
memoria no está
en precarga, es
correcto iniciar
un nuevo acceso.
En este instante
la memoria ha
respondido con el
dato solicitado, al
tiempo
transcurrido se le
llama tA
Fin del refresco y
fin del ciclo
completo de
acceso
Puesto que la lectura es
destructiva resulta necesario
refrescar la memoria
Figura 4. Cronograma de un ciclo de lectura sobre una memoria dinámica
Las direcciones de memoria que aparecen en el bus del i386EX son direcciones
de memoria real, física y están representadas en binario natural. Como hemos
estudiado en el punto anterior, esta representación de la dirección de memoria
Memorias DRAM. ©1999, José M Foces Morán -- 9
Paginación de documento completo:
94
no coincide con el formato de las direcciones necesario para acceder a una celda
de memoria dinámica. El acceso a una celda de memoria dinámica sigue el
curso representado en la figura:
1. El procesador define e inicia un nuevo ciclo de bus. En el caso del i386EX
podemos pensar que es un ciclo de ancho 16 bits.
2. La dirección de memoria física es traducida a su forma fila/columna y el
controlador de memoria inicia el acceso a las 16 celdas de memoria
dinámica, cada una de ellas está incluida en un chip distinto, pero,
internamente, dentro de cada chip, todas ellas tendrán la misma
dirección de fila y de columna, por tanto, basta con efectuar la traducción
una sola vez.
3. El controlador de memoria aserta la línea #ras indicando que en los 10
bits del bus de direcciones de la DRAM se halla presente la dirección de
fila.
4. Un cierto tiempo más tarde, cuando a la memoria le ha dado tiempo a
escribir el latch de fila, el controlador de memoria aserta #cas indicando
que ya puede comenzar el acceso puesto que tanto la fila como la
columna son conocidas.
5. La memoria responde transfiriendo el bit presente en la fila direccionada a
la línea de salida de datos correspondiente a este chip concreto. El resto
de 15 chips habrán seguido un curso igual y, por tanto, en las salidas de
datos de esos chips también estarán presentes los datos solicitados.
6. Puesto que, como hemos visto anteriormente, las lecturas son
destructivas, es necesario refrescar la celda recién leída y, este proceso
lleva un tiempo conocido como tiempo de precarga.
Las ideas que acabamos de expresar constituyen los conceptos más básicos en
relación al uso de memorias DRAM, además, existe un gran número de técnicas
que permiten mejorar el ancho de banda de utilización de estos chips y que no
vamos a explicar en esta sección. Aquellos que tengan un interés por este
campo, pueden consultar alguna de las referencias bibliográficas.
Dos comentarios cortos sí son necesarios. El primero tiene que ver con el
refresco de las memorias: es esencial refrescar el contenido de todas las celdas al
menos cada 4 ms. Recordemos que al leer una celda, ésta es refrescada
automáticamente, por tanto cuando resulte necesario refrescar una celda,
bastará con leerla y descartar el dato, pero, conocida la organización interna de
los chips ¿No hay una forma más eficaz de llevar a cabo el refresco, es decir,
una forma de refresco que no nos obligue a generar todas y cada una de las
direcciones de memoria de las celdas involucradas? Sí, muchos fabricantes
incluyen la posibilidad de efectuar un tipo de refresco llamado sólo #ras en el
cual primero se especifica la dirección de la fila a refrescar y #ras es asertada
Memorias DRAM. ©1999, José M Foces Morán -- 10
Paginación de documento completo:
95
durante un tiempo suficiente como para producir la lectura de la fila entera y su
refresco. La ausencia de #cas es la pista que le damos al chip de que este ciclo se
trata del refresco de ¡una fila de celdas completa!
El segundo comentario, y final, es que el número de bits que se pueden
conseguir leer de una memoria dinámica en cada segundo de tiempo no sólo es
función del tiempo de acceso si no también del tiempo de precarga y del retraso
que está en medio (llamado retardo de precarga), es decir, el ancho de banda de
utilización de una memoria dinámica está afectado por el tiempo de acceso pero
no es función únicamente de éste. Veremos más adelante que este ancho de
banda se puede mejorar notablemente con unas organizaciones de los chips de
memoria conocidas como entrelazadas. La única forma de mejorar el tiempo de
acceso es mejorar la tecnología subyacente, hacer transistores, amplificadores y
lógica todos ellos más rápidos.
Antes de introducir los módulos multi-bit de memorias dinámicas vamos a
estudiar un chip de memoria dinámica sencillo y un diseño de memoria
principal para un microprocesador genérico. El chip contiene 64K bits de
memoria dinámica y su patillaje aparece en la figura siguiente.
Nombres de
las patillas
Patillaje
#refresh
d
#w
1
#ras
a0
4
a1
6
a2
7
vcc
8
2
3
5
16
15
14
vss
#refresh
Refresh
#cas
q
a0 - a7
Address input
d
Data in
q
Data out
#w
#ras
Read/write input
Row address strobe
#cas
Column address strobe
vcc
Power (+ 5V)
vss
Ground
a6
12 a7
11 a8
10 a9
9 a10
13
Figura 5. Conexiones de un chip de DRAM típico de 64 Kbits de capacidad.
Finalmente, vamos a construir un sistema de memoria basado en chips como
este para un microprocesador genérico con bus de 16 bits. Este microprocesador
podría ser el EX, pero, puesto que no se ha empleado la unidad RCU, específica
del i386EX, el diseño pude considerarse válido para cualquier microprocesador
que posea un bus interfaz síncrono con indicación de fin de ciclo. El diseño del
sistema emplea 16 chips de memoria como el explicado y, para obtener las
direcciones de fila y columna, incorpora chips de lógica integrada de amplia
Memorias DRAM. ©1999, José M Foces Morán -- 11
Paginación de documento completo:
96
Buses de control, datos y direcciones
difusión de la serie 74 de Texas Instruments. El sistema diseñado posee una
capacidad de 64 Kbytes de memoria. Los buffers empleados son también de
amplia difusión y sirven para efectuar el conexionado sin cargar excesivamente
las patillas del bus del microprocesador, su uso es muy común.
A01
A02
A03
A04
A05
A06
A07
A08
A09
A10
A11
A12
A13
A14
A15
A16
#ads
w/#r
#ready
w/#r
D00 D15
Buffer del
Bus de
Datos
Control
del array
de
memoria
dinámica
DIR
ENABLE
A01
A02
A03
A04
A05
A06
A07
A08
A09
A10
A11
A12
A13
A14
A15
A16
R0
R1
R2
R3
A0
R4
A1
R5
A2
R6
A3
R7
A4
C0
A5
C1
A6
C2
A7
C3
C4
C5
C6Multiplexor
de filas/
C7 columnas
A0
#w
A1
A2
#cas
A3
#ras
A4
A5
d
64Kx1
A6
RAM q
A7
D00
A0
#w
A1
#cas
A2
A3
#ras
A4
d
A5
64Kx1
A6
RAM q
A7
D01
.
.
.
.
mplx
#ras
#cas
#w
A0
#w
A1
A2
#cas
A3
#ras
A4
A5
d
64Kx1
A6
RAM q
A7
D15
Buffers del
bus de datos
Figura 6. Un sistema de memoria dinámica simple para un microprocesador
i386ex.
Memorias DRAM. ©1999, José M Foces Morán -- 12
Paginación de documento completo:
97
™ MODULARIZACIÓN DE LOS SISTEMAS DE MEMORIAS DINÁMICAS.
Desde hace varios años, los chips de memoria dinámica no suelen usarse por
separado, más bien, suelen soldarse varios de ellos formando una matriz de 8,
16 o más de chips de un cierto tamaño en bits. Cada uno de ellos es capaz de
responder con un dato de un bit a cada solicitud. Estos módulos han recorrido
una serie etapas que van desde el SIMM (single in-line memory module) de 30
patillas, fácil de instalar y adecuado para procesadores con un ancho de palabra
de 8 o 16 bits. Pasando por los SIMM de 72 patillas que llegaron a su máximo de
uso alrededor de 1995 hemos llegado, hoy en día, a dos generaciones de
módulos DIMM (Dual in-line memory module) de 168 patillas.
El DIMM de 168 patillas fue el primer módulo DIMM de 8 bytes de ancho pero
compatible con el SIMM de 4 bytes con tan solo cortocircuitar dos patillas
concretas que venían dispuestas una al lado de la otra, el módulo se comporta
ahora como dos módulos de ancho 4 bytes cada uno. Cada uno de estos
módulos es capaz de responder a una solicitud de acceso con 4 bytes en un solo
ciclo de acceso lo que hace que estos módulos sean ideales para su uso en
sistemas con 4 words de ancho (386DX por ejemplo) u 8 words de ancho
(Versiones de 64 bits del microprocesador MIPS).
En la figura siguiente aparece un módulo SIMM de 72 patillas. Este módulo es
un SIMM conforme con la norma JEDEC relativa a SIMMS. El número de
patillas es de 72 y el ancho de palabra accedida en cada transacción es de 4
bytes. IBM Microelectronics incluye lógica de corrección de errores ECC
completamente transparente al sistema. El módulo ECC incluido en el SIMM
corrige errores de un solo bit en cualquier byte de los 4 que forman el ancho
completo de palabra del SIMM. Este módulo está especialmente indicado en
sistemas que son responsables de aplicaciones críticas pero que no tienen un
soporte nativo ECC.
Figura 7. Simm de 72 patillas modelo IBM11D4480BG de IBM Microelectronics:
4M x 36 ECC-on-SIMM.
Memorias DRAM. ©1999, José M Foces Morán -- 13
Paginación de documento completo:
98
Otros formatos de módulos de alta densidad y de alta capacidad son los
módulos apilados SOJ, TSOJ y TSOP. La construcción de estos módulos consiste
en apilar varios chips, generalmente 2 ó 4, de esta forma el ahorro de área es
muy importante.
Figura 8. Comparaciones de altura de módulos apilados y las capacidades
obtenidas (Fuente: IBM Microelectronics, IBM MicroNews 2Q 1997).
™ UNA TÉCNICA PARA MEJORAR EL ANCHO DE BANDA DEL SISTEMA DE MEMORIA
PRINCIPAL: ENTRELAZADO DE BANCOS DE MEMORIA.
Es difícil curar los males derivados del tiempo de acceso de las memorias
(latencia), sin embargo, no lo es mejorar el ancho de banda del sistema de
memorias. Si nos fijamos en el cronograma de acceso a una memoria DRAM
podemos observar que hay un tiempo entre el instante en que los datos ya están
listos y el momento en el que termina el ciclo actual de acceso. Durante ese
tiempo el módulo de memoria no está disponible, esta siendo refrescado y por
tanto el microprocesador no puede solicitarle otro dato todavía: cierto, pero si el
microprocesador solicitase otro dato que no residiese en este banco de memoria
si no en otro distinto no incurriría en ese tiempo de espera. Esta es la idea básica
a cerca del entrelazado de bancos de memoria: organizar el sistema de memoria
de forma que grupos de 1, 2, 4 ó más direcciones de memoria residan en bancos
distintos.
Trabajemos sobre un ejemplo de un sistema basado en el microprocesador
i386EX con un sistema de memoria principal realizado a base de SIMMs de 2
bytes de ancho. El bus del microprocesador posee un ancho de 16 bits (2 bytes)
y, normalmente, los ciclos de bus usarán el ancho completo. Si disponemos los
SIMMs de forma que el primer SIMM contenga las palabras (words de 16 bits
en modo real del EX) que tienen por direcciones de memoria 0, 4, 8, etc. Y el
segundo SIMM que tenga las words con direcciones 1, 5, 9, etc. y así
sucesivamente obtendríamos un sistema con cuatro SIMMs como el siguiente:
Memorias DRAM. ©1999, José M Foces Morán -- 14
Paginación de documento completo:
99
tcyc
ta
precarga
0
simm 0
direcciones 0, 4, 8, 12 etc
precarga
1
simm 1
direcciones 1, 5, 9, 13 etc
precarga
2
simm 2
direcciones 2, 6, 10, 14 etc
precarga
3
simm 3
direcciones 3, 7, 11, 15 etc
inicio
acceso 0
Bus de
direcciones
Bus de datos
fin
acceso 0
16
i 386EX
Figura 9. Sistema de memoria principal basado en SIMMs de 2 bytes. El
sistema contiene cuatro bancos.
En este esquema el tiempo de acceso no ha mejorado, pero si la cadena de
direcciones de memoria generadas desde el microprocesador tiene un cierto
grado de secuencialidad, observaremos una mejora notable del ancho de banda
de utilización del sistema de memoria. Si el sistema no estuviera entrelazado el
dato correspondiente al acceso número 1 en vez de estar listo nada mas recibir
el dato del acceso 0, estaría listo un tiempo de precarga más tarde. Esta
situación se reproduciría a lo largo de los siguientes accesos también.
Si la cadena de direcciones de memoria no presenta un alto grado de
secuencialidad o de dispersión, rompiendo por tanto la posibilidad de utilizar
bancos distintos, la ganancia de ancho banda debido al entrelazamiento sería
ostensiblemente menor. La siguiente curva resume esta ganancia en un sistema
con entrelazamiento de orden inferior (como el ejemplo explicado) donde se
han utilizado un número variable de vías. El simulador acepta un conjunto de
direcciones de memoria generadas por un generador de cadenas de referencia.
En el eje vertical se presentan los tiempos de simulación correspondientes a la
misma cadena de referencia, puede observarse que el sistema con 16 vías es
notablemente más rápido y esto es debido a la mejora en el ancho de banda de
uso de la memoria principal.
Memorias DRAM. ©1999, José M Foces Morán -- 15
Paginación de documento completo:
100
190000
185000
180000
175000
170000
165000
160000
155000
150000
145000
140000
1-way
2-way
4-way
8-way
16-way
Figura 10. Mejora de velocidad obtenida al usar diversos grados de entrelazado
de memorias dinámicas (Resultados obtenidos con un simulador diseñado por
el autor bajo la dirección del profesor David Bantz, Columbia University, 1995).
Memorias DRAM. ©1999, José M Foces Morán -- 16
Paginación de documento completo:
101
Memorias estáticas (SRAM).
Las memorias de acceso aleatorio estáticas: SRAM, Static Random Access
Memory.
Además de la memoria DRAM estudiada, existe otro tipo de memoria que
juega un papel muy importante en el diseño de computadores, sobre todo en el
diseño de memorias cache. Este tipo de memoria se la conoce como SRAM,
haciendo énfasis en el hecho de que esta memoria a pesar de ser también una
memoria volátil, no necesita ser refrescada periódicamente para mantener sus
contenidos intactos.
Las memorias SRAM, como veremos con más detalle en los párrafos siguientes,
son memorias, en general, mucho más costosas que las DRAMs y su nivel de
integración es mucho menor dado que el tamaño de la celda básica varias veces
superior al de la celda de memoria DRAM.
Para comenzar el estudio de la celda básica SRAM, recordemos cómo puede
realizarse un elemento estático de almacenamiento de un bit, empleando
solamente nuestros conocimientos previos de electrónica digital. El ejemplo que
sigue está tomado del texto “Contemporary Logic Design” escrito por el
profesor Randy Katz de la Universidad de California en Berkeley. Es un
ejemplo casi grotesco –por su simplicidad y elegancia. La idea es, si conectamos
dos inversores en cascada en una de las conexiones tendremos un 1 y, en la otra,
obligatoriamente, tendremos un 0 -indefinidamente. Si una de estas conexiones
es la salida de nuestro circuito “almacenador de un bit”, ¡tenemos una celda de
memoria! La cuestión es ¿Cómo se escribe la celda? ¿Cómo se puede cargar
(forzar) un valor en la celda?
Figura 1. Celda básica de memoria.
Memorias SRAM. ©1999, José M Foces Morán -- 1
Paginación de documento completo:
102
Si consiguiéramos abrir uno de los bucles que une la salida de una puerta con la
entrada de la siguiente, podríamos entonces forzar un nivel a la entrada de esa
puerta, posteriormente cerrar el bucle y, entonces, la celda contendría el valor
deseado ¿Cómo se puede abrir el bucle en el momento en el que deseamos
escribir en la celda? Usando una puerta lógica de transmisión. Esta puerta posee
dos estados, cerrado o abierto, controlables mediante una patilla de entrada
llamada ld (del Inglés load). Es decir, la puerta de transmisión, se comporta
como un puente que “transmite” su entrada eléctricamente a su salida o bien no
lo hace. Coloquemos pués una puerta de transmisión que cierre el bucle cuando
no deseamos escribir y que abra el bucle cuando sí deseamos escribir. Al mismo
tiempo, si conectamos otra puerta de transmisión a la entrada del inversor y
que funcione al revés que la anterior cuando deseemos escribir esta puerta nos
conectará con al fuente de señal y la otra puerta de transmisión abrirá el bucle:
¡así de sencillo! La figura siguiente contiene la solución:
Puerta de
transmisión
Puerta de
transmisión
Celda básica
Figura 2. Una celda básica de memoria a base de inversores y puertas de
transmisión.
Esta celda básica, aunque resulta ilustrativa a nivel conceptual e introductorio,
no es muy eficiente pues el número de transistores necesarios para su
implementación resulta prohibitivo. A pesar de ello, la idea de fondo es
interesante para comprender cómo funciona la celda real de memoria estática
que nos disponemos a estudiar.
™ ASPECTOS BÁSICOS SOBRE LA CELDA DE MEMORIA SRAM REAL.
La celda de memoria estática empleada en el diseño de circuitos integrados es
muy parecida a la anterior, contiene 6 transistores MOS en total: 2 de ellos
constituyen la celda de almacenamiento, otros dos proveen el acceso a la celda
(gating) y, por último, otros dos transistores constituyen cargas activas que
hacen las veces de resistencias de pull-up a Vdd.
Memorias SRAM. ©1999, José M Foces Morán -- 2
Paginación de documento completo:
103
Vdd
Par complementario CMOS
que forma uno de los flipflops
Entrada/salida de
datos
complementaria
Entrada/salida de
datos positiva
Puertas de
transmisión de acceso
a las celdas
Figura 3. Celda básica de memoria SRAM a base de transistores CMOS. No se
muestra el circuito de escritura/lectura (amplificadores sensibles).
Los transistores enmarcados en el óvalo constituyen uno de los flip-flops donde
se escribe la forma positiva del dato. Los transistores opuestos forman el otro
flip-flop de la célula, el que almacena la forma negada del dato. La escritura de
un dato en esta célula supone el cierre de los transistores de las puertas de
transmisión y por tanto la activación de la puerta de ambos transistores,
previamente el nivel de tensión adecuado al dato que se desea escribir, tanto en
su forma original como negada, tienen que asertarse en las entradas de datos.
Los fabricantes de versiones sencillas de circuitos integrados de memoria
estática MOS suelen fabricar productos con capacidades de entre 1 Kbyte y 16
Kbytes. Estos últimos dispositivos pueden llegar a contener más de 100000
transistores, siendo el nivel de integración no demasiado alto, el número de
dispositivos sí lo es, la solución más común es diseñar una celda que contenga
menos transistores. La solución comercial ha sido tradicionalmente la celda de
memoria DRAM que estudiamos en apartados anteriores.
¿Cuáles son entonces los aspectos más convenientes de este tipo de memorias?
Uno de los más notables es que estas memorias al no necesitar refresco los
diseños son tremendamente más sencillos y, además, tanto el ancho de banda
de utilización como la latencia son notablemente mejores en este tipo de
memorias. La figura siguiente muestra una comparación de velocidades entre
diversos tipos de tecnologías de memorias en los años 90.
Memorias SRAM. ©1999, José M Foces Morán -- 3
Paginación de documento completo:
104
450
Velocidad en MHz
400
350
DRAM
EDO
SRAM común
DRAM Sínc
Cache SRAM
Procesadores
300
250
200
150
100
50
19
90
19
91
19
92
19
93
19
94
19
95
19
96
19
97
19
98
19
99
20
00
0
Año
Figura 3. Tendencia en las mejoras de velocidad de diversas tecnologías de
memorias.
En ciertos sistemas empotrados las memorias SRAM juegan un papel esencial
debido al reducido tamaño y complejidad, en estos sistemas el uso de memorias
SRAM es un deber. Ahora vamos a explorar las memorias SRAM desde el
punto de vista del diseñador de computadores, en concreto vamos a estudiar un
chip de memoria SRAM que nos dará la oportunidad de conocer su patillaje, su
modelo funcional y cómo transcurren los accesos desde el punto de vista de la
temporización.
™ EL CHIP DE MEMORIA SRAM DESDE EL PUNTO DE VISTA DEL DISEÑADOR DE LOGICA
DIGITAL.
El chip de memoria SRAM que vamos a estudiar es el modelo 51C59. En la
figura siguiente aparece el modelo estructural de este chip. En la organización
interna de los chips de SRAM no se ha optado por multiplexar las direcciones
de fila y de columna. Tradicionalmente se ha preferido la facilidad de los
diseños frente a nivel de integración. Por lo demás esta organización es similar
a la de los chips de memoria dinámica excepto, claro está, en lo referente a la
estructura de la propia celda básica. En la figura siguiente aparece el modelo
estructural de un famoso chip de memoria estática, el 51C59.
Memorias SRAM. ©1999, José M Foces Morán -- 4
Paginación de documento completo:
105
18
A2
VCC
17
GND
A1
16
A0
2
A5
MEMORY ARRAY
128 ROWS
128 COLUMNS
ROW
SELECT
1
A4
4
A7
3
A6
l/O 1
COLUMN I/O CIRCUITS
COLUMN SELECT
l/O 2
l/O 3
INPUT
DATA
CONTROL
8
l/O 4
7
A11
6
A10
5
A9
19
A8
A3
CS
WE
Figura 4. El modelo estructural del chip 51C59 de memoria SRAM.
El array de memoria estática está formado por 128 columnas x 128 filas. En cada
posición de la matriz hay un elemento de 4 celdas SRAM. Todas las celdas de
un punto de la matriz comparten la misma dirección de fila y de columna. El
chip posee cuatro señales de i/o que le permiten escribir o leer un dato de 4 bits
una vez que ha sido formada su dirección dentro de la matriz. La capacidad
total del chip es de 27 x 27 x 4 bits = 213 bytes = 8 Kbytes. Estudiemos con mas
detalle su modelo funcional.
™ EL MODELO FUNCIONAL DEL CHIP 51C59.
En el diseño de un computador real de cierto nivel de prestaciones no suele
bastar con un solo chip de memoria y, por tanto, hay que emplear varios en el
mismo diseño. Cada uno de los varios chips del mismo tipo empleados deberán
responder a rangos de direcciones de memoria distintos. Generalmente se
suelen emplear las líneas altas del bus de direcciones para diferenciar los
diferentes espacios de direccionamiento y, una vez establecido el rango de
Memorias SRAM. ©1999, José M Foces Morán -- 5
Comentario [N1]: Las entradas
A no estan en orden y falta la A3 y
si hay 7 entradas sobra la A7, de
todos modos no coinciden con el
esquema que hay más abajo en el
que las entradas de direcciones son
A0-A11
Paginación de documento completo:
106
direcciones, se usan las líneas de menor peso de este bus para direccionar la
palabra concreta deseada dentro de un chip. Concluyendo:
•
Las líneas altas del bus se emplean para dividir el espacio completo de
direccionamiento del procesador en sub-espacios. Cada uno de los subespacios debe activar un chip o una fila de chips de memoria en caso
de que un solo chip no ofrezca un ancho de palabra coherente con el
ancho del bus de datos del procesador.
•
Una vez activado un determinado chip (o una fila correspondiente a
una word completa), se usan las líneas bajas del bus de direcciones
para seleccionar la palabra deseada dentro del chip, por tanto, este
grupo de líneas bajas del bus serán las que se conecten a las entradas
de direcciones de los chips de memoria.
•
El chip (o fila de chips) de memoria contiene una señal llamada #cs,
chip select. Esta señal debe ser verdadera (Se suele emplear un nivel de
aserción bajo) cuando la dirección de memoria procedente del
procesador coincide con el espacio correspondiente a este chip. La
evaluación de esta condición es puramente combinacional y se puede
implementar de diversas formas dependiendo de cada situación:
o Con puertas lógicas
o Con multiplexores y decodificadores
o Con lógicas fusionables que dependiendo de la complejidad
pueden usarse todas aquellas que son combinacionales como
PLA, FPGA, etc.
o Con un circuito de aplicación específica si el diseño es
particularmente complejo ASIC).
51C69 SRAM
Modelo funcional
A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
l/O1
l/O2
l/O3
l/O4
WE CS
Figura 5. El modelo funcional del chip de SRAM 51C59.
Memorias SRAM. ©1999, José M Foces Morán -- 6
Paginación de documento completo:
107
Los nombres de las patillas
A
-
0
A
11
Address Inputs
#we
Write Enable
#cs
Chip Select
I/O 1 - I/O 4
Data Input/Output
V
CC
GND
Power(+5V)
Ground
Tabla 1. El modelo funcional del chip de SRAM 51C59(nombres).
•
El bus de direcciones se compone de 12 líneas de selección de
palabra, A0-A11.
•
El bus de datos i/on se compone de 4 bits, por tanto el ancho de
cada nodo de almacenamiento está formado por una palabra de
ancho 4 bits. Entendemos por nodo cada uno de los grupos de 4
celdas que poseen una misma dirección de palabra.
•
La patilla #we. Un cero (0) en esta línea (nivel de aserción bajo)
significa que la operación que va a ser llevada a cabo es un (w)
escritura (write). Un uno (1) en esta patilla signifca que la
operación que va a efectuarse es una lectura (r, read).
•
Por último la patilla #cs (chip select) es la línea de selección de
chip. Un cero en esta patilla significa que las líneas altas del bus
representan un espacio del mapa de memoria que coincide con el
asignado a este dispositivo y, por tanto, este dispositivo tiene que
llevar a cabo la operación designada en la patilla #w, sobre el
nodo que tiene por dirección interna aquella representada en
binario natural por el bus a0-a11. Si la operación es una lectura el
dispositivo transferirá los cuatro bits desde el nodo hacia el
exterior a través de las líneas i/on y si la operación es una
escritura entonces el dispositivo transferirá al nodo el contenido
de las cuatro líneas i/on.
Memorias SRAM. ©1999, José M Foces Morán -- 7
Paginación de documento completo:
108
A4
1
20
A5
2
19
A3
A6
3
18
A2
A7
4
17
A1
A8
5
16
A0
A9
6
15
l/O
1
A10
7
14
l/O
2
A11
8
13
l/O
3
#cs
9
12
l/O
4
GND
10
11
#we
vcc
Figura 6. Empaquetado físico DIL-20 del 51C59.
#cs
#we
Modo
i/on
Power
H
L
L
X
L
H
No seleccionado
High-Z
DIN
DOUT
Active
Active
Active
escritura
lectura
Tabla 2. Tabla de verdad del 51C59
t WC
Dirección de
memoria(13
bits)
t AS
t CW
#cs
t AW
t WR
t WP
#we
t DW
t DH
Datos válidos hacia el interior
de la memoria
i/on
t WZ
Figura 7. Cronograma del ciclo de escritura sobre el chip 51C59.
Memorias SRAM. ©1999, José M Foces Morán -- 8
Paginación de documento completo:
109
El ciclo de escritura comienza en el momento en que la línea #cs del chip 51C59
pasa a estado asertado. En ese instante se decodifica internamente la dirección
de memoria (A11-A0) para formar la dirección de fila y columna que
corresponde al nodo direccionado dentro del array. Si en ese instante o en una
ventana de tiempo no superior a twp antes del final del ciclo indicado por la
des-aserción de #cs, #w está en 0, el ciclo será de escritura, si no, será de lectura.
t RC
t AA
Dirección de
memoria
Read Cycle No. 2.
CS
t ACS
t LZ
t HZ
#we
DOUT
Figura 8. El ciclo de lectura del chip de SRAM 51C59.
Memorias SRAM. ©1999, José M Foces Morán -- 9
Paginación de documento completo:
110
Memorias no volátiles (ROM Y FLASH).
Las memorias no volátiles de mas amplio uso en el diseño de sistemas
empotrados: Eprom y Flash.
Las tecnologías de memorias que hemos revisado hasta este momento, DRAM y
SRAM, son memorias volátiles: al suprimir la potencia eléctrica de los
dispositivos el contenido se pierde. Estos dispositivos al ponerse en
funcionamiento de nuevo aparecen con contenidos aleatorios en cada una de
sus celdas y, por tanto, como veremos en el capítulo siguiente, deben ser
examinados e inicializados en el arranque del sistema computador. En los
párrafos siguientes, en cambio, revisaremos las tecnologías de memorias no
volátiles: memorias cuyo contenido no se pierde al suprimir la potencia
eléctrica.
Resulta esencial la presencia de memorias no volátiles en un sistema
computador. Estas memorias albergan el código y los parámetros de
inicialización más fundamentales del computador por lo debe existir una
garantía de que sus contenidos no se perderán al suprimir la potencia del
sistema.
Al igual que en el caso de las memorias SRAM y DRAM, las memorias volátiles
se presentan en diferentes formatos físicos, operacionales y eléctricos y, de ellos,
se derivan una serie de ventajas de diseño, económicas y de otros tipos que
veremos. Desconsiderando aspectos de interés casi exclusivamente histórico,
podemos decir que la primera memoria no-volátil de amplio uso fue la
memoria ROM inventada por ingenieros de la compañía Intel. Este tipo de
memoria más concretamente conocida como ROM de máscara, en sus diversas
formas, es un dispositivo de uso muy extendido. Se trata de un circuito
integrado en el que las celdas que almacenan los bits están permanentemente
forzadas a valor 0 o 1 y, su fabricación puede llevar un tiempo considerable
además de la exigencia de fabricar partidas de varios miles como mínimo
porque de otro modo el coste por dispositivo llegaría a ser prohibitivo. La
versión más interesante de este dispositivo, la EPROM (Electrically
Memorias EPROM y FLASH. ©1999, José M Foces Morán -- 1
Paginación de documento completo:
111
Programmable Read Only Memory) es un dispositivo que puede programarse
eléctricamente y borrase mediante la exposición a luz ultravioleta.
Curiosamente, un gran invento, puede decirse que la memoria EPROM surgió
de forma casual: Intel consideraba que en ocasiones era más aleccionador saber
porqué fallaba un dispositivo que porqué funcionaba correctamente. Cuando la
compañía Intel decidió apostar por los dispositivos con puerta de silicio, a un
físico llamado Dov Forman se le encomendó la tarea de averiguar las causas de
fallo en el proceso de fabricación. Observando los dispositivos que presentaban
fallos, pensó que quizás éstos se debieran que algunas de las puertas del
dispositivo habrían llegado a desconectarse, a quedarse flotantes. Poco tiempo
después se le ocurrió que podría obtenerse un uso útil de este hecho este
fenómeno y de hecho demostró que el dispositivo podía almacenar la carga, un
semiconductor que se comportaba como una memoria ROM y podía ser
programado eléctricamente con una gran facilidad. Poco tiempo más tarde Intel
dedicó una importante masa de recursos humanos y económicos en
investigación y desarrollo de la nueva tecnología.
Otra gran ventaja de la EPROM, además de su facilidad de programación, era
su facilidad de borrado: en unos pocos minutos un ingeniero podría borrar el
dispositivo exponiéndolo a luz ultravioleta, reprogramarlo eléctricamente y
volver a probar el sistema microprocesador con un nuevo programa. El primer
dispositivo EPROM producido por Intel tenía una capacidad de 2 Kbytes cuyas
máscaras eran tan grandes que tuvieron que ser particionadas en cuatro trozos
lo que creó muchas dificultades de alineamiento.
La primera EPROM comercial tenía número de pieza de Intel 1702. Hoy en día
Intel prácticamente ha abandonado el mercado de EPROMs y ha sustituido
estos dispositivos por los más amplios, rápidos y flexibles FLASH, también
inventados por ingenieros de Intel Corp.
Al igual que con el resto de dispositivos, a modo de introducción, vamos a
estudiar la estructura de la celda básica de memoria EPROM.
™ LA CELDA BÁSICA DE MEMORIA EPROM: FAMOST( FLOATING GATE AVALANCHE
INJECTION MOS TRANSISTOR).
Las memorias EPROM se pueden programar eléctricamente, esto significa que
mediante un patrón de niveles eléctricos debidamente temporizado,
conseguiremos establecer un enlace fusible entre cada celda de un bit y la línea
por donde llega el bit que deseamos grabar, un 1 o un 0. La energía de la señal
de grabación es muy superior a la energía transportada por las señales digitales
Memorias EPROM y FLASH. ©1999, José M Foces Morán -- 2
Paginación de documento completo:
112
que representan los datos leídos desde esta memoria en su funcionamiento
normal: los pulsos de corriente procedentes de esta señal queman la conexión
entre la celda y la línea de bit de forma que ahora se encuentren desconectados
y, por tanto, el valor almacenado sea un 0. Todos los enlaces fusibles no
quemados representan unos (1).
La generación de los pulsos de corriente en los instantes adecuados se lleva a
cabo mediante el uso de un circuito llamado programador. Hoy en día una gran
variedad de fabricantes producen EPROMS, algunas de ellas con unas
diferencias en los algoritmos de grabación casi anecdóticas, pero, los
programadores llamados universales, contienen un computador que incorpora
los algoritmos de programación de una gran variedad de EPROMS. En el
capítulo dedicado a la integración de hardware y software, realizaremos un
pequeño computador y, allí tendremos ocasión de comprender cuales son las
funciones de un programador moderno y otras de sus características.
En la figura que sigue, aparece un transistor de almacenamiento con una puerta
flotante (¡desconectada según el inventor Dov Forman!). En este dispositivo la
puerta está ubicada entre la puerta de control y el substrato y, a diferencia de la
puerta de control del dispositivo anterior, no está conectada a ninguna línea ni
de palabra, ni de bit, sencillamente flota, es decir no tiene un valor de tensión
definido. Esta puerta flotante suele realizarse con silicio policristalino. El estado
de la puerta flotante permite mantener la información permanentemente en el
dispositivo. El transistor funciona como un transistor MOS normal cuando la
puerta flotante no tiene cargas eléctricas.¿Qué ocurre si la puerta es cargada con
electrones? Si el potencial de la puerta llega a ser muy alto, entonces el
transistor de almacenamiento puede activarse.
Para programar un 0 se necesita un pulso de 20v durante 50ms, este tiempo es
muy largo en comparación con los tiempos de escritura de las SRAM y DRAMs
con lo que se hace necesario el llevar a cabo la programación del dispositivo con
tensiones más altas (más energía por electrón) pero durante tiempos limitados
que no dañen la capa de aislamiento: el programador universal.
Para efectuar el borrado de la memoria EPROM debe ser expuesto a radiación
ultravioleta: los electrones recogidos en la puerta flotante absorben energía de
estas longitudes de onda, aumentan su temperatura y pueden entonces
abandonar la puerta flotante, de este modo el dispositivo, después de unos 20
minutos de exposición, todos los portadores de carga son forzados fuera de la
puerta flotante quedando el dispositivo listo para volver a ser programado.
Memorias EPROM y FLASH. ©1999, José M Foces Morán -- 3
Paginación de documento completo:
113
Puerta
Drenador
Surtidor
Puerta de control
Puerta flotante
Oxido
Oxido
-
surtidor-n
-
-
drenador-n
-
sustrato-p
Figura 1. Estructura de una celda de memoria EPROM.
Los empaquetados físicos de memorias EPROM incluyen una pequeña ventana
transparente justo encima del chip. Esta ventana está realizada con cristal de
cuarzo la cual resulta muy costosa a medida que los costes incurridos en el
proceso de fabricación son menores y, la lámpara de UV representa también un
coste para el usuario final por lo que los fabricantes han desarrollado otro
dispositivo llamado EEPROM el cual sí es borrable eléctricamente (Electrically
Eraseable Programmable Read Only Memory). En estos dispositivos las cargas
encerradas en la puerta flotante pueden ser forzados hacia fuera por medio de
un pulso eléctrico. En ciertos sistemas donde se requiere una gran facilidad de
borrado, el uso de estas memorias puede ser obligado, sin embargo, dado su
alto coste, es posible que, como veremos, resulte más beneficioso el uso de
memorias FLASH.
™ UN CHIP DE MEMORIA EPROM, 27256 DE INTEL.
Vamos a estudiar a hora un chip de memoria EPROM real, un dispositivo de
32Kb de capacidad. Esta memoria se presenta en dos formatos de interfaz
eléctrica externa, con niveles TTL y con niveles CMOS. El identificador de la
versión CMOS es 27C256.
El ancho de palabra de este dispositivo es de 8 bits, con lo cual, cada dirección
de memoria presente en el bus representa un byte entero dentro del dispositivo.
El bus de direcciones, por tanto, tiene un ancho de log2 32*1024 = 15 bits. Las
líneas de este bus se identifican como A0-A14 .El bus de datos del dispositivo se
representa por O0-O7 ya que el dispositivo sólo puede producir “outputs”,
salidas de datos procedentes de las celdas internas del chip. Obviamente, no se
pueden escribir datos en una memoria EPROM, excepto en el proceso de
programación en el cual, puesto que es completamente transparente al usuario,
nos ocuparemos de él en la construcción del proyecto final.
Memorias EPROM y FLASH. ©1999, José M Foces Morán -- 4
Paginación de documento completo:
114
Las patillas Vcc y GND representan la tensión de alimentación y la masa digital,
respectivamente. Nos fijaremos ahora en las patillas #oe y #ce. La patilla #ce es
el chip enable del integrado y #oe (output enable) indica al dispositivo que active
los drivers del bus de datos, esto es, que el contenido de la celda direccionada
aparezca en la salida del bus de datos. ¿Está clara la distinción entre ambos? La
aserción de #ce hace que el dispositivo decodifique la dirección que aparece en
su bus de direcciones y que seleccione el nodo (de 8 celdas de un bit) elegido; la
aserción de #oe significa habilitar la conexión eléctrica entre las patillas
exteriores del bus de datos y las líneas internas de ese mismo bus. En realidad,
la señal #oe se emplea para evitar un problema que se presenta en los sistemas
microprocesadores cuando el microprocesador lleva a cabo un ciclo de escritura
inmediatamente después de un ciclo de lectura. En esas circunstancias si el
dispositivo direccionado en el ciclo de lectura no se desconecta a tiempo del bus
de datos y el micro inicia el ciclo de escritura, puede haber una ventana de
tiempo en la que ambos, el dispositivo y el microprocesador estén excitando
eléctricamente el bus de datos. Esta situación es conocida con el nombre de
contención de bus y debe evitarse a toda costa pues puede conducir a daños en
alguno de los transistores involucrados en ambos dispositivos. Otra vez, en el
capítulo dedicado al proyecto real de integración, dedicaremos unas líneas más
a este problema y cómo efectuar diseños sin contención de bus.
Dirección de
memoria
....
VIH
Dirección válida
....
VIL
VIH
CE
....
VIL
t CE
VIH
OE
....
VIL
tACC
VIH
t OE
Alta imp
O0-O8
VIL
....
t OF
t OH
Datos validos
....
Alta imp
Figura 2. Cronograma del ciclo de lectura de una memoria EPROM Intel 27256.
A0-A14 Bus de direcciones
D0-D8
Bus de datos
#ce
Línea de selección del chip
Memorias EPROM y FLASH. ©1999, José M Foces Morán -- 5
Paginación de documento completo:
115
#oe
Habilitación de salida de datos
#we
Habilitación de escritura
(Sólo en el proceso de programación)
Gnd
Nivel de referencia digital
Vcc
Tensión de alimentación
Vpp
Tensión de programación
Tabla 1. Nombres de las patillas de la EPROM Intel 27256
Intel
27256
VPP
A12
1
2
28
27
A7
A6
3
26
4
25
5
24
6
7
23
22
A1
A0
O0
8
9
21
20
10
11
19
18
O1
O2
12
13
17
16
GND
14
15
A5
A4
A3
A2
VCC
A14
A13
A8
A9
A11
#OE
A10
#CE
O7
O6
O5
O4
O3
Figura 3. Pinout de la EPROM Intel 27256
Memorias Flash.
La memoria Flash es un tipo nuevo de memoria no volátil, de sólo lectura,
borrable eléctricamente y programable, por tanto, a primera vista, resulta muy
parecida a la memoria EEPROM. Veremos, sin embargo, que las memorias
Flash poseen unas propiedades interesantísimas para el diseño de sistemas
empotrados.
Memorias EPROM y FLASH. ©1999, José M Foces Morán -- 6
Paginación de documento completo:
116
Las memorias Flash han revolucionado, literalmente revolucionado, el campo
de las memorias de sólo lectura porque permiten la regrabación eléctrica del
dispositivo y, al estar la memoria estructurada en bloques de diferentes
tamaños, resulta fácil estructurar datos y programas para que su actualización
dentro del propio sistema sea rápida y segura. Además de esto, el precio de este
tipo de memorias ha sufrido unas notables reducciones desde su introducción
en 1988: la tendencia ha sido claramente facilitar su integración mejorando sus
formas de uso al mismo tiempo que el precio se ha ido equiparando y
reduciendo en comparación con otras tecnologías. El gráfico siguiente ilustra la
tendencia de las diferentes tecnologías de memorias en cuanto a su precio por
Megabyte.
120
Precio en $/Mbyte
100
80
Flash
SRAM
DRAM
EPROM
60
40
20
0
1991 1992 1993 1994 1995 1996 1997 1998
Año
Figura 4. Comparación de costes de las diferentes tecnologías de memorias
(Fuente Dataquest 30/5/94).
™ LA TECNOLOGÍA SUBYACENTE.
La estructura de la celda básica de memoria Flash es prácticamente la misma
que se usa en las EEPROM. Estas memoria usan un túnel de óxido más estrecho
que el de las EEPROM, por tanto, es posible utilizar tensiones de programación
de alrededor de 12v lo cual, a su vez, significa que la memoria aceptará unos
10000 ciclos de borrado y reprogramación. El array de celdas de memoria tiene
una estructura de filas/columnas igual a las que hemos estudiado en los
párrafos anteriores. Una diferencia notable es que estas memorias incluyen un
circuito de control muy inteligente que posibilita que las operaciones de
programación y borrado sean fáciles y directas, tan solo se requiere que el
procesador envíe el comando adecuado y, el circuito de control decodificará
Memorias EPROM y FLASH. ©1999, José M Foces Morán -- 7
Paginación de documento completo:
117
este comando y procederá a ejecutar la operación solicitada inmediatamente.
Estas memorias pueden programarse con la misma facilidad que un SRAM,
pudiendo además conservar el contenido indefinidamente.
En la figura siguiente aparece un diagrama estructural de una memoria Flash.
El array de memoria está formado por células FAMOST que son direccionadas
por dos decodificadores de fila y columna. Estos decodificadores aceptan la
dirección procedente del buffer de direcciones de entrada: la parte baja del bus
de direcciones del procesador completa porque, estas memorias, al igual que las
SRAM no necesitan ser provistas de direcciones multiplexadas de fila y
columna.
VPP
Control de la Flash
Temporizador
Direcciones
Conmutador de
tensión de
Programación
Decodificador de filas
#oe
Buffer de direcciones
#ce
Registro de
Comandos
Conmutador de
tensión de borrado
Array de células de Memoria
Decodificador de
columnas
#we
Puerta de i/o
Entrada de Datos
Buffer de entrada/salida de Datos
Salida de
Datos
Figura 5. Diagrama estructural de un chip genérico de memoria flash.
Memorias EPROM y FLASH. ©1999, José M Foces Morán -- 8
Paginación de documento completo:
118
Figura 6. La cuarta generación del proceso ETOXTM de Intel, el de 0.6
micras.(Cortesía de Intel Corp.)
™ EL PROCESO DE PROGRAMACIÓN.
En funcionamiento normal, la tensión de alimentación del chip de memoria
Flash, exceptuando casos especiales, es de 5v, sin embargo, para programar la
memoria es necesario una tensión Vpp de 12v. El circuito de control de la Flash,
genera un pulso de 12v durante 10 us, esto produce la carga de la puerta
flotante. Una memoria Flash de 1Mbit puede ser programada en unos 2
segundos. En estas memorias el proceso de borrado en vez de ir de celda en
celda como en el caso de las EEPROM, se aplica a bloques completos del array
de memoria. La gama de productos disponibles es muy amplia así que
podemos encontrarnos con memorias Flash que no necesitan +12v y, por tanto
su proceso de borrado será más lento; otras aceptarán el borrado de ciertas
páginas individuales, etc.
™ EL CONTROL DE LAS MEMORIAS FLASH ILUSTRADO CON EL CHIP INTEL 28F400B.
El propósito de esta sección consiste en presentar de forma ilustrada los
conceptos, ideas y estructuras fundamentales acerca de las memorias Flash, por
tanto, no debe utilizarse como referencia de diseño ni de programación. El
manual original de Intel es la fuente de información exhaustiva que hay que
emplear en los diseños.
El microprocesador lee, programa y borra la memoria Flash enviando
comandos al controlador de la memoria. El controlador, una máquina de
estados, es altamente inteligente. En esta sección vamos a estudiar un caso
particular de memoria Flash de la compañía Intel, el chip 28F400.
Memorias EPROM y FLASH. ©1999, José M Foces Morán -- 9
Paginación de documento completo:
119
Figura 7. Chip de memoria Flash Intel 28F400BV (Cortesía de Intel Corp.)
El chip de memoria Flash 28F400BX es una memoria flash de alto rendimiento
de 4 Mbits de capacidad organizada como 256K words (16 bits) o 512 K bytes (8
bits). A su vez, esta memoria está organizada en bloques borrables, uno de ellos
llamado bloque de arranque (boot block) es protegible contra escritura por
hardware, el tamaño de este bloque es de 16 K bytes, además la memoria
contiene 2 bloques de parámetros de 8 K bytes cada uno de ellos. Los nombres
asignados a estos bloques de la memoria nos dan una pista del posible uso para
el que podrían emplearse en proyectos reales, no significa pues que
obligatoriamente deba hacerse el uso especificado. Los bloques principales de la
memoria ocupan 96 Kbytes y tres bloques de 128 Kbytes. En la figura que sigue
aparece el mapa de memoria de esta memoria. Cada bloque de esta memoria
puede ser borrado y reprogramado unas 100000 veces si el rango de
temperatura de funcionamiento es el correspondiente a aplicaciones
comerciales, normales.
7FFFFh
60000h
Bloque principal de 128 Kbytes
5FFFFh
40000h
Bloque principal de 128 Kbytes
3FFFFh
20000h
Bloque principal de 128 Kbytes
1FFFFh
08000h
Bloque principal de 96 Kb
07FFFh
06000h
Bloque de parámetros de 8 Kb
05FFFh
Memorias EPROM y FLASH. ©1999, José M Foces Morán -- 10
Paginación de documento completo:
120
04000h
03FFFh
00000h Bloque de arranque (boot block) de 16 Kb
Tabla 2. El mapa de bloques de una memoria 28F404-B.
En la versión B de esta memoria –la que estamos estudiando- el bloque de
arranque (boot) se encuentra en la parte baja del mapa de memoria, esto es, en
las direcciones 0 y siguientes del dispositivo. Este bloque suele usarse para
albergar el núcleo de código de arranque esencial para la inicialización del
sistema que, por tener un carácter tan fundamental, puede ser protegido por
hardware. Las operaciones de bloqueo y desbloqueo se llevan a cabo mediante
combinaciones de estado de las patillas #wp y #rp.
Recordemos que estas memorias contienen un controlador interno que, en
forma de máquina de estados, representa el estado del dispositivo y contiene la
inteligencia necesaria para interpretar los comandos enviados por el
microprocesador y ejercer las acciones que representan a esos comandos dentro
de los bloques de memoria incluidos en el array. La interfaz de comandos entre
el controlador interno del chip de memoria Flash y el microprocesador (el host)
recibe el nombre de Command User Interface (Interfaz de Comandos de Usuario).
La máquina de estados interna (WSM, Write State Machine) ejecuta de forma
automática los algoritmos (secuencias de acciones adecuadamente
temporizadas) los cuales incluyen las verificaciones que correspondan, de este
modo, el microprocesador se ve descargado de estas tareas y los algoritmos de
programación pueden ejecutarse, por tanto, en circuito sin necesidad de separar
el componente Flash del circuito para su programación mediante un
programador universal. La máquina de estados de control, WSM contiene un
registro de status llamado SR (status register) el cual puede ser explorado por el
microprocesador e informar del éxito de las operaciones llevadas a cabo.
Las operaciones de programación y de borrado se llevan a cabo realizando dos
ciclos de escritura seguidos sobre la memoria en un formato que está
normalizado y por tanto sirve para cualquier memoria Flash de cualquier
fabricante. Las operaciones de escritura se pueden llevar a cabo byte a byte o
word a word. La programación de cada byte o word de este memoria puede ser
programada independientemente del resto, a diferencia de las operaciones de
borrado las cuales sólo pueden llevarse a cabo en bloque y borran todas las
posiciones de memoria pertenecientes a un bloque simultáneamente.
La patilla #byte sirve para especificar si un determinado acceso a la memoria va
a emplear el bus completo de 16 bits (valor 1 en #byte) o, por el contrario, va a
emplear el bus de byte (valor 0 en #byte). La interfaz de bus de esta memoria
en sus aspectos más básicos recuerda a la interfaz presentada por una EPROM.
Memorias EPROM y FLASH. ©1999, José M Foces Morán -- 11
Paginación de documento completo:
121
En la tabla y figura siguientes aparecen el patillaje lógico y físico de la memoria
28F400BXT.
Patilla
Tipo
Nombre y Función
A0-A14
Entrada
Entrada de direcciones para Direcciones de Memoria. Las direcciones son
internamente registradas en un latch durante un ciclo de escritura.
A9
Entrada
Entrada de direcciones: Cuando A9 está a VHH se accede al modo firma.
DQ0-DQ7
Entrada/Salida
Entradas y Salidas de Datos: Recoge el Array de datos de entrada en el
segundo ciclo de #ce y #we durante un comando de programa. Recibe
comandos del Interfaz de comandos de usuario cuando están activas #ce
y #we. Los datos se registran en un latch durante el ciclo de escritura.
DQ8-DQ15
Entrada/Salida
Entradas y Salidas de Datos: Recoge el Array de datos de entrada en el
segundo ciclo de #ce y #we durante un comando de programa. Los datos
se registran en un latch durante el ciclo de escritura. Da salida al Array de
datos de salida.
#ce
Entrada
Señal de habilitación de Chip: Activa la lógica de control de
dispositivos, los buffers de entrada, los decodificadores y los
amplificadores sensibles. Es activa baja.
#oe
Entrada
Señal de habilitación de Salida: Habilita la salida de dispositivos hacia
buffers de datos en un ciclo de lectura. Es activa baja.
#we
Entrada
Señal de habilitación de escritura: Controla la escritura en el Registro de
Comandos y en los bloques de Arrays. Es activa baja. Las direcciones y
datos son registradas en un latch en el flanco de subida del pulso #we.
#rp
Entrada
Reset/Modo de bajo consumo intenso: Utiliza tres niveles de tensión
(VIL, VIH Y VHH) para controlar dos funciones distintas Reset / Modo de
bajo consumo intenso y desbloqueo del bloque de arranque.
#wp
Entrada
Protección de escritura: Proporciona un método para desbloquear el
bloque de arranque en un sistema no alimentado a 12 V.
Nota: Este método está sobrescrito y el bloque de arranque desbloqueado
cuando #rp está a VHH .
#BYTE
Entrada
Señal de habilitación de BYTE: Controla si un dispositivo opera en modo
ancho de bus un byte o dos bytes. Debe ser controlado por niveles CMOs.
Vcc
Fuente de alimentación de dispositivos: 5.0V+/- 10%, 3.3V +/- 0.3V,
2.7V-3.6V (Sólo BE/CE).
Vpp
Fuente de alimentación de programa/borrado: Aplicando una tensión
de 5V +/-10% o 12V +/-5% en este pin, se pueden borrar bloques de
Arrays de memoria o datos de programa.
GND
Tierra digital para toda la circuitería interna.
NC
Sin conexión: Este pin puede ser alimentado o dejado al aire.
Tabla 3. Nombres de las patillas de la EPROM Intel Flash 28F400
Memorias EPROM y FLASH. ©1999, José M Foces Morán -- 12
Paginación de documento completo:
122
Intel
28F400
VPP
1
44
#rp
#wp
2
43
#we
A17
3
42
A8
A7
4
41
A9
A6
5
40
A10
A5
6
39
A11
A4
7
38
A12
A3
8
37
A13
A2
9
A14
A1
10
36
35
A0
11
34
A16
#ce
12
33
#byte
GND
13
32
GND
#oe
14
31
DQ15 /A-1
DQ0
15
30
DQ7
DQ8
16
29
DQ14
DQ1
17
28
DQ6
DQ9
18
27
DQ13
DQ2
19
26
DQ5
DQ10
20
25
DQ12
DQ3
21
24
DQ4
DQ11
22
23
Vcc
A15
Figura 8. Patillaje de la memoria Flash 28F400BXT de Intel.
™ APLICACIONES.
Estas memorias son ideales para sistemas donde es previsible la actualización
relativamente frecuente de partes importantes del sistema de arranque o del
propio sistema operativo. El flujo de actividades para actualizar uno de los
bloques de parámetros, por ejemplo, incluiría las siguientes actividades:
1. Obtener el fichero con el nuevo bloque de parámetros.
Memorias EPROM y FLASH. ©1999, José M Foces Morán -- 13
Paginación de documento completo:
123
2. Arrancar el sistema empotrado en el modo de actualización.
3. Conectar el sistema a un modem o a un PC portátil.
4. Indicar al sistema que baje (download) el conjunto de parámetros nuevo a
su memoria RAM.
5. Efectuar un chequeo de la integridad del conjunto de parámetros.
6. Indicar al sistema que borre el bloque de 8 Kb adecuado, esta operación
durará menos de 1 segundo de tiempo.
7. Con el nuevo bloque de parámetros en RAM, garantizando que no pueda
perderse la potencia eléctrica, instruimos al software del sistema que
programe cada una de las posiciones del bloque con los contenidos
albergados en RAM
Este tipo de memorias se ha utilizado con éxito en sistemas empotrados
basados en PC donde el BIOS del sistema puede ser albergado por entero en
una memoria Flash y, por tanto fácilmente actualizado cuando sea necesario.
Otras aplicaciones incluyen teléfonos móviles, discos electrónicos, firmware
para equipos de red y de telecomunicaciones, firmware para impresoras y
plotters.
™ LAS OPERACIONES BÁSICAS DE LA MEMORIA FLASH: MÁS DETALLES.
Para que la memoria Flash se comporte como si fuese una EPROM en la que
sólo podemos efectuar ciclos de lectura, es necesario poner al controlador de la
memoria en el modo llamada Lectura de Matriz (Read Array). El comando del
CUI (Command User Interface) que es necesario enviar al WSM (Write State
Machine) es el comando Read Mode, representado por FFh, es decir, antes de
poder efectuar lecturas de la memoria Flash es necesario efectuar un ciclo de
escritura en el que le enviemos el byte FFh. El ciclo de escritura es un ciclo de
escritura normal del microprocesador en uso, en nuestro caso el i386EX. A
partir del instante en el que el WSM haya llegado al estado Read Array, el
microprocesador puede efectuar ciclos de lectura sobre cualquier dirección de la
memoria Flash del mismo modo que con un EPROM. La diferencia con una
EPROM en relación con los ciclos de lectura incluyen el hecho de que la
memoria flash puede presentar un bus de 8 o de 16 bits (#byte), por lo demás, si
el dispositivo está en el modo Read Array, los ciclos de bus de lectura son
iguales a los del EX sobre una EPROM.
Memorias EPROM y FLASH. ©1999, José M Foces Morán -- 14
Paginación de documento completo:
124
Las dos tablas siguientes resumen los comandos del CUI que pueden ser
enviados por el microprocesador a la WSM junto con sus códigos y los estados
del bus del microprocesador y la memoria que representan a esos comandos.
Código
del
comando
Modo de la memoria Flash
Descripción
00
Inválido/reservado
No deben usarse comandos
inválidos
FF
Read Array
La memoria se pone en el
modo Read Array, en este
modo los ciclos de bus de
lectura serán atendidos por la
memoria poniendo los datos
en el bus de datos de salida.
Este comando también puede
emplearse para abortar un
proceso de programación o de
borrado (Consultar el manual
para obtener todos los detalles
necesarios).
Lectura o abortar borrado o
programación.
40
Puesta en marcha del
proceso de programación.
Pone al CUI en un modo en el
que el siguiente ciclo de
escritura cargará los registros
de Direcciones y de Datos de
la memoria. El segundo ciclo
de lectura después del
comando 40 comenzará de
hecho a programar posiciones
de memoria.
10
Puesta en marcha del
proceso de
programación(Alternativo)
20
Puesta en marcha del
proceso de borrado
Prepara el CUI para la
recepción del comando de
confirmación de borrado.
B0
Suspensión de escritura
Sólo es válido si una operación
de borrado está en curso.
Memorias EPROM y FLASH. ©1999, José M Foces Morán -- 15
Paginación de documento completo:
125
70
Lectura del registro de status Un ciclo de lectura sobre la
Flash resultará en la
transferencia de su registro de
status a través de las líneas del
bus de datos.
50
Borrado del registro de
status
90
Identificador inteligente
Un ciclo de lectura posterior a
este modo resultará en la
transferencia del código del
fabricante a través del bus de
datos.
Tabla 4. Codificación de comandos de la memoria flash Intel 28FX400.
Primer ciclo de bus
Segundo ciclo de bus
Comando
Operación Dirección Datos Operación Dirección Datos
Read Array
Escritura
(W)
X
FFh
-
-
-
Identificador
Inteligente
W
X
90h
Lectura ®
IA
IID
Lectura del registro
de status
W
X
70h
R
X
SRD
Borrado del registro
de status
W
X
50h
-
-
-
Escritura de un
byte/word
W
WA
40h
W
WA
WD
Escritura de un
byte/word (alterno)
W
WA
10h
W
WA
WD
Confirmación de
borrado en bloque
W
BA
20h
W
BA
D0h
Suspensión/reinicio
de escritura
W
X
B0h
W
X
D0h
Tabla 5. Conformado de comandos en ciclos de bus para la flash 28FX400
Memorias EPROM y FLASH. ©1999, José M Foces Morán -- 16
Paginación de documento completo:
126
™ EL CICLO DE BUS DE LECTURA DE UNA MEMORIA FLASH.
El ciclo de bus de lectura de una memoria Flash es muy similar al de una
EPROM. El dispositivo debe hallarse en el modo Read Array. Para indicar la
transacción de lectura sobre el chip de memoria Flash, el microprocesador debe
llevar a cabo las siguientes operaciones en orden:
1. Definir un ciclo de bus que incluya la dirección de memoria Flash que
se desea leer y, por supuesto forzar su línea w/#r a valor 0. Esto hará
que se fijen las líneas #we y #rp de la flash a nivel 1. El
microprocesador en este instante tiene preparadas las líneas de salida
que representan el ancho del ciclo de bus actual, 8 o 16 bits. En el caso
del i386EX estas líneas se llaman #ble y #bhe que, estando las dos
asertadas representan un ciclo de 16 bits y que estando sólo una
asertada, significa que el ciclo de bus es de 8 bits. Un decodificador
externo fuerza la entrada #byte de la memoria Flash a 0 cuando sólo
una línea byte enable del i386EX contiene un 0 y, fuerza un 1, cuando
son ambos byte enables los que presentan un 0.
2. El decodificador de direcciones o, en el caso del i386EX el propio
microprocesador a través de sus líneas de selección de chip, debe
activar la línea #cs del chip de memoria flash. En ese momento, la
memoria inicia el ciclo de bus de lectura. Manteniendo la memoria
alimentada a 5v en unos 60ns aproximadamente, aparecerá en el bus
de datos el dato solicitado.
La figura siguiente incluye el cronograma de operaciones de lectura sobre la
memoria Flash 28F400.
Memorias EPROM y FLASH. ©1999, José M Foces Morán -- 17
Paginación de documento completo:
127
Dirección
de
memoria
dirección
estable
#ce
#oe
#we
data bus
datos
válidos
alta Z
#rp
telqv
Figura 9. Cronograma del ciclo de lectura de una memoria flash Intel 28F400.
El resto de ciclos de bus que permiten que la memoria flash pueda ser borrada,
programada, leído su status, etc. Pueden ser consultados en el manual de Intel
“SmartVoltage Boot Block Family”.
™ UN EJEMPLO MÁS PRÁCTICO.
Usando los comandos y ciclos de bus correspondientes a memorias Flash
revisados en la sección anterior, vamos a realizar un programa en lenguaje C
que nos permita programar un bloque de una memoria Flash. El bloque que va
a ser programado se encuentra en la dirección de memoria destino +
TAM_FLASH. El algoritmo supone que el dispositivo 28F400BXT se halla en el
modo de 16 bits (word).
//Comandos de la memoria Flash
#define BORRARSTATUS 0x50
Memorias EPROM y FLASH. ©1999, José M Foces Morán -- 18
Paginación de documento completo:
128
#define ESCRIBIRDATOS 0x40
int programar_Flash(volatile short *dir, short *buf, int
longit)
{
int val = SIN_ERRORES;
// Escribir datos, word a word
while( longit ){
if(flash_no_borrada( dir )) borrar_flash( dir );
//Borrar el status register
*(dir + TAM_FLASH) = BORRARSTATUS;
//Enviar los datos a escribir
*(dir + TAM_FLASH) = ESCRIBIRDATOS;
*(dir + TAM_FLASH) = *buf;
//¿La WSM está lista?
while( !( *(addr + TAM_FLASH) & WSMLISTA ) )
quieto();
long --;
dir++;
buf++;
}
}
El diseño de un sistema basado en el EX con un sistema de firmware residente
en una memoria flash 28F400 responde a un diagrama de bloques-circuito tan
Memorias EPROM y FLASH. ©1999, José M Foces Morán -- 19
Paginación de documento completo:
129
sencillo como el siguiente. La lógica de adaptación es mínima y responde a los
dispares requerimientos de temporización de ambos chips. En concreto la PLD
incluida (Programmable Logic Device) adapta los tiempos de liberación del bus
de la memoria flash y el EX. En el capítulo de diseño de hardware
estudiaremos con más detalle estos y otros aspectos relativos a la integración de
los diferentes tipos de memoria en sistemas basados en el microprocesador
i386EX.
GPIO
#RESET
5V
5V
Vpp
A (0-7)
A (1-18)
#ce
#cs
Intel386TM EX #rd
Microprocesador
PLD
GPIO
#oe
#we
#wr
D (0 -15)
#BYTE #wp
Transceptor
GPIO
#RESET
PWRGOOD
Intel
28F400-T
DQ (0-15)
#rp
Figura 10. Un sistema basado en el microprocesador i386EX cuyo firmware se
halla incluido en una memoria flash Intel 28F400-T.
Por último, vamos a detallar el procedimiento para de borrado instantáneo de
un bloque completo usando un sencillo flujograma. El programador
implementaría estas operaciones en un lenguaje de programación para ser
ejecutadas por el microprocesador.
Memorias EPROM y FLASH. ©1999, José M Foces Morán -- 20
Paginación de documento completo:
130
Memorias
Acceso aleatorio
RAM
DRAM
SRAM
Híbridas
NVRAM
FLASH
EEPROM
ROM
EPROM
PROM
ROM de máscara
FIFO
CAM
SERIAL
Figura 11. Una clasificación de las memorias más importantes.
Memorias EPROM y FLASH. ©1999, José M Foces Morán -- 21