Tesis de Licenciatura
Tesis de Licenciatura
Tesis de Licenciatura
SCIP
Sistema de Coprocesamiento de Información
para PC
Tesis Profesional
que para obtener el tı́tulo de
Licenciado en Ciencias de la Computación
presenta
Asesor
M.C. Rafael Rivera Rodrı́guez
SCIP
Sistema de Coprocesamiento de Información
para PC
Tesis Profesional
que para obtener el tı́tulo de
Licenciado en Ciencias de la Computación
presenta
Asesor
M.C. Rafael Rivera Rodrı́guez
A mis profesores.
Introducción y Objetivos. 9
1 Microprocesadores. 11
1.1 Introducción. . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.2 Generalidades. . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.2.1 Evolución del Microprocesador. . . . . . . . . . . . . . 11
1.2.2 Controladores Dedicados. . . . . . . . . . . . . . . . . 13
1.2.3 CPU’s de Propósito General. . . . . . . . . . . . . . . . 13
1.3 Introducción a los microprocesadores Intel 8088 y 80x86. . . . 14
1.3.1 Coprocesadores matemáticos. . . . . . . . . . . . . . . 15
1.3.2 Arquitectura interna de los
microprocesadores Intel 8088 y 8086. . . . . . . . . . . 15
1.3.3 Inicialización y reinicialización del procesador. . . . . . 19
1.3.4 Descripción de las terminales del 8088 y 8086. . . . . . 21
1
2.7.3 Manejo de Excepciones. . . . . . . . . . . . . . . . . . 43
2.7.4 Configuración y operación. . . . . . . . . . . . . . . . . 44
Conclusiones y Perspectivas. 75
Bibliografı́a. 77
2
B Especificaciones de los principales circuitos usados. 87
B.1 Introducción. . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
B.2 Intel 8088. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
B.2.1 Introducción. . . . . . . . . . . . . . . . . . . . . . . . 87
B.2.2 Microprocesador de 8 bits HMOS (8088/8088-2). . . . . 87
B.3 Intel 8087. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
B.3.1 Introducción. . . . . . . . . . . . . . . . . . . . . . . . 89
B.3.2 Coprocesador de Datos Numéricos 8087/8087-2/8087-1. 89
B.4 Intel 8288. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
B.4.1 Introducción. . . . . . . . . . . . . . . . . . . . . . . . 90
B.4.2 Controlador de Bus CHMOS 82C88. . . . . . . . . . . 90
B.5 Intel 8259. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
B.5.1 Introducción. . . . . . . . . . . . . . . . . . . . . . . . 92
B.5.2 Controlador de Periféricos Programable 8259A. . . . . 92
B.6 Intel 8284. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
B.6.1 Introducción. . . . . . . . . . . . . . . . . . . . . . . . 93
B.6.2 Generador de reloj y manejador, para CPU’s 8086, 8284. 93
B.7 Intel 8255A. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
B.7.1 Introducción. . . . . . . . . . . . . . . . . . . . . . . . 93
B.7.2 Controlador programable de periféricos 8255. . . . . . . 94
C Diagramas. 111
3
4
LISTA DE FIGURAS
5
3.4 Controlador Programable de Periféricos 8255 en configuración
de Modo 0, con la palabra de palabra de control 6, progra-
mando el Puerto A como salida y el Puerto B como entrada. . 62
6
LISTA DE TABLAS
7
8
Introducción y Objetivos.
Introducción.
9
Objetivos Generales del Proyecto.
Se plantea como objetivo general el desarrollo de una tarjeta de expansión
para una PC-IBM o compatible que realice coprocesamiento de información.
Microprocesadores.
1.1 Introducción.
En este capı́tulo se hace una breve reseña histórica de los microprocesadores
y coprocesadores y se presenta una introducción a los microprocesadores Intel
8088 y 8086.
1.2 Generalidades.
1.2.1 Evolución del Microprocesador.
El microprocesador es la parte fundamental de una microcomputadora. Un
microprocesador es la Unidad de Procesamiento Central (CPU por sus si-
glas en inglés), que controla la operación de la computadora. Toma una
instrucción codificada en binario de la memoria, decodifica las instrucciones
en series de acciones simples, y maneja dichas acciones. La CPU contiene una
Unidad Aritmética y Lógica (ALU) que realiza diversas operaciones aritméti-
cas y lógicas sobre palabras binarias. La CPU también contiene un apuntador
a instrucciones (IP o instruction pointer ) usado para cargar la dirección de
la siguiente instrucción o dato de la memoria, registros de propósito general,
y circuiterı́a para controlar las señales del bus [HaD1986].
Históricamente, el primer microprocesador fue el Intel 4004, aparecido en
Noviembre de 1971. Este era un microprocesador de 4 bits ideado para ser
utilizado en una calculadora [HaD1986]. Este procesador funcionaba a una
frecuencia de 108Khz [BaJ1996].
Posteriormente, Intel producirı́a el microprocesador 8008, usado como
controlador de terminales. El sucesor de este fue el Intel 8080, aparecido en
1974, que tenı́a un bus de datos de 8 bits, y un bus de direcciones de 16
bits, teniendo internamente 7 registros de 8 bits. Con este microprocesador
11
12 SCIP - Cap. 1 - Microprocesadores.
Intel 80960
Intel 80860
Intel i432
Motorola MC14500B
Motorola 680x0
Motorola 88000
Motorola DSP96002/DSP56000
AMD 29000
Fairchild F8
Fairchild 9440
Un avance sobre el Intel 8080 fue el 8085 (1976), el cual tiene dos instruc-
ciones para deshabilitar o habilitar tres terminales de interrupción, y la ter-
minal de entrada y salida serial. Estas instrucciones son RIM y SIM [CEK].
También tenı́a el generador de reloj y el controlador de bus integrados. Otras
compañias fabricaron pronto microprocesadores de 8 bits, dando inicio la era
de las microcomputadoras; entre estos se encuentran el Motorola MC6800,
el MOS Technology 6502 (usado como CPU en la microcomputadora Apple
II [HaD1986]) y el Zilog Z80 (utilizado como CPU en la microcomputadora
Radio Shack TRS-80 [HaD1986]).
Posteriormente han aparecido muchos más microprocesadores, algunos de
los cuáles se presentan en las Tablas 1.1 y 1.2 [BaJ1996], y sus usos se han ido
extendiendo en otros campos, no solo como CPU’s de microcomputadoras.
Hall [HaD1986] define dos direcciones de evolución en los microprocesadores
(ver Subsecciones 1.2.2 y 1.2.3). Ası́ mismo han aparecido diversas arqui-
tecturas de procesadores, algunas de las cuales se presentan en la Tabla 1.3
[BaJ1996].
Rodolfo González González. 13
Fairchild/Intergraph Clipper
TI 9900
TI TMS320Cx0
RCA 1802
Ferranti F100-L
Signetics 2650
Siemens 80C166
MISC M17
Rekursiv
AT&T CRISP/Hobbit
Este tipo de dispositivos tienen aplicación en los más diversos campos, desde
el control de hornos de microondas hasta sistemas de rehabilitación para per-
sonas discapacitadas. Entre los primeros microcontroladores aparecidos en el
mercado están el Texas Instruments TMS-1000 y el Intel 8048. Actualmente
existen microcontroladores como los Intel 8051, 8096 y los Motorola MC6801
y MC6811 [HaD1986].
PDP-8/Intersil 6100
PDP-11
IBM/Motorola POWER/PowerPC
IBM System/360/370/390
TRON
Hitachi SuperH
SPARC
HP PA-RISC
ARM
DEC VAX
DEC Alpha
CDC 6600/7600
Berkeley RISC
Microprocesador Coprocesador
8088 8087
8086 8087
80286 80287
80386 80387
Figura 1.5: Diagrama de terminales del 8088 en Modo Máximo ( Fuente: OrCad).
22 SCIP - Cap. 1 - Microprocesadores.
Figura 1.6: Diagrama de terminales del 8088 en Modo Mı́nimo ( Fuente: OrCad).
La Tabla 1.6 presenta una breve descripción de las terminales del 8088
en relación con el modo en que se opere (mı́nimo o máximo).
Los requerimientos para soportar sistemas 8088 mı́nimo y máximo son
diferentes, por lo que no se pueden llevar a cabo con 40 terminales. Debido a
esto, el 8088 está equipado con una terminal de selección (M N/M X, terminal
número 33) la cual define la configuración del sistema. La definición de
determinado subconjunto de cambios en las terminales depende del estado
de la terminal M N/M X. Cuando M N/M X está a GND (tierra), el 8088
define las terminales 24 a 31 y 34 en modo máximo. En este modo se requiere
Rodolfo González González. 23
que las señales de control del bus sean generadas por el circuito integrado
8288. Cuando la terminal M N/M X esta a Vcc , el 8088 genera las señales de
control de bus por sı́ mismo de las terminales 24 a 31 y 34.
Tanto el modo mı́nimo como el modo máximo del 8088 pueden ser usa-
dos con bus multiplexado o demultiplexado. La configuración de bus multi-
plexado (Figura 1.7) brinda al usuario con un sistema de chips mı́nimo, sin
perder poder de procesamiento [Int1989].
El modo demultiplexado requiere un latch2 para direccionamiento de 64K,
2
Circuito que permite almacenar bits, usualmente también se les llama registros.
24 SCIP - Cap. 1 - Microprocesadores.
o dos latches para direccionar 1Mb completo. Se puede usar un tercer latch
para establecer un buffer3 si la carga del bus de direcciones lo requiere; un
transceiver4 puede ser usado también en este caso (ver Figura 1.8). Las
señales DEN y DT /R del microprocesador son utilizadas para controlar el
transceiver y la señal ALE es utilizada para habilitar el latch para que pueda
retener las direcciones [Int1989].
El modo máximo emplea, como se dice antes, el controlador de bus 8288.
El 8288 decodifica las lı́neas de estado S0, S1 y S2, y genera todas las señales
3
Memoria intermedia.
4
Dispositivo que permite comunicar o asilar dos lı́neas de transmisión de datos, o buses.
Rodolfo González González. 25
Modo Mı́nimo.
En modo mı́nimo (ver Figura 1.1), las terminales al bus están multiplexados,
para poder colocar al 8088 en un circuito integrado de 40 terminales. Utiliza
las terminales del número 9 al 16 para el bus de datos (8 bits) y direcciones
y del 2 al 8 y del 35 al 39 para el bus de direcciones únicamente. Esto da los
8 bits de datos y 20 de direcciones.
Cabe aclarar que el 8088 es operado en modo mı́nimo cuando es el único
microprocesador en los buses del sistema.
Modo Máximo.
El modo máximo es activado colocando la terminal M N/M X en bajo, como
se menciona en la Subsección 1.3.4.
Capı́tulo 2.
2.1 Introducción.
En este capı́tulo se describen: la operación del microprocesador Intel 8088,
las interrupciones, los puertos, y la operación del coprocesador numérico Intel
8087.
27
28 SCIP - Cap. 2 - Arquitectura basada en el Intel 8088.
Cada ciclo del bus del procesador consiste de por lo menos cuatro ciclos
del reloj (CLK), en la parte superior de la Figura 2.1. Estos son llamados T1 ,
T2 , T3 y T4 . La dirección es mandada al bus de direcciones por el procesador
durante T1 y la transferencia de datos se realiza durante T3 y T4 , mientras
que T2 es usado para cambiar la dirección del bus durante las operaciones
de lectura [Int1989]. Al tiempo que tarda el procesador en cargar y ejecutar
una instrucción se le denomina ciclo de instrucción. Al tiempo que tarda
una operación del bus se le llama ciclo de máquina, y este está compuesto
de grupos de estados, los cuáles son ciclos de reloj de la señal generada por
el 8284. Dichos estados se miden del borde de bajada de un pulso de reloj al
borde de bajada del siguiente [HaD1986], o bien, del borde de subida de un
pulso de reloj al borde de subida del otro.
En caso de que se produzca una indicación de “NOT READY” por parte
del dispositivo al que se está direccionando, se insertan estados de espera
llamados Tw entre T3 y T4 . Estos estados de espera tienen la duración de un
ciclo de CLK cada uno. También se puede dar el caso de que ocurran periodos
de inactividad (estados “idle”) de CLK entre ciclos del bus local [Int1989].
S2 S1 S0 Caracterı́sticas.
0(BAJO) 0 0 Reconocimiento de Interrupción.
0 0 1 Lectura de puerto.
0 1 0 Escritura a puerto.
0 1 1 Alto (Halt).
1(Alto) 0 0 Cargado de instrucción.
1 0 1 Lectura de datos de memoria.
1 1 0 Escritura de datos a memoria.
1 1 1 Pasivo (no hay actividad en el bus).
S4 S3 Caracterı́sticas.
0(BAJO) 0 Segmento extra.
0 1 Pila.
1 (ALTO) 0 Código o ninguno.
1 1 Datos.
Una vez que la dirección esta en los latches, las lı́neas AD0-AD7 pueden
ser usadas para transferencia de datos de memoria o de un puerto. Al mismo
tiempo el microprocesador activa la señal BHE y la información de A8-A19
y envı́a información de estado en esas lı́neas.
En este punto se llega a T2 y se puede llevar a cabo una operación de lec-
tura, por lo que RD es colocado en bajo, habilitando la salida del dispositivo
de memoria o el puerto direccionado, colocándose los datos en el bus (16 u 8
bits).
2.4 Interrupciones.
Una interrupción es una condición que detiene la ejecución de un programa
y coloca el apuntador de instrucciones (IP) apuntando a una localidad de
memoria especı́fica en donde se reanudará el procesamiento [GoJ1991] (en el
caso del 8088/8086).
Una tabla de 256 elementos contiene apuntadores a las direcciones de los
programas de servicio de interrupción. Esta tabla se ubica de la dirección
0 a la 3FFh, en un área reservada [Int1989]. Cada apuntador tiene 4 bytes
de longitud, 16 bits para el segmento y 16 para el desplazamiento de la di-
rección de la rutina de servicio de interrupción. Un dispositivo (o programa)
que origina una interrupción proporciona un número de 8 bits indicando el
32 SCIP - Cap. 2 - Arquitectura basada en el Intel 8088.
Interrupciones no enmascarables.
El microprocesador 8088 tiene una terminal para interrupción no enmas-
carable, la cuál tiene prioridad más alta que la terminal de petición de in-
terrupción (INTR). Se usa comúnmente para activar una rutina para casos
de falla de poder. La terminal NMI es activada en la transición de BAJO a
ALTO [Int1989].
Interrupción enmascarable.
El 8088 tiene una sola terminal de entrada de petición de interrupción (INTR)
que puede ser enmascarada por software internamente, limpiando el bit de
bandera de interrupción (IF). Esta señal es disparada en nivel. Es sin-
cronizada internamente durante cada ciclo de reloj, en el borde de subida de
Rodolfo González González. 33
la señal CLK. Para poder responder a ella, INTR debe estar en un nivel lógico
ALTO durante el periodo de reloj que precede al final de la instrucción actual
o el final de un movimiento, en el caso de una instrucción de tipo bloque.
Durante la secuencia de respuesta a la interrupción, las interrupciones son
deshabilitadas.
acciones:
Este rango es utilizado para direccionar las tarjetas de expansión que residen
en las ranuras de expansión de la tarjeta madre (ver Figura 2.5). El bloque
3 (0400H-FFFFH) no es utilizado.
Las formas de selección de dispositivos se discuten en la Subsección 3.4.1.
GND -I/O CH CK
RESET DRV D7
+5 VDC D6
IRQ2 D5
-5 VDC D4
DRQ2 D3
-12 VDC D2
Reserved D1
+12 VDC D0
GND I/O CH RDY
-MEMW AEN
-MEMR A19
-IOW A18
-IOR A17
-DACK3 A16 Component Side
DRQ3 A15
-DACK0 A14
CLOCK A13
IRQ7 A12
IRQ6 A11
IRQ5 A10
IRQ4 A9
IRQ3 A8
DACK2 A7
T/C A6
-DACK2 A5
T/C A4
ALE A3
+5 VDC A2
OSC A1
GND A0
I/O CH RDY Esta es la señal I/O channel ready (canal de E/S listo). Esta
es una señal de entrada que es usada para generar estados de espera,
lo que extiende la longitud de los ciclos de bus del procesador, en el
caso de tener que trabajar con dispositivos lentos de entrada/salida o
de memoria.
T/C La lı́nea terminal count envı́a un pulso cuando el conteo final para el
canal de DMA es alcanzado.
2.7.1 Ventajas.
El coprocesador numérico Intel 8087 proporciona un aumento en la velocidad
para la realización de operaciones numéricas. El manual de Intel ([Int1989])
señala que dicho aumento es del orden de 100 veces. Godfrey ([GoJ1991])
presenta la tabla comparativa (Tabla 2.3) que ilustra el aumento de velocidad
relativa al 8086 de varias operaciones usando el 8087.
La Tabla 2.4 ([Int1989]) presenta los tiempos de ejecución de diversas
instrucciones numéricas. Se comparan los tiempos de un par 8086/8087 y
un 8086 con emulación de 8087 por software. Los tiempos de ejecución se
presentan en microsegundos y son aproximados.
Rodolfo González González. 41
3. Divisor cero.
Las excepciones causan una interrupción en caso de que éstas estén habi-
litadas, y el bit de la correspondiente excepción en la palabra de control esta
desenmascarado. Si no lo están, el 8087 continua la ejecución sin importar si
la CPU anfitriona limpia la excepción. Se puede enmascarar una excepción
en particular, en cuyo caso el 8087 coloca la excepción en el registro de estado
y procede a ejecutar una función de manejo de interrupciones interno, con lo
que se puede continuar el procesamiento.
Las lı́neas de estado S0 -S2 y QS0 -QS1 habilitan al 8087 para que mo-
nitoree y decodifique instrucciones en sincronización con el 8088. Una vez
iniciado, el 8087 puede procesar en paralelo e independientemente de la CPU
anfitriona. La señal BUSY del 8087 sirve para sincronizar la CPU y el co-
procesador, informándole a aquél que el 8087 está ejecutando una instrucción.
La terminal WAIT del 8088 verifica aquella señal para asegurarse de que el
8087 está listo para ejecutar instrucciones subsecuentes. El 8087 puede in-
terrumpir a la CPU cuando detecta una excepción. La lı́nea de petición de
interrupción del 8087 se rutea al 8088/8086 mediante un PIC 8259 (“Con-
trolador de Interrupciones Programable”). El coprocesador utiliza las lı́neas
RQ/GT0 del 8088 para obtener el control del bus local para transferencia de
datos [Int1989].
La estructura, operación y temporizado del bus del 8087 son idénticos
a las de los procesadores 8086/8088 en modo máximo. Las direcciones son
multiplexadas con los datos en las lı́neas AD0-AD15, mientras que las lı́neas
Rodolfo González González. 45
A16-A19 son multiplexadas con las lı́neas de estado S3-S6. De estas lı́neas de
estado, S3, S4 y S6 está siempre en ALTO y la lı́nea S5 está siempre en BAJO
durante los ciclos donde el 8087 maneja el bus. S6 es monitoreada cuando el
8087 se encuentra monitoreando los ciclos de bus de la CPU (modo pasivo),
con el objeto de diferenciar la actividad del 8088 de la de entrada/salida local
del coprocesador, o de cualquier otro maestro del bus local. Finalmente, S7
tiene siempre el mismo valor que BHE.
El tipo de ciclo de bus es determinado por el controlador de bus 8288
usando las lı́neas S0-S2 según la Tabla 2.6 ([Int1989]).
Las instrucciones del 8087 aparecen como instrucciones ESCAPE a la
CPU. Dichas instrucciones son decodificadas y ejecutadas por la CPU y el
8087 al mismo tiempo. Si la instrucción leida no es una del 8087, este actúa
como si hubiera sido una instrucción NOP. La ejecución de una instrucción
del conjunto de instrucciones del 8087 se realiza cuando la CPU anfitriona
ejecuta la instrucción ESCAPE. Cabe señalar que toda instrucción del 8087
tiene el código 11011 en los bits mas significativos de su primer byte de
código.
46 SCIP - Cap. 2 - Arquitectura basada en el Intel 8088.
S2 S1 S0
0 × × No usado
1 0 0 No usado
1 0 1 Lectura de datos de memoria
1 1 0 Escritura de datos a memoria
1 1 1 Pasivo (no hay ciclo de bus)
palabras de los datos. Una vez concluida esta operación, el 8087 envı́a un
pulso bajo a la terminal RQ/GT0 del 8088 para que este pueda tomar el
control de los buses nuevamente [HaD1986].
El 8087 debe asegurarse de que el 8088 no ejecute la siguiente instrucción
antes de haber acabado él mismo de ejecutar la instrucción en curso. Esto
se puede presentar (A) cuando el 8088 necesita datos producidos por el 8087
para ejecutar la siguiente instrucción, o (B) cuando se ejecutan varias ins-
trucciones del 8087 en secuencia.
En el primer caso, lo que se hace es conectar la terminal de salida BUSY
del 8087 a la terminal TEST del 8088 y colocar una instrucción WAIT en el
programa. Esta ocasiona que el 8088 verifique la terminal TEST y entre en
un ciclo (“loop”) interno en el que se verifica repetidamente TEST hasta que
esta se hace ALTO, lo que indica que el 8087 ha completado la ejecución de
la instrucción.
En el segundo caso, el 8087 solo puede ejecutar una instrucción a la
vez, ası́ que se debe asegurar que el 8087 a completado la ejecución de una
instrucción antes de leer la siguiente de memoria. Esto se realiza utilizando
las terminales BUSY del 8087 y TEST del 8088 y la instrucción FWAIT
(WAIT) del 8088, que se coloca después de cada instrucción del 8087 para
asegurar que el 8088 quede en un ciclo interno verificando TEST una vez que
esta ha sido puesta en BAJO por la terminal BUSY del 8087 (al igual que
en el primer caso).
La Figura 2.9 muestra un diagrama de flujo simplificado de la operación
del 8087 y el 8088 (se omiten de dicho diagrama los casos de excepción).
48 SCIP - Cap. 2 - Arquitectura basada en el Intel 8088.
3.1 Introducción.
Este capı́tulo presenta la descripción del diseño de la tarjeta SCIP. La tar-
jeta SCIP fue ensamblada usando bases para alambramiento 1 sobre una tar-
jeta para prototipos de 16 bits JDR-PR10 de JDR Microdevices, la cual se
monta, para propósitos de prueba y mediciones, sobre una tarjeta de ex-
tensión EXT-80286. La tarjeta JDR-PR10 tiene integrado un diseño para la
decodificación y generación de las lı́neas de selección de la tarjeta, y “buffers”
para los buses de dirección, datos y otras lı́neas provenientes de conectores de
expansión de la PC. Sin embargo, dado que el diseño de JDR utiliza PAL’s
(Arreglos Lógicos Programables) en la lógica de decodificación, los cuales no
se pudieron obtener, se realizó dicha lógica independientemente.
El diseño se divide en 3 módulos principales:
1. Módulo de procesamiento.
2. Módulo de memoria.
49
50 SCIP - Cap. 3 - Diseño y Descripción del Sistema.
2 3 ROM1 ROM2 7
4 5 6 1
Esta parte del diseño se puede ver en las hojas de diagrama números
4 (“Módulo de generación de lı́neas de control/IRQ’s”) y 1 (“Módulo de
Procesamiento”) del Apéndice C.
Como se ve en la hoja 1, el microprocesador Intel 8088 esta conectado en
modo máximo (el cual se define en la Subsubsección 1.3.4, la Subsección 1.3.2
y la Subsección 1.3.4), para poder soportar la utilización del coprocesador
matemático Intel 8087. La conexión de los buses de datos y direcciones de
ambos se realiza en paralelo (ver Subsección 2.7.4). Ası́ mismo la conexión de
las lı́neas de estado S1-S3 de ambos circuitos se realiza en paralelo, para poder
decodificar el estado del bus en un momento dado. Estas lı́neas de estado
se conectan a las entradas correspondientes del 8288 (terminales 3, 18 y 19),
el cuál se encarga de la generación de las lı́neas de control del bus (MRD,
MWT, AWM, IOR, IOW, AIOW, DT/R, DEN, MC/PD, y ALE). Las lı́neas
de control que son usadas en SCIP son ALE, DT/R, MRD, y MWT para la
selección de memoria local, y IOR y IOW para la selección de puertos. Ası́
mismo, se utilizan para controlar el latch 74LS373 y los transceivers 74LS245
(U4 y U5/U6 respectivamente, en la hoja 1 del circuito), para mantener el
tráfico en el bus de datos y de direcciones de acuerdo a las especificaciones
dadas anteriormente (ver Sección 2.3).
La temporización del sistema se realiza mediante un generador de reloj
8284 (U1 en la hoja 4), con un cristal de 14.31818 Mhz, frecuencia que es
dividida por 3 para la adecuada operación del 8088 , 8087 y del 8288, la cuál
es de 4.74 ≈ 5 Mhz. Este mismo circuito integrado sirve para generar la señal
de RESET para el microprocesador 8088 (ver Subsección 1.3.3). El circuito
utilizado para la generación de la señal de RESET consta de una resistencia
de 640 KΩ, un capacitor de 360 µF y un interruptor de botón. Al presionarse
el botón se pone en BAJO la terminal RES del 8284, con lo que éste genera
el pulso de RESET para el 8088 (y en consecuencia para el 8087, 8255 y el
8288). Cabe señalar que la duración de la señal de RESET es de importancia,
debido a que debe de estar presente al menos durante 4 ciclos de reloj para
que el procesador pueda iniciar su operación normalmente [Int1989].
En el diseño realizado es necesario el uso de las lı́neas AEN2-AEN1 y
RDY2-RDY1 ya que estas se necesitan para configuraciones con mútiples
maestros de bus; debido a esto, AEN1-AEN2 se colocan en BAJO y RDY1-
RDY2 se colocan en ALTO. La terminal F/C se coloca a BAJO para habilitar
la generación de la señal del reloj por medio del cristal.
La terminal TEST del 8088 se conecta a la terminal BUSY del 8087, para
hacer posible la sincronización de ambos dispositivos, como se señala en la
52 SCIP - Cap. 3 - Diseño y Descripción del Sistema.
• Decodificadores/demultiplexores 2 a 4 74LS139.
• Compuertas OR 74LS32.
• Decodificadores 1 de 8 74LS138.
Tabla 3.2: Entradas del 74LS139 para la selección de las memorias RAM
Tabla 3.3: Entradas del 74LS139 para la selección de las memorias EPROM
A9 - A0 Hex. Disp.
1111000000 3C0 8259
1111000001 3C1 8259
1111000100 3C4 8255
1111000101 3C5 8255
1111000110 3C6 8255
1111000111 3C7 8255
Tabla 3.4: Direcciones de los puertos para los dispositivos PIC y PPI.
1. Mapeo de memoria.
2. Puertos de entrada/salida.
El primer método consiste en ver cada periférico como una dirección única
en la memoria de la computadora, siendo posible con esto el uso de todas las
instrucciones que sirven para accesar a memoria.
El segundo método consiste en ver al periférico como un dispositivo de
entrada/salida, independiente de la memoria. Con esto se limita el acceso al
dispositivo a las instrucciones IN y OUT.
Las formas para seleccionar un dispositivo son:
1. Lógica aleatoria.
2. Decodificadores.
3. Comparadores.
las señales de RESETDRV y CLOCK provenientes del bus de la PC, por cada
selección de la tarjeta generan un pulso en la señal IOCHRDY con duración
de dos ciclos de reloj, lo cual genera un retardo en del bus de la PC anfitriona
(Ver Sección 2.6).
12
Latch transparente de 8 bits con salidas de 3 estados.
62 SCIP - Cap. 3 - Diseño y Descripción del Sistema.
1 0 0 0 1 0 1 0
D7 D6D5D4D3D2D1D0
A 8-
PA7-PA0
4 PC7-PC4
D0-D7
-
8255A A
A ,-
4 PC3-PC0
C ,
B
8 PB7-PB0
1 ORG 0FFFF0h
2
3 START:
4 MOV AX,0F000h
5 MOV CS,AX
6 JMP PROG
Rodolfo González González. 65
4.1 Introducción.
En éste capı́tulo se presentan las pruebas efectuadas al sistema, y sus resul-
tados. El software de prueba desarrollado es básico y solo fue creado con
fines de demostración del hardware.
67
68 SCIP - Cap. 4 - Pruebas del Sistema y sus Resultados.
1 .MODEL SMALL
2
3 CODIGO SEGMENT ’Code’
4 ASSUME CS:CODIGO, DS:CODIGO, ES:NOTHING, SS:NOTHING
5
6 ORG 0F0100h
7
8 PROG PROC NEAR
9 XOR AX,AX
10 MOV DX,3C7h ; Direccion del pto. de control del 8255
11 MOV AL,8Ah ; Modo 0, A=Salida, B=Entrada,
12 ; PC03 = Salida, PC47 = Entrada
13 OUT DX,AL ; Programar 8255
14
15 MOV DX,3C4h ; Data Bus -> Port A
16 MOV AL,55h ; Valor a enviar a la PC anfitriona
17
18 WRITE: ; Ciclo infinito de escritura
19 OUT DX,AL
20 JMP WRITE
21
22 ORG 0FFFF0h ; Inicio del programa F000:FFF0
23
24 START: ; Inicializacion del CS
25 MOV AX,0F000h
26 MOV CS,AX
27 JMP PROG ; Salto a la rutina principal
28 PROG ENDP
29 CODIGO ENDS
30 END PROG
1 #include <stdio.h>
2 #include <dos.h>
3
4 int data;
5
6 void main(void)
7 {
8 do {
9 data = inportb(0x300); /* Leer byte del pto. */
10 printf("%c",data); /* Escribir byte a pantalla */
11 } while (1);
12 }
1 #include <stdio.h>
2 #include <dos.h>
3 #include <conio.h>
4
5 int data;
6 char c = ’\0’;
7
70 SCIP - Cap. 4 - Pruebas del Sistema y sus Resultados.
8 void main(void)
9 {
10 clrscr();
11
12 c = getch(); /* Leer caracter */
13 while (c != ’T’) { /* Termina cuando se lee T */
14 outportb(0x301,’T’); /* Enviar caracter de inicio */
15
16 do {
17 data = inportb(0x300);/* Esperar por caracter de reconoci- */
18 } while (data != ’R’); /* miento enviado por SCIP (R) */
19
20
21 outportb(0x301,c); /* Enviar a SCIP caracter leido */
22 delay(1);
23 data = inportb(0x300);/* Leer caracter enviado por SCIP */
24
25 printf("%c",data); /* Imprimir a pantalla el caracter */
26 c = getch(); /* Leer nuevo caracter de teclado */
27 }
28 }
8. Leer nuevo carácter del teclado y repetir el ciclo desde el paso 2 (lı́nea
26).
1 .MODEL SMALL
2
3 CODIGO SEGMENT ’Code’
4 ASSUME CS:CODIGO, DS:CODIGO, ES:NOTHING, SS:NOTHING
5
6 ORG 0F0100h
7
8 PROG PROC NEAR
9 XOR AX,AX
10 XOR BX,BX
11
12 MOV DX,3C7h ; Direccion del pto. de control del 8255 (A0=A1=1)
13 MOV AL,8Ah ; Modo 0, Pto. A = Salida, Pto. B = Entrada,
14 ; PC03 = Salida, PC47 = Entrada
15 OUT DX,AL ; Programar 8255
16
17 CICLO:
18 MOV DX,3C5h ; Port B -> Data Bus
19
20 LEE1: ; Esperar comando de inicio de transmision (T)
21 IN AL,DX
22 CMP AL,’T’
23 JNE LEE1
24
25 MOV AL,’R’ ; Enviar al anfitrion un comando de reconocimiento (R)
26 MOV DX,3C4h ; Data Bus -> Port A
72 SCIP - Cap. 4 - Pruebas del Sistema y sus Resultados.
27 OUT DX,AL
28
29 MOV DX,3C5h ; Port B -> Data Bus
30
31 LEE2: ; Esperar primer caracter del anfitrion
32 IN AL,DX
33 CMP AL,’T’
34 JE LEE2
35
36 MOV DX,3C4h ; Data Bus -> Port A
37 OUT DX,AL ; Enviar caracter recibido de regreso a anfitrion
38
39 JMP CICLO ; Reiniciar el ciclo
40
41 ORG 0FFFF0h
42
43 START: ; Inicializar CS y saltar al inicio del programa
44 MOV AX,0F000h
45 MOV CS,AX
46 JMP PROG
47 PROG ENDP
48 CODIGO ENDS
49 END PROG
Conclusiones.
El “Sistema de Coprocesamiento de Información para PC”, resultado de este
trabajo, permite efectuar la comunicación entre dos procesadores, y la eje-
cución de un programa en la tarjeta de expansión, enviando los resultados
al procesador de la computadora. El uso del Controlador Programable de
Periféricos 8255 permite que la tarjeta de expansión vea a la PC como a un
periférico.
Se desarrolló software básico para demostrar la comunicación bidireccio-
nal entre la tarjeta SCIP y la computadora anfitriona, y al mismo tiempo la
ejecución de programas distintos en ambos procesadores.
Perspectivas
El diseño presentado puede considerarse básico, y podrá ser personalizado
por un usuario, con el uso de algún tipo de interfaz (serial, paralela u otra),
o el uso de lógica adicional, para agregarle elementos externos, y expandir sus
aplicaciones a áreas como adquisición de datos, o procesamiento de sonido o
gráficos.
Dadas las limitaciones de los recursos disponibles para el desarrollo del
sistema, la circuiterı́a utilizada en el mismo podrı́a considerarse obsoleta,
habiendo ya procesadores mas modernos o especializados en ciertas tareas.
Como mejoras al sistema se puede contemplar la substitución de los circuitos
integrados utilizados (el procesador y toda su lógica de soporte) por otros más
modernos, ası́ como el uso de memoria de otro tipo, que permita expandir la
capacidad de almacenamiento del sistema. Sin embargo, el 8088 era la única
opción disponible que permitia simplificar la lógica del sistema, ya que si se
haciera uso de otro tipo de procesadores (de la familia Intel) se requerirı́a el
uso de otros dispositivos y técnicas.
75
Ası́ mismo, el software para una aplicación especı́fica del sistema debe ser
desarrollado. En el sistema actual, este software propiamente no existe, y
solo se contemplaron pequeños programas de prueba para efectuar la comu-
nicación bidireccional entre la computadora anfitriona y SCIP, y un software
básico grabado en una memoria EPROM de la tarjeta, para programar los
dispositivos que ası́ lo requieren, y efectuar la comunicación mencionada.
76
BIBLIOGRAFÍA
[DoT] Doumas, Thomas A., An Jiu, Yorkey, Thomas J., Interfacing to the
IBM PC Bus.
77
[JDR1988] JDR Microdevices, User’s Manual - 16 bit prototype board, JDR
Microdevices, 1988.
Apéndice A.
A.1 Introducción.
En este manual del usuario de SCIP se presentan los procedimientos para:
79
80 SCIP - Ap. A - Manual del Usuario.
2 3 ROM1 ROM2 7
4 5 6 1
A.2.2 Precauciones.
Dado que se utilizan circuitos MOS y CMOS en la tarjeta SCIP, los cuales
son altamente sensibles a descargas de electricidad estática, se recomienda
manejar la tarjeta con precaución.
A.2.3 Instalación.
Para instalar la tarjeta SCIP en la computadora anfitriona, siga estos pasos:
Figura A.4: Tarjeta de expansión SCIP montada sobre una tarjeta extensora
del bus (no necesaria en la práctica) en un ensamble 386, durante las pruebas
del sistema.
1 ORG 0FFFF0h
2
3 START:
4 MOV AX,0F000h
5 MOV CS,AX
6 JMP PROG
ORG 0F0100h
ORG 0FFFF0h
START:
; Inicializar CS y saltar al inicio del programa
MOV AX,0F000h
MOV CS,AX
JMP PROG
PROG ENDP
CODIGO ENDS
END PROG
86 SCIP - Ap. A - Manual del Usuario.
Una vez que finalize el programa principal, se podrı́a poner un salto hacia
el inicio del programa nuevamente, o un ciclo infinito que hiciera que la eje-
cución no saltará a direcciónes erróneas. Esto dependerı́a de cada aplicación.
Lo que conforme el programa puede ser cualquier instrucción del 8088,
siempre y cuando:
B.1 Introducción.
En este apéndice se presentan las especificaciones de los principales circuitos
integrados utilizados en el proyecto de tesis. Al final del apéndice se pre-
sentan las secciones principales de las fichas técnicas1 de estos circuitos,
tomadas de [Int1989] y [Int1990]. Para mayor información sobre estos cir-
cuitos, consúltense los manuales citados.
87
88 SCIP - Ap. B - Especificaciones de los principales circuitos usados.
• Disponible en EXPRESS
• Iccs = 100µA
• Icc = 10 mA
Temperatura 0C a 70C
Temperatura de almacenamiento -55C a +150C
Voltaje suministrado con respecto a GND -0.5V a +7.0V
Todos los voltajes de entrada con respecto a GND -0.5V a Vcc + 0.5V
Todos los voltajes de salida con respetco a GND -0.5 a Vcc +0.5V
Disipación de poder 0.7W
Tabla B.4: Rangos Máximos Absolutos.
92 SCIP - Ap. B - Especificaciones de los principales circuitos usados.
4. Expandible a 64 niveles.
4. Empaque de 18 terminales.
Diagramas.
En este apéndice se presentan los diagramas por módulos del sistema, ası́
como el diagrama general.
Los diagramas fueron creados con OrCAD y están organizados como se
describe a continuación:
111
112 SCIP - Ap. C - Diagramas.