Programación de SPLDs con WinCUPL.

Anuncio
Electrónica Digital II
M. C. Felipe Santiago Espinosa
Octubre de 2014
WinCUPL
 Software desarrollado por Atmel Corporation.
 CUPL: Compilador universal para lógica programable (genera
archivos para programar o simular SPLDs).
 WinCUPL es una versión para windows de CUPL.
 Con CUPL es posible compilar descripciones de circuitos
combinacionales o secuenciales.
 Un circuito combinacional se describe con su tabla de verdad o
con ecuaciones booleanas.
 Para los circuitos secuenciales lo más conveniente es el empleo
de máquinas de estados finitos.
 Los archivos con las descripciones tienen extensiones .PLD,
el compilador de WinCUPL genera los archivos siguientes:
 Un archivo JEDEC (filename.JED) para descargarse con un




programador o emplarse con un simulador.
Un archivo absoluto (filename.ABS) para usarse por CSIM, el
módulo de simulación de CUPL.
Un archivo de lista (filename.LST) que muestra los errores
en el archivo fuente original.
Un archiv0 de documentación (filename.DOC) que contiene
ecuaciones lógicas expandidas, tablas de símbolos, términos
productos e información del mapa de fusibles.
Un archivo en formato PLA (filename.PLA) para ser usado
por otros módulos o programas técnicos.
Ecuaciones booleanas
 Pueden emplearse los 4 operadores lógicos fundamentales:
NOT, AND, OR y XOR:
Operador
Descripción
Ejemplo
Precedencia
!
NOT
!A
1
&
AND
A&B
2
#
OR
A#B
3
$
XOR
A$B
4
 Una ecuación lógica tiene la forma:
[ ! ] var [ .ext ] = exp;
Donde:
 Var es una variable o lista de variables indexadas o no
indexadas. Si se trata de una lista, la expresión se aplica a
los diferentes elementos de la lista.
 .ext es una extensión a las variables que las vincula con
las características de los dispositivos programables.
 Exp es una expresión, que es una combinación de
variables y operadores.
 = el operador de asignación que se aplica a una variable o
a un conjunto de variables
 ! El operador de complemento.
EXTENSIONES
DE LAS VARIABLES
EN WINCUPL
Circuito que ilustra el uso de las extensiones de las variables
 Las variables son indexadas si finalizan con un número,
referido como índice, pueden usarse para representar
buses, por ejemplo, para:
A0 A1 A2 A3 A4 A5 A6 A7
 Puede usarse A0..7. El índice es un número entre 0 y 31,
siendo el bit 0 el menos significativo.
 Un operador puede aplicarse igualmente a un conjunto de
variables, por ejemplo, las expresiones:
[A3, A2, A1, A0] : &  A3 & A2 & A1 & A0
[B3 .. B0] : #  B3 # B2 # B1 # B0
[C3, C2, C1, C0] : $  C3 $ C2 $ C1 $ C0
 Con la palabra reservada FIELD se hace referencia a un
grupo de variables (indexadas o no) para tratarlas como
una sola variable de varios bits, por ejemplo:
FIELD address = [ A3..0];
FIELD modo = [ini, asc, des ];
 Una descripción en WinCUPL debe iniciar con:
 Encabezado: Se indica el nombre del programa, el
dispositivo a ser programado, el autor, la fecha y otros datos.
 Asignación de terminales: Se asignan las terminales de
entrada y salida del dispositivo.
Ejemplo 1: Circuito combinacional
 Se describirá mediante CUPL el siguiente circuito:
x2
f
x3
x1
 La ecuación para el circuito es:
 Con la notación de CUPL:
 Se utilizará una GAL22V10, como entradas se utilizarán las
terminales 1, 2 y 3, para x1, x2 y x3 respectivamente. Y la
salida f estará en la terminal 23.
Simulación en WinCUPL
1.
2.
3.
4.
5.
Iniciar un nuevo archivo de simulación a partir del
archivo PLA
Agregar señales al espacio de simulación
Agregar vectores
Definir los valores de las entradas
Ejecutar la simulación
Simulación en ISIS de Proteus
1. Definir el circuito
2. Cargar el archivo JED en el PAL
3. Ejecutar la simulación
Tablas de verdad
 Es otra manera de describir circuitos combinacionales,
CUPL reserva a la palabra TABLE para estas descripciones.
 Primero se define un campo (FIELD) para las variables de
entrada y otro para las variables de salida. Después se
especifican una a una las asignaciones de las salidas ante las
diferentes entradas.
 Condiciones no importa pueden considerarse para las
entradas pero no para las salidas.
 Una lista de valores de entrada se puede considerar para
generar la misma salida.
FIELD input = [in3..0];
/* Número en binario */
FIELD output = [out7..0];
/* Número en BCD */
TABLE input => output {
0=> 00; 1=>01; 2=>02; 3=>03;
4=>04; 5=>05; 6=>06; 7=>07;
8=>08; 9=>09; A=>10; B=>11;
C=>12; D=>13; E=>14; F=>15;
}
 Con excepción de las terminales de los dispositivos y la
