2 figura a.1. utilizacion y generacion de archivos por el ... · diseño de los dispositivos...
TRANSCRIPT
1
APENDICE ADISPOSITIVOS LOGICOS PROGRAMABLES .................................... A-1
A.1 INTRODUCCION ............................................... A-2A.2 SISTEMA CUPL ............................................... A-3
A.2.1 CARACTERISTICAS ....................................... A-4A.2.2 ARCHIVOS .............................................. A-5A.2.3 UTILIZACION ........................................... A-7
A.3 ARCHIVO DE DESCRIPCION ..................................... A-8A.3.1 SECCION DE IDENTIFICACION ............................. A-9A.3.2 SECCION DE DEFINICION ................................ A-10A.3.3 SECCION DE ECUACIONES ................................ A-11
A.3.3.1 EXPRESIONES ..................................... A-13A.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-16A.3.3.4 COMANDO CONDITION ............................... A-17A.3.3.5 MAQUINAS DE ESTADO .............................. A-18
A.4 SIMULADOR ................................................. A-21A.4.1 SECCION DE IDENTIFICACION ............................ A-21A.4.2 SECCION DE ORDENAMIENTO .............................. A-22A.4.3 SECCION DE VECTORES .................................. A-22A.4.4 OPCIONES ............................................. A-24
A.5 PROCEDIMIENTO ............................................. A-27A.6 DISEÑOS ................................................... A-28
A.6.1 TARJETA PRINCIPAL .................................... A-28A.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-43A.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-55A.6.3.1 DESCRIPCION LOGICA DE RAM_EXP ................... A-56A.6.3.2 ARCHIVO DE SIMULACION DE RAM_EXP ................ A-58A.6.3.3 RESULTADOS DE RAM_EXP ........................... A-59
A.7 CONCLUSIONES .............................................. A-60A.8 REFERENCIAS ............................................... A-61
2
Figura A.1. Utilizacion y generacion de archivos por el sistemaCUPL. .......................................................... A-6
Figura A.2. Diagrama de flujo del procedimiento para diseñar unPLD. .......................................................... A-27
Figura A.3. Diagrama esquematico equivalente de IODECODE ........... A-30Figura A.4. Diagrama esquematico equivalente de WAIT2 .............. A-37Figura A.5. Diagrama esquematico equivalente de EXP_DEC ............ A-44Figura A.6. Diagrama esquematico equivalente de EXP_GLUE ........... A-51Figura A.7. Diagrama esquematico equivalente de RAM_EXP ............ A-56
3
Tabla A.1. Caracteres reservados de CUPL ............................ A-9Tabla A.2. Palabras reservadas de CUPL .............................. A-9Tabla A.3. Operadores Booleanos del programa CUPL por orden de
precedencia. .................................................. A-12Tabla A.4. Extensiones de variables ................................ A-13Tabla A.5. Valores para probar las distintas variables en el
simulador. .................................................... A-23Tabla A.6. Caracteristicas de los PLD, programables por la version
de CUPL. ...................................................... A-29Tabla A.7. Mapa de direcciones del dispositivo IODECODE ............ A-31Tabla A.8. Mapa de direcciones del dispositivo WAIT2 ............... A-36Tabla A.9. Mapa de direcciones del dispositivo EXP_DEC. ............ A-45Tabla A.10. Mapa de direcciones del dispositivo RAM_EXP ............ A-56
APENDICE A
DISPOSITIVOS LOGICOS PROGRAMABLES
A-2
A.1 INTRODUCCION
En el diseño 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 utilización 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 utilización de espacio en el
circuito impreso y complejidad en el diseño.
Como alternativa a las desventajas producidas por la utilización de
compuertas discretas, surgen los Dispositivos Lógicos Programable, (PLD4)
estos son circuitos integrados, los cuales son programables, que constan
de múltiples compuertas y/o basculadores (Flip/Flops), interconectados
entre si.
Para programar los mismos, el usuario crea una descripción lógica
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 construcción del
dispositivo). De esta manera solo quedan conectados a las compuertas,
los términos que se necesitan para realizar la función booleana y el
1TTL = Transistor Transistor Logic
2CMOS = Complementary Metal Oxide Semiconductor
3Un PLD consume un promedio de 100mA @ 5V, mientras que tres dispositivosde la familia TTL consumen un promedio de xxxmA @ 5V.
4PLD = Programable Logic Device
5Se le llama mapa de fusibles como el de las memorias PROM, aunque suconstrucción no utilice fusibles (luz ultravioleta UV-PLD o eléctricamenteborrable EE-PLD).
A-3
dispositivo se convierte en una nueva parte completamente hecha a la
medida.
En este apéndice se explica la utilización del programa que
convierte la descripción lógica en el mapa de fusibles, se explica la
utilización del programa que simula la descripción lógica y se explica el
diseño de los dispositivos lógicos programables utilizados en el Sistema
Didáctico 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 lógica programable.
CUPL le permite escribir y compilar descripciones lógicas
para asignar a dispositivos lógicos programables (PLD), a
través de programadores de dispositivos.
CSIM : Simulador de CUPL
CSIM le permite simular su diseño antes de empezar la
producción. Usted crea un archivo describiendo el
funcionamiento esperado del PLD en términos de valores de
entrada y salida. CSIM compara los valores esperados con los
calculados en la operación de CUPL.
CBLD : Manejador de librerías
CBLD : Le permite manejar las librerías del programa, para
6CUPL = Universal Compiler for Programable Logic
A-4
crear más pequeñas con dispositivos específicos.
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 lógica, en
distintos dispositivos.
-Lenguaje de Alto Nivel
Substitución de expresiones por ecuaciones, notación abreviada para
listas, rango de direcciones (addr. range), campos de bits, etc. le
ahorraran tiempo en su diseño. La sintaxis de las máquinas de
estado le proveen de un medio poderoso de implementar cualquier
aplicación sincrona (synchronous) usando los modelos de máquinas de
estado de MEALY7 o MOORE8.
-Documentación Flexible
CUPL le permite documentar extensamente su diseño, además que la
detección de errores se hace de una manera detallada, diseñada para
guiarlo rápidamente a la fuente del mismo.
-Simplificador y Simulador
CUPL le proporciona cuatro niveles de simplificación de ecuaciones
7Un circuito donde la salida es funcion del estado de la maquina y lasentradas del circuito.
8Un circuito donde la salida es funcion solamente del estado de la maquina.
A-5
booleanas. El simulador le permite simular su diseño antes de
utilizar un PLD. Esta característica previene la perdida de PLDs y
le ayuda a encontrar problemas a nivel de diseño. Los vectores
verificados por CSIM pueden ser enviados al programador para la
verificación de los mismos en el dispositivo.
A.2.2 ARCHIVOS
Básicamente solo es necesario crear un archivo (*.PLD) para generar
el mapa de fusibles de un dispositivo logico programable. Si el
diseñador desea simular el diseño, entonces es necesario crear otro
archivo más (*.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
Archivos de Entrada.*.PLD Archivo con las descripciones lógicas.*.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 documentación
*.SO Archivo con resultado de la simulación
*.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 acompañado por
nombre).
Figura A.1. Utilizacion y generacion de archivos por el sistema CUPL.
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 utilización.
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 descripción (*.PLD) con la
siguiente línea 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 más errores se simule y
minimize la descripcion logica con la siguiente línea 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 NEXTASSEMBLY FORMAT NODEASSY FUNCTION OUTCOMPANY IF PARTNOCONDITION JUMP PINDATE LOC PRESENTDEFAULT LOCATION REVDESIGNER MACRO REVISIONDEVICE MIN SEQUENCEELSE NAME TABLEFIELD
A-9
El archivo de entrada de CUPL consta básicamente de tres secciones.
-Sección de Identificación del producto
-Sección de definición de pines
-Sección de ecuaciones lógicas
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 diseño, número de
parte, fecha, número de revision, compañía, 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 diseño y definir el tipo de dispositivo a utilizarse en
el diseño.
También es importante notar que esta seccion tiene que ser
exactamente igual en el archivo de simulación, 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 señal (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] ; <=== Utilización de 'shorthand'PIN 9 = IO ; <=== Pin activo altoPIN 11 = !wr ; <=== Pin activo bajo
/** Salidas **/ <=== Solo comentarios
PIN 12 = !cs_8259; <=== Pin activo bajoPIN 13 = !cs_8253; <=== Pin activo bajoPIN 14 = !cs_8255; <=== Pin activo bajoPIN 15 = !cs_8251; <=== Pin activo bajoPIN 16 = !cs_923; <=== Pin activo bajoPIN 17 = cs_8116; <=== Pin activo altoPIN 18 = !io_wr; <=== Pin activo bajoPIN 19 = !mem_wr; <=== Pin activo bajo
A.3.3 SECCION DE ECUACIONES
En esta seccion se escriben las ecuaciones lógicas que seran
programadas en el dispositivo. Los operadores lógicos disponibles al
programador son los presentados en la tabla A.3.
A-11
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.
Tabla A.3. Operadores Booleanos del programa CUPL por ordende precedencia.
Función Símbolo Ejemplo
Not ! B = !A
OR # C = A # B
AND & C = A & B
XOR $ C = A $ B
A-12
Ejemplo:
/** Declaracion de Variables Intermedias **/
Field memadr = [A11..4] ; <== Variable intermedia
/** Ecuaciones Logicas **/
mem_wr = !IO & wr; <== Ecuacion de la señal MEM_WRio_wr = IO & wr; <== Ecuacion de la señal IO_WRcs_8259 = IO & memadr:[020..02F] ; <== Chip Select del 8259cs_8253 = IO & memadr:[040..04F] ; <== Chip Select del 8253cs_8255 = IO & memadr:[060..06F] ; <== Chip Select del 8255cs_8251 = IO & memadr:[3F0..3FF] ; <== Chip Select del 8251cs_923 = IO & memadr:[F40..F4F] ; <== Chip Select del 74C923cs_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.
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
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
más 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 tamaño. 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 más 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 más
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 diseño a nivel de compuertas o ecuaciones y crear
un diseño 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 S1IF UP NEXT S2;IF !UPNEXT S0;
PRESENT S2IF UP NEXT S3;IF !UPNEXT S1;
PRESENT S3IF 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:
-Sección de Identificación del producto
-Sección de ordenamiento de variables
-Sección de vectores de prueba
A.4.1 SECCION DE IDENTIFICACION
Esta seccion esta compuesta por datos como el nombre del diseño,
número de parte, fecha, número de revision, compañía, 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 diseño y definir el tipo de dispositivo a utilizarse en
el diseño. 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 diseño 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
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 diseño. 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
Tabla A.5. Valores para probar las distintas variables en elsimulador.
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 asalida !Q)
* Determinar el valor por el simulador
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 más de una
evaluacion para convertirse en estable. Si algun vector requiere de más
de veinte evaluaciones, el vector se considera insetable.
Nivel N = 2:
El nivel N = 2, identifica tres faces de simulacion para diseños
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 diseño y
programacion de un PLD, depende mucho del
diseñador, sin embargo aqui presentaremos
el procedimiento utilizado por el autor
para el diseño 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 diseño 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 DISEÑOS
En esta seccion, explicaremos el
diseño de los cinco, dispositivos logicos
programables, utilizados en el sistema Figura A.2. Diagrama deflujo del procedimiento paradiseñar 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 señales (io_rd, io_wr, mem_rd & mem_wr).
a partir de tres señales (IO/m, rd & wr).
3. Generacion de dos estados de espera, para acesso de
perifericos.
La generacion de las cuatro señales 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 señales), ademas de 3 basculadores.
Tabla A.6. Caracteristicas de los PLD, programables por la version deCUPL.
Dispositivo Entradas Dedicadas Salidas conbasculadores
Sin 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 diseño, se realizara en dos partes. Una
sera la decodificacion de los perifericos y la generacion de dos señales
(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 señales (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) señales de seleccion, con resolucion
de 16bytes.
2. Generacion de las señales io_wr & mem_wr.
Esta cantidad de señales de salida suman ocho (8) señales, 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 señales io_wr &
mem_wr, con las señales 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 pequeño problema con la señal 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 señal es
activa alta y el PLD, no tenia suficiente terminos para la decodificacion
unida a la señal wr (write).
A-28
Esta señal debe estar sincronizada a la señal write, del
microprocesador, ya que el dispositivo 8116, no contiene señal 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.
El mapa de direcciones
seleccionado para este
dispositivo se presenta en la
tabla A.7, y el mismo fue
diseñado de tal manera que fuera
lo más similar posible al mapa de
direcciones de una IBM-PC/XT.
(a) DESCRIPCION LOGICA DE
IODECODE
Figura A.3. Diagrama esquematico equivalente de IODECODE
Tabla A.7. Mapa de direcciones deldispositivo IODECODE
Dispositivo Localidades Banco
8259 020..021 020..02F
8253 040..043 040..04F
8255 060..063 060..06F
8251 3F0..3F1 3F0..3FF
74C923 F40..F40 F40..F4F
8116 F80..F80 F80..FFF
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 H0008: 1 1 1 1 1 X X X 1 0 H H H H H H L H0009: 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) señales de seleccion, con resolucion de
32Kbytes.
2. Generacion de las señales io_rd & mem_rd.
3. Generacion de dos estados de espera.
Esta cantidad de señales de salida suman cuatro (4) señales, 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 señales io_rd & mem_rd, con las señales 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 más 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.
El mapa de direcciones seleccionado para este dispositivo se
presenta en la tabla A.8, y el mismo fue diseñado 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
Figura A.4. Diagrama esquematico equivalente de WAIT2
Tabla A.8. Mapa de direcciones deldispositivo WAIT2
Dispositivo Localidades Banco
RAM 00000-07FFF 00000-07FFF
EPROM F0000-FFFFF F0000-FFFFF
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 H0003: C X X X X X 1 1 0 0 X X L L H H H0004: 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 H0006: C 0 0 0 0 1 1 1 0 0 H H L L H H H0007: C 0 0 0 1 0 1 1 0 0 H H L L H H H0008: C 0 0 0 1 1 1 1 0 0 H H L L H H H0009: C 0 0 1 0 0 1 1 0 0 H H L L H H H0010: C 0 0 1 0 1 1 1 0 0 H H L L H H H0011: C 0 0 1 1 0 1 1 0 0 H H L L H H H0012: C 0 0 1 1 1 1 1 0 0 H H L L H H H0013: C 0 1 0 0 0 1 1 0 0 H H L L H H H0014: C 0 1 0 0 1 1 1 0 0 H H L L H H H0015: C 0 1 0 1 0 1 1 0 0 H H L L H H H0016: C 0 1 0 1 1 1 1 0 0 H H L L H H H0017: C 0 1 1 0 0 1 1 0 0 H H L L H H H0018: C 0 1 1 0 1 1 1 0 0 H H L L H H H0019: C 0 1 1 1 0 1 1 0 0 H H L L H H H0020: C 0 1 1 1 1 1 1 0 0 H H L L H H H0021: C 1 0 0 0 0 1 1 0 0 H H L L H H H0022: C 1 0 0 0 1 1 1 0 0 H H L L H H H0023: C 1 0 0 1 0 1 1 0 0 H H L L H H H0024: C 1 0 0 1 1 1 1 0 0 H H L L H H H0025: C 1 0 1 0 0 1 1 0 0 H H L L H H H0026: C 1 0 1 0 1 1 1 0 0 H H L L H H H0027: C 1 0 1 1 0 1 1 0 0 H H L L H H H0028: C 1 0 1 1 1 1 1 0 0 H H L L H H H0029: C 1 1 0 0 0 1 1 0 0 H H L L H H H0030: C 1 1 0 0 1 1 1 0 0 H H L L H H H0031: C 1 1 0 1 0 1 1 0 0 H H L L H H H0032: C 1 1 0 1 1 1 1 0 0 H H L L H H H0033: C 1 1 1 0 0 1 1 0 0 H H L L H H H0034: C 1 1 1 0 1 1 1 0 0 H H L L H H H0035: C 1 1 1 1 0 1 1 0 0 L H L L H H H0036: 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 H0038: 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 H0040: C X X X X X 1 1 1 0 H H H L L H H0041: C X X X X X 1 1 1 0 H H H L H H H0042: C X X X X X 1 1 1 0 H H H H H H H0043: C X X X X X 1 1 1 0 H H H H L H H0044: 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 H0046: C X X X X X 1 0 0 0 X X H H H H H0047: C X X X X X 1 0 0 0 X X H H L H H0048: C X X X X X 1 0 0 0 X X H L L H H0049: C X X X X X 1 0 0 0 X X H L H H H0050: C X X X X X 1 0 0 0 X X H H H H H0051: C X X X X X 1 0 0 0 X X H H L H H0052: 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 señales (cso, wro, rdo, INT1, INT2 & SQT).
a partir de nueve señales (CONV, csi, wri, rdi, int, ring,
RXRDY, cd & O/a).
La generacion de todas estas señales 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 señales).
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 diseño, 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 señales con otro dispositivo PAL16L8.
A.6.2.1 EXP_DEC
Las especificaciones para este dispositivo son las siguientes:
1. Generacion de ocho (8) señales de seleccion, con resolucion
de 16bytes.
A-37
Esta cantidad de señales de salida suman ocho (8) señales, 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 señal 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 diseñado
utilizando todas las localidades continuas
empezando desde la localidad 500H hasta la
localidad 57FH, ya que estos dispositivos no se encuentran en una
computadora IBM-PC/XT.
Figura A.5. Diagramaesquematico equivalente deEXP_DEC
A-38
(a) DESCRIPCION LOGICA DE EXP_DEC
A continuacion presentamos
el contenido del archivo
EXP_DEC.PLD, con el objetivo de
dejar documentacion de su
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 *//* *//*********************************************************/
Tabla A.9. Mapa de direcciones deldispositivo EXP_DEC.
Dispositivo Localidades Banco
8251 500..501 500..50F
8253 510..513 510..51F
8255 520..523 520..52F
ADC 530..530 530..53F
DAC 541..541 540..54F
USR1 550..55F 550..55F
USR2 560..56F 560..56F
USR3 570..57F 570..57F
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 H0002: 0 1 0 1 0 0 0 1 1 H L H H H H H H0003: 0 1 0 1 0 0 1 0 1 H H L H H H H H0004: 0 1 0 1 0 0 1 1 1 H H H L H H H H0005: 0 1 0 1 0 1 0 0 1 H H H H L H H H0006: 0 1 0 1 0 1 0 1 1 H H H H H L H H0007: 0 1 0 1 0 1 1 0 1 H H H H H H L H0008: 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) señales cso, wro & rdo a partir de
cuatro (4) señales CONV, csi, wri & rdi.
2. Generacion de la señal INT1 a partir de int.
3. Generacion de la señal INT2 a partir de las señales ring &
RXRDY;
4. Generacion de la señal SQT a partir de las señales cd & ORIG.
Esta cantidad de señales de salida suman seis (6) señales, 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 señales (CONV, csi, wri & rdi); una (1) para la
señal (int); dos (2) para las señales (ring & RXRDY) y dos (2) para las
señales (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 señal int (activa bajo) y convertirla en la señal 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 señales cso, wro &
rdo sean exatamente iguales que las señales csi, wri & rdi
(respectivamente), cuando la señal CONV = 1. Cuando la señal CONV = 0,
las señales 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 señal
ring (activa baja) con la señal RXRDY (activa alta), para generar la
señal INT2 (activa alta), cuando cualquiera de estas señales 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 señal
cd (carrier detect) (activa baja) con la señal O/a (Originate/answer)
para generar la señal SQT (Squelch Transmiter) (activa alta).
Cuando la señal SQT = 1, el integrado (MODEM), desabilita la
transmision; cuando cd = 0, significa que ha detectado la señal 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 señal SQT debe ser
el AND logico de las señales O/a y cd.
A-42
En la figura A.6, se muestra el diagrama esquematico equivalente
del dispositivo 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 *//* */
Figura A.6. Diagrama esquematico equivalente de EXP_GLUE
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 H0002: 1 0 1 1 1 1 0 1 1 L H H L L H0003: 1 1 0 1 1 1 0 1 1 H L H L L H0004: 1 1 1 0 1 1 0 1 1 H H L L L H0005: 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 H0007: 0 1 1 1 1 1 0 1 1 L L H L L H0008: 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 H0010: 1 1 1 1 0 1 0 1 1 H H H H L H0011: 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 H0013: 1 1 1 1 1 0 0 1 1 H H H L H H0014: 1 1 1 1 1 1 0 1 1 H H H L L H0015: 1 1 1 1 1 1 1 1 1 H H H L H H0016: 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 L0018: 1 1 1 1 1 1 0 0 1 H H H L L L0019: 1 1 1 1 1 1 0 1 0 H H H L L L0020: 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) señales de seleccion, con resolucion
de 32Kbytes.
Esta cantidad de señales de salida
suman ocho (8) señales, 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
direcciones A19 hasta A15 y una para la
señal 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.
Figura A.7. Diagramaesquematico equivalente deRAM_EXP
A-46
El mapa de direcciones
seleccionado para este
dispositivo se presenta en la
tabla A.10, y el mismo fue
diseñado utilizando todas las
localidades continuas empezando
desde la localidad 8000H hasta la
localidad 41FFFH, ya que se desea
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 *//* */
Tabla A.10. Mapa de direcciones deldispositivo RAM_EXP
Dispositivo Localidades Banco
RAM-1 08000..0FFFF 08000..0FFFF
RAM-2 10000..17FFF 10000..17FFF
RAM-3 18000..1FFFF 18000..1FFFF
RAM-4 20000..27FFF 20000..27FFF
RAM-5 28000..2FFFF 28000..2FFFF
RAM-6 30000..37FFF 30000..37FFF
RAM-7 38000..3FFFF 38000..3FFFF
EEPROM 40000..41FFF 40000..41FFF
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 47FFFh0001: 0 0 0 0 0 0 H H H H H H H H0002: 0 0 0 0 1 0 L H H H H H H H0003: 0 0 0 1 0 0 H L H H H H H H0004: 0 0 0 1 1 0 H H L H H H H H0005: 0 0 1 0 0 0 H H H H L H H H0006: 0 0 1 0 1 0 H H H H H L H H0007: 0 0 1 1 0 0 H H H H H H L H0008: 0 0 1 1 1 0 H H H H H H H L0009: 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 diseñador de herramientas de alto nivel
(alejadas del diseño a nivel de compuertas), que le permiten diseñar un
PLD sin la necesidad de diseñar previamente el circuito a nivel de
compuertas. De hecho, para el diseño de todos los PLD del Sistema
Didactico (menos el WAIT2), el diseñador paso directamente de las
necesidades hacia la descripcion logica del dispositivo.
El diseñador 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 diseño es más facil de documentar,
modificar, implementar en distintos dispositivos y entender por otros
diseñadores.
A.8 REFERENCIAS
Manual de CUPLLogical Devices Inc.Ver 1.001990
NationalProgramable Device Databook....
Faltan...