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