Vous êtes sur la page 1sur 52

1

APENDICE A
DISPOSITIVOS LOGICOS PROGRAMABLES .................................... A-1
A.1 INTRODUCCION ............................................... A-2
A.2 SISTEMA CUPL ............................................... A-3
A.2.1 CARACTERISTICAS ....................................... A-4
A.2.2 ARCHIVOS .............................................. A-5
A.2.3 UTILIZACION ........................................... A-7
A.3 ARCHIVO DE DESCRIPCION ..................................... A-8
A.3.1 SECCION DE IDENTIFICACION ............................. A-9
A.3.2 SECCION DE DEFINICION ................................ A-10
A.3.3 SECCION DE ECUACIONES ................................ A-11
A.3.3.1 EXPRESIONES ..................................... A-13
A.3.3.2 OPERACIONES EN CONJUNTOS ........................ A-14
(a) CAMPOS ........................................... A-14
(b) OPERADOR DE IGUALDAD ............................. A-15
(c) RANGO ............................................ A-16
A.3.3.3 TABLA DE VERDAD ................................. A-16
A.3.3.4 COMANDO CONDITION ............................... A-17
A.3.3.5 MAQUINAS DE ESTADO .............................. A-18
A.4 SIMULADOR ................................................. A-21
A.4.1 SECCION DE IDENTIFICACION ............................ A-21
A.4.2 SECCION DE ORDENAMIENTO .............................. A-22
A.4.3 SECCION DE VECTORES .................................. A-22
A.4.4 OPCIONES ............................................. A-24
A.5 PROCEDIMIENTO ............................................. A-27
A.6 DISEOS ................................................... A-28
A.6.1 TARJETA PRINCIPAL .................................... A-28
A.6.1.1 IODECODE ........................................ A-29
(a) DESCRIPCION LOGICA DE IODECODE ................... A-31
(b) ARCHIVO DE SIMULACION DE IODECODE ................ A-33
(c) RESULTADOS DE IODECODE ........................... A-34
A.6.1.2 WAIT2 ........................................... A-35
(a) DESCRIPCION LOGICA DE WAIT2 ...................... A-37
(b) ARCHIVO DE SIMULACION DE WAIT2 ................... A-39
(c) RESULTADOS DE WAIT2 .............................. A-41
A.6.2 TARJETA DE EXPANSION ................................. A-43
A.6.2.1 EXP_DEC ......................................... A-44
(a) DESCRIPCION LOGICA DE EXP_DEC .................... A-45
(b) ARCHIVO DE SIMULACION DE EXP_DEC ................. A-47
(c) RESULTADOS DE EXP_DEC ............................ A-48
A.6.2.2 EXP_GLUE ........................................ A-49
(a) DESCRIPCION LOGICA DE EXP_GLUE ................... A-51
(b) ARCHIVO DE SIMULACION DE EXP_GLUE ................ A-53
(c) RESULTADOS DE EXP_GLUE ........................... A-54
A.6.3 EXPANSION DE MEMORIA ................................. A-55
A.6.3.1 DESCRIPCION LOGICA DE RAM_EXP ................... A-56
A.6.3.2 ARCHIVO DE SIMULACION DE RAM_EXP ................ A-58
A.6.3.3 RESULTADOS DE RAM_EXP ........................... A-59
A.7 CONCLUSIONES .............................................. A-60
A.8 REFERENCIAS ............................................... A-61
2

Figura A.1. Utilizacion y generacion de archivos por el sistema


CUPL. .......................................................... A-6
Figura A.2. Diagrama de flujo del procedimiento para disear un
PLD. .......................................................... A-27
Figura A.3. Diagrama esquematico equivalente de IODECODE ........... A-30
Figura A.4. Diagrama esquematico equivalente de WAIT2 .............. A-37
Figura A.5. Diagrama esquematico equivalente de EXP_DEC ............ A-44
Figura A.6. Diagrama esquematico equivalente de EXP_GLUE ........... A-51
Figura A.7. Diagrama esquematico equivalente de RAM_EXP ............ A-56
3

Tabla A.1. Caracteres reservados de CUPL ............................ A-9


Tabla A.2. Palabras reservadas de CUPL .............................. A-9
Tabla A.3. Operadores Booleanos del programa CUPL por orden de
precedencia. .................................................. A-12
Tabla A.4. Extensiones de variables ................................ A-13
Tabla A.5. Valores para probar las distintas variables en el
simulador. .................................................... A-23
Tabla A.6. Caracteristicas de los PLD, programables por la version
de CUPL. ...................................................... A-29
Tabla A.7. Mapa de direcciones del dispositivo IODECODE ............ A-31
Tabla A.8. Mapa de direcciones del dispositivo WAIT2 ............... A-36
Tabla A.9. Mapa de direcciones del dispositivo EXP_DEC. ............ A-45
Tabla A.10. Mapa de direcciones del dispositivo RAM_EXP ............ A-56
APENDICE A

DISPOSITIVOS LOGICOS PROGRAMABLES


A-2

A.1 INTRODUCCION

En el diseo de sistemas computarizados siempre se necesitan


dispositivos como decodificadores de direcciones, generadores de estados
de espera y circuitos logicos generales. Generalmente estos circuitos
son construidos con compuertas discretas de las familias TTL1 (74xx) o
CMOS2 (40xx).
La utilizacin de dispositivos de estas familias tiene sus ventajas
y desventajas. Ventajas como la seguridad de los repuestos, bajo costo y

bajo consumo3. Desventajas como la gran utilizacin de espacio en el

circuito impreso y complejidad en el diseo.

Como alternativa a las desventajas producidas por la utilizacin de

compuertas discretas, surgen los Dispositivos Lgicos Programable, (PLD4)

estos son circuitos integrados, los cuales son programables, que constan

de mltiples compuertas y/o basculadores (Flip/Flops), interconectados

entre si.

Para programar los mismos, el usuario crea una descripcin lgica

del circuito (en un archivo de texto) la cual es convertida en un mapa de

fusibles5 con la ayuda de un programa compilador. Este mapa de fusibles

es programado dentro del circuito integrado, tal como se programa una

memoria tipo PROM o EEPROM (dependiendo de la construccin del

dispositivo). De esta manera solo quedan conectados a las compuertas,


los trminos que se necesitan para realizar la funcin booleana y el

1
TTL = Transistor Transistor Logic
2
CMOS = Complementary Metal Oxide Semiconductor
3
Un PLD consume un promedio de 100mA @ 5V, mientras que tres dispositivos
de la familia TTL consumen un promedio de xxxmA @ 5V.
4
PLD = Programable Logic Device
5
Se le llama mapa de fusibles como el de las memorias PROM, aunque su
construccin no utilice fusibles (luz ultravioleta UV-PLD o elctricamente
borrable EE-PLD).
A-3

dispositivo se convierte en una nueva parte completamente hecha a la


medida.
En este apndice se explica la utilizacin del programa que
convierte la descripcin lgica en el mapa de fusibles, se explica la
utilizacin del programa que simula la descripcin lgica y se explica el
diseo de los dispositivos lgicos programables utilizados en el Sistema
Didctico SD-88.

A.2 SISTEMA CUPL

El sistema CUPL6 es uno de los estandares de la industria

electronica. El mismo es utilizado para generar el mapa de fusibles de

un dispositivo logico programable atraves de una descripcion logica de

alto nivel. CUPL es un programa desarrollado por Logical Devices, Inc. y

consiste basicamente de tres programas:

CUPL : Compilador Universal de lgica programable.

CUPL le permite escribir y compilar descripciones lgicas

para asignar a dispositivos lgicos programables (PLD), a

travs de programadores de dispositivos.

CSIM : Simulador de CUPL


CSIM le permite simular su diseo antes de empezar la

produccin. Usted crea un archivo describiendo el


funcionamiento esperado del PLD en trminos de valores de
entrada y salida. CSIM compara los valores esperados con los

calculados en la operacin de CUPL.

CBLD : Manejador de libreras

CBLD : Le permite manejar las libreras del programa, para

6
CUPL = Universal Compiler for Programable Logic
A-4

crear ms pequeas con dispositivos especficos.

A.2.1 CARACTERISTICAS

Las caracteristicas basicas con que consta la implementacion de

CUPL de Logical Devices, Inc. son:

-Aplicabilidad Universal
CUPL soporta los productos de todos las casas fabricantes de PLD, y

le permite a usted poner la misma funcionabilidad lgica, en

distintos dispositivos.

-Lenguaje de Alto Nivel

Substitucin de expresiones por ecuaciones, notacin abreviada para

listas, rango de direcciones (addr. range), campos de bits, etc. le

ahorraran tiempo en su diseo. La sintaxis de las mquinas de

estado le proveen de un medio poderoso de implementar cualquier

aplicacin sincrona (synchronous) usando los modelos de mquinas de

estado de MEALY7 o MOORE8.

-Documentacin Flexible
CUPL le permite documentar extensamente su diseo, adems que la

deteccin de errores se hace de una manera detallada, diseada para


guiarlo rpidamente a la fuente del mismo.

-Simplificador y Simulador
CUPL le proporciona cuatro niveles de simplificacin de ecuaciones

7
Un circuito donde la salida es funcion del estado de la maquina y las
entradas del circuito.
8
Un circuito donde la salida es funcion solamente del estado de la maquina.
A-5

booleanas. El simulador le permite simular su diseo antes de


utilizar un PLD. Esta caracterstica previene la perdida de PLDs y
le ayuda a encontrar problemas a nivel de diseo. Los vectores
verificados por CSIM pueden ser enviados al programador para la
verificacin de los mismos en el dispositivo.

A.2.2 ARCHIVOS

Bsicamente solo es necesario crear un archivo (*.PLD) para generar


el mapa de fusibles de un dispositivo logico programable. Si el

diseador desea simular el diseo, entonces es necesario crear otro

archivo ms (*.SI).

Con el archivo de la descripcion logica (*.PLD), y/o el archivo de

simulacion (*.SI), el programa CUPL, crea el mapa de fusibles (*.JED

*.HEX, *.HL), y archivos de listado (*.LST) y documentacion (*.DOC). En

la figura A.1, se muestra un diagrama de la utilizacion de archivos del

sistema CUPL.
A-6

Figura A.1. Utilizacion y generacion de archivos por el sistema CUPL.

Archivos de Entrada.
*.PLD Archivo con las descripciones lgicas.
*.SI Archivo con valores esperados (para simulador).

Archivos Intermedios
*.ABS Archivo generado por CUPL, para ser usado por CSIM.

Archivos de Salida
*.LST Archivo con listado de errores
*.DOC Archivo con documentacin
*.SO Archivo con resultado de la simulacin

*.JED(1) Archivo con mapa de fusible en formato JEDEC


*.JED(2) Archivo con mapa de fusible y vectores de prueba en formato JEDEC
*.HL Archivo con mapa de fusible en formato HL
*.HEX Archivo con mapa de fusible en formato HEX

Los archivos de mapa de fusibles (*.JED *.HEX, *.HL), contienen la


informacion especifica sobre que fusibles programar dentro del
dispositivo. El archivo de listado contiene el archivo de entrada
(*.PLD) con los error encontrados en la compilacion. El archivo de

documentacion contiene, todas las ecuaciones logicas expandidas, asi como


una representacion fisica del dispositivo (numero de pin acompaado por
nombre).
A-7

