Referencia sintáctica del lenguaje ABEL-HDL

 

1.-Sintáxis básica

Cada línea de código fuente ABEL debe cumplir las siguientes reglas y restricciones sintácticas:

 2.-Caracteres ASCII soportados

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)
<espacio> <tab> ! @ # $ ? + & * ( ) - _ = + [ ] 
{ } ; : ' " ` \ | , < > . / ^ %
 

3.-Identificadores

Los identificadores son nombres que identifican los siguientes ítems:

 Todos estos ítems se discuten en las siguientes secciones. Las reglas y restricciones para los identificadores son: 4.-Constantes

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
.C.
Entrada registrada (transición 0-1-0)
.D.
Reloj con el flanco de bajada (transición 1-0)
.F.
Señal flotante de entrada o salida
.K.
Entrada registrada (transición 1-0-1)
.P.
Registro pre-cargado
.SV#
# = 2 a 9. Drive the input to super voltage 2 through 9.
.U.
Reloj con el flanco de subida (transición 0-1)
.X.
Condición de sin importancia
.Z.
Valor tri-estado
 

4.2.-"=" Declaración de constante
 

Sintaxis id [,id]... = expr [,expr]... ;

id – Identificador que denomina una constante a ser usada en el módulo.

expr - Expresión que define el valor constante.

Use

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:

ABC = 3 * 17; " ABC = 51

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

 

5.-Bloques de ecuaciones
  El bloque de ecuaciones permite especificar funciones más complejas y obtener ecuaciones más fáciles de leer. Un bloque se define cerrandolo entre llaves ({}). Dentro de una expresión condicional, tales como IF-THEN, CASE, or WHEN-THEN, los bloques de ecuaciones resultan en funciones lógicas que son lógicamente ANDed con la expresión condicional que tiene efecto.

 

Ejemplo state 5 : IF a == 1 THEN 1

WITH { x : = 1 ; y : = 1 ; };

ELSE 2 WITH {x : = 0 ; y : = 1 ; };

 

5.1.-CASE

 

Sintaxis CASE [ expression : state_exp; ]

[ expression : state_exp; ]

[ expression : state_exp; ]

ENDCASE ;

 

Uso

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

case a == 0 : 1 ;

a == 1 : 2 ;

a == 2 : 3 ;

a == 3 : 0 ;

endcase ;

 

5.2.-IF-THEN-ELSE

 

Sintaxis IF expression THEN state_exp [ ELSE state_exp ] ;

IF expression THEN state_expression

ELSE IF expression THEN state_expression

ELSE IF expression THEN state_expression

ELSE state_expression ;
 

  Uso

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 A==B then 2 ; "if A equals B goto state 2

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 ;

 

5.3.-WHEN-THEN-ELSE

 

Sintaxis [ WHEN condition THEN ] [!] element=expression ;

[ ELSE equation ];

-or- [ WHEN condition THEN ] equation ;

[ ELSE equation ];
 

  Uso

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 B THEN A=B; ELSE A=C;

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; }

 

5.4.-WITH

 

Sintaxis trans_stmt state_exp WITH { equation [equation]  }
 
  state 5 : IF a == 1 then 1

WITH {x := 1 ;

y := 1 ;}

ELSE 2 WITH {x := 0 ;

y := 1 ;}

 

6.-Comentarios

Los comentarios pueden ser definidos de dos formas:

7.-Operadores

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

Una expresión constante es interpretada por el compilador ABEL como una cadena de caracteres, no como una función a ser implementada. Por ejemplo, para el siguiente conjunto de declaraciones y ecuaciones: Declarations TMP1 = [A3..A0] == [B3..B0];

TMP2 = [A7..A4] == [B7..B4];

Equations F = TMP1 & TMP2;
el compilador directamente sustituye las declaraciones en las ecuaciones, creando F = (A7 !$ B7) & (A6 !$ B6) & (A5 !$ B5)

& (A4 !$ B4) & (A3 !$ B3) & (A2 !$ B2)

& (A1 !$ B1) & (A0 !$ B0);

En contraste, si se mueven las declaraciones de constantes a la sección de ecuaciones de la siguiente forma: Declarations TMP1,TMP2 pin 18,19 Equations TMP1 = [A3..A0] == [B3..B0];

TMP2 = [A7..A4] == [B7..B4];

F = TMP1 & TMP2;

el compilador implementa las ecuaciones como tres terminos productos, lo que producirá el siguiente resultado: TMP1 =(A3 !$ B3) & (A2 !$ B2) & (A1 !$ B1) & (A0 !$ B0);

TMP2 =(A7 !$ B7) & (A6 !$ B6) & (A5 !$ B5) & (A4 !$ B4);

F = TMP1 & TMP2;

El primer ejemplo (usando expresiones intermedias) requiere una salida con 16 terminos producto. El segundo ejemplo (usando ecuaciones) requiere tres salidas con menos de 8 terminos producto por salida. En ambos casos, el número de terminos producto requeridos para ambos métodos puede ser reducido durante la optimización.
 

8.1.-Palabra clave: Declarations
 

Sintaxis DECLARATIONS

declarations
 

Uso

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
 

module andor

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;

 

8.2.-Palabra clave: Equations
  Sintaxis EQUATIONS

element [?]:= condition ;

element [?]= condition ;

 

Uso

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
 

equations

A = B & C # A ;

[W,Y] = 3 ;

!F = B == C ;

output.D = in1 # in2 ;

 

9.-Palabras clave del lenguaje ABEL-HDL

 
 

Async_reset
Interface (submodule)
State_register
Case
Istype
Sync_reset
Declarations
Library
Test_Vectors
Device
Macro
Title
End
Module
Trace
Equations
Node
Truth_Table Keyword
Functional_block
Pin
When-Then-Else
Fuses
Property
With
Goto
State (Declaration)
XOR_Factors
If-Then-Else
State (In State_Diagram)
 
Interface (top module)
State_Diagram
 
 

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 (?).

 

@Alternate
@Carry
@Const
@Dcset
@Dcstate
@Exit
@Expr
@If
@Ifb
@Ifdef
@Ifiden
@Ifnb
@Ifndef
@Ifniden
@Include
@Irp
@Irpc
@Message
@Onset
@Page
@Radix
@Repeat
@Setsize
@Standard