1.-Sintáxis básica
Cada línea de código fuente ABEL debe cumplir las siguientes reglas y restricciones sintácticas:
Todos los caracteres alfabéticos, en mayúsculas y minúsculas,
son soportados al igual que la mayoría de los símbolos comunes
de teclado.
a – z / A – Z | (alfabeto, mayusculas / minusculas) |
0 – 9 | (digitos) |
|
3.-Identificadores
Los identificadores son nombres que identifican los siguientes ítems:
Los valores constantes son utilizados en sentencias de asignación, tablas de verdad y vectores de test. Los valores constantes pueden ser numericos, o uno de los valores constantes especiales no numéricos.
4.1.-Constantes especiales
Constantes | Descripción |
|
Entrada registrada (transición 0-1-0) |
|
Reloj con el flanco de bajada (transición 1-0) |
|
Señal flotante de entrada o salida |
|
Entrada registrada (transición 1-0-1) |
|
Registro pre-cargado |
|
# = 2 a 9. Drive the input to super voltage 2 through 9. |
|
Reloj con el flanco de subida (transición 0-1) |
|
Condición de sin importancia |
|
Valor tri-estado |
4.2.-"=" Declaración de constante
id – Identificador que denomina una constante a ser usada en el módulo.
expr - Expresión que define el valor constante.
Una declaración de constante define una constante en un módulo. Los identificadores del lado izquierdo del signo igual son asignados con los valores listados sobre el lado derecho. Hay una correspondencia uno a uno entre los identificadores y la lista de expresiones. Se requiere que la declaración termine con un punto y coma.
Ejemplos:
Y = 'Bc' ; " Y = + H4263 ;
X =.X.; " X means 'don't care'
ADDR = [1,0,15]; " ADDR is a set with 3 elements
A,B,C = 5,[1,0],6; " 3 constants declared here
D pin 6; " see next line
E = [5 * 7,D]; " signal names can be included
G = [1,2]+[3,4]; " set operations are legal
A = B & C; " operations on identifiers are valid
A = [!B,C]; " set and identifiers on right
WITH { x : = 1 ; y : = 1 ; };
ELSE 2 WITH {x : = 0 ; y : = 1 ; };
[ expression : state_exp; ]
[ expression : state_exp; ]
ENDCASE ;
La sentencia CASE es usada bajo la sección State_diagram para indicar la transición de un estado de la máquina cuando hay multiples condiciones que afectan la transición de estados. Se pueden encadenar sentencias CASE con IF-THEN-ELSE, GOTO, y otras sentencias CASE, y se puede además usar bloques de ecuaciones.
Ejemplo
a == 1 : 2 ;
a == 2 : 3 ;
a == 3 : 0 ;
endcase ;
IF expression THEN state_expression
ELSE IF expression THEN state_expression
ELSE IF expression THEN state_expression
ELSE state_expression ;
La sentencia IF-THEN-ELSE es una forma fácil de describir la progresión de un estado a otro en una máquina de estados. La expresión que sigue a la palabra clave IF es evaluada, y si el resultado es verdadero, la máquina va al estado indicado por state_exp que sigue a la palabra clave THEN. Si el resultado de la expresión es falso, la máquina avanza al estado indicado por la palabra clave ELSE. Otras sentencias IF-THEN-ELSE pueden ser encadenadas a la clausula ELSE de una sentencia IF-THEN-ELSE. Cualquier número de sentencias IF-THEN-ELSE pueden ser encadenadas, pero la sentencia final debe terminar con punto y coma.
Los bloques de ecuaciones usados con una expresión condicional, tales como IF-THEN-ELSE, resultan en funciones que son logicamente ANDed con la expresión condicional que es en efecto.
PRECAUCION: IF-THEN-ELSE es solo soportado en la descripción de diagramas de estado. Se debe usar WHEN-THEN-ELSE para ecuaciones.
Ejemplo
if x-y then j else k; "if x-y is not 0 goto j, else goto k
if A then b*c; "if A is true (non-zero) goto state b*c
if a then 1 else
if b then 2 else
if c then 3 else 0 ;
[ ELSE equation ];
[ ELSE equation ];
Esta sentencia es usada en ecuaciones. Las ecuaciones usan los 4 operadores de asignación = and ?= (combinacional or detailed), y := y ?:= (registrada pin-to-pin).
Los bloques de ecuaciones usados en una expresión condicional tal como WHEN-THEN-ELSE produce una funcion lógica que es lógicamente ANDed con la expresión condicional que la produjo (that is in effect).
PRECAUCION: WHEN-THEN-ELSE es solo soportado para ecuaciones. Se debe usar IF-THEN-ELSE para diagramas de estado.
Ejemplo
WHEN (Mode == S_Data) THEN
{ Out_data := S_in; S_Valid :=1; }
ELSE WHEN (Mode == T_Data) THEN
{Out_data := T_in; T_Valid := 1; }
La sentencia WITH es usada en la sección de diagrama de estados. Cuando se usa en conjunción con sentencias IF-THEN o CASE, permite escribir ecuaciones en terminos de transiciones.
Ejemplo
WITH {x := 1 ;
y := 1 ;}
ELSE 2 WITH {x := 0 ;
y := 1 ;}
Los comentarios pueden ser definidos de dos formas:
Los operadores de ABEL-HDL están divididos en cuatro tipos básicos:
lógicos, aritméticos, relacionales, y de asignación.
A continuación se muestra la tabla conteniendo los operadores y
su tipo.
Lógicos | Aritméticos | Relationales | Asignación | Rango |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|||
|
8.-Uso de expresiones intermedias
Se pueden usar expresiones intermedias o constantes en la sección de declaraciones para reducir el número de pines necesarios para implementar las funciones multi-niveles. Las expresiones intermedias pueden ser útiles cuando un módulo tiene repetidas expresiones. En general, las expresiones intermedias
TMP2 = [A7..A4] == [B7..B4];
& (A4 !$ B4) & (A3 !$ B3) & (A2 !$ B2)
& (A1 !$ B1) & (A0 !$ B0);
TMP2 = [A7..A4] == [B7..B4];
F = TMP1 & TMP2;
TMP2 =(A7 !$ B7) & (A6 !$ B6) & (A5 !$ B5) & (A4 !$ B4);
F = TMP1 & TMP2;
8.1.-Palabra clave: Declarations
declarations
Una declaración es válida dada luego de la palabra clave Declarations. Las declaraciones pueden ser hechas en cualquier parte del código fuente ABEL.
Ejemplo
A,B pin 1,2; "declarations keyword implied
Out1 pin 15 istype 'com';
Equations
Out1 = A & B;
Declarations "declarations keyword required
C,D,E,F pin 3,4,5,6;
Out2 pin 16 istype 'com';
Temp1 = C & D;
Temp2 = E & F;
Equations
Out2 = Temp1 # Temp2;
end;
element [?]:= condition ;
element [?]= condition ;
La sentencia Equations define el comienzo de un grupo de ecuaciones asociadas con un dispositivo. Las ecuaciones especifican las funciones lógicas con algebra de booleana. Un punto y coma es necesario para indicar el fin de la ecuación.
Se debe usar sentencias WHEN-THEN-ELSE cuando se necesiten expresiones condicionales en ecuaciones. IF-THEN-ELSE es usado solo en la descripción de diagramas de estado.
PRECAUCION: Los operadores de asignación := y ?:= son usados solo cuando escriban en ecuaciones registradas pin-to-pin. Use los operadores de asignación = y ?= para ecuaciones registradas usando la extensión DOT.
Ejemplo
A = B & C # A ;
[W,Y] = 3 ;
!F = B == C ;
output.D = in1 # in2 ;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
10.-@directive - ORDENES
Propósito
Se utilizan estas directivas para afectar el contenido de un archivo
fuente cuando es procesado. Pueden incluirse secciones de código
condicionalmente, el código puede ser traido desde otro archivo,
y se pueden imprimir mensajes durante el proceso del código fuente.
Uso
Estas directivas permiten el uso de estructuras más complejas. Algunas de las directivas usan argumentos para determinar las condiciones. El argumento puede ser actual o dummy precedido de un signo de interrogación (?).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|