A.2.3 UTILIZACION

El programa CUPL puede ser ejecutado desde la linea de comando de

DOS (prompt) o desde un archivo de procesamiento en lotes (Batch File).


Cualquiera sea el caso, el programa CUPL.EXE posee las siguientes
opciones a la hora de su utilizacin.

cupl [-flags] [library] [device] source

donde flags, son las distintas opciones que soporta el programa.

-j Formato de salida JEDEC


-h Formato de salida ASCII-HEX
-i Formato de salida HL
-a Crear archivo absoluto
-l Crear archivo de documentacion
-x Expandir los terminos en el archivo de documentacion
-f Crear el diagrama del dispositivo y el mapa de fusibles
-d Desactivar los terminos OR no usados
-r Desabilitar la union de terminos
-g Programar el fusible de seguridad
-u Utilizar la libreria especificada para la compilacion
-s Ejecutar la simulacion despues de la compilacion
-m0 Sin simplificacion
-m1 Simplificacion rapida
-m2..m4 Otros niveles de simplificacion

library:
Nombre de archivo de la libreria a utilizar. Solo cuando se

utiliza la opcion -u.

device:
Nombre del dispositivo a utilizar. Solo cuando no se especifica el
dispositivo, en el archivo *.PLD .

source:
Nombre del archivo a compilarse (*.PLD) .

El autor recomienda se compile la descripcin (*.PLD) con la

siguiente lnea de comando, para depurar los errores, ya que su ejecucion


es sumamente rapida, por no especificar simplificaciones avanzadas de la
A-8

descripcion logica.

C:>cupl -j test
Luego de esto cuando no se encuentran ms errores se simule y
minimize la descripcion logica con la siguiente lnea de comando.

C:>cupl -j -f -x -l -s -m4 test

A.3 ARCHIVO DE DESCRIPCION

CUPL es un lenguaje de alto nivel, similar en cierta forma al


lenguaje 'C'. El mismo consta de comandos y funciones. El archivo

fuente es creado con cualquier editor de texto de DOS y contiene una


extension *.PLD. Las lineas de comando, como en 'C', son separadas por

punto y coma ';' y los nombres de variables, no pueden empezar con


numeros, ni contener caracteres reservados o palabras reservadas. En la

tabla A.1 y la tabla A.2, se muestran los caracteres y palabras

reservadas.

Tabla A.1. Caracteres reservados de CUPL

& # ( ) -
* + [ ] /
: . .. /* */
; , ! ' =
@ $ ^

Tabla A.2. Palabras reservadas de CUPL

APPEND FLD NEXT


ASSEMBLY FORMAT NODE
ASSY FUNCTION OUT
COMPANY IF PARTNO
CONDITION JUMP PIN
DATE LOC PRESENT
DEFAULT LOCATION REV
DESIGNER MACRO REVISION
DEVICE MIN SEQUENCE
ELSE NAME TABLE
FIELD
A-9

El archivo de entrada de CUPL consta bsicamente de tres secciones.

-Seccin de Identificacin del producto


-Seccin de definicin de pines
-Seccin de ecuaciones lgicas

A.3.1 SECCION DE IDENTIFICACION

Esta seccion es utilizada para identificar el producto y esta

compuesta por hasta nueve datos como el nombre del diseo, nmero de

parte, fecha, nmero de revision, compaa, etc.. Todos estos datos

pueden ser omitidos menos el que define el tipo de dispositivo. El

proposito de esta seccion, es la de brindar un cierto grado de

documentacion al diseo y definir el tipo de dispositivo a utilizarse en

el diseo.

Tambin es importante notar que esta seccion tiene que ser

exactamente igual en el archivo de simulacin, de lo contrario CUPL

generara un error de inconsistencia en el encabezado.

Ejemplo:

Name IODECODE;
Partno None;
Date 03/09/92;
Revision 01;
Designer Lambrano;
Company LOGITAL;
Assembly PC Memory;
Location U11;
Device P16L8; <=== Indica que se esta utilizando un PAL16L8

A.3.2 SECCION DE DEFINICION

En esta seccion se asigna el pin del dispositivo a un nombre de

variable. Ademas de la asignacion, se define el nivel logico activo. El


nivel logico activo significa, el estado logico que asumira el pin,
cuando se acierte a una condicion. Por ejemplo: la funcion logica AND es

cierta cuando, sus dos variables son ciertas (notese que nos referimos a

ciertas y no a uno '1'). Para que una variable sea cierta, su nivel
A-10

logico ('0' '1') debe coincidir con su nivel activo definido. ('0' para
activo bajo y '1'para activo alto). El formato de la declaracion PIN, es

el siguiente:

PIN pin_n = [!]var;

Donde:

PIN Comando que declara el numero de pin y lo asigna a una

variable.

pin_n Numero del pin en decimal o una lista de numeros de pin


utilizando la notacion de lista.

[pin_n1...pin_nx]

= Operador de igualdad

! Simbolo de exclamacion opcional, utilizado para definir la

polaridad de la seal (activo bajo).

var Nombre de variable o una lista de nombres de variables

utilizando la notacion de lista.

[var1...varx]

Ejemplo:
/** Entradas **/ <=== Solo comentarios

PIN [1..8] = [A4..11] ; <=== Utilizacin de 'shorthand'


PIN 9 = IO ; <=== Pin activo alto
PIN 11 = !wr ; <=== Pin activo bajo

/** Salidas **/ <=== Solo comentarios

PIN 12 = !cs_8259; <=== Pin activo bajo


PIN 13 = !cs_8253; <=== Pin activo bajo
PIN 14 = !cs_8255; <=== Pin activo bajo
PIN 15 = !cs_8251; <=== Pin activo bajo
PIN 16 = !cs_923; <=== Pin activo bajo
PIN 17 = cs_8116; <=== Pin activo alto
PIN 18 = !io_wr; <=== Pin activo bajo
PIN 19 = !mem_wr; <=== Pin activo bajo

A.3.3 SECCION DE ECUACIONES

En esta seccion se escriben las ecuaciones lgicas que seran


programadas en el dispositivo. Los operadores lgicos disponibles al

programador son los presentados en la tabla A.3.


A-11

Tabla A.3. Operadores Booleanos del programa CUPL por orden


de precedencia.
Funcin Smbolo Ejemplo

Not ! B = !A

OR # C = A # B

AND & C = A & B

XOR $ C = A $ B

El formato de una ecuacion es el siguiente:

[!]var[.ext] = exp;

Donde:

! Operador de complemento.

var Nombre de la variable (generalmente pines de salida).

.ext Extension opcional, cuando los dispositivos constan con nodos

internos (vea tabla A.4).

= Operador de igualdad.

exp Expresion; es una combinacion de variables y operadores.


A-12

Tabla A.4. Extensiones de variables


.D Entrada D de basculador tipo D
.L Entrada D de basculador tipo D transparente
.J Entrada J de basculador tipo JK
.K Entrada K de basculador tipo JK
.S Entrada S de basculador tipo SR
.R Entrada R de basculador tipo SR
.T Entrada T de basculador tipo T
.DQ Salida Q de basculador tipo D
.LQ Salida Q de basculador tipo D transparente
.AP Preset asincronico de basculadores
.AR Reset asincronico de basculadores
.SP Preset sincronico de basculadores
.SR Reset sincronico de basculadores
.CK Entrada de reloj de basculadores
.OE Habilitador de salidas programable (Output Enable)
.CA Arreglo complementario

Ejemplo:
/** Declaracion de Variables Intermedias **/

Field memadr = [A11..4] ; <== Variable intermedia

/** Ecuaciones Logicas **/

mem_wr = !IO & wr; <== Ecuacion de la seal MEM_WR


io_wr = IO & wr; <== Ecuacion de la seal IO_WR
cs_8259 = IO & memadr:[020..02F] ; <== Chip Select del 8259
cs_8253 = IO & memadr:[040..04F] ; <== Chip Select del 8253
cs_8255 = IO & memadr:[060..06F] ; <== Chip Select del 8255
cs_8251 = IO & memadr:[3F0..3FF] ; <== Chip Select del 8251
cs_923 = IO & memadr:[F40..F4F] ; <== Chip Select del 74C923
cs_8116 = IO & memadr:[F80..FFF] & wr; <== Chip Select del 8116

A.3.3.1 EXPRESIONES

Las expresiones son una combinacion de variables y operadores que

producen un resultado cuando son evaluadas por el compilador. Una


expresion puede estar compuesta de cualquier numero de sub-expresiones.
A-13

Las expresiones son evaluadas dependiendo de la precedencia de los


operadores utilizados. Cuando operadores con igual precedencia aparecen
en una expresion, el orden de la evaluacion es de izquierda a derecha.
Se pueden utilizar parentesis para afectar el orden de evaluacion de una
expresion. Cuando se utilizan parentesis, la expresion en el conjunto
ms interno de parentesis se evalua primero.

A.3.3.2 OPERACIONES EN CONJUNTOS

Todas las operaciones que se realizan sobre un bit de informacion,

por ejemplo un pin de entrada o salida, pueden ser aplicadas a multiples

bits agrupados como conjuntos (SET). Las operaciones de conjuntos pueden

ser entre un conjunto y una variable, o entre dos conjuntos. Por ejemplo:

[D0,D1,D2] & read;

Es igual a:

[D0 & read, D1 & read, D2 & read]

Cuando una operacion es realizada entre dos conjuntos, los conjuntos

deben de ser del mismo tamao. Por ejemplo:

[D0, D1, D2] & [A0, A1, A2]


Es igual a:
[D0 & A0, D1 & A1, D2 & A2]

(a) CAMPOS

Una declaracion de campos asigna a una variable de varios bits un

grupo de variables de un bit. Su sintaxis se presenta a continuacion.


FIELD var = [var1, var2, ...varn];
Donde:

FIELD Comando de declaracion de campos.


A-14

var Nombre de la variable de multiples bits.

= Operador de igualdad.

varn Variables de un bit, que van a ser asignadas.

Ejemplo:
FIELD CUENTA = [Q0,Q1,Q2,Q3];
FIELD CUENTA = [Q0..3];
FIELD DIR = [A4..9];

La declaracion de un conjunto de variables como un campo (FIELD),

es muy utilizada cuando las variables guardan entre si una estrecha

relacion toales como, salidas de contadores, entradas de direcciones,

etc.

(b) OPERADOR DE IGUALDAD

A diferencia de los otros operadores de conjuntos, el operador de

igualdad, evalua la expresion a un solo valor booleano (1bit). El mismo

crea una comparacion bit por bit, entre un conjunto de variables y una

constante. Su sintaxis se presenta a continuacion.

[var1, var2, ...varn]:constante;

field_var:constante;

Donde:

varn Variables de un bit, que van a ser comparadas.

field_var Nombre de una variable de multiples bits.

: Operador de igualdad para conjuntos.

constante Constante contra la cual van a ser comparadas las

variables (hexadecimal).

Ejemplo:
OK = [Q0,Q1,Q2,Q3]:9;
CS = DIR:3F;
A-15

(c) RANGO

La operacion de rango es similar a la operacion de igualdad, exepto


que la constante es ahora un rango de valores. Su sintaxis se presenta a
continuacion.
[var1, var2, ...varn]:[cons1...cons2];
field_var:[cons1...cons2];
Donde:

var1, ...varn Variables de un bit, que van a ser comparadas.

