Escolar Documentos
Profissional Documentos
Cultura Documentos
Indice
15
ANLISIS DE SISTEMAS DIGITALES
1
2.
2.1. General 2.2. El men configuration 2.3. Etiquetas y smbolos 2.4. Cambiar de men 2.5. El men format 2.6. Crear la etiqueta del reloj del sistema 2.7. Crear la etiqueta del bus de datos 2.8. El men waveform 2.9. Borrar la lista de etiquetas 2.10. Aadir etiquetas 2.11. Los markers 2.12. Secuencia de disparo o trigger 2.13. Men trigger 2.14. Borrar una secuencia de disparo
Indice
14
3. LA UNIDAD DE PRUEBAS
3.1. El interprete de comandos 3.2 El editor de programas
16
15 18 22
4.
EL MICROPROCESADOR 8088
21 22 36 23 23 23 24 29 30 31
4.1. Descripcin 4.2. Los registros de la eu del 8088 4.3. Los registros de la biu del 8088 4.4. Unidad aritmtica/lgica. alu 4.5. Buses 4.6. MMU 4.7. El patillaje de la cpu intel 8088 4.8. Timings de la CPU 8088 4.9. Ciclos de reposo 4.10. La arquitectura pipeline
5. REALIZACIN DE LA PRCTICA
5.1. Objectivos de la prctica 5.2. Descripcin del sistema basado en la cpu 8088 5.3. Configuracin del analizador 5.4. Lneas generales a seguir 5.5. El generador de reloj y el watchdog 5.6. La CPU 5.7. La memoria 5.8. Acceso a perifrico 5.9. El teclado 5.11. El display 5.12. La PIO 5.13. Estudio de una comunicacin RS-232
35
34 34 35 38 40 44 59 51 52 55 59 59
Indice
60 61 65 68
Pgina 1
Pgina 2
Pgina 3
Figura 1. Reconstruccin de una seal Esta tendencia a cuadricularlo todo, parece limitar la utilidad del analizador de tiempos. Hemos de recordar, no obstante, que no lo queremos como un instrumento paramtrico. Si deseamos ver la forma o el tiempo de subida de una seal, estamos utilizando el instrumento equivocado. No obstante, si se desea verificar los tiempos relativos entre flancos vindolos a la vez, entonces es el instrumento correcto. Cuando un analizador de tiempos muestrea una seal de entrada, sta puede estar a nivel alto o nivel bajo. Si el nivel es alto en una muestra, y bajo en la siguiente, el analizador sabe que la seal de entrada ha cambiado en algn momento entre las dos muestras. Pero no sabe cuando tuvo lugar el cambio. El mayor error para esta ambigedad, es un periodo de muestreo (figura 2).
Pgina 4
Recordemos que cada muestra utiliza una posicin de memoria. As pues, una mayor resolucin (mayor velocidad de muestreo), implica una menor ventana de observacin, para una misma capacidad de memoria; por lo tanto se requiere un compromiso entre resolucin y tiempo total de adquisicin .
b. - Muestreo transicional
Cuando tenemos una seal de entrada a rfagas, por ejemplo la seal de la figura 3, nos vemos obligados a ajustar el perodo de muestreo (4 ns en el ejemplo) para conseguir una resolucin adecuada, para capturar los pulsos del principio. Esto significa, que un analizador con 4 K muestras de memoria, terminar la adquisicin al cabo de 16.4 s, por lo tanto el siguiente tren de pulsos no ser capturado.
Observemos que, pasados los primeros 44 ns, hemos muestreado y adquirido datos durante un largo tiempo; en el cual no haba actividad. Esto ha agotado la memoria del analizador sin proporcionar informacin adicional. Lo que en realidad necesitamos conocer es cundo suceden las transiciones y si son positivas o negativas. Para conseguirlo, podramos utilizar un "detector de transiciones" a la entrada del analizador de tiempos junto con un contador. El analizador de tiempos, ahora capturar slo aquellas muestras precedidas de una transicin, junto con el tiempo transcurrido desde la ultima transicin. De esta forma, utilizamos slo dos posiciones de memoria por transicin y ninguna cuando no hay actividad a la entrada. Esta tcnica se llama Anlisis Transicional (figura 4).
Pgina 5
Podemos hablar de "capacidad efectiva de memoria", la cual es igual al tiempo total empleado para capturar los datos, dividido por el perodo de muestreo. En el ejemplo de la fig. 3, tenamos una ventana de observacin total de 50,088 us, que dividido entre 4 ns, nos da una capacidad efectiva de memoria de 15,5 K muestras.
Figura 4. Anlisis transicional c. - Captura de glitches Un glitch se define como cualquier transicin que supere el umbral de tensin durante un tiempo inferior al perodo de muestreo (figura 5).
Figura 5. Deteccin de glitches Uno de los principales problemas en un sistema digital son los glitches. Los glitches tienen el antiptico hbito de aparecer en los momentos ms inoportunos y de provocar los ms desastrosos resultados. Cmo podemos capturar un glitch que aparece una vez cada 36 horas y nos vuelve loco el sistema ? Los analizadores lgicos, tienen un sistema de captura de glitches y unas posibilidades de disparo que hacen ms posible localizar los problemas provocados por los glitches.. Un glitch puede ser causado por: un acoplamiento capacitivo entre pistas, el rizado de la alimentacin, elementos que piden grandes picos de corriente, retardos entre seales, etc. El analizador de tiempos despus de muestrear la seal de entrada, puede seguir el rastro de cualquier transicin que suceda entre dos muestras, por lo tanto podr reconocer fcilmente un glitch.
Pgina 6
Durante la visualizacin de glitches, puede ser de gran utilidad, el poder disparar sobre el glitch y visualizar los datos antes del disparo. Esto puede ayudarnos a identificar qu lo ha causado. Pensando en el ejemplo anterior, podemos dejar el analizador a la espera del glitch, y una vez suceda, con calma analizar las causas.
Pgina 7
NOTA: La memoria tiene una capacidad determinada, por ejemplo 4K, lo cual significa que podemos almacenar 4.000 muestras. La velocidad de muestreo est relacionada con la posicin de la base de tiempos . A menos tiempo de la Base mayor velocidad de muestreo. Si ponemos un valor grande en la base de tiempo, la velocidad de muestreo ser pequea y viceversa. Si hacemos la adquisicin a una velocidad demasiado pequea (base de tiempos grande) puede ser que las muestras tengan una separacin tal que perdamos informacin. Si ponemos una velocidad de adquisicin demasiado
Pgina 8
grande (Base pequea) la adquisicin ser correcta pero la ventana que observamos ser pequea y tenemos poca informacin. Lo ms correcto ser hacer una primera adquisicin con una velocidad grande y luego hacer nuevas adquisiciones a menor velocidad para tener la informacin necesaria sin perder detalles. En el botn "control de adquisicin" tenemos dos formas de hacerla : automtica y manual. En la adquisicin automtica ,normalmente el "trigger" se sita en el centro de la memoria. En el modo manual podemos elegir la posicin y la velocidad de muestreo. En la "visualizacin" el Delay nos indica la posicin del centro de la pantalla respecto al trigger. Por tanto el Delay slo hace referencia a lo que estamos viendo en el centro respecto al trigger. No hay que confundir la velocidad con que se adquieren los datos con las modificaciones de la base de tiempos para visualizar los datos.
Nota: Con mucha frecuencia se utiliza un disparo compuesto por flanco y por patrn.
Pgina 8
SYSTEM
AN ALIZADOR
AN ALYZER
Pgina 9
Para dejar inactivo el segundo analizador, pulsar sobre el campo Type, a continuacin pulsar sobre la opcin Off, dentro del campo de configuracin. Para darle un nombre el primer analizador primero hay que borrar el que tiene, para ello pulsar sobre el campo Name, a continuacin pulsar Clear para borrar el anterior, y luego escribir 8088. Pulsar Done para finalizar. Para asignar las sondas A3 y A4 al primer analizador, pulsar sobre ellas. A continuacin pulsar sobre la opcin 8088, que est encima. El campo "Type" del primer analizador debe estar en "Timing" si se desea realizar un anlisis de tiempos ; y en "State" si se desea realizar un anlisis de estados. De momento dejarlo en "Timing." Junto al nombre de las sondas, hay unos smbolos que indican el estado de las seales que tienen conectadas. El smbolo indica que tiene conectada una seal variante en el tiempo. El smbolo indica que tiene un nivel alto. El smbolo _ indica que tiene un nivel bajo.
Pgina 10
La mitad inferior de la pantalla est formada por cinco columnas o campos. La primera correspondiente al nombre de las etiquetas. Pulsar sobre la etiqueta para cambiarle el nombre, activarla o desactivarla. La segunda define la polaridad de la etiqueta. Dejarla en lgica positiva. Las tres siguientes corresponden al reloj y a las sondas o pods.
Pgina 11
2.8- EL MEN WAVEFORM Una vez creadas las etiquetas, debemos elegir las seales que deseamos visualizar. Entrar en el men Waveform 8088.
Como regla general, borrar la antigua lista de etiquetas.
Pgina 12
Observar que la adquisicin siempre es diferente debido a que no se ha definido ninguna secuencia de disparo. El trazo discontinuo vertical que aparece indica el instante de disparo. En la parte inferior de la pantalla, el trazo grueso sobre el discontinuo es la ventana de observacin actual respecto a la totalidad de los datos adquiridos. Observar que encima de la seal de CLOCK existen unas rayitas que indican las divisiones del tiempo. Cada separacin equivale al tiempo fijado en la base de tiempos. En el centro de la pantalla hay una lnea ms gruesa , es la referencia. Pulsando sobre Delay o sobre la base de tiempos y girando el botn podemos ver sus efectos.
NOTA En la parte inferior de la pantalla, debajo de la lnea de los markers, aparece Para desactivar los markers pulsar sobre Markers Time y Off.
Pgina 13
Pgina 14
pgina 15
3- LA UNIDAD DE PRUEBAS
3.1- EL "INTERPRETE" DE COMANDOS
El dilogo entre el sistema y el usuario se realiza a travs del interprete de comandos. Al disponer slo de dos lneas en el display, el dilogo queda un poco limitado. Por ello se ha optado por la tcnica de pregunta-respuesta. Limpiando la pantalla cuando finaliza una orden. Siempre que el sistema d un mensaje de error o de presentacin, desaparecer cuando el usuario pulse una tecla, para dejar paso al "prompt" ( "") del sistema.
3.1.1- LOS "PROMPTS" DEL SISTEMA Cuando aparece el prompt en la esquina superior izquierda del display significar que el sistema est preparado (Prompt, significa listo,preparado, inmediato) para recibir una orden, la cual deber ir seguida de la tecla return. El sistema est formado por tres indicadores o prompts diferentes, que indican el tipo de aplicacin que se est ejecutando. As: El smbolo "", indica el prompt del interprete de comandos. Significa que el sistema est preparado para recibir un nuevo comando. El smbolo "?", significa que el sistema est esperando una entrada de datos por teclado. El dato puede ser un nmero, un nombre de fichero o el tipo de error que se desea generar, dependiendo de la aplicacin que se est ejecutando. El smbolo ":", significa que el editor de programas est esperando la siguiente orden a ejecutar. Por ejemplo aadir una instruccin de programa, borrar una instruccin, borrar el programa, etc.
3.1.2- LA ORDEN " EDIT " El programa ejecutar el editor de programas. Esta orden est especialmente pensada para que el alumno aprenda a programar en cdigo mquina. Al ser una aplicacin con sus propias ordenes, se explicar su funcionamiento ms adelante.
15
pgina 16
3.1.3- LA ORDEN " ERROR " Esta orden forzar al programa a provocar un error de hardware. Se pueden generar hasta cinco errores diferentes. Generado el error, el sistema dejar de funcionar. La nica manera de recuperar las condiciones de funcionamiento normal, es pulsar el botn de reset del Aparato. Al escribir la orden ERROR, la pantalla se borrar para dejar paso al mensaje "Numero de error". En la lnea inferior aparecer el prompt conforme el programa est esperando un nmero entre 1 y 5. Cualquier otro valor provocar un mensaje de error. El nmero de error slo puede escribirse en decimal.
3.1.4- LA ORDEN " ETIQ " Esta orden configura el analizador para poder crear las 35 etiquetas, y realizar la prctica. 3.1.5- LA ORDEN " EXEC " Esta orden ejecuta un programa escrito por el alumno. El programa habr sido escrito con el editor de programas, el cual se explicar ms adelante. Si se desea ejecutar un programa cclico, debe tenerse la precaucin de refrescar el WatchDog dentro del bucle, si no el sistema se inicializar de nuevo en menos de un segundo; si por el contrario se decide realizar un programa secuencial hay que tener la precaucin de aadir el cdigo de retorno de funcin inter-segmento, CS hexadecimal, si no el programa seguir avanzando por la memoria hasta que el WatchDog inicialice el sistema. 3.1.6- LA ORDEN " PIO " Esta orden enva un carcter por el puerto A de la PIO. De esta manera el alumno puede realizar el estudio completo de un acceso a perifrico. Al escribir la orden "PIO", la pantalla se borrar para dejar paso al mensaje "Dona'm el valor". En la lnea inferior aparecer el "prompt" conforme el programa est esperando un nmero entre 0 y 255. Cualquier otro valor provocar un mensaje de error. El valor que se desea escribir en la PIO puede introducirse en decimal o hexadecimal de forma indistinta. Pero, hay que aadir el prefijo 0x si se trata de uncdigo hexadecimal. Por ejemplo, introducir el nmero 35, el cdigo 0x23 producir el mismo resultado a la salida de la PIO.
16
pgina 17
Esta orden hace un volcado de la pantalla actual del Analizador en disco. La imagen de la pantalla se grabar en formato PCX de 16 tonos de grises. Si se desea cualquier otro formato tendr que realizarse a travs de los mens internos del Analizador. Al escribir el comando PCX, la pantalla se borrar para dejar paso al mensaje "Nom del fitxer". En la lnea inferior aparecer el prompt conforme el programa est esperando el nombre del fichero sin extensin. Un nombre de fichero incorrecto producir un mensaje de error.
3.1.8- LA ORDEN " RESET " El programa entra en un bucle infinito sin refrescar el WatchDog del sistema. Esto provocar que al cabo de unos 500 ms acte el WatchDog e inicialice de nuevo el sistema. Esta orden est especialmente pensada para que el alumno pueda estudiar el funcionamiento del WatchDog.
3.1.9- LA ORDEN " RS232 " Esta orden enva un conjunto de mensajes al Analizador para que el alumno pueda estudiar una comunicacin serie y el protocolo XON/XOFF. Hay que tener en cuenta que ste es el nico comando que puede utilizarse para estudiar una comunicacin serie. Cualquier otro comando, que configure el Analizador o que capture pantallas, no sirve, ya que aborta la adquisicin de datos que estuviese realizando el Analizador.
3.1.10- LA ORDEN " WAVE " Esta orden est especialmente pensada para simplificar el trabajo al alumno a la hora de insertar las seales que se desea visualizar en el men Waveform. En la lnea superior aparecer el siguiente mensaje "Quin senyal", a partir de este momento pueden escribirse los nombres de las etiquetas que desee y hayan sido creadas e irn insertndose una detrs de la otra. Dentro de esta orden existen dos subrdenes: ESBORRAR. Borra todas las etiquetas que se estn visualizando. SORTIR. Sale de la orden Wave.
17
pgina 18
3.2.1- " AADIR CDIGO " A LA MEMORIA A. Aadir. Aade bytes de cdigo en memoria. En la lnea superior de la pantalla aparecer el mensaje "Posicio: nnn", donde nnn es el nmero de la posicin actual. En la lnea inferior aparecer el smbolo "?" a la espera que se introduzca el byte de cdigo. A medida que se vayan introduciendo bytes de cdigo, la posicin ir incrementndose. Para finalizar la introduccin, pulsar la tecla de retorno sin ningn cdigo.
3.2.2- " BORRAR " UNA POSICIN DE MEMORIA B nnn. Borrar. Permite eliminar la posicin nnn. En la lnea superior de la pantalla aparecer el mensaje "P:nnn -> 0xNN", donde nnn es el nmero de la posicin que se desea borrar y 0xNN es el valor que actualmente hay escrito. En la lnea inferior aparecer el mensaje "Borrar S/N ?". Si se pulsa la letra S la posicin de memoria ser eliminada.
18
pgina 19
E nnn. Editar. Permite modificar el valor de la posicin nnn. En la lnea superior de la pantalla aparecer el mensaje "P:nnn -> 0xNN", donde nnn es el nmero de la posicin que se desea modificar y 0xNN es el valor que actualmente hay escrito. En la lnea inferior aparecer el smbolo "?" a la espera que se introduzca el byte de cdigo. Si se deja en blanco, no se realizar ninguna modificacin.
3.2.4- " INSERTAR " UNA POSICIN DE MEMORIA I nnn. Insertar. Permite insertar un byte de cdigo entre la posicin nnn-1 y nnn. En la lnea superior de la pantalla aparecer el mensaje "Posicio: nnn", donde nnn es el nmero de la posicin actual. En la lnea inferior aparecer el smbolo "?" a la espera que se introduzca el byte de cdigo.
3.2.5- " LISTAR " EL PROGRAMA L. Listado. Visualiza por pantalla todo el programa escrito en la memoria. Debido al tamao de la pantalla, el listado saldr de dos bytes en dos bytes. Para pasar de pantalla pulsar una tecla. En las dos lneas de la pantalla aparecer el siguiente mensaje "P:nnn -> 0xNN", donde nnn es el nmero de la posicin de memoria y 0xNN es el valor que hay escrito.
3.2.6- "BORRAR" EL PROGRAMA N. Nuevo. Borra el programa actual y pone el contador de posiciones a cero.
3.2.7- "SALIR DEL EDITOR" DE PROGRAMASS. Salir. Sale del editor de programas y vuelve al interprete de comandos.
19
Pgina 21
4- EL MICROPROPROCESADOR 8088
4.1- DESCRIPCIN
El microprocesador 8088 tiene una arquitectura interna de 16 bits (ALU, registros, buses internos, etc.), pero externamente dispone de un bus de datos de 8 bits y un bus de direcciones de 20 bits. Este microprocesador aporta, como estructura compleja, los nuevos conceptos de pipeline y MMU. La CPU 8088, est dividida en dos bloques: Unidad de Interficie de Bus (BIU). Tiene la misin de realizar el ciclo de fetch, o sea, buscar en la memoria la siguiente instruccin y cargarla en la cola y comunicar la CPU con el exterior. Unidad de Ejecucin (EU). Se encarga de ejecutar las instrucciones que le suministra la BIU.
Como los dos bloques son independientes, mientras la EU no necesite el bus de direcciones y de datos, la BIU va cargando instrucciones adicionales y la EU va ejecutando las ya cargadas anteriormente. A este proceso se le llama pipeline. De esta forma cuando la EU acaba de ejecutar una instruccin, ya tiene preparada la siguiente.
Pgina 22
El 8088 tiene una cola de 4 bytes, donde se almacenan las instrucciones pendientes de ejecucin. Con este sistema el 8088 reduce el tiempo de carga y ejecucin de una instruccin. NOTA: El nico problema que presenta este mtodo viene cuando ha de ejecutarse una instruccin de salto o ruptura de secuencia. En estos casos las instrucciones que haba almacenadas en la cola no son correctas, y hay que cargar de nuevo las instrucciones desde la nueva posicin.
En la unidad de interfcie del bus tenemos (ver figura 6): - Registros de segmento. - Cola de instrucciones. - Puntero de instruccin - MMU. En la unidad de ejecucin tenemos: - Registros de datos; registros de puntero e ndice y registros de control (todos de 16 bits). - Unidad Aritmtica/Lgica (ALU). - Secuenciador y descodificador de instrucciones.
Pgina 23
4.5- BUSES
El 8088 posee un bus de datos interno de 16 bits. No obstante, externamente dispone de un bus de datos de 8 bits multiplexado con los 8 bits de menor peso del bus de direcciones. En funcin del estado de la seal ALE, sern datos o direcciones.
4.6- MMU
Esta es otra aportacin del 8088, en lo que se refiere a estructura compleja. Este microprocesador dispone de un bus de direcciones externo de 20 bits, con el que se puede direccionar un total de un megabyte de memoria. Todo el mapa de memoria est dividido en zonas de datos y cdigos. A estos bloques, se les llama "segmentos" y tienen un tamao de 64 Kbytes. Todos los accesos a memoria, son relativos (offset) a una direccin de base (segmento). La direccin total se forma sumndole un offset desplazado cuatro bits a un segmento. Cuando el 8088 necesita acceder a memoria, el Figura 7. Crear una direccin procedimiento es el siguiente: La BIU elige uno de los registros segmento y se le aade el valor de la direccin elegida. Por ejemplo en un ciclo de lectura de instruccin o fetch, el registro elegido es el CS y la direccin lgica es el contenido del registro IP. Fig. 7 Cuando es un acceso a memoria, los registros de segmentos elegidos son DS o ES. Aunque las instrucciones que manipulan el stack, utilicen como Segmento SS y offset SP.
Pgina 24
Pgina 25
A8-A15. Address. Estas seales contienen la informacin correspondiente a los siguientes 8 bits del bus de direcciones. Estas seales no estn multiplexadas en el tiempo, es decir que la informacin se mantiene vlida durante todo el ciclo mquina. AS16-AS19. Address / Status. Las seales A16 hasta A19 estn multiplexadas en el tiempo. Al principio de cada ciclo mquina, pasan a ser los cuatro bits de mayor peso del bus de direcciones. En la segunda parte del ciclo mquina, estas cuatro seales proporcionan informacin sobre el estado de la CPU. Cuando se han fijado las direcciones, en estas patas aparecen las seales S3 y S4. Estas dos seales pueden descodificarse para extraer la informacin correspondiente al segmento de memoria a que est accediendo el 8088 durante el ciclo mquina actual. La seal de estado S5 informa del estado del flag de permisin de interrupcin. S6 siempre se mantiene a nivel bajo. Estos bits de estado, no son necesarios en la mayora de sistemas, pero pueden ser utilizados para hacer diagnsticos del funcionamiento. Los buses de direcciones y datos entran en estado de alta impedancia cuando la CPU cede los buses. Durante el ciclo de reconocimiento de interrupcin, en las cuatro direcciones de mayor peso, la informacin referente a las direcciones, tendr un valor indeterminado, pero la informacin de estado ser vlida.
1 2
El smbolo ! indica negacin, o que es activa por nivel bajo. Entrada/Salida 3 iAPX88 hace referencia a un microsistema completo basado en la CPU 8088
Pgina 26
El flanco de bajada de ALE fija el bus de direcciones, hacindolas vlidas durante el resto del ciclo mquina. IO/!M. In/Out / Memory. Esta salida indica si el actual ciclo mquina est direccionando a un perifrico de E/S a la memoria (ALTO= E/S, BAJO = MEMORIA). Esta seal es valida durante todo el ciclo mquina. RESET. Esta entrada proporciona la manera de inicializar el sistema iAPX88. Esta entrada es activa por nivel alto, la cual viene activada desde el 8284A. Al activar la seal de RESET, provocamos que el procesador finalice la instruccin que estaba ejecutando y los buses quedan en estado de alta impedancia. Cuando la seal de RESET vuelve a ser cero, el 8088 empezar a ejecutar desde la posicin de memoria FFFF0 hexadecimal. Una vez inicializado el microprocesador, ste queda en las siguientes condiciones: 1. El registro de flags se pone a cero. Esto inhibe las interrupciones y el modo de ejecucin paso a paso. 2. Los registros DS, ES, SS y IP se ponen a cero. 3. El registro CS tiene el valor FFFF hexadecimal. Mn/!Mx. Minimum / Maximum. Esta entrada configura el modo de trabajo del 8088. Modo mnimo si vale uno y modo mximo si vale cero. El modo de trabajo del microprocesador indica el tamao del sistema que controla. Influye en el fan-out de los buses y las seales de control cambian de nombre y funcin para poder ser conectadas directamente al controlador de bus 8288. Las seales de control explicadas hasta ahora, son suficientes para controlar un pequeo sistema con los buses multiplexados. Si se desea controlar un sistema mayor y con el sistema de buses desmultiplexados, har falta conocer el resto de seales de control. DT/!R. Data Transmit / Receive. La seal DT/!R es una salida, que permite controlar la direccin del bus de datos cuando pasa a travs de un buffer bidireccional (74LS245). Cuando vale uno significa que el 8088 transmite los datos al bus de datos del sistema. Cuando vale cero, el 8088 recibe los datos desde el bus de datos del sistema. !DEN. Data Enable. La seal !DEN permite el paso de los datos a travs del buffer bidireccional. Esto evita colisiones en los buses mientras el 8088 pone las direcciones en el bus. INTR. Interrupt Request. La seal INTR, informa al 8088 que pare lo que est haciendo y que sirva la interrupcin solicitada. El 8088 muestrea esta seal durante el ltimo perodo de reloj de cada instruccin.
Pgina 27
Cuando la CPU detecta que INTR vale uno, el 8088 salta a una RSI (rutina de servicio de interrupcin) a travs de la tabla de vectores de interrupcin ubicada en la parte baja de la memoria. La seal INTR puede ser enmascarada por software manipulando el flag correspondiente en el registro de flags. La seal INTR se sincroniza internamente. !INTA. Interrupt Acknowledge. La seal !INTA se utiliza como seal de lectura cuando se est sirviendo un ciclo de reconocimiento de interrupcin. !INTA est activa durante los tres ltimos perodos de reloj de cada ciclo de reconocimiento de interrupcin. !SSO.. Cuando se descodifica junto con las seales IO/!M y DT/!R, nos dan informacin del tipo de actividad que tiene lugar en los buses.
!SSO DT/!R IO/!M FUNCION 0 0 1 Reconocimiento de interrupcin 1 0 1 Lectura perifrico de E/S 0 1 1 Escritura perifrico de E/S 1 1 1 Ciclo de espera 0 0 0 Ciclo de lectura de instruccin 1 0 0 Lectura memoria 0 1 0 Escritura memoria 0 Pasivo 1 1
Tabla 2. Funciones que realiza la CPU
!HOLD/HLDA. Hold / Hold Acknowledge. La seal HOLD es una entrada activa por nivel bajo e indicia a la CPU que hay otro dispositivo que desea los buses. Cuando el microprocesador recibe una peticin de liberar el Bus (HOLD=0),terminar la ltima instruccin que est realizando y luego pondr a uno la seal HLDA para indicar que los buses estn disponibles. NOTA :Una transferencia de datos ocupa un ciclo mquina para un byte o dos ciclos mquina para una palabra o reconocimiento de interrupcin. NMI. Non Maskable Interrupt. Esta interrupcin no es enmascarable por software. A travs de la tabla de vectores de interrupcin, se ejecutar la RSI(Rutina Servicio Interrupcin) asociada. Un flanco de subida en esta entrada provocar que al final de la instruccin actual se sirva la interrupcin. Esta entrada se sincroniza internamente.
Pgina 28
READY. La seal de READY, se utiliza para aadir estados de espera en un ciclo mquina cuando tenemos perifricos o memoria lentos. READY es una entrada, la cual viene sincronizada por el 8284A. !TEST. Esta entrada sincroniza la CPU con un evento externo. Cuando se utiliza junto con la instruccin " wait for test ", la CPU se queda a la espera hasta que la entrada de TEST es puesta a cero por un dispositivo externo.
2.7.4- TEMPORIZACIN
La pata 19 es la entrada de reloj para el 8088. La frecuencia mxima de reloj es de 5 MHz para el 8088, y de 8 MHz para el 8088-2. Generalmente la seal de reloj viene del 8284A.
Pgina 29
Estas tres seales indican a la lgica externa "qu tipo de ciclo mquina" se dispone a realizar la CPU (ver tabla 2 ;Pg. 28). Durante el perodo T2, los 8 bits de direcciones/datos de menor peso del 8088, empiezan a fluctuar preparndose para la transferencia de datos. A continuacin, las seales de control !DEN y !RD o !WR sern vlidas, para poder validar el dato en el bus para la transferencia. Este dato ser ledo hacia dentro, o hacia fuera del 8088 a travs de las seales AD[0:7], los cuales en este momento hacen funciones de bus de datos. En este momento, las cuatro direcciones de mayor peso, hacen funciones de bus de estado. La informacin de estado estar disponible al descodificar estos bits. De todas formas, S3 y S4 pueden descodificarse para determinar que segmento de memoria est siendo accedido en el actual ciclo mquina. Esta informacin puede utilizarse para seleccionar uno de los cuatro segmentos de memoria (cdigo, datos, stack y extra) que son direccionados por el iAPX88. Esta tcnica permite partir la memoria en cuatro segmentos para expandirla hasta 4 MBytes. El hecho de descodificar S3 y S4 proporciona un grado de proteccin a la memoria, puesto que se puede evitar escrituras errneas en segmentos que se solapan. Durante T3 la CPU continua haciendo valer el dato escrito en el bus, o bien sigue leyendo el bus de datos, adems sigue proporcionando informacin de estado en los 4 bits de mayor peso del bus. Este estado, proporciona el tiempo necesario para que el dato se estabilice en el bus de datos, y as poder ser ledos por la CPU o dispositivo seleccionado (memoria o perifrico). A principios de T4 las seales !RD o !WR suben a uno (quedan inactivas), y el dato es fijado en el 8088 o dispositivo direccionado. Las seales !DEN y DT/!R tambin suben y la memoria o perifrico quedan desactivados.
Pgina 30
Debido a que la CPU lee (pre fetch) al menos cuatro bytes de instruccin para la cola de instrucciones, la relacin entre la lectura de la instruccin y la transferencia del operando asociado, puede estar separada en el tiempo por lecturas de bytes de instruccin adicionales. En general, cuando se lee una instruccin y es puesta en la cola de instrucciones del 8088, varias instrucciones sern ledas y puestas en la cola, antes de que sean descodificadas y ejecutadas. NOTA: Si la instruccin que se est ejecutando es un salto o cualquier otra instruccin de transferencia de control, todas las instrucciones existentes en la cola sern descartadas sin haber sido ejecutadas.
El hardware de la CPU que ejecuta las instrucciones obviamente debe esperar hasta que la instruccin sea leda y descodificada antes de que empiece su ejecucin. Por lo tanto, en un microprocesador estndar, el hardware de ejecucin malgasta mucho tiempo esperando que las instrucciones sean ledas y descodificadas. El 8088 elimina este tiempo de espera dividiendo la CPU en dos unidades funcionales independientes (figura 10).
Pgina 31
2.10.1- LA UNIDAD DE INTERFCIE CON EL BUS (BIU) Y LA UNIDAD DE EJECUCIN (EU) TRABAJAN EN PARALELO
El 8088 tiene una unidad de interfcie con el bus, llamada BIU (Bus Interface Unit) cuyo nico trabajo es leer las instrucciones de la memoria y pasar los datos hacia y desde el hardware de ejecucin al mundo exterior a travs de la interfcie del bus. Puesto que la unidad de ejecucin EU (Execution Unit) y la unidad de interfcie con el bus son independientes, la BIU lee las instrucciones adicionales mientras la unidad de ejecucin ejecuta la instruccin anterior. Esto es posible gracias al Instruccin Pipeline o cola, entre la unidad de interfcie y la unidad de ejecucin; la unidad de interfcie llena la cola con las instrucciones que sern ejecutadas. De este modo, cuando la unidad de ejecucin termina una instruccin, la siguiente instruccin normalmente est ya lista sin necesidad de tiempos de espera. La figura 11 muestra el trabajo en paralelo de las unidades de ejecucin y de interfcie en el 8088.
2.10.2- BENEFICIOS DE LA ARQUITECTURA PIPELINE Debido a que la BIU normalmente est ocupada leyendo instrucciones para la cola, el bus del 8088 est ms ocupado, sacando as un mayor rendimiento a la estructura de buses del
Pgina 32
sistema. El trabajo en paralelo de la lectura de instrucciones y su ejecucin, da al 8088 un rendimiento equivalente al de un microprocesador que mueva datos de 16 bits a la vez. Otro beneficio del trabajo en paralelo es que puesto que la EU rara vez necesita esperar a que la BIU lea la siguiente instruccin, hay una menor necesidad de que la BIU lea las instrucciones rpidamente. De este modo, la BIU del 8088 permite un mximo rendimiento sin necesidad de utilizar dispositivos de memoria rpidos. Cuando la ejecucin del programa salta a una nueva direccin, el tiempo de fetch es el nico tiempo que no es totalmente transparente. Cuando esto sucede, la unidad interfcie recibe la nueva direccin de la unidad de ejecucin; entonces empieza a leer las instrucciones secuencialmente a partir de la nueva direccin. La unidad de ejecucin deber esperar a que la nueva instruccin sea leda igual que lo hacen los microprocesadores estndar. Despus de que la primera instruccin haya sido leda de la nueva direccin la unidad de interfcie continua otra vez llenando la cola con instrucciones y el tiempo de fetch vuelve a ser otra vez transparente.
Pgina 34
5- REALIZACIN DE LA PRCTICA
5.1 OBJETIVOS DE LA PRCTICA
El objetivo de esta prctica, es que el alumno conozca el funcionamiento y posibilidades de uno de los instrumentos ms utilizados en el anlisis de sistemas digitales, el analizador lgico. Adems esta prctica ser un complemento a la teora del microprocesador 8088 que se estudia en la asignatura de ordenadores. El estudio se realizar sobre un sistema completo basado en la CPU 8088, el sistema est totalmente abierto para que el alumno pueda estudiar su funcionamiento. Los 68 canales del Analizador lgico HP 1672G estn conectados a las 68 seales ms tiles para el estudio del sistema .
Pgina 35
permanentemente vigilado por un WatchDog, que inicializar de nuevo el sistema cada vez que el software falle. La memoria est formada por dos bancos de 32 Kbytes; Un banco de memoria RAM, donde tenemos la tabla de vectores de interrupcin, el segmento de datos y el stack; y un banco de memoria EPROM donde tenemos el segmento de cdigo. La interfcie con el usuario se realiza a travs de un teclado de PC y una pantalla LCD de diez y seis caracteres por dos lneas. El usuario indica al sistema qu operacin desea realizar a travs de un interprete de comandos, el cual permite entre otros: configurar el Analizador, editar un programa, ejecutar un programa, grabar la pantalla actual, generacin de errores, etc. La interfcie con el Analizador se realiza a travs del estndar RS-232, realizando el control de flujo con el protocolo XON/XOFF. A travs del canal serie, el usuario puede: configurar el Analizador, volcar la pantalla a disco, etc. Para que se puedan realizar pruebas de acceso a perifrico, se ha conectado una PIO, de propsito general, en el sistema. De esta manera, cuando el alumno escriba sus propios programas en cdigo mquina tendr alguna va para comunicarse con el exterior. Una vez realizado el estudio completo del funcionamiento del sistema, el alumno tendr que poner en prctica los conocimientos obtenidos, simulando errores dentro del propio sistema, y luego buscar dnde se halla el error.
Pgina 36
A partir de este momento, el Analizador est preparado para recibir ordenes a travs de la RS-232. Recordemos que el Analizador dispone de 68 canales. Agrupados en 4 pods o sondas de 17 canales cada una. Para poder realizar el estudio del funcionamiento de la Unidad de Pruebas, se ha conectado cada canal del Analizador a una seal de la Unidad de Pruebas. Los 68 canales estn conectados a las distintas seales de la unidad de pruebas . Para idendificarlos se les asignan distintos nombres o "etiquetas". Hay 32 etiquetas asignadas a seales simples y 3 etiquetas asignadas a buses . Total 35. Las etiquetas de los buses consumen varios canales . As AX(0 a 14) = 15 . D(0 a 7) = 8 PA(0 a 7 ) = 8 Si aadimos las 5 seales que necesita el desensamblador y que no tienen ningn inters didctico, salen los 68 canales del Analizador. En efecto (15+8+8+32+5 =68). Para una mejor comprensin, el nombre que figura en los esquemas, es el mismo que el de las etiquetas. Debido a que nuestro sistema tiene ms de 68 seales, se han conectado las ms didcticas, es decir, las que permiten hacer un estudio ms adecuado. Para evitar al estudiante la prdida de tiempo creando las 35 etiquetas, la Unidad de Pruebas dispone de un comando que las crea todas. Pasos a seguir: 1. 2. Volver al grupo ANALYZER. Si continua en pantalla de la unidad de pruebas el mensaje de presentacin, pulsar una tecla. 3. En el prompt1, teclear la orden ETIQ (ver apartado 3.1.4, pg 17) . 4. Entrar en el men FORMAT. Puede observarse en la pantalla del Analizador, que las 35 etiquetas han sido creadas. Recordemos que una etiqueta se asigna a un canal mediante un asterisco. Por ejemplo, la etiqueta A15 est asignada al canal 15 del Pod A3 En la tabla de la pgina 37 se detalla donde han sido conectados los 68 canales del Analizador. En la primera columna de la tabla aparece el canal de la sonda. En la segunda, el nombre de la etiqueta. En la tercera y cuarta columna, aparece el chip y el nmero de la pata.
A partir de este momento, siempre que hagamos referencia al prompt, significar que es una orden para la unidad de pruebas.
Pgina 37
Unidad de pruebas ETIQUETA CHIP KBCLK U10.8251 !KEYB U5.74LS138 !PIO U30.74LS138 !LCD U5.74LS138 !WDOG U5.74LS138 !RS232 U5.74LS138 !PIC U5.74LS138 !EPROM U6.74LS139 !RAM U6.74LS139 IRQ10 U20.8251 IRQ9 U20.8251 IRQ8 U10.8251 RXD U20.8251 TXD U20.8251 KBDATA U10.8251 AS19 U0.8088 AD0 U0.8088 Unidad de pruebas ETIQUETA CHIP CLOCK U0.8088 Q_555 U12.NE555 !DEN U0.8088 Q_121 U11.74121 **** !SS0 U0.8088 !INTA U0.8088 INTR U0.8088 DT/!R U0.8088 IO/!M U0.8088 !WR U0.8088 !RD U0.8088 ALE U0.8088 AX19 U3.74LS373 **** **** ****
PIN 28 27 26 25 24 23 22 21 11 12 13 14 15 16 17 18
PIN 25 14 13 12 11 10 9 11 4 15 14 14 3 19 3 35 16
PIN 6 39 16 15 12 9 6 5 2 19 16 15 12 9 6 5 2
PIN 19 3 26 6 34 24 18 27 28 29 32 25 19
Pgina 38
7
TOUT TXD RXD
8
Q_121 Q_555
9
P IO_A[0:7]
Grupo 1.
Las tres primeras corresponden a las direcciones de la CPU. Las tres siguientes son los buses de direcciones y datos multiplexados del sistema. Son las 10 seales necesarias para estudiar el funcionamiento de la CPU. Es el bus de control. Los tres vectores de interrupcin. Las seales de seleccin de memoria.
Pgina 39
Las seales de seleccin de perifrico. Reloj y datos del teclado. Reloj y datos de la comunicacin RS-232. Seales para el estudio del WatchDog. Puerto A de la PIO.
En segundo lugar, debe elegirse la secuencia de disparo adecuada. En la mayora de los casos, se har coincidir el instante del disparo con el evento deseado. Una vez decidido el evento de disparo, este tendr que expresarse como un flanco, un nivel o una combinacin de ambos. Antes de definir una nueva secuencia de disparo, es recomendable borrar completamente la secuencia anterior, si no pueden producirse resultados inesperados. Las etiquetas, con las que queremos disparar el Analizador, las colocaremos al principio de la lista. El modo de adquisicin, tambin es importante. Generalmente se utilizar el Analizador de tiempos convencional. En otros casos, la adquisicin adecuada se realizar con el Analizador de estados. Las caractersticas de cada modo de funcionamiento, se han explicado en el apartado dedicado a la teora de analizadores lgicos. Pgina 3 y siguientes. La primera adquisicin deber realizarse en modo repetitivo. Una vez ajustada la base de tiempos, deber posicionarse el disparo mediante el delay en una posicin de la pantalla que permita la observacin de toda la informacin. A continuacin pasamos a estudiar cada uno de los 11 apartados.
Pgina 40
Cualquier descarga electrosttica podra colgar nuestro dispositivo, y resultara muy costoso mandar a un tcnico para restablecer el sistema. Por lo tanto se hace necesario el uso de un dispositivo que detecte que nuestro sistema se ha colgado y restablezca automticamente las condiciones iniciales. El circuito encargado de vigilar el buen funcionamiento de nuestro sistema, es el WatchDog. De forma peridica, el programador deber indicarle al WatchDog que el programa sigue su flujo normal. Pero si transcurrido cierto tiempo, el WatchDog no recibe noticias, significar que el programa se ha colgado o ha saltado a una zona de memoria errnea, en cuyo caso el WatchDog actuar reiniciando el sistema Para ello, introduciremos una orden en el programa, que vaya indicando al WatchDog de forma peridica, que el programa funciona correctamente. Imagnese el siguiente programa, que es un bucle infinito, que lee el teclado, escribe por pantalla y refresca el WatchDog. void main(void) { for(; ;) { Lee Teclado(); Escribe Pantalla(); WatchDog(); } }
// Bucle infinito
Si por lo que fuese, el programa se colgase, el WacthDog se dara cuenta de que nadie le informa del buen funcionamiento del programa y automticamente restablecera las condiciones iniciales. 5.5.1- ESTUDIO DEL WATCHDOG Como puede observarse en el esquema (figura 13), el WatchDog consta de tres bloques funcionales; un descodificador 74LS138, un monoestable 74121 y un oscilador 555. El descodificador esta diseado de tal manera que dar un flanco negativo cuando se haga un acceso al perifrico situado en la direccin 40 hexadecimal. Debido a que el tiempo que la salida del descodificador se mantiene activa (nivel bajo) es insuficiente para saturar directamente el transistor y que adems est invertida, intercalamos un monoestable que alarga e invierte el pulso, para que pueda saturar el transistor T1.
Pgina 41
Figura 13. Esquema del WatchDog El 555 es un oscilador cuya constante de tiempo viene fijada por las resistencias R6 y R7 junto con el condensador C2. Mientras el condensador C2 este descargado la salida Q del 555 se mantiene a uno. Pero cuando el condensador C2 se carga, la salida cambia a cero, hecho que reiniciar el sistema, al poner un cero a la entrada de la AND (ver fig. 14). Por lo tanto se trata de evitar que el condensador C2 se cargue por completo. Para un correcto funcionamiento, la rutina de refresco del WatchDog deber quedar como sigue: void WatchDog(void) { outportb(0x40, NULL); } 5.5.2- PRECAUCIONES Debe tenerse en cuenta, que aunque un sistema se haya colgado, las interrupciones pueden seguir funcionando correctamente, por lo tanto jams debe incluirse el refresco del WatchDog dentro de una RSI (Rutina de Servicio de Interrupcin). La constante de tiempo del oscilador ha de ser tal que permita al programa realizar al menos un ciclo completo. Siempre hay que refrescar el WatchDog dentro de los bucles de espera.
El WatchDog restablecer el funcionamiento normal del sistema, siempre que el error se deba a un fallo en el programa. Si se rompe fsicamente algn componente el WatchDog intentar una y otra vez sin xito arrancar de nuevo el equipo.
Pgina 42
La inicializacin del sistema puede ser debida a dos causas totalmente independientes. Una, que el usuario pulse el reset del sistema, y otra que el WatchDog acte.
Figura 14. Generador de reloj y reset del sistema En la figura 14 el 8284 es un generador de reloj y reset compatible con la CPU 8088 y familia. Slo necesita a su entrada un cristal de cuarzo que le sirva de patrn, y una seal de reset que dure ms de cuatro perodos de reloj. A su salida producir las seales de CLOCK, READY y RESET conforme los requerimientos de sincronizacin y permanencia del 8088. La frecuencia del reloj del sistema es tres veces menor que la frecuencia a la que oscila el cristal de cuarzo. Adems el 8284 tiene una salida PCLOCK que es la mitad de la frecuencia del reloj del sistema, la cual se utiliza para los perifricos. 5.5.4- PRCTICAS A REALIZAR Primero observaremos las seales cuando el sistema funciona normalmente y a continuacin forzaremos al programa a entrar en un bucle infinito. Los pasos a seguir son: 1. 2. 3. Entrar en el men de WAVEFORM. Pulsar dos veces sobre el campo de etiquetas. Elegir la opcin de borrar todas las etiquetas y confirmar. Volver a pulsar para insertar las seales deseadas. En este caso elegiremos las siguientes: la seal de refresco del WatchDog !WDOG, la salida del monoestable Q_121 y la salida del oscilador Q_555. Elegir una base de tiempos de por ejemplo 10 us/div. Entrar en el men de TRIGGER. Pulsar sobre la primera etiqueta, aparecer por pantalla la lista de etiquetas. Entonces pulsar sobre la etiqueta deseada, en nuestro caso !WDOG (elegimos la seal con la que queremos disparar).
4. 5. 6.
Pgina 43
A continuacin ponemos la condicin que tiene que tener mediante el trmino. En nuestro caso un cero. Para ello: 7. Pulsar sobre el trmino deseado, por ejemplo a. Elegir la opcin de limpiar el trmino, es decir Clear (=x). De esta forma estamos seguros que no hay ninguna asignacin anterior. Pulsar sobre el campo que est al lado del trmino a y justo debajo de la etiqueta !WDOG, poner un cero. Definir la secuencia de disparo, cuando a suceda una vez (consultar apartado 2.15, pg. 14). Pulsar el botn de RUN.
8. 9. 10.
Podemos ver en la pantalla las seales !WDOG y Q_121 y que Q_555 no baja. Se puede ver el tiempo que tarda el sistema en refrescar el WatchDog y el ciclo de trabajo a la salida del monoestable. Cuando se quieran calcular tiempos de retardo entre seales o cualquier otro tiempo. Hay que tener en cuenta que el sistema muestrea a una cierta frecuencia, y que el error mximo cometido ser un perodo de muestra. Una vez visto el funcionamiento del monoestable, vamos a provocar que acte el WatchDog, para ello:
11. Definir el trmino a como Q_555= 0. Para ello repetir los pasos 5 a 9. No de borrar la secuencia de disparo anterior. 12. Volver al men de WAVEFORM. 13. Poner una base de tiempos generosa, de aproximadamente 100 ms/div. 14. Pulsar RUN. Vemos que el analizador est a la espera de que se cumpla la condicin de disparo. 15. En el prompt, escribir la orden RESET (apartado 3.1.8, pg 17). Como se ha antes, se trata de un bucle infinito. explicado olvidarse
Al cabo de unos instantes, en la pantalla de la unidad de pruebas, habr aparecido el mensaje de presentacin, seal inequvoca de que el sistema se ha inicializado de nuevo. En el centro de la pantalla del Analizador aparecer un cambio de estado en la salida del oscilador. Ajustar el retardo, hasta que por pantalla aparezca el ultimo flanco de refresco del WatchDog y el reset del sistema. Medir el tiempo que tarda el oscilador en resetear el sistema. Est suficientemente dimensionado el sistema ? Para que se pueda visualizar este intervalo de tiempo ser necesario pasar el Acquisition Mode a Manual, el Trigger Position a User Defined, con el Post Store al 20% y el Sample Period a 10 us. Para el resto de las medidas el Acquisition Mode deber estar en Automatic.
Pgina 44
5.6 - LA CPU
El microprocesador utilizado es un Intel 8088 funcionando en modo mnimo. Observar que la interrupcin utilizada es la enmascarable puesto que la no enmascarable est inhibida, al igual que las seales de test y peticin de buses. El desmultiplexado del bus de datos se hace con un 74LS245, que es un buffer bidireccional. El sentido de los datos se fija con la pata DIR, la cual est gobernada con la seal DT/!R de la CPU, (recordemos que vale cero cuando el sentido de los datos es de entrada y vale uno cuando los datos salen de la CPU). Las salidas del buffer entran en estado de alta impedancia cuando la entrada G vale uno, es decir mientras la CPU no valide los datos con la seal !DEN. El desmultiplexado del bus de direcciones se hace con dos 72LS373, que es un latch seguidor unidireccional. Mientras la entrada de control G est a uno, la seal de salida sigue a la entrada, pero cuando sta baja a cero, el flanco fija, a la salida, los datos que en ese momento estn a la entrada.
Vemos, pues, que este chip esta controlado por la seal ALE de la CPU, la cual baja cuando en el bus hay una direccin valida. La seal de control OC, est conectada a masa, por lo tanto habilita la salida.
Figura 15. La CPU y el desmultiplexado de los buses Como slo se utilizan las primeras quince direcciones para direccionar la memoria. Y la direccin de mayor peso para mapear los bancos de memoria. El resto de direcciones no es necesario desmultiplexarlas, de esta forma nos ahorramos un chip.
Pgina 45
Figura 16. Ciclo de fetch o lectura de instruccin En la figura 16 se pueden observar las seales implicadas cuando la CPU realiza un ciclo de lectura de instruccin o fetch. Como ya se ha visto en la teora, durante el primer periodo de reloj la seal ALE baja para validar el bus de direcciones (Recordemos que un perodo de reloj empieza con el flanco de bajada) , adems en este momento las seales !SSO, IO/!M y DT/!R ya indican de qu tipo de ciclo mquina se trata. (fig. 16) En el caso de un ciclo de lectura de instruccin las tres valen cero. !SS0 0 1 0 1 0 1 0 1 DT/!R 0 0 1 1 0 0 1 1 IO/!M 1 1 1 1 0 0 0 0 Funcin Reconocimiento de interrupcin Lectura perifrico de E/S Escritura perifrico de E/S Ciclo de espera Ciclo de lectura de instruccin Lectura memoria Escritura memoria Pasivo
Fig 16 Tipo de actividad que tienen los buses Durante el segundo perodo de reloj, bajar la seal !RD o !WR .En nuestro caso por tratarse de un ciclo de lectura de instruccin, bajar la seal de !RD. Al cabo de poco rato bajar la seal !DEN. A partir de este momento la memoria o dispositivo direccionado, se dispone a colocar los datos en el bus, para que la CPU pueda leerlos. A principios del cuarto periodo, subirn las seales de !RD o !WR y !DEN.
Pgina 46
Al finalizar este estudio el alumno tendra que ser capaz de reconocer sin ninguna duda, todos y cada uno de los ciclos mquina de la CPU. Adems de interpretar la secuencia de ejecucin de un programa. En la figura 17 se puede observar la ejecucin completa de un programa cclico. Cada ciclo mquina, es fcilmente identificable observando los flancos de la seal ALE, en total vemos que nuestro programa ejecuta diez ciclos mquina, antes de empezar de nuevo. Con un simple vistazo se puede observar que el programa est formado por ocho ciclos de lectura y dos de escritura, y si observamos la seal IO/!M llegaremos a la conclusin que son ocho ciclos de lectura a memoria y dos ciclos de escritura a perifrico. Si observamos la seal !SSO durante los ocho ciclos de lectura, veremos que esta a cero, por lo tanto no son ciclos de lectura a memoria, sino que son ciclos de lectura de instruccin.
Figura 17. Ejecucin de un programa cclico A simple vista, tambin observaremos que hay ciclos que ocupan ms de cuatro perodos de reloj. Bien, esto no es cierto. Lo que pasa es que la CPU esta ejecutando ciclos de reposo. Recordemos que los ciclos de reposo, son aquellos ciclos que ocupan un slo perodo de reloj, en los que la CPU no hace un acceso a memoria ni a perifrico, sino que realiza algn tipo de operacin interna. Por ejemplo el ltimo ciclo mquina es exageradamente largo. Esto es debido a que la CPU est ejecutando la instruccin de salto para volver al principio del programa. Cuando se realice el estudio del desensamblador (apartado 5.16) y la programacin en cdigo mquina (apartado 5.15), se explicar con un poco ms de detalle el programa que acabamos de estudiar.
Pgina 47
Cada vez que la CPU hace un ciclo de lectura o escritura a memoria o perifrico de E/S, lo indica al resto del sistema activando las seales del bus de control. En total hay siete "ciclos mquina" a estudiar: 1.- Ciclo de " fetch " o lectura de instruccin 2.- Ciclo de lectura a memoria 3.- Ciclo de escritura a memoria 4 - Lectura de perifrico 5.- Ciclo de escritura a perifrico 6.- Ciclo de reconocimiento de interrupcin. Se realizar ms adelante. 7.- Ciclo de reposo Como se ha explicado anteriormente, descodificando las seales !SSO, DT/!R y IO/!M (Fig 16, pg. 46) podemos saber que ciclo mquina esta ejecutando la CPU. Tambin sabemos, que cuando baja la seal ALE, las anteriores seales tienen un valor estable. Esta informacin nos ser til para elegir una secuencia de disparo correcta. Pasos a seguir: 1. 2. 3. 4. Entrar en el men de FORMAT. Seleccionar la primera etiqueta que no esta asignada (despus de PIO_A). Elegir la opcin de MODIFY. Poner por ejemplo, el nombre CICLO. Automticamente queda activada. Localizar en el cuadro general de etiquetas (tabla 1) las posiciones correspondientes a las tres seales a descodificar y darlas de alta o ponerlas en ON, colocando el * en el pod correspondiente. Para hacerlo es mejor utilizar las teclas SELECT, DONE y las flechas. La flecha para arriba para el * y para abajo el . del teclado del analizador, ya que nos indica la posicin que estamos.
Una vez tenemos creada una etiqueta llamada CICLO, y que tiene asignados las tres posiciones correspondientes a las seales !SSO, DT/!R y IO/!M. Vamos a asignar un valor lgico, llamado smbolo, a cada una de las ocho combinaciones posibles (ver tabla 2). 5. Entrar en el submen de SYMBOLS. Si an smbolo saldr New Symbol. no se ha introducido ningn
6. 7. 8.
Cambiar la etiqueta por CICLO y poner la base en binario. Seleccionar el smbolo. Elegir Add a Symbol (aadir un smbolo), y escribir FETCH. Una vez creado el primer smbolo, asignarle el valor 000 binario. Repetir esta operacin asignando un smbolo para cada uno de los ciclos mquina de la CPU. Tener en cuenta que el orden de los bits de la etiqueta es el mismo que el de asignacin, y no tiene porqu ser el mismo que el de la tabla 2.
Pgina 48
9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.
Pulsar Done para salir. Entrar en el men de WAVEFORM. Borrar todas las seales. Aadir las nuevas seales. Se recomienda; CLOCK, !SSO, ALE, IO/!M, !RD o !WR, DT/!R y !DEN. Poner la base de tiempos en 100 ns/div. para ver un ciclo mquina. Entrar en el men de TRIGGER. Borrar la secuencia de disparo anterior. Poner la etiqueta ALE en primer lugar y CICLO en el segundo. Cambiar la base de CICLO, de hexadecimal a smbolo. Fijar Edge1 como flanco de bajada de ALE. Fijar a como FETCH de CICLO. Entrar a editar la secuencia de disparo (nivel) Pulsar sobre el nombre del trmino a. Elegir Combination. Poner los trminos a y EDGE1 a ON. Donde se junten cambiar OR porAND. Salir y volver al men de WAVEFORM. Pulsar RUN. Centrar el ciclo en la pantalla.
Una vez definida la secuencia de disparo, para estudiar el resto de ciclos mquina slo habr que cambiar el valor de la variable a, ponindole el valor del smbolo deseado. Es interesante que el alumno complemente el estudio de los ciclos mquina de la CPU, observando el comportamiento de los buses de datos y direcciones, antes y despus de que sean desmultiplexados. Para poder realizar el estudio, se han puesto a nuestra disposicin las seales AD0, AX0 y D0 y adems las seales AS19 y AX19, para poder realizar el estudio del paso de un bus multiplexado a uno desmultiplexado. Para ello, pueden observarse los tiempos de propagacin del 74LS245 y del 74LS373. Tambin puede observarse el comportamiento de una seal multiplexada y como se comportan las salidas desmultiplexadas cuando se activan las seales ALE, DT/!R y !DEN.
Pgina 49
5.7- LA MEMORIA
La memoria est formada por dos bancos de 32 Kbytes (figura 18). El primero es un banco de memoria RAM esttica situado en la parte baja de la memoria. El segundo banco es una EPROM mapeada en la parte alta. El mapeado de memoria, queda de la siguiente manera:
SRAM. Direcciones comprendidas entre 00000 y 7FFFF EPROM. Direcciones comprendidas entre F8000 y FFFFF Por lo tanto el registro segmento de cdigo CS vale F800 hexad y el registro de segmento de datos DS vale oo40 hexadecimal. Ya que la tabla de vectores de interrupcin est en la parte ms baja de la memoria. En concreto, son 256 vectores de interruccin y cada una ocupa 4 bytes. La figura 19 muestra el esquema de la memoria.
Figura 19. Esquema de la Memoria El 74LS139 es un doble descodificador de dos a cuatro. Es sta, la mnima lgica que evita colisiones (ver figura 19). La seleccin de la RAM se har cuando la direccin de mayor peso AX19 sea cero y el acceso sea a memoria., es decir, que la seal IO/!M valga cero. Por el contrario la seleccin de la EPROM se har cuando AX19 sea uno y el acceso sea de lectura a memoria. Para evitar posibles errores, la seleccin del banco de EPROM se selecciona adems con la seal de !RD. 5.7.1- PRCTICAS A REALIZAR En este apartado, haremos un estudio completo de un acceso a memoria. El procedimiento a seguir ser el siguiente: 1. En el men WAVEFORM:, borrar las etiquetas existentes.
Pgina 50
4. 5.
Colocar las seales siguientes, implicadas en este estudio: AX19, IO/!M, !RD, !WR, !RAM y !EPROM .Se recomienda utilizar la orden WAVE (apartado 3.1.11, pg 19). Preparar una secuencia de disparo que nos permita ver un acceso a memoria. Por ejemplo que dispare cuando se haga un acceso de lectura, !RD= 0. No olvidar borrar la secuencia de disparo existente. Volviendo al men de WAVEFORM, poner una base de tiempos 2 us/div. Para observar los accesos a memoria que realiza el sistema. Pulsar RUN.
Una vez hecha la adquisicin, observar el funcionamiento de la seleccin de memoria, y comprobar que se corresponde con lo dicho en el prrafo anterior. Observar tambin la diferencia en la duracin de las seales de seleccin de la RAM y de la EPROM. Explicar a que se debe. Prcticas adicionales Puede realizarse un estudio de los tiempos de propagacin de todos los dispositivos, desde que la CPU activa las seales de control, hasta que se activa la seal de seleccin del banco de memoria deseado. El estudio puede ampliarse haciendo un seguimiento de todas las seales implicadas, desde que la CPU pone una direccin en el bus de direcciones, hasta que consigue leer o escribir un dato.
Pgina 51
Figura 20. Seleccin de perifrico Se observa en el esquema (figura 20) que la lgica de seleccin de la PIO es diferente a la de los dems dispositivos. Esto es debido a que la PIO necesita que su entrada de seleccin est activa un tiempo antes que baje la seal de !RD o !WR. Los dems perifricos son seleccionados cuando la CPU realiza un ciclo de lectura o escritura a perifrico. Ms adelante veremos que la CPU mantiene tambin la seal IO/!M a nivel alto cuando sirve un ciclo de reconocimiento de interrupcin y esto provocara accesos errneos a perifrico. Cuando se pulsa una tecla del teclado de la unidad de pruebas, provocamos una interrupcin. Al finalizar la RSI hay que enviar al PIC el cdigo correspondiente al final de interrupcin. Dentro de la RSI leeremos el carcter que haya en el buffer de entrada. Cuando se detecte que se ha soltado la tecla, escribiremos el carcter en el display. Por lo tanto el hecho de pulsar una tecla, provoca la seleccin de tres perifricos.
5.9- EL TECLADO
En el apartado anterior hemos estudiado cmo haca la CPU para direccionar el teclado, en este apartado se estudiar, cmo enva los datos el teclado. Cuando se pulsa una tecla primero se lee el teclado, despus se escribe en el display y para finalizar se enva un cdigo de final de interrupcin al PIC. El teclado se comunica con el sistema, a travs del 8251A, que es una USART de propsito general compatible con el 8088.
Pgina 52
Figura 21. Esquema del teclado La nica manera de inicializar un teclado, es interrumpiendo la alimentacin. Por eso hemos intercalado un transistor en su alimentacin, el cual esta saturado en condiciones normales de funcionamiento. Pero entra en corte, cada vez que se inicializa el sistema. Observar que se encienden los LEDS cada vez que se pulsa el botn de reset. La conexin del teclado se hace con un conector DIN de 5 pins. De los cuales, slo cuatro estn conectados: 1-Reloj, 2-Datos, 4-Masa y 5-Alimentacin. El teclado enva los datos de forma asncrona, a una velocidad de 13.5 Kbauds, con un bit de paridad par y otro de parada. Cuando el teclado est en reposo, las lneas de datos y de reloj estn a nivel alto. Cuando se pulsa una tecla, el reloj empieza a oscilar y la lnea de datos empieza la transmisin. Cuando la USART detecta que el carcter est completo, sube la salida RxRDY (receiver ready). Indicando as a la lgica externa que lea el carcter que tiene en el buffer de entrada. Si no se leyera, el siguiente carcter machacara al anterior y se perdera. La salida RxRDY, se utiliza para generar la interrupcin IRQ8. La seal de reloj que proviene del teclado, se utiliza para sincronizar ambos dispositivos, y as se pueden utilizar diferentes teclados, aunque vayan a velocidades diferentes. Hecho bastante frecuente. El teclado enva un cdigo correspondiente a la tecla pulsada, que se corresponde con su posicin en el teclado y no con el carcter ASCII de la tecla. El teclado mandar una y otra vez el cdigo de la tecla, mientras sta se mantenga apretada. A continuacin enva un cdigo indicando que se ha soltado la tecla. Hay que ir con cuidado, puesto que ciertas teclas especiales estn formadas por ms de un cdigo. Por ejemplo la tecla de Pausa est formada por seis caracteres.
Pgina 53
Seales implicados: KBCLK, KBDATA, IRQ8, !KEYB y !LCD. Base de tiempos recomendada 100 us/div Secuencia de disparo preparada para flanco de bajada de KBDATA. Preparar la adquisicin y pulsar una tecla. Centrar el cdigo, haciendo varias adquisiciones y jugando con el retardo.
Observar que realmente al final de la transmisin de un cdigo, se genera una interrupcin. La activacin de la seal de seleccin del teclado, significa que se ha servido la interrupcin. Puesto que la RSI slo lee la tecla y la coloca en buffer circular. Como complemento, se puede intentar obtener el cdigo de alguna tecla y el cdigo de liberacin de tecla.
Pgina 54
Figura 23. Ciclo de reconocimiento de interrupcin En la figura 23 al igual que en la pantalla del analizador se puede apreciar como la seal que proviene del teclado IRQ8, sube indicando que solicita una interrupcin. Al cabo de poco tiempo, el PIC sube la seal INTR de la CPU. Cuando la CPU acaba la instruccin actual, los dos primeros ALE, entonces empieza propiamente el ciclo de reconocimiento de interrupcin subiendo ALE. En este caso la seal !RD no bajar, puesto que es la seal !INTA la que hace funciones de lectura. Un ciclo de reconocimiento de interrupcin, consta de dos ciclos mquina. El primero sirve para que el PIC priorize las peticiones que tiene en sus entradas y prepare el vector de interrupcin correspondiente. A partir de este momento, si hubiese una peticin ms prioritaria tendra que esperar a la siguiente peticin. El segundo sirve para que la CPU lea el vector de interrupcin. Como puede observarse en la figura, es durante el segundo ciclo, cuando !INTA esta activo, el PIC pone el valor del vector de interrupcin en el bus de datos, en este caso 8. Cuando el PIC detecta que le han reconocido la interrupcin, libera la seal INTR. En cambio el teclado tarda un poco ms, pero el PIC es bastante inteligente para saber que no hace falta preocuparse. Como complemento, se pueden provocar las otras dos interrupciones. Utilizando la orden que realiza una transmisin serie, pero no la de configuracin. Para las diferentes interrupciones, verificar el vector de interrupcin. Tambin se puede localizar el ciclo mquina, en que la CPU indica al PIC que la interrupcin ha finalizado y descubrir el cdigo de final de interrupcin.
Pgina 55
5.11- EL DISPLAY
Otra parte importante de la interfcie con el usuario, es el display. Para ello hemos conectado un LCD de diecisis caracteres por dos lneas, el cual se conecta directamente al bus de datos y es tratado como cualquier otro perifrico.
Figura 24. Esquema del display Al ser un dispositivo muy lento (es decir, tarda bastante en escribir un carcter en comparacin con la velocidad de la CPU) y restrictivo en lo referente a los tiempos de establecimiento y mantenimiento de las seales de control (es decir, necesita que la orden de lectura o escritura llegue pasado un cierto tiempo despus de que se haya selecciona el perifrico), nos hemos visto obligados a utilizar la direccin A15 directamente tal y como sale de la CPU (recordemos que es valida durante todo el ciclo). As al no pasar a travs del 74LS373 ganamos unos nanosegundos que nos son necesarios para cumplir los tiempos anteriormente mencionados. Esta direccin la utilizaremos, para diferenciar si realizamos un acceso de datos o de control. Antes de realizar ninguna operacin sobre el LCD, primero hay que leer el estado del flag de ocupado. Por lo tanto, en el mejor de los casos, se necesitan dos accesos para realizar alguna operacin sobre el LCD. Hay que tener en cuenta, que este dispositivo, al contrario de los dems, funciona con lgica positiva. Por lo tanto el conexionado de las seales de control queda de la siguiente forma: * Seal RS. Sirve para indicarle al LCD si realizamos un acceso de datos o de control. Cuando A15 vale cero, significa un acceso de control y por el contrario cuando vale uno es un acceso de datos. * Seal R/W. Cuando sta seal vale cero significa que la CPU escribe y cuando vale uno la CPU lee. Por eso utilizaremos la seal !SSO para indicar lectura/escritura. * La entrada de seleccin del dispositivo es activa por nivel alto, por lo tanto hay que invertir la salida de la lgica de seleccin de perifrico.
Pgina 56
Observar cuntos ciclos de lectura hace la CPU, antes de poder escribir un carcter. Que hace la CPU durante el bucle de espera (aumentar la base de tiempos) ?
5.12- LA PIO
El sistema dispone de una PIO 8155 de propsito general compatible con el 8088. Esta formada por tres puertos: A, B y C . El puerto A, est a disposicin del alumno y tiene todas las seales a su disposicin dentro del Analizador. La direccin del puerto A es la 21 hexadecimal. Para seleccionar la PIO hay dos posibilidades: Primera, utilizar la orden del sistema operativo, que saca por el puerto A un valor determinado (ver apartado 3.1.7 ) . Segunda, escribir un programa en cdigo mquina que acceda a la direccin 21 hexadecimal y luego ejecutarlo. De momento recomendamos la primera opcin. La salida del contador interno TOUT de la PIO, nos servir como base de tiempos para la comunicacin RS-232. A su salida tenemos una onda cuadrada de 19,2 KHz. La PIO, ha sido diseada para conectarla directamente a los buses y seales de control de la CPU. Y ella misma ya desmultiplexar los buses de datos y direcciones
Pgina 57
Figura 25. Esquema de la PIO Adems esta PIO, dispone de 256 bytes de memoria interna, que no est mapeada 5.12.1- PRCTICAS A REALIZAR 1. 2. 3. 4. 6. Seales implicados: AD0, IO/!M, ALE, !PIO, !WR, PIO_A Bus. Disparo por !PIO=0 > 200 ns. Base de tiempos de 100 ns/div Iniciar la adquisicin. En el "prompt", escribir PIO.
Se trata de estudiar el proceso de escritura de un dato en el puerto A de la PIO. En primer lugar direccionamos el puerto A de la PIO (21H), como vemos en la fig.25, AD0 vale 1, dado que la direccin es impar, y IO/!M ndica una operacin de entrada/salida. En el momento en que la direccin es estable en el bus (ALE=1), la CPU selecciona el circuito de la PIO (!PIO=0), y enva a la PIO (!WR=0) el dato que hayamos introducido ( en el ejemplo un 2). Veremos que AD0 pasa de 1 a 0 dado que la direccin de la PIO es impar y el dato enviado es par. Transcurrido el tiempo necesario el dato aparece en el puerto de salida de la PIO (PIO_A=02).
Pgina 58
Pgina 59
Figura 27. Esquema de la RS-232 Los relojes de transmisin (TXC) y recepcin (RXC) estn conectados a la salida del temporizador de la PIO (TOUT), el cual est programado para proporcionar una onda cuadrada de 19.2 KHz., que se utiliza como reloj para la comunicacin. La interrupcin que proviene del receptor es ms prioritaria que la del transmisor. As puede cortar la comunicacin cuando sea necesario.
5.13.1- PRCTICAS A REALIZAR Sabiendo que se trata de una comunicacin asncrona (figura 28) con un start bit, ocho bits de datos, un bit de paridad y un stop bit comprobar el valor de los cdigos XON y XOFF. Hay que poner una base de tiempos ms pequea 1.
2. 3. 4. 5. Seales implicados: TOUT, TXD y RXD Disparar por flanco de bajada de RXD Base de tiempos de 10 ms Preparar la adquisicin En el "prompt", escribir RS232
Las seales TxD y RxD estn vistas desde el punto de vista de la placa. Es decir, en TxD los datos viajan desde la placa haca el Analizador. Observar que realmente el Analizador para la comunicacin cuando lo desea. Ejercicio propuesto para que no se pierdan datos.
Reposo Start DO D1 D2 D3 D4 D5 D6 D7 Paridad Stop
Pgina 60
Pgina 61
0x3C val8 Resta val8 del contenido del registro AL, pero no retorna resultado. La operacin afecta a los flags. Si son iguales, el flag de cero (ZF) se pone a uno. ZF DEC AX 0x48 Decrementa el contenido del registro AX ZF INC AX 0x40 Incrementa el contenido del registro AX ZF JMP desp 0xEB desp Efectua un salto incondicional. El desplazamiento debe estar comprendido entre -128 y +127 bytes de esta instruccin, es decir, desp es un valor con signo de 8 bits (complemento a dos, por lo tanto restar el nmero al valor 256 decimal). ninguno JC desp 0x72 desp Efecta un salto si se cumple la condicin CF = 1. El desplazamiento debe estar comprendido entre -128 y +127 bytes de esta instruccin. ninguno JNC desp 0x73 desp Efectua un salto si se cumple la condicin CF = 0. El desplazamiento debe estar comprendido entre -128 y +127 bytes de esta instruccin. ninguno JZ desp 0x74 desp Efectua un salto si se cumple la condicin ZF = 1. El desplazamiento debe estar comprendido entre -128 y +127 bytes de esta instruccin.
Flags afectados: Instruccin: Codificacin: Descripcin: Flags afectados: Instruccin: Codificacin : Descripcin: Flags afectados: Instruccin: Codificacin: Descripcin:
Pgina 62
JNZ desp 0x75 desp Efectua un salto si se cumple la condicin ZF = 0. El desplazamiento debe estar comprendido entre -128 y +127 bytes de esta instruccin. ninguno MOV AL, val8 0xB0 val8 Transfiere val8 al registro AL. ninguno NOP 0x90 El procesador no hace nada. Pasa a ejecutar la instruccin siguiente. ninguno OUT puerto, AL 0xE6 puerto Transfiere el contenido del registro AL a un puerto de salida. El puerto es un valor comprendido entre 0 y 256. Los puertos de inters son: WatchDog, puerto = 0x40 Puerto A de la PIO, puerto = 0x21 ninguno RET FAR 0xCB Retorna de un procedimiento, previamente invocado mediante CALL FAR, utilizando como direccin de retorno la direccin salvada en la pila por CALL. ninguno ROL AL, 1 0xD0 0xC0 Rotar a la izquierda un bit el contenido del registro AL junto con el flag de acarreo (CF). CF ROR AL, 1 0xD0 0xC8
Flags afectados: Instruccin: Codificacin : Descripcin: Flags afectados: Instruccin: Codificacin : Descripcin: Flags afectados: Instruccin: Codificacin:
Pgina 63
Descripcin:
Rotar a la derecha un bit el contenido del registro AL junto con el flag de acarreo (CF). Flags afectados: CF
5.15.1- EJEMPLO DE PROGRAMA ; ENSAMBLADOR INICI: INC AX OUT PIO, AL OUT WDOG, AL JMP INICI CODIGO MQUINA ; ; ; ; 0x40 0xE6 0x21 0xE6 0x40 0xEB 0xF9
La primera instruccin incrementa el acumulador. Es una instruccin de un slo byte. La segunda y la tercera, son un acceso de escritura a perifrico. Se codifican mediante dos bytes, el primero es el cdigo de la instruccin y el segundo es el nmero del puerto. La cuarta, es un salto relativo a la posicin actual. Se codifica mediante dos bytes, el primero es el cdigo de la instruccin y el segundo es el valor del salto en complemento a dos. 5.15.2- EJERCICIOS PROPUESTOS Realizar un programa que al visualizar el puerto A de la PIO aparezcan las siguientes formas de onda. 1. Onda en forma de diente de sierra orientada a la derecha. Es decir, realizar un bucle infinito que desplace un bit una posicin hacia la derecha cada vez. Onda en forma de diente de sierra orientada a la izquierda. Una onda triangular (primero a la derecha y luego a la izquierda, asi sucesivamente).
2. 3.
Pgina 64
Pgina 65
Pgina 66
Pgina 67
Pgina 68
Pgina 69