Introducción a la programación de PLD s Sira E. Palazuelos Cagigas Ernesto Martín Gorostiza Departamento de Electrónica Universidad de Alcalá PALCE22V10 2 1
Proceso de diseño Problema de Diseño Especificación Formal - Diag. de bloques - Tabla de Verdad - Funcionas Lógicas - Circuito Descripción utilizando un Lenguaje de Descripción Hardware (CUPL) Ficheros ASCII Simulador Compilador PALCE22V10 Grabador de PLD s Fichero.JED 3 Ejemplo de programa en CUPL Ejemplo: Multiplexor + Conversor BCD 7segmentos Entradas Dos datos BCD de 4 bits. Selección. Salidas Señales de activación del display. Funcionamiento Visualiza dígito decimal correspondiente al dato BCD seleccionado si es válido (si no apaga display y enciende el punto). A3-A0 B3-B0 Selección MUX S3-S0 BCD 7 Seg 4 2
Ejemplo de programa en CUPL Conexión de la PAL (asignación de pines) A3 A2 A1 A0 B3 B2 B1 B0 Selección I1 (2) I2 (3) I3 (4) I4 (5) I5 (6) I6 (7) I7 (8) I8 (9) I9 (10) (15) I/O1 (16) I/O2 (17) I/O3 (18) I/O4 (19) I/O5 (20) I/O6 (21) I/O7 (14) I/O0 a b c d e f g Punto 5 Ejemplo de programa en CUPL Programa: Cabecera El campo de la cabecera más importante es Device CABECERA ASIGNACIÓN DE PINES A ENTRADAS Y SALIDAS CUERPO DEL PROGRAMA Name Prac3; Partno CIR001; Revision 01; Date 13/3/99; Designer Julio Pastor; Company Departamento de Electronica; Location Universidad de Alcala de Henares; Assembly None; Device p22v10; /**************************************************/ /* LABORATORIO DE ELECTRONICA DIGITAL */ /* Practica 3: Multiplexor - Decodificador BCD */ /**************************************************/ 6 3
Ejemplo de programa en CUPL Programa: Asignación de pines CABECERA ASIGNACIÓN DE PINES A ENTRADAS Y SALIDAS CUERPO DEL PROGRAMA A3 A2 A1 A0 B3 B2 B1 B0 Selección I1 (2) I2 (3) (15) I/O1 I3 (4) (16) I/O2 I4 (5) (17) I/O3 I5 (6) (18) I/O4 I6 (7) (19) I/O5 I7 (8) (20) I/O6 I8 (9) (21) I/O7 I9 (10) (14) I/O0 /** Definicion de los pines de entrada **/ Pin [2..5] = [A3..0]; /* Dato A */ Pin [6..9] = [B3..0]; /* Dato B */ Pin 10 = select; /* Seleccion */ /** Definicion de los pines de salida **/ a b c d e f g Punto Pin [15..21] = a,b,c,d,e,f,g; /* A los displays*/ Pin 14 = punto; /* Punto decimal */ 7 Ejemplo de programa en CUPL Programa: Descripción del multiplexor CABECERA A3-A0 B3-B0 Selección MUX S3-S0 S3 = Select A3 + Select B3 S2 = Select A2 + Select B2 S1 = Select A1 + Select B1 S0 = Select A0 + Select B0 ASIGNACIÓN DE PINES A ENTRADAS Y SALIDAS CUERPO DEL PROGRAMA /** Cuerpo del programa **/ /* Descripcion del multiplexor utilizando funciones logicas */ S3 = (!select & A3) # (select & B3); S2 = (!select & A2) # (select & B2); S1 = (!select & A1) # (select & B1); S0 = (!select & A0) # (select & B0); 8 4
Ejemplo de programa en CUPL Programa: Conversor BCD 7 segmentos S3-S0 BCD 7 Seg a - f Punto S3 S2 S1 S0 a b c d e f g Punto 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 1 1 0 0 1 1 1 1 1 0 0 1 0 0 0 1 0 0 1 0 1 0 0 1 1 0 0 0 0 1 1 0 1 0 1 0 0 0 1 0 1 0 1 1 0 0 1 1 1 1 0 0 0 1 0 0 1 1 0 1 0 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1 1 0 0 1 1 0 0 0 1 0 0 1 0 0 1 1 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 9 Ejemplo de programa en CUPL Programa: Conversor BCD 7 segmentos CABECERA ASIGNACIÓN DE PINES A ENTRADAS Y SALIDAS CUERPO DEL PROGRAMA /* Descripcion del conversor BCD - 7 segmentos utilizando una tabla de verdad */ TABLE S3,S2,S1,S0=>!a,!b,!c,!d,!e,!f,!g,!punto { 'h'0=>'b'11111100; 'h'1=>'b'01100000; 'h'2=>'b'11011010; 'h'3=>'b'11110010; 'h'4=>'b'01100110; 'h'5=>'b'10110110; 'h'6=>'b'00111110; 'h'7=>'b'11100000; 'h'8=>'b'11111110; 'h'9=>'b'11100110; 'h'a=>'b'00000001; 'h'b=>'b'00000001; 'h'c=>'b'00000001; 'h'd=>'b'00000001; 'h'e=>'b'00000001; 'h'f=>'b'00000001; } 10 5
Ejemplo de programa en CUPL Programa: Contador (secuencial) Parte correspondiente a definición de campos y códigos de estado (después de la cabecera y la asignación de pines) CABECERA ASIGNACIÓN DE PINES A ENTRADAS Y SALIDAS CUERPO DEL PROGRAMA field count = [Q3..0]; /* declare counter bit field */ $define S0 'b'0000 /* define counter states */ $define S1 'b'0001 $define S2 'b'0010 $define S3 'b'0011 $define S4 'b'0100 $define S5 'b'0101 $define S6 'b'0110 $define S7 'b'0111 $define S8 'b'1000 $define S9 'b'1001 field mode = [clr,dir]; /* declare mode control field */ up = mode:0; /* define count up mode */ down = mode:1; /* define count down mode */ clear = mode:[2..3]; /* define count clear mode */ 11 Ejemplo de programa en CUPL Programa: Contador (secuencial) Parte correspondiente al autómata CABECERA ASIGNACIÓN DE PINES A ENTRADAS Y SALIDAS CUERPO DEL PROGRAMA Sequenced count { /* free running counter */ present S0 if up next S1; if down next S9; if clear next S0; if down out carry; present S1 if up next S2; if down next S0; if clear next S0; present S2 if up next S3; if down next S1; if clear next S0; present S9 if up next S0; if down next S8; if clear next S0; if up out carry; /* carry */ } 12 6
Atmel WinCUPL Abrir fichero.pld 13 Atmel WinCUPL Compilar el programa ó 14 7
Atmel WinCUPL Compilar el programa Si no compila el programa: Problemas de sintaxis (repasar programa). Existen ñ, acentos etc. (es recomendable que no aparezcan ni en los comentarios). Puede ser porque haya que reasignar los pines, si obtenemos el error Demasiados términos producto en pin X. Ver fichero.doc ===================================================================== Symbol Table ===================================================================== Pin Variable Pterms Max Min Pol Name Ext Pin Type Used Pterms Level --- -------- --- --- ---- ------ ------ ----- d 15 V 11 10 1 b 16 V 9 12 1 c 17 V 9 14 1 a 18 V 9 16 1 e 19 V 7 16 1 f 20 V 9 14 1 g 21 V 8 12 1 punto 14 V 4 8 1 15 PALCE22V10 16 8
Atmel WinCUPL Compilar el programa Solución: verificaremos si es posible hacer una reasignación de pines, de forma que en todas las salidas el número de productos necesarios sea menor al número de productos disponibles. ===================================================================== Symbol Table ===================================================================== Pin Variable Pterms Max Min Pol Name Ext Pin Type Used Pterms Level --- -------- --- --- ---- ------ ------ ----- a 15 V 9 10 1 b 16 V 9 12 1 c 17 V 9 14 1 d 18 V 11 16 1 e 19 V 7 16 1 f 20 V 9 14 1 g 21 V 8 12 1 punto 14 V 4 8 1 17 Atmel WinCUPL Otros comentarios Es necesario introducir una señal de reloj a los biestables de la PAL cuando funciona como elemento secuencial. Esta señal debe se introduce en el pin 1 de la PAL. La característica Power Up Reset de la PAL hace que tras alimentar el sistema todos los biestables de la PAL tengan salida 0, es decir, el estado en el que la PAL comienza siempre es el 0. Esta circunstancia debe ser considerada en la programación de la PAL: se debe incluir siempre ese estado inicial y gestionar las transiciones oportunas. El WinCUPL no admite la letra 'ñ' ni acentos, en ningún punto del programa (ni siquiera en los comentarios). El WinCUPL incluye un directorio de ejemplos (EXAMPLES) que pueden utilizarse para familiarizarse con la sintaxis. 18 9
Atmel WinCUPL Simular el programa 19 Atmel WinCUPL Simular el programa 20 10
Atmel WinCUPL Simular el programa Ahora definimos el número de unidades de tiempo durante las cuales queremos realizar la simulación. 21 Atmel WinCUPL Simular el programa Haciendo click con el botón derecho se puede dar un valor a cada entrada en cada instante de tiempo o durante toda la simulación. 22 11
Atmel WinCUPL Simular el programa Con este icono se realiza la simulación y se obtienen los resultados. 23 Atmel WinCUPL Simular el programa Después de la simulación podemos observar en la pantalla resultante la evolución de las señales de salida en el tiempo. Si los resultados no son los deseados se revisará el programa, compilará y simulará de nuevo hasta que lo sean. 24 12
Atmel WinCUPL Archivos involucrados Fichero.PLD Fichero.SI Ficheros ASCII Compilador Simulador Fichero.ABS Fichero.DOC Fichero.JED Fichero.SO Fichero.WO 25 Programación de dispositivos programables. ALL-11 ALL-11. WACCESS Utilizaremos el programador ALL-11 junto con el programa WACCESS para volcar nuestro programa en la PAL, creando las conexiones necesarias. El PLD se situará en el programador ajustado a la parte inferior con la muesca hacia arriba, y se bajará la palanca. 26 13
WACCESS Una vez colocada correctamente la PAL en el programador, ejecutamos el programa: WACCESS 27 WACCESS A continuación, seleccionamos el dispositivo. Primero el fabricante: 28 14
WACCESS Posteriormente, dentro del fabricante, elegiremos el tipo de dispositivo, y el modelo exacto. 29 WACCESS En caso de error aparecerá un mensaje que puede ser: Posibles causas de error: La PAL está estropeada. PAL mal colocada (al revés, o no ajustada a la parte inferior). El fabricante o el modelo seleccionados no se corresponden con la PAL. El programador no está encendido (botón de la parte posterior). 30 15
WACCESS Si todo va bien, seguiremos con el proceso de grabación: Cargamos el fichero.jed que deseamos grabar en la PAL: 31 WACCESS Una vez cargado el.jed, programamos la PAL: 32 16
WACCESS En caso de error aparecerá un mensaje que puede ser: Posibles causas de error: La PAL está estropeada. PAL mal colocada (al revés, o no ajustada a la parte inferior). El fabricante o el modelo seleccionados no se corresponden con la PAL. El programador no está encendido (botón de la parte posterior). 33 WACCESS Si todo va bien, debería aparecer la siguiente pantalla: En ese caso, la PAL estará correctamente grabada, levantaremos la palanca del programador y retiraremos el dispositivo. 34 17