field_var Nombre de una variable de multiples bits.

: Operador de igualdad para conjuntos.

[cons1...cons2] Rango contra la cual van a ser comparadas las

variables (hexadecimal).

Ejemplo

OK = [Q0,Q1,Q2,Q3]:[9..C];

CS = DIR:[30..3F];

A.3.3.3 TABLA DE VERDAD

Algunas veces la forma ms clara de expresar una descripcion

logica, es en tablas. CUPL provee el comando TABLE, para crear tablas de

verdad, la cuales relacionan variables de entrada con variables de

salida. Su sintaxis se presenta a continuacion.


TABLE var_list_1 => var_list_2 {

input_1 => output_1;


input_2 => output_2;
...

input_n => output_n;


}
Donde:

var_list1 Define las variables de entrada.

var_list2 Define las variables de salida.

input_n Valor en hexadecimal que representa el valor


A-16

decodificado de las variables var_list1.

output_n Valor en hexadecimal que representa el valor

decodificado de las variables var_list2.

Ejemplo:
FIELD entrada = [IN2..0];
FIELD salida = [OUT7..0];
TABLE entrada => salida {
0 => 0F;
1 => F0;
2 => 34;
3 => 1F;
4 => F1;
5 => 34;
6 => F2;
7 => 34;
}

A.3.3.4 COMANDO CONDITION

El comando CONDITION, provee al usuario de una manera mucho ms

adecuada, de especificar funciones logicas en vez de escribir ecuaciones

booleanas clasicas. Su sintaxis es como sigue:

CONDITION {

IF expr OUT [!]var1 OUT [!]var2;

...

IF expr OUT [!]var3 OUT [!]var4;

DEFAULT OUT [!]var5 OUT [!]var6;

Donde:

CONDITION Define la utilizacion de este comando.

IF Define una operacion condicional

expr Expresion a ser evaluada por el IF.

OUT Comando para acertar o negar(!) una variable cualquiera

de salida.

DEFAULT Ejecutara si ninguno de los IF es acertado.

Ejemplo: Control de valvulas.


CONDITION {
A-17

IF BAJO2 OUT VALVULA1 OUT VALVULA2;


IF BAJO1 OUT VALVULA1 OUT !VALVULA2;
DEFAULT OUT !VALVULA1 OUT !VALVULA2;
}

A.3.3.5 MAQUINAS DE ESTADO

El lenguaje de las maquinas de estado, utilizado en CUPL, permite


al usuario aislarse del diseo a nivel de compuertas o ecuaciones y crear
un diseo desde el nivel la descripcion funcional del circuito.

Una maquina de estado, es un circuito con basculadores, las salidas

de estos circuitos con basculadores, dependen del estado actual y previo

de los mismos. No es objetivo, de este trabajo profundizar en la teoria

de las maquinas de estado, sin embargo aqui presentaremos su sintaxis.

SEQUENCE field_var {

PRESENT state_n1

NEXT state_n2;

PRESENT state_n3

IF expr NEXT state_n4 OUT [!]var1 OUT [!]var2;

...
IF expr NEXT state_n4 OUT [!]var3 OUT [!]var4;

DEFAULT OUT [!]var5 OUT [!]var6;


PRESENT state_n4
...

}
Donde:

SEQUENCE Define la utilizacion de una maquina de estado.

field_var Variable de campo (multiples bits).

state_nx Valor codificado, que asume o asumira la variable de

campo field_var.

NEXT Define que el siguiente numero, sera el estado que


A-18

asumira la variable de campo field_var.

IF Define una operacion condicional

expr Expresion a ser evaluada por el IF.

OUT Comando para acertar o negar(!) una variable cualquiera

de salida.

DEFAULT Se ejecutara si ninguno de los IF es acertado.

Como podemos apreciar, la estructura de las maquinas de estado es


muy completa, sin embargo el usuario puede tener problemas al principio y

los siguientes ejemplos deben ayudarlo a comprenderlas mejor.

Ejemplo: contador de 4-bits ascendente.

$Define S0 0
$Define S1 1
$Define S2 2
$Define S3 3

FIELD count = [Q1,Q0];

SEQUENCE count {
PRESENT S0 NEXT S1;
PRESENT S1 NEXT S2;
PRESENT S2 NEXT S3;
PRESENT S3 NEXT S0;
}

Ejemplo: contador de 4-bits ascendente/descendente.

$Define S0 0
$Define S1 1
$Define S2 2
$Define S3 3
FIELD count = [Q1,Q0];
SEQUENCE count {
PRESENT S0
IF UP NEXT S1;
IF !UPNEXT S3;
PRESENT S1
IF UP NEXT S2;
IF !UPNEXT S0;
PRESENT S2
IF UP NEXT S3;
IF !UPNEXT S1;
PRESENT S3
IF UP NEXT S0;
A-19

IF !UPNEXT S2;
}

A.4 SIMULADOR

Luego de que el archivo con las descripciones logicas (*.PLD) ha


sido compilado exitosamente, el mismo puede ser simulado. Para simular
el archivo, es necesario crear un archivo con los valores esperados

(vectores). El archivo es creado con cualquier editor de texto de DOS y

contiene una extension *.SI .

El archivo de simulacion consta con tres secciones:

-Seccin de Identificacin del producto

-Seccin de ordenamiento de variables

-Seccin de vectores de prueba

A.4.1 SECCION DE IDENTIFICACION

Esta seccion esta compuesta por datos como el nombre del diseo,

nmero de parte, fecha, nmero de revision, compaa, etc.. Todos estos

datos pueden ser omitidos menos el que define el tipo de dispositivo. El

proposito de esta seccion, es la de brindar un cierto grado de

documentacion al diseo y definir el tipo de dispositivo a utilizarse en


el diseo. Es importante notar que esta seccion tiene que ser
exactamente igual en el archivo de descripcion logica (*.PLD), de lo
contrario CUPL generara un error de inconsistencia en el encabezado.
Ejemplo:

Name IODECODE;
Partno None;
Date 03/09/92;
Revision 01;
Designer Lambrano;
Company LOGITAL;
Assembly PC Memory;
Location U11;
Device P16L8; <=== Indica que se esta utilizando un PAL16L8

A.4.2 SECCION DE ORDENAMIENTO


A-20

En esta seccion se definen las variables, el orden y el


espaciamiento entre cada una de ellas. Segun sea el orden definido, se
le asignara el contenido de cada vector a las variables correspondientes.
La sintaxis del comando ORDER es como presentamos:

ORDER:
var1, {%X}, {"comentario"}, var2, ... varn;
Donde

ORDER: Define que lo siguiente es el ordenamiento a utilizarse

en la simulacion.

varx Nombre de la variable igual que en el archivo de la

descripcion logica.

%X Separacion, en espacios en blanco, entre las variables.

comentario Cualquier comentario, que se desea aparezca en el

archivo de salida de la simulacion.

Ejemplo:

ORDER:
A11, %2, A10, %2, A9, %2, A8, %2, A7, %2, A6, %2, A5, %2,
A4, %2, IO, %2, !wr, %4, !cs_8259, %2, !cs_8253, %2,
!cs_8255, %2, !cs_8251, %2, !cs_923, %2, cs_8116, %2,
!io_wr, %2, !mem_wr;

A.4.3 SECCION DE VECTORES

En esta seccion, es en donde se encuentran los valores (vectores),


con los cuales se probaran el diseo del PLD. Cada columna, representa
una variable y la misma corresponde a la variable definida en la seccion

de ordenamiento.
Los valores que se pueden colocar en cada columna estan definidos
en la tabla A.5. Si un valor no esperado, aparece en la simulacion, el

programa crea una advertencia en el archivo de salida (*.SO). Sin


embargo, el usuario puede tambien permitir que el programa de simulacion,
calcule los valores y luego compararlos manualmente con los esperados.
A-21

Tabla A.5. Valores para probar las distintas variables en el


simulador.
Valor Descripcion
0 Entrada baja (0 voltios)
1 Entrada Alta (5 voltios)
C Entrada de reloj (bajo-alto-bajo)
K Entrada de reloj (alto-bajo-alto)
L Probar salida baja (0 voltios)
H Probar salida alta (5 voltios)
Z Probar alta impedancia
X Entrada alta o baja. Salida alta o baja.
N No probar salida
P Inicializar registros internos (aplicado a
salida !Q)
* Determinar el valor por el simulador

Ejemplo:
VECTORS:
X X X X X X X X 0 1 * * * * * * * *
0 0 0 0 0 0 1 0 1 1 * * * * * * * *
0 0 0 0 0 1 0 0 1 1 * * * * * * * *
0 0 0 0 0 1 1 0 1 1 * * * * * * * *
0 0 1 1 1 1 1 1 1 1 L Z H * * * * *
1 1 1 1 0 1 0 0 1 1 * * * * * * * *

A.4.4 OPCIONES

El simulador, provee al usuario de cuatro opciones para facilitar


la simulacion de cualquier diseo. Estas opciones son utilizadas para
documentar la simulacion ($MSG), repetir algun vector ($REPEAT),

verificar estados intermedios ($TRACE) y terminar la simulacion ($EXIT).

$MSG $REPEAT $TRACE $EXIT


A-22

$MSG:
Esta opcion permite incluir en el archivo de salida (*.SO),
cualquier mensaje, con propositos de documentacion o aclaracion.
Ejemplo:
VECTOR:

$MSG "Probando el CS del 8253";


0 0 0 0 0 1 0 0 1 1 * * * * * * * *

$REPEAT n:
Esta opcion causa la repeticion n-veces del siguiente vector

despues de la instruccion REPEAT.

Ejemplo:
VECTOR:
$MSG "Probando el CS del 8253";
$REPEAT 3;
0 0 0 0 0 1 0 0 1 1 * * * * * * * *

$TRACE n:
Este comando ajusta la cantidad de informacion que el simulador

incluira en el archivo de salida (*.SO) . El valor de N, va desde 0

hasta 3 y su definicion es la siguiente.

Nivel N = 0: (normal)
Solamente incluye el resultado de la prueba de los vectores. Este
es el nivel que normalmente se utiliza, a menos que se encuentren errores
y se desee verificar valores intermedios en el pulso del reloj (antes,

durante y despues del pulso).

Nivel N = 1:
Cuando se utiliza, retroalimentacion de circuitos combinatorios (no
basculadores) el valor retroalimentado es desconocido en la primera
evaluacion del vector. Si el nuevo valor retroalimentado cambia, alguna
A-23

de las variables de salida, el vector es evaluado nuevamente. Todos los


valores deben ser identicos por dos evaluaciones, para determinar que el
vector es estable. El valor de N = 1, incluira en el archivo de salida,
los valores intermedios para cada vector que requiera de ms de una
evaluacion para convertirse en estable. Si algun vector requiere de ms
de veinte evaluaciones, el vector se considera insetable.

Nivel N = 2:
El nivel N = 2, identifica tres faces de simulacion para diseos

que utilizan basculadores. La primera fase es "antes del reloj", donde

vectores intermedios son evaluados en los circuitos combinatorios. La

segunda fase es "en el reloj", donde los valores de los basculadores son

asignados. La tercera fase es "despues del reloj", donde las salidas

utilizando retroalimentacion son evaluadas utilizando el nivel N = 1.

Nivel N = 3:
Este nivel provee la maxima informacion del simulador. Cada fase

de la simulacion "antes del reloj", "en el reloj" y "despues del reloj"

son incluidas ademas de los productos individuales de cada variable. El


valor de salida de la compuerta AND y los valores de entrada a la misma

tambien son incluidos.

Ejemplo:
VECTOR:
$MSG "Probando el CS del 8253";
$TRACE 2;
0 0 0 0 0 1 0 0 1 1 * * * * * * * *

$EXIT:
Esta instruccion termina la simulacion, en cualquier punto. Los
A-24

vectores que aparecen debajo de esta instruccion son ingnorados por el


simulador. Esta instruccion es utilizada en la depuracion de vectores
para aislar algunos vectores en el archivo de simulacion sin tener que
borrarlos o encerrarlos entre comentarios.

Ejemplo:
VECTOR:

0 0 0 0 0 1 0 0 1 1 * * * * * * * *

$EXIT;
0 0 0 0 0 1 0 1 0 1 * * * * * * * *
0 1 0 1 0 1 0 1 0 1 * Z * * * H * *
A-25

A.5 PROCEDIMIENTO

El procedimiento para el diseo y


programacion de un PLD, depende mucho del
diseador, sin embargo aqui presentaremos
el procedimiento utilizado por el autor
para el diseo de los PLDs utilizados en el
Sistema Didactico.
Existen basicamente dos ciclos de

depuracion en este procedimiento. El

primero depura errores generados por el

compilador (errores de sintaxis) y el

segundo depura errores de funcionamiento.

En la figura A.2, se muestra el

diagrama de flujo del procedimiento, y

basicamente se resume en crear y editar el

archivo *.PLD, hasta que el compilador no

genere errores.

Luego de esto, se somete el diseo al

simulador y se evaluan los valores

obtenidos con los valores esperados. Una

vez se obtienes los valores esperados, el


dispositivo es programado.

A.6 DISEOS

En esta seccion, explicaremos el


diseo de los cinco, dispositivos logicos
programables, utilizados en el sistema Figura A.2. Diagrama de
flujo del procedimiento para
disear un PLD.
A-26

didactico SD-88.
Presentaremos el diagrama equivalente, los archivos de descripcion
(*.PLD), los archivos de simulacion (*.SI), el resultado de la simulacion
y el diagrama del dispositivo.

A.6.1 TARJETA PRINCIPAL

Las necesidades de la tarjeta principal se podian agrupar en:


1. Seleccion de 8, dispositivos (6-perifericos, 2-memoria).
2. Generacion de cuatro seales (io_rd, io_wr, mem_rd & mem_wr).

a partir de tres seales (IO/m, rd & wr).

3. Generacion de dos estados de espera, para acesso de

perifericos.

La generacion de las cuatro seales y la seleccion de los ocho (8)

dispositivos no requiere de basculadores, solo circuitos combinatorios,

sin embargo la generacion de dos estados de espera requiere de tres

basculadores tipo 'D'.

Con esta informacion podemos establecer la cantidad de salidas y

basculadores que necesitamos, para asi poder elegir los dispositivos a

utilizar. Como podemos observar se necesitan 12 salidas (8 selecciones,


4 seales), ademas de 3 basculadores.

Tabla A.6. Caracteristicas de los PLD, programables por la version de


CUPL.
Dispositivo Entradas Dedicadas Salidas con Sin basculadores
basculadores
E/S Salidas

PAL16L8 10 --- 6 2

PAL16R4 8 4 4 ---

PAL16R6 8 6 2 ---

PAL16R8 8 8 --- ---


A-27

Los dispositivos logicos programables que pueden ser utilizados con

la version de Logical Devices, Inc. de CUPL se encuentran en la tabla


A.6, como se puede observar ninguno cuentan con tantas salidas y
basculadores, por lo que nuestro diseo, se realizara en dos partes. Una
sera la decodificacion de los perifericos y la generacion de dos seales
(io_wr & mem_wr) con el dispositivo PAL16L8, y la otra sera la
decodificacion de las memorias, generacion de estados de espera y
generacion de las otras dos seales (io_rd & mem_rd) con el dispositivo
PAL16R4.

A.6.1.1 IODECODE

Las especificaciones para este dispositivo son las siguientes:

1. Generacion de seis (6) seales de seleccion, con resolucion

de 16bytes.

2. Generacion de las seales io_wr & mem_wr.

Esta cantidad de seales de salida suman ocho (8) seales, que es

el maximo numero de salidas con que consta el PAL16L8, por lo tanto nos

quedan solo diez (10) pines de entrada que debemos utilizar. De los diez

(10) pines de entrada, tomamos dos (2), para generar las seales io_wr &
mem_wr, con las seales IO/m & wr. Los otros ocho pines de entrada los

utilizamos para el bus de direcciones, de A11 a A4, los que nos permite
seleccionar cualquier localidad desde X000H hasta XFFFh, con una
resolucion de 16Bytes osea, un banco puede ser 000h-00Fh y el otro

010h-01Fh, sin coincidir.


La descripcion logica (*.PLD), de este circuito resulta trivial,
sin embargo surgio un pequeo problema con la seal CS_8116, como se

puede apreciar en la descripcion logica, el banco del mismo es de


128bytes (FFFh - F80h = 080h). Este problema surgio porque esta seal es
activa alta y el PLD, no tenia suficiente terminos para la decodificacion

unida a la seal wr (write).


A-28

Esta seal debe estar sincronizada a la seal write, del


microprocesador, ya que el dispositivo 8116, no contiene seal de
habilitacion de escritura y la habilitacion del dispositivo habilita
inmediatamente la lectura de la informacion del bus de datos.
En la figura A.3, se muestra el diagrama esquematico equivalente
del dispositivo IODECODE.

Figura A.3. Diagrama esquematico equivalente de IODECODE

Tabla A.7. Mapa de direcciones del


El mapa de direcciones dispositivo IODECODE
Dispositivo Localidades Banco
seleccionado para este 8259 020..021 020..02F

dispositivo se presenta en la 8253 040..043 040..04F

8255 060..063 060..06F


tabla A.7, y el mismo fue
8251 3F0..3F1 3F0..3FF

diseado de tal manera que fuera 74C923 F40..F40 F40..F4F

8116 F80..F80 F80..FFF


lo ms similar posible al mapa de
direcciones de una IBM-PC/XT.

(a) DESCRIPCION LOGICA DE

IODECODE
A-29

A continuacion presentamos el contenido del archivo IODECODE.PLD,

con el objetivo de dejar documentacion de su descripcion logica.

Name IODECODE;
Partno None;
Date 03/09/92;
Revision 01;
Designer Lambrano;
Company LOGITAL;
Assembly SD88;
Location U11;
Device P16L8;

/*********************************************************/
/* */
/* Este dispositivo genera las senales de seleccion para */
/* 8253, 8255, 8251, 74C923, 8116, 8259 ademas de las */
/* senales io_wr, mem_wr */
/* IO AND wr ==> io_wr */
/* !IO AND wr ==> mem_wr */
/* */
/*********************************************************/

/*********************************************************/
/* */
/* Pines de entrada */
/* */
/*********************************************************/

PIN [1..8] = [A4..11] ; /* Bus de direcciones */


PIN 9 = IO ; /* Senal IO/m */
PIN 11 = !wr ; /* Senal wr */

/*********************************************************/
/* */
/* Pines de Salida */
/* */
/*********************************************************/

PIN 12 = !cs_8259; /* Seleccion del 8259 */


PIN 13 = !cs_8253; /* Seleccion del 8253 */
PIN 14 = !cs_8255; /* Seleccion del 8255 */
PIN 15 = !cs_8251; /* Seleccion del 8251 */
PIN 16 = !cs_923; /* Seleccion del 74C923 */
PIN 17 = cs_8116; /* Seleccion del 8116 */
PIN 18 = !io_wr; /* Senal de io_wr */
PIN 19 = !mem_wr; /* Senal de mem_wr */

/*********************************************************/
/* */
/* Variables Intermedias */
/* */
/*********************************************************/

Field bus_dir = [A11..4]; /* Dar el nombre "bus_dir" */


/* a las variables A11..A4 */

/*********************************************************/
/* */
/* Ecuaciones Logicas */
/* */
/*********************************************************/

mem_wr = !IO & wr;

io_wr = IO & wr;

cs_8259 = IO & bus_dir:[020..02F] ;

cs_8253 = IO & bus_dir:[040..04F] ;

cs_8255 = IO & bus_dir:[060..06F] ;

cs_8251 = IO & bus_dir:[3F0..3FF] ;

cs_923 = IO & bus_dir:[F40..F4F] ;

cs_8116 = IO & bus_dir:[F80..FFF] & wr;

(b) ARCHIVO DE SIMULACION DE IODECODE

A continuacion presentamos el contenido del archivo IODECODE.SI,

con el objetivo de dejar documentacion de su archivo de simulacion.


A-30

Name IODECODE;
Partno None;
Date 03/09/92;
Revision 01;
Designer Lambrano;
Company LOGITAL;
Assembly SD88;
Location U11;
Device P16L8;

/*********************************************************/
/* */
/* Este dispositivo genera las senales de seleccion para */
/* 8253, 8255, 8251, 74C923, 8116, 8259 ademas de las */
/* senales io_wr, mem_wr */
/* IO AND wr ==> io_wr */
/* !IO AND wr ==> mem_wr */
/* */
/*********************************************************/

/*********************************************************/
/* */
/* Definicion del Ordenamiento */
/* */
/*********************************************************/

ORDER:
A11, %2, A10, %2, A9, %2, A8, %2, A7, %2, A6, %2, A5, %2,
A4, %2, IO, %2, !wr, %4, !cs_8259, %2, !cs_8253, %2,
!cs_8255, %2, !cs_8251, %2, !cs_923, %2, cs_8116, %2,
!io_wr, %2, !mem_wr;

/*********************************************************/
/* */
/* Vectores de prueba */
/* */
/*********************************************************/

VECTORS:
/* 123456-Dejar seis espacios para los numeros de linea *.SO */
$msg " ! ! ! ! ";
$msg " 8 8 8 8 ! 8 !";
$msg " 2 2 2 2 9 1 ! m";
$msg " 5 5 5 5 2 1 i e";
$msg " 9_ 3 5 1 3 6 o m";
$msg " A A A A A A A A ! _ _ _ _ _ _ _ _";
$msg " 1 1 0 0 0 0 0 0 I w c c c c c c w w";
$msg " 1 0 9 8 7 6 5 4 O r s s s s s s r r";
$msg " ____________________________ ______________________";
$msg " Encendido ";
X X X X X X X X 0 1 * * * * * * * *
$msg " 8259 ";
0 0 0 0 0 0 1 0 1 1 * * * * * * * *
$msg " 8253 ";
0 0 0 0 0 1 0 0 1 1 * * * * * * * *
$msg " 8255 ";
0 0 0 0 0 1 1 0 1 1 * * * * * * * *
$msg " 8251 ";
0 0 1 1 1 1 1 1 1 1 * * * * * * * *
$msg " 74C923 ";
1 1 1 1 0 1 0 0 1 1 * * * * * * * *
$msg " 8116 ";
1 1 1 1 1 X X X 1 1 * * * * * * * *
1 1 1 1 1 X X X 1 0 * * * * * * * *
1 1 1 1 1 X X X 1 1 * * * * * * * *
$msg " !io_wr ";
X X X X X X X X 1 0 * * * * * * * *
$msg " !mem_wr ";
X X X X X X X X 0 0 * * * * * * * *

(c) RESULTADOS DE IODECODE


===============================================================================
Chip Diagram
===============================================================================

______________
| IODECODE |
A4 x---|1 20|---x Vcc
A5 x---|2 19|---x !mem_wr
A6 x---|3 18|---x !io_wr
A7 x---|4 17|---x cs_8116
A8 x---|5 16|---x !cs_923
A9 x---|6 15|---x !cs_8251
A10 x---|7 14|---x !cs_8255
A11 x---|8 13|---x !cs_8253
IO x---|9 12|---x !cs_8259
GND x---|10 11|---x !wr
|______________|

===============================================================================
Simulation Results
===============================================================================
A-31

! ! ! !
8 8 8 8 ! 8 !
2 2 2 2 9 1 ! m
5 5 5 5 2 1 i e
9_ 3 5 1 3 6 o m
A A A A A A A A ! _ _ _ _ _ _ _ _
1 1 0 0 0 0 0 0 I w c c c c c c w w
1 0 9 8 7 6 5 4 O r s s s s s s r r
____________________________ ______________________
Encendido
0001: X X X X X X X X 0 1 H H H H H L H H
8259
0002: 0 0 0 0 0 0 1 0 1 1 L H H H H L H H
8253
0003: 0 0 0 0 0 1 0 0 1 1 H L H H H L H H
8255
0004: 0 0 0 0 0 1 1 0 1 1 H H L H H L H H
8251
0005: 0 0 1 1 1 1 1 1 1 1 H H H L H L H H
74C923
0006: 1 1 1 1 0 1 0 0 1 1 H H H H L L H H
8116
0007: 1 1 1 1 1 X X X 1 1 H H H H H L H H
0008: 1 1 1 1 1 X X X 1 0 H H H H H H L H
0009: 1 1 1 1 1 X X X 1 1 H H H H H L H H
!io_wr
0010: X X X X X X X X 1 0 X X X X X X L H
!mem_wr
0011: X X X X X X X X 0 0 H H H H H L H L

A.6.1.2 WAIT2

Las especificaciones para este dispositivo son las siguientes:

1. Generacion de dos (2) seales de seleccion, con resolucion de

32Kbytes.

2. Generacion de las seales io_rd & mem_rd.

3. Generacion de dos estados de espera.

Esta cantidad de seales de salida suman cuatro (4) seales, que es

el maximo numero de salidas (combinatorias) con que consta el PAL16R4,

por lo tanto nos quedan solo diez (10) pines de entrada que debemos
utilizar.

De los diez (10) pines de entrada, tomamos dos (2), para generar
las seales io_rd & mem_rd, con las seales IO/m & rd. De los otros ocho
pines de entrada utilizamos cinco (5) para el bus de direcciones, de A19

a A15, los que nos permite seleccionar cualquier localidad desde 00000H
hasta FFFFFh, con una resolucion de 32KBytes osea, un banco puede ser
00000h-07FFFh y el otro 08000h-0FFFFh, sin coincidir. De las tres
entradas restantes utilizamos una para el reloj del micro, una para

IO_RDY y la ultima para la habilitacion de salida (oe).


La descripcion logica (*.PLD), de este circuito resulta bastante
A-32

sencilla, la generacion de los estados de espera, se realizo convirtiendo


directamente el diagrama esquematico figura A.4(a), a operaciones
booleanas. La utilizacion de las maquinas de estado hubiera resultado en
una descripcion logica ms facil de comprender, sin embargo, se tenia ya
a la mano, el diagrama esquematico, probado, por lo que no se trato de
alterar el mismo.
En la figura A.4, se muestra el diagrama esquematico equivalente
del dispositivo IODECODE.

Tabla A.8. Mapa de direcciones del


dispositivo WAIT2
Dispositivo Localidades Banco

RAM 00000-07FFF 00000-07FFF

EPROM F0000-FFFFF F0000-FFFFF

Figura A.4. Diagrama esquematico equivalente de WAIT2

El mapa de direcciones seleccionado para este dispositivo se

presenta en la tabla A.8, y el mismo fue diseado de la unica manera en


que se podian conectar ambos dispositivos, ya que la memoria RAM, es
necesaria en las localidades 00000h (para vectores de interrupcion) y la
A-33

memoria EPROM, es necesria en las localidades FFFF0 (para vector de


arranque).

(a) DESCRIPCION LOGICA DE WAIT2

A continuacion presentamos el contenido del archivo WAIT2.PLD, con

el objetivo de dejar documentacion de su descripcion logica.

Name WAIT2;
Partno None;
Date 03/09/92;
Revision 01;
Designer Lambrano;
Company LOGITAL;
Assembly SD88;
Location U10;
Device P16R4;

/*********************************************************/
/* */
/* Este dispositivo genera las senales de seleccion para */
/* el RAM y EPROM. Incerta dos estados de espera cuando */
/* se seleccionan dispositivos perifericos (IO/m = 1) y */
/* genera las senales io_rd y mem_rd. */
/* IO AND wr ==> io_wr */
/* !IO AND wr ==> mem_wr */
/* */
/*********************************************************/

/*********************************************************/
/* */
/* Pines de entrada */
/* */
/*********************************************************/

PIN 1 = CPU_CLK ; /* Reloj del CPU */


PIN [2..6] = [A15..19] ; /* Bus de direcciones */
PIN 7 = !rd ; /* Senal de rd */
PIN 8 = IO_RDY ; /* Senal IO_RDY */
PIN 9 = IO ; /* Senal IO/m */
PIN 11 = !oe ; /* Output Enable */

/*********************************************************/
/* */
/* Pines de Salida */
/* */
/*********************************************************/

PIN 12 = !rom_cs ; /* Seleccion del EPROM */


PIN 13 = !ram_cs ; /* Seleccion del RAM */

PIN 14 = WAIT1 ; /* Bascu. de sincronizacion*/


PIN 15 = WAIT2 ; /* Bascu. de 1er estado */
PIN 16 = RDY ; /* Senal de READY */

PIN 18 = !io_rd ; /* Senal de io_rd */


PIN 19 = !mem_rd ; /* Senal de mem_rd */

/*********************************************************/
/* */
/* Variables Intermedias */
/* */
/*********************************************************/

Field bus_dir = [A19..15]; /* Dar el nombre "bus_dir" */


/* a las variables A19..A15*/

/*********************************************************/
/* */
/* Ecuaciones Logicas */
/* */
/*********************************************************/

mem_rd = !IO & rd;

io_rd = IO & rd;

rom_cs = !IO & bus_dir:[F0000..FFFFF] ;

ram_cs = !IO & bus_dir:[00000..07FFF] ;

WAIT1.d = (IO # !IO_RDY);


A-34

WAIT2.d = WAIT1 & RDY;

RDY.d = !WAIT2 # !IO & IO_RDY;

(b) ARCHIVO DE SIMULACION DE WAIT2

A continuacion presentamos el contenido del archivo WAIT2.SI, con

el objetivo de dejar documentacion de su archivo de simulacion.

Name WAIT2;
Partno None;
Date 03/09/92;
Revision 01;
Designer Lambrano;
Company LOGITAL;
Assembly SD88;
Location U10;
Device P16R4;

/*********************************************************/
/* */
/* Este dispositivo genera las senales de seleccion para */
/* el RAM y EPROM. Incerta dos estados de espera cuando */
/* se seleccionan dispositivos perifericos (IO/m = 1) y */
/* genera las senales io_rd y mem_rd. */
/* IO AND wr ==> io_wr */
/* !IO AND wr ==> mem_wr */
/* */
/*********************************************************/

/*********************************************************/
/* */
/* Definicion del Ordenamiento */
/* */
/*********************************************************/

ORDER:
CPU_CLK, %2, A19, %2, A18, %2, A17, %2, A16, %2, A15, %2,
!rd, %2, IO_RDY, %2, IO, %2, !oe,
%4, !rom_cs, %2, !ram_cs, %2, WAIT1, %2, WAIT2,
%2, RDY, %2, !mem_rd, %2, !io_rd;

/*********************************************************/
/* */
/* Vectores de prueba */
/* */
/*********************************************************/

VECTORS:
/* 123456-Dejar seis espacios para los numeros de linea *.SO */
$msg " ";
$msg " c ! ! ";
$msg " p I r r m ";
$msg " u O o a W W e i";
$msg " _ _ m m A A m o";
$msg " c a a a a a ! R ! _ _ I I R _ _";
$msg " l 1 1 1 1 1 r D I o c c T T D r r";
$msg " k 9 8 7 6 5 d Y O e s s 1 2 Y d d";
$msg " ____________________________ ___________________";
$msg " Encendido ";
0 X X X X X 1 1 0 0 * * * * * * *
$msg " Establecimiento de basculadores ";
$repeat 3;
C X X X X X 1 1 0 0 * * * * * * *
$msg " 32 Bancos de memoria del 00000h, 08000h al FFFFFh ";
C 0 0 0 0 0 1 1 0 0 * * * * * * *
C 0 0 0 0 1 1 1 0 0 * * * * * * *
C 0 0 0 1 0 1 1 0 0 * * * * * * *
C 0 0 0 1 1 1 1 0 0 * * * * * * *
C 0 0 1 0 0 1 1 0 0 * * * * * * *
C 0 0 1 0 1 1 1 0 0 * * * * * * *
C 0 0 1 1 0 1 1 0 0 * * * * * * *
C 0 0 1 1 1 1 1 0 0 * * * * * * *
C 0 1 0 0 0 1 1 0 0 * * * * * * *
C 0 1 0 0 1 1 1 0 0 * * * * * * *
C 0 1 0 1 0 1 1 0 0 * * * * * * *
C 0 1 0 1 1 1 1 0 0 * * * * * * *
C 0 1 1 0 0 1 1 0 0 * * * * * * *
C 0 1 1 0 1 1 1 0 0 * * * * * * *
C 0 1 1 1 0 1 1 0 0 * * * * * * *
C 0 1 1 1 1 1 1 0 0 * * * * * * *
C 1 0 0 0 0 1 1 0 0 * * * * * * *
C 1 0 0 0 1 1 1 0 0 * * * * * * *
C 1 0 0 1 0 1 1 0 0 * * * * * * *
C 1 0 0 1 1 1 1 0 0 * * * * * * *
C 1 0 1 0 0 1 1 0 0 * * * * * * *
C 1 0 1 0 1 1 1 0 0 * * * * * * *
C 1 0 1 1 0 1 1 0 0 * * * * * * *
C 1 0 1 1 1 1 1 0 0 * * * * * * *
A-35

C 1 1 0 0 0 1 1 0 0 * * * * * * *
C 1 1 0 0 1 1 1 0 0 * * * * * * *
C 1 1 0 1 0 1 1 0 0 * * * * * * *
C 1 1 0 1 1 1 1 0 0 * * * * * * *
C 1 1 1 0 0 1 1 0 0 * * * * * * *
C 1 1 1 0 1 1 1 0 0 * * * * * * *
C 1 1 1 1 0 1 1 0 0 * * * * * * *
C 1 1 1 1 1 1 1 0 0 * * * * * * *
$msg " Estados de espera para perifericos ";
$repeat 8;
C X X X X X 1 1 1 0 * * * * * * *
$msg " Estados de espera para dispositivos del BUS IBM-XT ";
$repeat 8;
C X X X X X 1 0 0 0 * * * * * * *
$msg " mem_rd ";
0 X X X X X 0 1 0 0 * * * * * * *
$msg " io_rd ";
0 X X X X X 0 1 1 0 * * * * * * *

(c) RESULTADOS DE WAIT2

===============================================================================
Chip Diagram
===============================================================================

______________
| WAIT2 |
CPU_CLK x---|1 20|---x Vcc
A15 x---|2 19|---x !mem_rd
A16 x---|3 18|---x !io_rd
A17 x---|4 17|---x
A18 x---|5 16|---x RDY
A19 x---|6 15|---x WAIT2
!rd x---|7 14|---x WAIT1
IO_RDY x---|8 13|---x !ram_cs
IO x---|9 12|---x !rom_cs
GND x---|10 11|---x !oe
|______________|

===============================================================================
Simulation Results
===============================================================================

c ! !
p I r r m
u O o a W W e i
_ _ m m A A m o
c a a a a a ! R ! _ _ I I R _ _
l 1 1 1 1 1 r D I o c c T T D r r
k 9 8 7 6 5 d Y O e s s 1 2 Y d d
____________________________ ___________________
Encendido
0001: 0 X X X X X 1 1 0 0 X X X X X H H
Establecimiento de basculadores
0002: C X X X X X 1 1 0 0 X X L X H H H
0003: C X X X X X 1 1 0 0 X X L L H H H
0004: C X X X X X 1 1 0 0 X X L L H H H
32 Bancos de memoria del 00000h, 08000h al FFFFFh
0005: C 0 0 0 0 0 1 1 0 0 H L L L H H H
0006: C 0 0 0 0 1 1 1 0 0 H H L L H H H
0007: C 0 0 0 1 0 1 1 0 0 H H L L H H H
0008: C 0 0 0 1 1 1 1 0 0 H H L L H H H
0009: C 0 0 1 0 0 1 1 0 0 H H L L H H H
0010: C 0 0 1 0 1 1 1 0 0 H H L L H H H
0011: C 0 0 1 1 0 1 1 0 0 H H L L H H H
0012: C 0 0 1 1 1 1 1 0 0 H H L L H H H
0013: C 0 1 0 0 0 1 1 0 0 H H L L H H H
0014: C 0 1 0 0 1 1 1 0 0 H H L L H H H
0015: C 0 1 0 1 0 1 1 0 0 H H L L H H H
0016: C 0 1 0 1 1 1 1 0 0 H H L L H H H
0017: C 0 1 1 0 0 1 1 0 0 H H L L H H H
0018: C 0 1 1 0 1 1 1 0 0 H H L L H H H
0019: C 0 1 1 1 0 1 1 0 0 H H L L H H H
0020: C 0 1 1 1 1 1 1 0 0 H H L L H H H
0021: C 1 0 0 0 0 1 1 0 0 H H L L H H H
0022: C 1 0 0 0 1 1 1 0 0 H H L L H H H
0023: C 1 0 0 1 0 1 1 0 0 H H L L H H H
0024: C 1 0 0 1 1 1 1 0 0 H H L L H H H
0025: C 1 0 1 0 0 1 1 0 0 H H L L H H H
0026: C 1 0 1 0 1 1 1 0 0 H H L L H H H
0027: C 1 0 1 1 0 1 1 0 0 H H L L H H H
0028: C 1 0 1 1 1 1 1 0 0 H H L L H H H
0029: C 1 1 0 0 0 1 1 0 0 H H L L H H H
0030: C 1 1 0 0 1 1 1 0 0 H H L L H H H
0031: C 1 1 0 1 0 1 1 0 0 H H L L H H H
0032: C 1 1 0 1 1 1 1 0 0 H H L L H H H
0033: C 1 1 1 0 0 1 1 0 0 H H L L H H H
0034: C 1 1 1 0 1 1 1 0 0 H H L L H H H
0035: C 1 1 1 1 0 1 1 0 0 L H L L H H H
0036: C 1 1 1 1 1 1 1 0 0 L H L L H H H
Estados de espera para perifericos
0037: C X X X X X 1 1 1 0 H H H L H H H
0038: C X X X X X 1 1 1 0 H H H H H H H
A-36

0039: C X X X X X 1 1 1 0 H H H H L H H
0040: C X X X X X 1 1 1 0 H H H L L H H
0041: C X X X X X 1 1 1 0 H H H L H H H
0042: C X X X X X 1 1 1 0 H H H H H H H
0043: C X X X X X 1 1 1 0 H H H H L H H
0044: C X X X X X 1 1 1 0 H H H L L H H
Estados de espera para dispositivos del BUS IBM-XT
0045: C X X X X X 1 0 0 0 X X H L H H H
0046: C X X X X X 1 0 0 0 X X H H H H H
0047: C X X X X X 1 0 0 0 X X H H L H H
0048: C X X X X X 1 0 0 0 X X H L L H H
0049: C X X X X X 1 0 0 0 X X H L H H H
0050: C X X X X X 1 0 0 0 X X H H H H H
0051: C X X X X X 1 0 0 0 X X H H L H H
0052: C X X X X X 1 0 0 0 X X H L L H H
mem_rd
0053: 0 X X X X X 0 1 0 0 X X H L L L H
io_rd
0054: 0 X X X X X 0 1 1 0 H H H L L H L

A.6.2 TARJETA DE EXPANSION

Las necesidades de la tarjeta de expansion se pueden agrupar en:

1. Seleccion de 8, dispositivos (5-perifericos, 3-para

experimentacion).

2. Generacion de seis seales (cso, wro, rdo, INT1, INT2 & SQT).

a partir de nueve seales (CONV, csi, wri, rdi, int, ring,

RXRDY, cd & O/a).

La generacion de todas estas seales no requiere de basculadores,

solo circuitos combinatorios.

Ahora podemos establecer la cantidad de salidas y entradas que

necesitamos, para asi poder elegir los dispositivos a utilizar. Se

necesitaran 14 salidas (8 selecciones, 6 seales).

Los dispositivos logicos programables que pueden ser utilizados con

la version de Logical Devices, Inc. de CUPL, no cuentan con tantas


salidas, por lo que nuestro diseo, se realizara en dos partes. Una sera

la decodificacion de los perifericos con el dispositivo PAL16L8, y la


otra sera la generacion de las seis seales con otro dispositivo PAL16L8.

A.6.2.1 EXP_DEC

Las especificaciones para este dispositivo son las siguientes:


1. Generacion de ocho (8) seales de seleccion, con resolucion

de 16bytes.
A-37

Esta cantidad de seales de salida suman ocho (8) seales, que es


el maximo numero de salidas con que consta el PAL16L8, por lo tanto nos
quedan solo diez (10) pines de entrada que debemos utilizar. De los diez
(10) pines de entrada, tomamos ocho (8) para el bus de direcciones, de
A11 a A4, los que nos permite seleccionar cualquier localidad desde X000H
hasta XFFFh, con una resolucion de 16Bytes osea, un banco puede ser
X000h-X00Fh y el otro X010h-X01Fh, sin coincidir. De las dos entradas
restantes utilizamos una para la seal IO/m del microprocesador y la otra

la dejamos sin utilizar.

La descripcion logica (*.PLD), de este circuito resulta bastante

sencilla, la misma involucra solamente decodificacion de direcciones.

Esto es manejado por CUPL de una manera sencilla.

En la figura A.5, se muestra el

diagrama esquematico equivalente del

dispositivo EXP_DEC.

El mapa de direcciones seleccionado

para este dispositivo se presenta en la

tabla A.9, y el mismo fue diseado

utilizando todas las localidades continuas Figura A.5. Diagrama


esquematico equivalente de
empezando desde la localidad 500H hasta la EXP_DEC
localidad 57FH, ya que estos dispositivos no se encuentran en una
computadora IBM-PC/XT.
A-38

Tabla A.9. Mapa de direcciones del


dispositivo EXP_DEC.
Dispositivo Localidades Banco

8251 500..501 500..50F

8253 510..513 510..51F

8255 520..523 520..52F

(a) DESCRIPCION LOGICA DE EXP_DEC ADC 530..530 530..53F

A continuacion presentamos DAC 541..541 540..54F

el contenido del archivo


USR1 550..55F 550..55F

EXP_DEC.PLD, con el objetivo de


USR2 560..56F 560..56F

dejar documentacion de su
USR3 570..57F 570..57F
descripcion logica.

Name EXP_DEC;
Partno None;
Date 17/09/92;
Revision 01;
Designer Lambrano;
Company LOGITAL;
Assembly SD88 TARJETA DE EXPANSION;
Location U11;
Device P16L8;

/*********************************************************/
/* */
/* Este dispositivo genera las senales de seleccion para */
/* 8251, 8253, 8255, ADC, DAC, USER1, USER2, USER3 */
/* */
/*********************************************************/

/*********************************************************/
/* */
/* Pines de entrada */
/* */
/*********************************************************/

PIN [1..8] = [A4..11] ; /* Bus de direcciones */


PIN 9 = IO ; /* Senal IO/m */

/*********************************************************/
/* */
/* Pines de Salida */
/* */
/*********************************************************/

PIN 12 = !cs_51; /* Seleccion del 8251 */


PIN 13 = !cs_53; /* Seleccion del 8253 */
PIN 14 = !cs_55; /* Seleccion del 8255 */
PIN 15 = !cs_AD; /* Seleccion del ADC */
PIN 16 = !cs_DA; /* Seleccion del DAC */
PIN 17 = !cs_usr1; /* Seleccion del USER1 */
PIN 18 = !cs_usr2; /* Seleccion del USER2 */
PIN 19 = !cs_usr3; /* Seleccion del USER3 */

/*********************************************************/
/* */
/* Variables Intermedias */
/* */
/*********************************************************/

Field bus_dir = [A11..4]; /* Dar el nombre "bus_dir" */


/* a las variables A11..A4 */

/*********************************************************/
/* */
/* Ecuaciones Logicas */
/* */
/*********************************************************/
A-39

cs_51 = IO & bus_dir:[500..50F] ;

cs_53 = IO & bus_dir:[510..51F] ;

cs_55 = IO & bus_dir:[520..52F] ;

cs_AD = IO & bus_dir:[530..53F] ;

cs_DA = IO & bus_dir:[540..54F] ;

cs_usr1 = IO & bus_dir:[550..55F] ;

cs_usr2 = IO & bus_dir:[560..56F] ;

cs_usr3 = IO & bus_dir:[570..57F] ;

(b) ARCHIVO DE SIMULACION DE EXP_DEC

A continuacion presentamos el contenido del archivo EXP_DEC.SI, con

el objetivo de dejar documentacion de su archivo de simulacion.

Name EXP_DEC;
Partno None;
Date 17/09/92;
Revision 01;
Designer Lambrano;
Company LOGITAL;
Assembly SD88 TARJETA DE EXPANSION;
Location U11;
Device P16L8;

/*********************************************************/
/* */
/* Este dispositivo genera las senales de seleccion para */
/* 8251, 8253, 8255, ADC, DAC, USER1, USER2, USER3 */
/* */
/*********************************************************/

/*********************************************************/
/* */
/* Definicion del Ordenamiento */
/* */
/*********************************************************/

ORDER:
A11, %2, A10, %2, A9, %2, A8, %2, A7, %2, A6, %2, A5, %2,
A4, %2, IO, %4, !cs_51, %2, !cs_53, %2,!cs_55, %2, !cs_AD,
%2, !cs_DA, %2, !cs_usr1, %2, !cs_usr2, %2, !cs_usr3;

/*********************************************************/
/* */
/* Vectores de prueba */
/* */
/*********************************************************/

VECTORS:
/* 123456-Dejar seis espacios para los numeros de linea *.SO */
$msg " ! ! !";
$msg " c c c";
$msg " ! ! ! ! ! s s s";
$msg " c c c c c _ _ _";
$msg " s s s s s u u u";
$msg " A A A A A A A A _ _ _ _ _ s s s";
$msg " 1 1 0 0 0 0 0 0 I 5 5 5 A D r r r";
$msg " 1 0 9 8 7 6 5 4 O 1 3 5 D A 1 2 3";
$msg " _________________________ ______________________";
$msg " Probar las localidades del 500h al 57Fh ";
0 1 0 1 0 0 0 0 1 * * * * * * * *
0 1 0 1 0 0 0 1 1 * * * * * * * *
0 1 0 1 0 0 1 0 1 * * * * * * * *
0 1 0 1 0 0 1 1 1 * * * * * * * *
0 1 0 1 0 1 0 0 1 * * * * * * * *
0 1 0 1 0 1 0 1 1 * * * * * * * *
0 1 0 1 0 1 1 0 1 * * * * * * * *
0 1 0 1 0 1 1 1 1 * * * * * * * *

(c) RESULTADOS DE EXP_DEC

===============================================================================
A-40

Chip Diagram
===============================================================================

______________
| EXP_DEC |
A4 x---|1 20|---x Vcc
A5 x---|2 19|---x !cs_usr3
A6 x---|3 18|---x !cs_usr2
A7 x---|4 17|---x !cs_usr1
A8 x---|5 16|---x !cs_DA
A9 x---|6 15|---x !cs_AD
A10 x---|7 14|---x !cs_55
A11 x---|8 13|---x !cs_53
IO x---|9 12|---x !cs_51
GND x---|10 11|---x
|______________|

===============================================================================
Simulation Results
===============================================================================
! ! !
c c c
! ! ! ! ! s s s
c c c c c _ _ _
s s s s s u u u
A A A A A A A A _ _ _ _ _ s s s
1 1 0 0 0 0 0 0 I 5 5 5 A D r r r
1 0 9 8 7 6 5 4 O 1 3 5 D A 1 2 3
_________________________ ______________________
Probar las localidades del 500h al 57Fh
0001: 0 1 0 1 0 0 0 0 1 L H H H H H H H
0002: 0 1 0 1 0 0 0 1 1 H L H H H H H H
0003: 0 1 0 1 0 0 1 0 1 H H L H H H H H
0004: 0 1 0 1 0 0 1 1 1 H H H L H H H H
0005: 0 1 0 1 0 1 0 0 1 H H H H L H H H
0006: 0 1 0 1 0 1 0 1 1 H H H H H L H H
0007: 0 1 0 1 0 1 1 0 1 H H H H H H L H
0008: 0 1 0 1 0 1 1 1 1 H H H H H H H L

A.6.2.2 EXP_GLUE

Las especificaciones para este dispositivo son las siguientes:

1. Generacion de tres (3) seales cso, wro & rdo a partir de

cuatro (4) seales CONV, csi, wri & rdi.

2. Generacion de la seal INT1 a partir de int.

3. Generacion de la seal INT2 a partir de las seales ring &

RXRDY;
4. Generacion de la seal SQT a partir de las seales cd & ORIG.

Esta cantidad de seales de salida suman seis (6) seales, lo que


nos permite (de ser necesario) utilizar las otras dos salidas del

dispositivo como entradas. De los diez (10) pines de entrada, tomamos


cuatro (4), para las seales (CONV, csi, wri & rdi); una (1) para la
seal (int); dos (2) para las seales (ring & RXRDY) y dos (2) para las

seales (cd & O/A). Esto nos da un total de nueve (9), entredas dejando
de utilizar en este dispositivo tres (3) pines.
Este dispositivo, realiza basicamente cuatro funciones, dos
A-41

funciones para el conversor analogo/digital y dos funciones para el


modem.
Las funciones que realiza para el conversor analogo/digital es la
de invertir la seal int (activa bajo) y convertirla en la seal INT1
(activa alto), y la de proporcionar al sistema con un ADC, que puede
realizar sus conversiones aisladas (uP escribe para comenzar la

conversion) o equiespaciadas en el tiempo (timer escribe para comenzar la


conversion).
Esto ultimo es realizado, permitiendo que las seales cso, wro &

rdo sean exatamente iguales que las seales csi, wri & rdi

(respectivamente), cuando la seal CONV = 1. Cuando la seal CONV = 0,

las seales asumen los siguientes valores, cso = 0, wro = 0 y rdi = 1,

emulando una escritura del microprocesador y asi comenzando la

conversion.

Las funciones que realiza para el MODEM es la de asociar la seal

ring (activa baja) con la seal RXRDY (activa alta), para generar la

seal INT2 (activa alta), cuando cualquiera de estas seales este en su

estado activo, de esta manera se generara una interrupcion cuando el

MODEM, este recibiendo un caracter o una llamada, y sera funcion del

programa analizar la fuente de la interrupcion.

La otra funcion que realiza para el MODEM es la de asociar la seal

cd (carrier detect) (activa baja) con la seal O/a (Originate/answer)

para generar la seal SQT (Squelch Transmiter) (activa alta).


Cuando la seal SQT = 1, el integrado (MODEM), desabilita la
transmision; cuando cd = 0, significa que ha detectado la seal portadora

del otro MODEM; cuando O/a = 1, significa que el MODEM local esta
originando la transmision. El unico momento en que se desea tener
desabilitado el transmisor (para recibir mejor la portadora del otro

MODEM) es cuando el MODEM local, esta originando la llamada O/a = 1 y no


se detecta la portadora cd = 1. De tal manera que la seal SQT debe ser
el AND logico de las seales O/a y cd.
A-42

En la figura A.6, se muestra el diagrama esquematico equivalente


del dispositivo EXP_GLUE.

Figura A.6. Diagrama esquematico equivalente de EXP_GLUE

(a) DESCRIPCION LOGICA DE EXP_GLUE

A continuacion presentamos el contenido del archivo EXP_GLUE.PLD,

con el objetivo de dejar documentacion de su descripcion logica.

Name EXP_GLUE;
Partno None;
Date 17/09/92;
Revision 01;
Designer Lambrano;
Company LOGITAL;
Assembly SD88 TARJETA DE EXPANSION;
Location U5;
Device P16L8;

/*********************************************************/
/* */
/* Este dispositivo genera las siguientes senales */
/* */
/* CONV + csi + wri + rdi ==> cso + wro + rdo */
/* int ==> INT1 */
/* ring + RXRDY ==> INT2 */
/* cd + O/a ==> SQT */
/* */
A-43

/*********************************************************/

/*********************************************************/
/* */
/* Pines de entrada */
/* */
/*********************************************************/

PIN 1 = CONV ; /* Senal CONV (convertir) */


PIN 2 = csi ; /* Senal csi (cs entrada) */
PIN 3 = wri ; /* Senal wri (wr entrada) */
PIN 4 = rdi ; /* Senal rdi (rd entrada) */
PIN 5 = int ; /* Senal int */
PIN 6 = ring ; /* Senal ring */
PIN 7 = RXRDY ; /* Senal RXRDY */
PIN 8 = cd ; /* Senal cd */
PIN 9 = ORIG ; /* Senal ORIG */

/*********************************************************/
/* */
/* Pines de Salida */
/* */
/*********************************************************/

PIN 12 = cso ; /* Senal cso (cs salida) */


PIN 14 = wro ; /* Senal wro (wr salida) */
PIN 15 = rdo ; /* Senal rdo (rd salida) */
PIN 16 = INT1 ; /* Senal INT1 */
PIN 17 = INT2 ; /* Senal INT2 */
PIN 19 = SQT ; /* Senal SQT */

/*********************************************************/
/* */
/* Ecuaciones Logicas */
/* */
/*********************************************************/

INT1 = !int;

INT2 = !ring # RXRDY;

SQT = cd & ORIG;

cso = csi & CONV;

wro = wri & CONV;

rdo = rdi # !CONV;

(b) ARCHIVO DE SIMULACION DE EXP_GLUE

A continuacion presentamos el contenido del archivo EXP_GLUE.SI,

con el objetivo de dejar documentacion de su archivo de simulacion.

Name EXP_GLUE;
Partno None;
Date 17/09/92;
Revision 01;
Designer Lambrano;
Company LOGITAL;
Assembly SD88 TARJETA DE EXPANSION;
Location U5;
Device P16L8;

/*********************************************************/
/* */
/* Este dispositivo genera las siguientes senales */
/* */
/* CONV + csi + wri + rdi ==> cso + wro + rdo */
/* int ==> INT1 */
/* ring + RXRDY ==> INT2 */
/* cd + O/a ==> SQT */
/* */
/*********************************************************/

/*********************************************************/
/* */
/* Definicion del Ordenamiento */
/* */
/*********************************************************/

ORDER:
CONV, %2, csi, %2, wri, %2, rdi, %2, int, %2, ring, %2, RXRDY
, %2, cd, %2, ORIG, %4, cso, %2, wro, %2, rdo, %2, INT1, %2,
INT2, %2, SQT;

/*********************************************************/
/* */
/* Vectores de prueba */
/* */
/*********************************************************/
A-44

VECTORS:
/* 123456-Dejar seis espacios para los numeros de linea *.SO */
$msg " ";
$msg " R ";
$msg " C r X O I I ";
$msg " O c w r i i R R c w r N N S";
$msg " N s r d n n D c I s r d T T Q";
$msg " V i i i t g Y d G o o o 1 2 T";
$msg " _________________________ ________________";
$msg " Probar cso, wro, rdo, con csi, wr1, rd1 ";
1 1 1 1 1 1 0 1 1 * * * * * *
1 0 1 1 1 1 0 1 1 * * * * * *
1 1 0 1 1 1 0 1 1 * * * * * *
1 1 1 0 1 1 0 1 1 * * * * * *
1 1 1 1 1 1 0 1 1 * * * * * *
$msg " Probar cso, wro, rdo, con CONV ";
1 1 1 1 1 1 0 1 1 * * * * * *
0 1 1 1 1 1 0 1 1 * * * * * *
1 1 1 1 1 1 0 1 1 * * * * * *
$msg " Probar INT1 ";
1 1 1 1 1 1 0 1 1 * * * * * *
1 1 1 1 0 1 0 1 1 * * * * * *
1 1 1 1 1 1 0 1 1 * * * * * *
$msg " Probar INT2 ";
1 1 1 1 1 1 0 1 1 * * * * * *
1 1 1 1 1 0 0 1 1 * * * * * *
1 1 1 1 1 1 0 1 1 * * * * * *
1 1 1 1 1 1 1 1 1 * * * * * *
1 1 1 1 1 1 0 1 1 * * * * * *
$msg " Probar SQT ";
1 1 1 1 1 1 0 0 0 * * * * * *
1 1 1 1 1 1 0 0 1 * * * * * *
1 1 1 1 1 1 0 1 0 * * * * * *
1 1 1 1 1 1 0 1 1 * * * * * *

(c) RESULTADOS DE EXP_GLUE

===============================================================================
Chip Diagram
===============================================================================

______________
| EXP_GLUE |
CONV x---|1 20|---x Vcc
csi x---|2 19|---x SQT
wri x---|3 18|---x
rdi x---|4 17|---x INT2
int x---|5 16|---x INT1
ring x---|6 15|---x rdo
RXRDY x---|7 14|---x wro
cd x---|8 13|---x
ORIG x---|9 12|---x cso
GND x---|10 11|---x
|______________|

===============================================================================
Simulation Results
===============================================================================

R
C r X O I I
O c w r i i R R c w r N N S
N s r d n n D c I s r d T T Q
V i i i t g Y d G o o o 1 2 T
_________________________ ________________
Probar cso, wro, rdo, con csi, wr1, rd1
0001: 1 1 1 1 1 1 0 1 1 H H H L L H
0002: 1 0 1 1 1 1 0 1 1 L H H L L H
0003: 1 1 0 1 1 1 0 1 1 H L H L L H
0004: 1 1 1 0 1 1 0 1 1 H H L L L H
0005: 1 1 1 1 1 1 0 1 1 H H H L L H
Probar cso, wro, rdo, con CONV
0006: 1 1 1 1 1 1 0 1 1 H H H L L H
0007: 0 1 1 1 1 1 0 1 1 L L H L L H
0008: 1 1 1 1 1 1 0 1 1 H H H L L H
Probar INT1
0009: 1 1 1 1 1 1 0 1 1 H H H L L H
0010: 1 1 1 1 0 1 0 1 1 H H H H L H
0011: 1 1 1 1 1 1 0 1 1 H H H L L H
Probar INT2
0012: 1 1 1 1 1 1 0 1 1 H H H L L H
0013: 1 1 1 1 1 0 0 1 1 H H H L H H
0014: 1 1 1 1 1 1 0 1 1 H H H L L H
0015: 1 1 1 1 1 1 1 1 1 H H H L H H
0016: 1 1 1 1 1 1 0 1 1 H H H L L H
Probar SQT
0017: 1 1 1 1 1 1 0 0 0 H H H L L L
0018: 1 1 1 1 1 1 0 0 1 H H H L L L
0019: 1 1 1 1 1 1 0 1 0 H H H L L L
0020: 1 1 1 1 1 1 0 1 1 H H H L L H
A-45

A.6.3 EXPANSION DE MEMORIA

Las especificaciones para este dispositivo son las siguientes:


1. Generacion de ocho (8) seales de seleccion, con resolucion
de 32Kbytes.

Esta cantidad de seales de salida


suman ocho (8) seales, que es el maximo
numero de salidas con que consta el
PAL16L8, por lo tanto nos ]quedan solo diez

(10) pines de entrada que debemos utilizar.

De los diez (10) pines de entrada, solo

necesitamos cinco (5) para el bus de Figura A.7. Diagrama


esquematico equivalente de
direcciones A19 hasta A15 y una para la RAM_EXP
seal IO/m.

La descripcion logica (*.PLD), de este circuito resulta bastante

sencilla, ya que lo unico que el mismo hace es una decodificacion de

direcciones.

En la figura A.7, se muestra el diagrama esquematico equivalente

del dispositivo RAM_EXP.


A-46

El mapa de direcciones
Tabla A.10. Mapa de direcciones del
seleccionado para este dispositivo RAM_EXP
Dispositivo Localidades Banco
dispositivo se presenta en la RAM-1 08000..0FFFF 08000..0FFFF

tabla A.10, y el mismo fue RAM-2 10000..17FFF 10000..17FFF

RAM-3 18000..1FFFF 18000..1FFFF


diseado utilizando todas las
RAM-4 20000..27FFF 20000..27FFF

localidades continuas empezando RAM-5 28000..2FFFF 28000..2FFFF

RAM-6 30000..37FFF 30000..37FFF


desde la localidad 8000H hasta la
RAM-7 38000..3FFFF 38000..3FFFF
localidad 41FFFH, ya que se desea EEPROM 40000..41FFF 40000..41FFF

que la expansion de memoria cree

un banco continuo de memoria de

lectura y escritura.

A.6.3.1 DESCRIPCION LOGICA DE RAM_EXP

A continuacion presentamos el contenido del archivo RAM_EXP.PLD,

con el objetivo de dejar documentacion de su descripcion logica.

Name RAM_EXP;
Partno None;
Date 03/19/92;
Revision 01;
Designer Lambrano;
Company LOGITAL;
Assembly SD88 EXPANSION DE MEMORIA;
Location U4;
Device P16L8;

/*********************************************************/
/* */
/* Este dispositivo genera las senales de seleccion para */
/* siete memorias RAM y una memoria EEPROM. */
/* */
/*********************************************************/

/*********************************************************/
/* */
/* Pines de entrada */
/* */
/*********************************************************/

PIN [1..5] = [A15..19] ; /* CPU Address Bus */


PIN 6 = IO ; /* IO/m Signal */

/*********************************************************/
/* */
/* Pines de Salida */
/* */
/*********************************************************/

PIN 12 = !cs1; /* Seleccion del RAM1 */


PIN 13 = !cs2; /* Seleccion del RAM2 */
PIN 14 = !cs3; /* Seleccion del RAM3 */
PIN 15 = !cse; /* Seleccion del EEPROM */
PIN 16 = !cs4; /* Seleccion del RAM4 */
PIN 17 = !cs5; /* Seleccion del RAM5 */
PIN 18 = !cs6; /* Seleccion del RAM6 */
PIN 19 = !cs7; /* Seleccion del RAM7 */

/*********************************************************/
/* */
/* Variables Intermedias */
/* */
A-47

/*********************************************************/

Field bus_dir = [A19..15]; /* Dar el nombre "bus_dir" */


/* a las variables A19..A15*/

/*********************************************************/
/* */
/* Ecuaciones Logicas */
/* */
/*********************************************************/

cs1 = !IO & bus_dir:[08000..0FFFF] ;

cs2 = !IO & bus_dir:[10000..17FFF] ;

cs3 = !IO & bus_dir:[18000..1FFFF] ;

cs4 = !IO & bus_dir:[20000..27FFF] ;

cs5 = !IO & bus_dir:[28000..2FFFF] ;

cs6 = !IO & bus_dir:[30000..37FFF] ;

cs7 = !IO & bus_dir:[38000..3FFFF] ;

cse = !IO & bus_dir:[40000..41FFF] ;

A.6.3.2 ARCHIVO DE SIMULACION DE RAM_EXP

A continuacion presentamos el contenido del archivo RAM_EXP.SI, con

el objetivo de dejar documentacion de su archivo de simulacion.

Name RAM_EXP;
Partno None;
Date 03/19/92;
Revision 01;
Designer Lambrano;
Company LOGITAL;
Assembly SD88 EXPANSION DE MEMORIA;
Location U4;
Device P16L8;

/*********************************************************/
/* */
/* Este dispositivo genera las senales de seleccion para */
/* siete memorias RAM y una memoria EEPROM. */
/* */
/*********************************************************/

/*********************************************************/
/* */
/* Definicion del Ordenamiento */
/* */
/*********************************************************/

ORDER:
A19, %2, A18, %2, A17, %2, A16, %2, A15, %2, IO,
%4, !cs1, %2, !cs2, %2, !cs3, %2, !cse, %2,
!cs4, %2, !cs5, %2, !cs6, %2, !cs7;

/*********************************************************/
/* */
/* Vectores de prueba */
/* */
/*********************************************************/

VECTORS:
/* 123456-Dejar seis espacios para los numeros de linea *.SO */
$msg " ";
$msg " A A A A A c c c c c c c c";
$msg " 1 1 1 1 1 I s s s s s s s s";
$msg " 9 8 7 6 5 O 1 2 3 e 4 5 6 7";
$msg " ________________ ______________________";
$msg " Probar las localidades del 00000h al 47FFFh";
0 0 0 0 0 0 * * * * * * * *
0 0 0 0 1 0 * * * * * * * *
0 0 0 1 0 0 * * * * * * * *
0 0 0 1 1 0 * * * * * * * *
0 0 1 0 0 0 * * * * * * * *
0 0 1 0 1 0 * * * * * * * *
0 0 1 1 0 0 * * * * * * * *
0 0 1 1 1 0 * * * * * * * *
0 1 0 0 0 0 * * * * * * * *

A.6.3.3 RESULTADOS DE RAM_EXP


A-48

===============================================================================
Chip Diagram
===============================================================================

______________
| RAM_EXP |
A15 x---|1 20|---x Vcc
A16 x---|2 19|---x !cs7
A17 x---|3 18|---x !cs6
A18 x---|4 17|---x !cs5
A19 x---|5 16|---x !cs4
IO x---|6 15|---x !cse
x---|7 14|---x !cs3
x---|8 13|---x !cs2
x---|9 12|---x !cs1
GND x---|10 11|---x
|______________|

===============================================================================
Simulation Results
===============================================================================

A A A A A c c c c c c c c
1 1 1 1 1 I s s s s s s s s
9 8 7 6 5 O 1 2 3 e 4 5 6 7
________________ ______________________
Probar las localidades del 00000h al 47FFFh
0001: 0 0 0 0 0 0 H H H H H H H H
0002: 0 0 0 0 1 0 L H H H H H H H
0003: 0 0 0 1 0 0 H L H H H H H H
0004: 0 0 0 1 1 0 H H L H H H H H
0005: 0 0 1 0 0 0 H H H H L H H H
0006: 0 0 1 0 1 0 H H H H H L H H
0007: 0 0 1 1 0 0 H H H H H H L H
0008: 0 0 1 1 1 0 H H H H H H H L
0009: 0 1 0 0 0 0 H H H L H H H H

A.7 CONCLUSIONES

Como pudimos apreciar, los dispositivos logicos programables,

redujeron en gran parte la circuiteria de soporte del Sistema Didactico,

lo que se traduce en un menor inventario de partes, menor area ocupada en

el circuito impreso y mayor flexibilidad del sistema (modificaciones del

sistema sin tener que hacer cambios al circuito impreso). De hecho, la

nica desventaja que presentan los dispositivos logicos programables,


utilizados en el Sistema Didactico fue el alto consumo de corriente

(Capitulo I Seccion 1.2.1.3).


La utilizacion de programas compiladores de descripcion logica para
PLD como CUPL, provee al diseador de herramientas de alto nivel

(alejadas del diseo a nivel de compuertas), que le permiten disear un


PLD sin la necesidad de disear previamente el circuito a nivel de
compuertas. De hecho, para el diseo de todos los PLD del Sistema

Didactico (menos el WAIT2), el diseador paso directamente de las

necesidades hacia la descripcion logica del dispositivo.


El diseador de un circuito con registros (maquina de estado) debe
A-49

utilizar los comandos y sintaxis provistos por CUPL para la maquina de


estado, ya que de esta manera el diseo es ms facil de documentar,
modificar, implementar en distintos dispositivos y entender por otros
diseadores.

A.8 REFERENCIAS

Manual de CUPL
Logical Devices Inc.
Ver 1.00
1990

National
Programable Device Databook
....

Faltan...

Vous aimerez peut-être aussi