Tutorial introductorio al Lenguaje Abel ( Advanced Bolean Equations Language). 1.Lenguaje Abel. 2.Estructura básica de un programa Abel. 3.Links y referencias 2.1 Encabezado. 2.2 Declaraciones. 2.3 Descripción lógica. 2.3.1 Bloques de ecuaciones. 2.3.2 Tablas de verdad. 2.3.3 Diagrama de estados 2.4 Vectores de Test. 2.3.3.4 Representación de máquinas secuenciales. 1. Lenguaje Abel Abel es un lenguaje de descripción de hardware (HDL) que permite: 1. Describir un circuito digital. 2. Definir vectores de test para comprobar el funcionamiento del código generado. 3. Generar un archivo.svf.jedec para quemar un dispositivo lógico programable como son los PLD y CPLD. A continuación se presenta un compendio de los aspectos más relevantes de este lenguaje. Esto no pretende ser una discusión completa que permita al lector profundizar sus conocimientos. Si Usted ya está familiarizado con el lenguaje, este escrito sólo le servirá como repaso. Laboratorio de Sistemas Digitales. Prof. Leopoldo Silva Bijit. 30-12-2002 1
2.Estructura básica de un programa Abel. A continuación se presenta en la tabla 1 la estructura típica de un programa Abel. Tabla 1 Estructura típica de un Encabezado Module module_name Programa en Abel. title string Declaraciones Descripción lógica Vectores de Test DeviceID device devicetype Declaraciones de pin otras declaraciones Equations Ecuaciones test_vectors vectores de test end module_name 2.1 Encabezado. Tiene las siguientes palabras claves. Palabra clave: module. Esta palabra clave es necesaria pues indica el nombre y el comienzo del módulo. Debe ir siempre un END al final del modulo. Programas largos pueden tener varios módulos, cada uno con su propio nombre, título, declaraciones y ecuaciones. Palabra clave: title. Especifica un string de título que será incluido en los archivos de documentación generada por el compilador. Los comentarios se agregan comenzando el texto con comillas dobles. Laboratorio de Sistemas Digitales. Prof. Leopoldo Silva Bijit. 30-12-2002 2
2.2 Declaraciones. A esta área corresponden los siguientes aspectos. Palabra clave: device. La declaración device es opcional e incluye un identificador y un string que denota el tipo de dispositivo. El compilador usa el nombre del dispositivo, para verificar que este soporta las ecuaciones lógicas especificadas en el programa. Palabra clave: pin (pin declaration) Las declaraciones de pin informan al compilador acerca de los nombres asociados a los pines del componente. Si el nombre de la señal declarada está precedida por un NOT (!), entonces en el pin asociado se presentará el complemento de la señal en cuestión. Palabra clave: node. Se usa para declarar señales que no son conectadas a pines externos. Palabra clave: istype. Define una lista de atributos de una señal. Se puede usar después de una declaración de pin o node. En el manual de referencia (pág 51) se encuentra una lista de atributos que resulta interesante revisar. Un ejemplo es la palabra clave com que define una salida combinacional. Uso de range. Un rango de nombre de señales puede definirse con el primer y último nombre de del rango separados por..., por ejemplo L0...L5. Uso de Set. Un Set es un conjunto de señales o constantes referenciadas con un solo nombre. Cada operación aplicadas al Set es aplicada a cada una de las señales que lo componen. También es posible declarar constantes y expresiones que pueden simplificar el programa. Laboratorio de Sistemas Digitales. Prof. Leopoldo Silva Bijit. 30-12-2002 3
2.3 Descripción Lógica. Un diseño lógico puede ser descrito de las siguientes maneras: 1. Bloques de ecuaciones. 2. Tablas de verdad. 3. Diagrama de estados. 2.3.1Bloques de ecuaciones. Se utiliza la palabra clave equations para comenzar la descripción lógica. Las ecuaciones se especifican con expresiones lógicas utilizando operadores o bloques When- Then-Else. Alguno de los operadores son los siguientes: & AND # OR! NOT $ XOR!$ XNOR Ejemplo 1. En este ejemplo MODULE V7408 Podemos revisar " Quad two input AND gate. Cuatro algunos conceptos ands de dos entradas. ya conocidos. " Declaraciones de señales de entrada A0, A1, B0, B1, C0, C1, D0, D1 PIN; " Declaraciones de señales de salida. Se requiere definir un tipo de salida. YA, YB, YC, YD PIN istype 'com'; EQUATIONS YA = A0 & A1; YB = B0 & B1; YC = C0 & C1; YD = D0 & D1; END Laboratorio de Sistemas Digitales. Prof. Leopoldo Silva Bijit. 30-12-2002 4
2.3.2 Tablas de verdad. Es otra manera de especificar funciones combinaciones lógicas. La forma general de utilizar esta característica se muestra en la tabla 2. Tabla 2 truth_table (input-list -> output-list) Estructura general de una tabla de verdad... input-value -> output-value; input-value -> output-value; Como se observa en la tabla 2 la tabla de verdad debe ir precedida por la palabra clave truth_table. Las palabras input_value y output_value son los nombres de las señales de entrada y salida de la tabla. En el ejemplo presentado en la tabla 3 se ilustra la definición de una función mediante tablas de verdad. Tabla 3 " Función de tres variables. Definición de MODULE f3 una función mediante " entradas tablas de verdad. a, b, c PIN; " salidas f PIN ISTYPE 'COM'; EQUATIONS truth_table ( [a, b, c]->f ) [0, 0, 0]-> 0; [0, 0, 1]-> 1; [0, 1, 0]-> 0; [0, 1, 1]-> 1; [1, 0, 0]-> 0; [1, 0, 1]-> 0; [1, 1, 0]-> 1; [1, 1, 1]-> 1; Test_vectors ( [a, b, c]->f ) [0, 0, 0]-> 0; [0, 0, 1]-> 1; [0, 1, 0]-> 0; [0, 1, 1]-> 1; [1, 0, 0]-> 0; [1, 0, 1]-> 0; [1, 1, 0]-> 1; [1, 1, 1]-> 1; END Laboratorio de Sistemas Digitales. Prof. Leopoldo Silva Bijit. 30-12-2002 5
2.3.4 Diagramas de estado. En un sistema secuencial, para poder generar la salida en un tiempo dado, es preciso conocer valores previos de algunas variables. No bastan los valores presentes de la entrada. Es decir, debe almacenarse información concerniente a los valores de las entradas pasadas, para poder generar la salida a partir de la entrada presente y los valores almacenados. La información anteriormente mencionada, se almacena en estados internos. Los valores que deben registrarse para recordar la situación, debida a los valores de las entradas pasadas, se almacena en variables de estado. En cualquier instante, una máquina secuencial está en uno de un número finito de estados; éstos quedan determinados por el valor de las variables de estado. En la figura 1 podemos ver un esquemático de lo anterior. 2.3.3.4 Representación de máquinas secuenciales Se entiende por representación, la descripción de cómo se pasa de un estado a otro, debido a los cambios de las entradas. Las representaciones deben describir en forma precisa y completa a la máquina. Modelo de Mealy Es un modelo secuencial en el cual la salida está asociada a las transiciones entre estados. Las salidas y el próximo estado cambian instantáneamente con los cambios de las entradas. Diagrama de estados: Como muestra la figura 2, los estados se representan mediante círculos, y por líneas rotuladas y orientadas a las transiciones. El rótulo indica la entrada y la salida que provoca la transición. Se separan con un slash. Laboratorio de Sistemas Digitales. Prof. Leopoldo Silva Bijit. 30-12-2002 6
El diagrama de estados de la figura 2 se lee: Estando en el estado y, cuando llega la entrada x se pasa al estado Y, con salida z. A continuación se tiene en la figura 3 el diagrama de estados de una máquina secuencial (Modelo de Mealy) que produce una salida alta cada vez que se detecta la secuencia 0101 en la entrada; y salida cero en el resto de los casos. En la tabla 4 se muestra el código en Abel para esta máquina de estrados. En las declaraciones se emplea el tipo reg, para declarar una salida registrada; es decir, una salida de un flip-flop D. En el diseño se tienen dos salidas: z es una salida combinacional, asincrónica; mientras que la salida zs es de tipo sincrónica. Luego se declara el registro de estado(sreg), en función de las salidas de los flip-flops. También se efectúa un mapeo de nombres lógicos a físicos. Esto también se denomina asignación de estados. El estado inicial, será el estado A; cuyo nombre binario será [0, 0]. En las ecuaciones se indican las señales de entrada que ingresan al reloj(clock), a la habilitación de la salida(enab, no se usa enable ya que es palabra reservada) y al reseteo asincrónico de la macrocelda(reset). Luego se describe el diagrama de estados de sreg, mediante la especificación de cada estado. Laboratorio de Sistemas Digitales. Prof. Leopoldo Silva Bijit. 30-12-2002 7
En este se indican las transiciones de acuerdo a los valores de las entradas(esto se indica con la sentencia if then else); y los valores que deben tomar las salidas(esto se realiza con la sentencia with). Debe notarse que las salidas registradas se asignan con :=, y que a las salidas combinacionales se les asigna un valor con el signo igual. Pueden agruparse acciones, mediante el uso de paréntesis cursivos{ }. Finalmente se especifican vectores de prueba. Se emplea la constante.c. para modelar un pulso de reloj. Tabla4 MODULE estado1 Ejemplo de máquina de estados TITLE 'Diagrama de Estados. Modelo de Mealy' "Declaraciones q1, q0, zs pin istype 'reg'; "Estado y Salida Registrada clock, enab, reset, x pin ; "Entradas z pin istype 'com'; "Salida Combinacional. sreg = [q1,q0]; "Valores de los estados A= 0; B= 1; C= 2; D= 3; equations [q1,q0,zs].clk= clock; [q1,q0,zs].oe =!enab; [q1,q0,zs].ar = reset; "Con reset va a [0, 0](el estado A). state_diagram sreg; State A: zs := 0; if (!x) then B with z = 0; else A with z = 0; State B: if (!x) then B with z = 0; else C with z = 0; State C: if (!x) then D with z = 0; else A with z = 0; State D: if (!x) then B with z = 0; else C with {z = 1; zs := 1;} Laboratorio de Sistemas Digitales. Prof. Leopoldo Silva Bijit. 30-12-2002 8
test_vectors ( [clock,enab,reset, x]->[sreg,zs]) [.c., 0, 1, 0 ]->[A,0]; [.c., 0, 0, 1 ]->[A,0]; [.c., 0, 0, 0 ]->[B,0]; [.c., 0, 0, 1 ]->[C,0]; [.c., 0, 0, 0 ]->[D,0]; [.c., 0, 0, 1 ]->[C,1]; [.c., 0, 0, 1 ]->[A,0]; [.c., 0, 0, 0 ]->[B,0]; [.c., 0, 0, 0 ]->[B,0]; [.c., 0, 0, 1 ]->[C,0]; [.c., 0, 0, 1 ]->[A,0]; END Como observamos el diagrama de estado contiene la descripción de estado para el diseño lógico. La sintaxis para un diagrama de estados se muestra en la tabla 5. Tabla 5 Sintaxis de un diagrama de estados. state_diagram state_reg STATE state_value : [equation;] [equation;] : : trans_stmt ;... La palabra clave state_diagram indica el comienzo de la descripción de una máquina de estados. La palabra clave STATE y todas las que se describen a continuación, describen un estado del diagrama de estados. En particular STATE da al estado un nombre o valor state_reg: es un identificador que define la señal que determina el estado de la máquina. state_value: puede ser una expresión, un valor o un nombre simbólico del estado. equation: define las salidas de la máquina de estado. tran_stmt: define el próximo estado. Laboratorio de Sistemas Digitales. Prof. Leopoldo Silva Bijit. 30-12-2002 9
Modelo de Moore Modelo secuencial en el cual la salida sólo está asociada al estado presente. Las salidas cambian sólo en cantos de sincronización del reloj. El diagrama de estados asociado a este modelo se presenta en la figura 4. Estando en estado y, con salida z; cuando ocurre la entrada x se pasa al estado Y, con salida z2. La salida no cambia en la transición. Por esta razón, las salidas se asocian a los estados. A continuación se presenta un reconocedor de un patrón finito. Modelo de Moore Sean: entrada x y salida z. La salida se activa cada vez que se presenta la secuencia 010, y mientras que la secuencia 100 no se haya presentado, en cuyo caso la salida se desactiva permanentemente. El diagrama de estados está representado en la figura 5. Laboratorio de Sistemas Digitales. Prof. Leopoldo Silva Bijit. 30-12-2002 10
El diseño queda implementado por el programa Abel ilustrado la tabla 5. Tabla 5 MODULE fsm010 TITLE 'fsm010' "Activa Z cada vez que llega 010 y mientras no llegue 100. "si llega 100 se activa Y, y permanece en ese estado. "Declaraciones "Pines de entrada clk, Xin, RESET pin; "Pines de Salida Q0, Q1, Q2 pin istype 'reg'; Z, Y pin istype 'com'; "Registro de Estado SREG = [Q0, Q1, Q2]; "Definicion de Estados S0 = [0,0,0]; " Estado Inicial. (Reset state) S1 = [0,0,1]; " secuencias tipo...0 S2 = [0,1,0]; " secuencias tipo...01 S3 = [0,1,1]; " secuencias tipo...010 S4 = [1,0,0]; " secuencias tipo...1 S5 = [1,0,1]; " secuencias tipo...10 S6 = [1,1,0]; " secuencias tipo...100 equations [Q0,Q1,Q2].clk= clk; [Q0.ar, Q1.ar, Q2.ar] = RESET; "Con Reset va a S0 " Z=!Q0&Q1&Q2; Y=Q0&Q1&!Q2; "Modelo de Moore state_diagram SREG state S0: Z=0; Y=0; if Xin then S4 else S1; state S1: if Xin then S2 else S1; state S2: if Xin then S4 else S3; state S3: Z=1; if Xin then S2 else S6; state S4: if Xin then S4 else S5; state S5: if Xin then S2 else S6; state S6: Y=1; goto S6; Laboratorio de Sistemas Digitales. Prof. Leopoldo Silva Bijit. 30-12-2002 11
test_vectors ([clk, RESET, Xin] -> [Z,Y]) [.C.,1,.X.] ->[0,0]; "reset [.C.,0, 0] -> [0,0]; "secuencia 00101010010 [.C.,0, 0] -> [0,0]; [.C.,0, 1] -> [0,0]; [.C.,0, 0] -> [1,0]; [.C.,0, 1] -> [0,0]; [.C.,0, 0] -> [1,0]; [.C.,0, 1] -> [0,0]; [.C.,0, 0] -> [1,0]; [.C.,0, 0] -> [0,1]; [.C.,0, 1] -> [0,1]; [.C.,0, 0] -> [0,1]; END fsm010; 2.4 Vectores de prueba Como se ha observado en muchos de los ejemplos entregados. Abel posee un sistema opcional de vectores de prueba. El formato general de los vectores de test es similar a las tablas de verdad y se muestra en la tabla 5. Tabla 6 test_vectors (input-list -> output-list) Estructura general input-value -> output-value; de los vectores de prueba... input-value -> output value; Como se observa en la tabla 6 la tabla de vectores de test debe ir precedida por la palabra clave test_vectors. Las palabras input_value y output_value dan los nombres a las señales de entrada y salida de los vectores de prueba. Para profundizar un poco más en la gran utilidad de estos vectores de prueba, volvamos al ejemplo 1 de la pág. 4. Para este ejemplo podríamos escribir el siguiente conjunto de vectores de prueba. Test_vectors ( [A1, A0 ] -> [YA]) [0, 0] ->[ 0 ]; [0, 1] ->[ 0 ]; [1, 0] ->[ 0 ]; [1, 1] ->[ 1 ]; Laboratorio de Sistemas Digitales. Prof. Leopoldo Silva Bijit. 30-12-2002 12
Cada renglón define un vector, asignando valores a las entradas y salidas. La primera línea, entre paréntesis redondos, muestra los identificadores de las señales de entrada a la izquierda de la asignación; y la o las señales de salida a la derecha. Luego vienen los valores de las entradas que se desea probar y la o las correspondientes salidas que se desean verificar. La simulación funcional aplica en las entradas los estímulos y calcula mediante las ecuaciones o tablas de verdad los valores de las salidas; y revisa que éstos coincidan con las salidas asignadas a cada uno de los vectores. Al final resume si las diferentes pruebas pasaron o no. AA Y 0 1 A V0001 0 0 L V0002 1 0 L V0003 0 1 L V0004 1 1 H 4 out of 4 vectors passed. Efectuada la simulación temporal puede obtenerse la forma de onda de la salida (figura 6), para los estímulos descritos en los vectores, las cuales muestran el retardo de propagación del canto de subida de la señal de salida(ya): 3. Links y referencias. Referencias Links Xilinx-ABEL Design Software Reference Manual, Data I/O Corp., 1993. The ABEL Hardware Design Language, 1999 by John F. Wakerly. ABEL-HDL Reference Manual, Data I/O Corporation., 1999. http://www.elo.utfsm.cl/~lsb/elo211/aplicaciones/pennsylvania/hdl- ABEL%20Primer.htm#State http://www.elo.utfsm.cl/~lsb/elo211/elo211.html Laboratorio de Sistemas Digitales. Prof. Leopoldo Silva Bijit. 30-12-2002 13