definición de las variables indexadas, que siempre se
definen en decimal, para otras operaciones CUPL maneja
los números en hexadecimal, a menos que se especifique
otra base utilizando el prefijo correcto.
Prefijo
Base
Ejemplo
Valor
(decimal)
‘B’
Binario (2)
‘B’1101
13
‘O’
Octal (8)
‘O’123
83
‘D’
Decimal (10)
‘D’872
872
‘H’
Hexadecimal (16)
‘H’A2
162
 En binario, octal o hexadecimal pueden utilizarse
condiciones no importa (“X”), por ejemplo:
‘b’110X
‘O’2X3
‘h’12AX
Ejemplo 2: Decodificador de 3 a 8
Es un circuito con 3 entradas y 8 salidas, de las cuales
sólo una está activa a la vez.
A2 A1
A0
Y7
Y6 Y5 Y4
Y3
Y2 Y1 Y0
0
0
0
0
0
0
0
0
0
0
1
0
0
1
0
0
0
0
0
0
1
0
0
1
0
0
0
0
0
0
1
0
0
0
1
1
0
0
0
0
1
0
0
0
1
0
0
0
0
0
1
0
0
0
0
1
0
1
0
0
1
0
0
0
0
0
1
1
0
0
1
0
0
0
0
0
0
1
1
1
1
0
0
0
0
0
0
0
 Las entradas estarán en las
terminales 1, 2 y 3; mientras
que para las salidas se
utilizarán las terminales de la
16 a la 23.
FIELD ent = [A2..0];
FIELD sal = [Y7..0];
TABLE ent => sal {
0=> ‘b’00000001;
1 => ‘b’00000010;
2 => ‘b’00000100;
3 => ‘b’00001000;
4 => ‘b’00010000;
5 => ‘b’00100000;
6 => ‘b’01000000;
7 => ‘b’10000000;
}
Funciones en WinCUPL
 Si se requieren tareas repetitivas, es posible el uso de
funciones. Por ejemplo, una función para un sumador
de 1 bit se define como:
function sum_1Bit (X, Y, Cin, Cout) {
Cout = Cin & X # Cin & Y # X & Y;
/* Carry */
sum_1Bit = Cin $ (X $ Y);
/* Suma */
}
Funciones en WinCUPL
/* Un sumador de 4 bits, con acarreo */
Z1 = sum_1Bit(X1, Y1, ‘b'0, C1);
/* El acarreo inicial es ‘b'0 */
Z2 = sum_1Bit(X2, Y2, C1, C2);
Z3 = sum_1Bit(X3, Y3, C2, C3);
Z4 = sum_1Bit(X4, Y4, C3, C4);
/* En C4 está el acarreo final */
Máquinas de Estados Finitos (FSM)
 Una FSM es un circuito digital, el cual recorre una
secuencia de estados en un orden predefinido.
 El circuito tiene memoria, es decir, sus salidas no solo
dependen de las entradas, sino que también dependen de
los estados anteriores.
Entrada/Salida:
x/y
 Una FSM se compone de dos bloques, como se muestra en
la figura:
 Para los elementos de memoria se emplean flip-flops, la
máquina es síncrona por que los flip-flops cambian su
estado en cada flanco de reloj.
Máquina de Mealy
Máquina de Moore
 Para definir una máquina de estados en CUPL, primero se
determinan los bits con los que se representarán los estados
válidos, esto se realiza con la palabra FIELD.
FIELD state_var_list = [Qn..0];
[Qn..0] son terminales de salida, su tamaño depende del
número de estados.
 Es posible una definición con nombres simbólicos para los
estados, se realiza con la palabra $define
$define state_n0 ‘b’0...0
$define state_n1 ‘b’0…1
...
$define state_nn ‘b’1…1
 Con la palabra reservada SEQUENCE se determina la
secuencia de estados, de acuerdo con la siguiente sintaxis:
SEQUENCE state_var_list {
PRESENT state_n0
IF (condition1)NEXT state_n1;
IF (condition2) NEXT state_n2 OUT out_n0;
DEFAULT NEXT state_n0;
PRESENT state_n1
NEXT state_n2;
.
.
.
PRESENT state_nn statements;
}
Ejemplo 3: Contador 0 a 3
estados.ar = 0;
estados.sp = 0;
FIELD estados = [Q1..Q0];
$define
$define
$define
$define
S0 'b'00
S1 'b'01
S2 'b'10
S3 'b'11
SEQUENCE
PRESENT
PRESENT
PRESENT
PRESENT
}
estados {
S0 NEXT
S1 NEXT
S2 NEXT
S3 NEXT
S1;
S2;
S3;
S0;
Nota: La asignación de estados.ar y de
estados.sp es por que los flip-flops de
salida cuentan con un reset asíncrono
(ar) y un preset síncrono (ps).
Ejemplo 4: Maquina de Mealy
Ejemplo 5: Maquina de Moore
Ejercicios:
Multiplexor de 2 a 1.
Decodificador de BCD a 7 segmentos.
Comparador de datos de 4 bits.
Generador de paridad Par/Impar.
Contador Up/Down de 3 bits.
Registro de corrimiento, entrada serial y salida paralela.
Sistema con dos semáforos (sugerencia: Usar una señal de
reloj con una frecuencia baja. El color Amarillo que
encienda durante 1 ciclo de reloj, el color Verde durante 2
ciclos).
8. Control automático de una bomba de agua
9. Seguidor de línea con dos motores independientes
10. Control de una puerta automática
1.
2.
3.
4.
5.
6.
7.
Descargar