30

ABEL-HDL I Présentation : ABEL-HDL est un langage de description de la structure à intégrer dans un PLD (HDL = Hardware Description Language) précurseur

Embed Size (px)

Citation preview

Page 1: ABEL-HDL I Présentation : ABEL-HDL est un langage de description de la structure à intégrer dans un PLD (HDL = Hardware Description Language) précurseur
Page 2: ABEL-HDL I Présentation : ABEL-HDL est un langage de description de la structure à intégrer dans un PLD (HDL = Hardware Description Language) précurseur

ABEL-HDLABEL-HDL

Page 3: ABEL-HDL I Présentation : ABEL-HDL est un langage de description de la structure à intégrer dans un PLD (HDL = Hardware Description Language) précurseur

I PrésentationI Présentation : :ABEL-HDL est un langage de description ABEL-HDL est un langage de description

de de la structure à intégrer dans un PLD (la structure à intégrer dans un PLD (HDL = HDL = Hardware Description LanguageHardware Description Language) )

précurseurprécurseurdes langages VHDL et VERILOG.des langages VHDL et VERILOG.Un fichier écrit en ABEL constitue la sourceUn fichier écrit en ABEL constitue la sourced'outils qui génèrent les fichiers de d'outils qui génèrent les fichiers de programmationprogrammation (fichier JEDEC) (fichier JEDEC) des PLDdes PLD..

Page 4: ABEL-HDL I Présentation : ABEL-HDL est un langage de description de la structure à intégrer dans un PLD (HDL = Hardware Description Language) précurseur

II Organisation d'un fichier ABEL :II Organisation d'un fichier ABEL :

L'exemple ci-dessous montre L'exemple ci-dessous montre

l'organisation d'un fichier ABEL:l'organisation d'un fichier ABEL:

indique sous quel nom seront créés les fichiers programmation du PAL

module pap

1

Page 5: ABEL-HDL I Présentation : ABEL-HDL est un langage de description de la structure à intégrer dans un PLD (HDL = Hardware Description Language) précurseur

► titre du fichier (facultatif)titre du fichier (facultatif)title 'pas a pas'

►déclaration du brochage retenu pour le PAL définition d'un vecteur (facultatif) définition du type de sortie (ici séquentiel)

h,oe,r,m pin 1,13,2,3;q1,q2,q3,q4 pin 23,22,21,20;sortie=[q1,q2,q3,q4];sortie istype 'buffer,reg_d';

2

3

Page 6: ABEL-HDL I Présentation : ABEL-HDL est un langage de description de la structure à intégrer dans un PLD (HDL = Hardware Description Language) précurseur

equationsequations sortie.clk = h; sortie.clk = h; sortie.oe = oe; sortie.oe = oe; sortie.ar = r;sortie.ar = r;

44

►définition du fonctionnement des registres de sortie

q1.d = !q2 & !q4 & !m # q3 # !q4 & m;

q3.d = q & !q4 # !q1 & q3 & !m # q2 & m;

q2.d = q4 & !q1 # q2 & !q3 & !m # q4 & m;

q4.d = q1 & !q3 # !q3 & !q2 & !m #q1 & m

55

►définitions des équations

Page 7: ABEL-HDL I Présentation : ABEL-HDL est un langage de description de la structure à intégrer dans un PLD (HDL = Hardware Description Language) précurseur

endend

66

►fin du fichier

Page 8: ABEL-HDL I Présentation : ABEL-HDL est un langage de description de la structure à intégrer dans un PLD (HDL = Hardware Description Language) précurseur

ExempleExemple Demi-addionneurDemi-addionneur

CARRY

A

B

SUMHalf Adder

module Addition;

title 'addition 2 bits' // optionnel, information complémentaire Addition device 'P16H8'; // optionnel, permet de spécifier le type de matériel cible : PAL16P8" input pins ‘’A, B pin 3, 5; // la spécification du numéro de broches est optionnelle

" output pins ‘’SUM, Carry_out pin 15, 18 istype 'com'; // le compilateur fait la différence entre broches d’entrées et de sortie par le terme istype

equations SUM = (A & !B) # (!A & B) ; Carry_out = A & B;

 end  ; Addition

// génération des sorties en fonction des entrées

Page 9: ABEL-HDL I Présentation : ABEL-HDL est un langage de description de la structure à intégrer dans un PLD (HDL = Hardware Description Language) précurseur

Éléments syntaxiquesÉléments syntaxiques

►Module :Module : en règle générale le nom du en règle générale le nom du module a le nom du fichier source module a le nom du fichier source *.abl (pour certains compilateurs c’est *.abl (pour certains compilateurs c’est même obligatoire). Il peut y avoir même obligatoire). Il peut y avoir plusieurs modules dans une source.plusieurs modules dans une source.

►Title :Title : permet de préciser la fonction permet de préciser la fonction du module (optionnel).du module (optionnel).

Page 10: ABEL-HDL I Présentation : ABEL-HDL est un langage de description de la structure à intégrer dans un PLD (HDL = Hardware Description Language) précurseur

Éléments syntaxiquesÉléments syntaxiques

► Device :Device : optionnel. Cela permet d’associer au optionnel. Cela permet d’associer au module un circuit associé (le module sera module un circuit associé (le module sera implémenter dans le circuit spécifié). Cependant implémenter dans le circuit spécifié). Cependant pour garder le module indépendant du circuit (pour pour garder le module indépendant du circuit (pour pouvoir réutiliser le module dans un autre circuit) il pouvoir réutiliser le module dans un autre circuit) il est préférable de ne pas utiliser cette directive. Il est préférable de ne pas utiliser cette directive. Il sera possible au niveau de la compilation de sera possible au niveau de la compilation de préciser le PLD cible.préciser le PLD cible.

► Exemple :Exemple :► Mon_decod device 'P16V8'; // cible PAL16V8Mon_decod device 'P16V8'; // cible PAL16V8

Page 11: ABEL-HDL I Présentation : ABEL-HDL est un langage de description de la structure à intégrer dans un PLD (HDL = Hardware Description Language) précurseur

déclarationdéclarationss

Pin :Pin : permet de préciser le nom des entrées et permet de préciser le nom des entrées et des sortiesdes sorties

  [!]pin_id pin [pin#] [istype 'attributes'] ;[!]pin_id pin [pin#] [istype 'attributes'] ;  On peut spécifier plusieurs noms sur une seule On peut spécifier plusieurs noms sur une seule

ligne :ligne :

[!]pin_id , pin_id, pin_id pin [pin#, [pin#, [pin#]]] [!]pin_id , pin_id, pin_id pin [pin#, [pin#, [pin#]]] [istype 'attributes']; [istype 'attributes'];

  

Page 12: ABEL-HDL I Présentation : ABEL-HDL est un langage de description de la structure à intégrer dans un PLD (HDL = Hardware Description Language) précurseur

Exemple :Exemple :

IN1, IN2, A1 pin 2, 3, 4;IN1, IN2, A1 pin 2, 3, 4; // entrées avec numéro de broche // entrées avec numéro de broche spécifiéspécifié

OUT1 pin 9 istype 'reg';OUT1 pin 9 istype 'reg'; // sortie de bascule active à l’état haut // sortie de bascule active à l’état haut

ENABLE pin;ENABLE pin; // entrées dont le numéro de broche n’est // entrées dont le numéro de broche n’est pas spécifier (à faire au niveau du compilateur)pas spécifier (à faire au niveau du compilateur)

!Chip_select pin 12 istype 'com';!Chip_select pin 12 istype 'com'; // sortie combinatoire active à // sortie combinatoire active à l’état bas.l’état bas.

!S0..!S6 pin istype 'com';!S0..!S6 pin istype 'com'; // sorties combinatoires actives à l’état // sorties combinatoires actives à l’état basbas

Page 13: ABEL-HDL I Présentation : ABEL-HDL est un langage de description de la structure à intégrer dans un PLD (HDL = Hardware Description Language) précurseur

Autres Autres déclarationsdéclarations : :

Il est possible de préciser des valeurs deIl est possible de préciser des valeurs de

constantes , de macros ou d’ensembles :constantes , de macros ou d’ensembles :

►A = 21; A = 21; ►C=2*7; C=2*7; ►ADDR = [1,0,11]; ADDR = [1,0,11]; ►LARGE = B & C; LARGE = B & C; ►D = [D3, D2, D1, D0]; D = [D3, D2, D1, D0];

►D D = [= [D3D3....D0D0]];;

Page 14: ABEL-HDL I Présentation : ABEL-HDL est un langage de description de la structure à intégrer dans un PLD (HDL = Hardware Description Language) précurseur

Les Les nombresnombres

►La représentation des nombres peut La représentation des nombres peut être binaire, octale, décimale ou être binaire, octale, décimale ou hexadécimalehexadécimale. . Si rien n’est précisSi rien n’est préciséé, le , le compilateur adopte la base décimalecompilateur adopte la base décimale..

Bases Symboles Exemples Binaire (base 2) b b1101 Octal (base 8) o o15 Hexadécimal (base 16) h hD Décimal (base 10) d ou rien 13

Page 15: ABEL-HDL I Présentation : ABEL-HDL est un langage de description de la structure à intégrer dans un PLD (HDL = Hardware Description Language) précurseur

Les Les opérateursopérateurs  

► Les opérateurs logiques Les opérateurs logiques ::

Opérateurs Descriptions Exemples ! Complément à 1 b0010 = ! b1101 & ET (AND) 10=15&10 # OU (OR) 12=8#4 $ OU exclusif (XOR) 15=10$5 !$ NON OU exclusif 0=10 !$5

► Les opérateurs arithmétiques Les opérateurs arithmétiques ::

Opérateurs Description - Négation ou soustraction + Addition * Multiplication / Division % Reste de la division << A<<B Décalage à gauche (de B bits) >> A>>B Décalage à droite (de B bits)

Page 16: ABEL-HDL I Présentation : ABEL-HDL est un langage de description de la structure à intégrer dans un PLD (HDL = Hardware Description Language) précurseur

Les opérateurs Les opérateurs 

Les opérateurs relationnels Les opérateurs relationnels :: Les opérateurs relationnels donnent des résultats vrais Les opérateurs relationnels donnent des résultats vrais ((11)) ou faux ou faux ((00).).

Opérateurs Descriptions Exemples == Egalité A==B or 3==5 (false) != Différent A!=B or 3 != 5 (true) < Inférieur A<B or 3 < 5 (true) <= Inférieur et égal A<=B or 3 <= 5 (true) > Supérieur A>B or -1 > 5 (true) >= Supérieur et égal A>=B or !0 >= 5 (true)

Page 17: ABEL-HDL I Présentation : ABEL-HDL est un langage de description de la structure à intégrer dans un PLD (HDL = Hardware Description Language) précurseur

Les opérateursLes opérateurs

Les opérateurs d’assignement Les opérateurs d’assignement :: 2 types 2 types : : combinatoire et séquentielcombinatoire et séquentiel.. == pour les opérations de logique combinatoire, dans ce cas pour les opérations de logique combinatoire, dans ce cas

le signal prend la valeur donnée sans retard.le signal prend la valeur donnée sans retard. :=:= pour les opérations de logique séquentielle, dans ce cas pour les opérations de logique séquentielle, dans ce cas

le signal prendra la valeur après le prochain front d’horloge.le signal prendra la valeur après le prochain front d’horloge.

► Les niveaux de prLes niveaux de précédenceécédence  ::

Niveau de priorité Description 1 - ! 2 & << >> * / % 3 + - # $ !$ 4 == != < <= >=

Page 18: ABEL-HDL I Présentation : ABEL-HDL est un langage de description de la structure à intégrer dans un PLD (HDL = Hardware Description Language) précurseur

Les constantesLes constantes

► surtout utilisées dans les vecteurs de surtout utilisées dans les vecteurs de tests tests

Constantes Description .C. Impulsion d’horloge bas-haut-bas .K. Impulsion d’horloge haut-bas-haut .D. Front descendant d’un signal d’horloge .U. Front montant d’un signal d’horloge .X. Indifférent .Z. sortie haute impédance

Page 19: ABEL-HDL I Présentation : ABEL-HDL est un langage de description de la structure à intégrer dans un PLD (HDL = Hardware Description Language) précurseur

Les ensembles Les ensembles 

Un ensemble est une collection de signaux ou de constantes qui constitue un Un ensemble est une collection de signaux ou de constantes qui constitue un vecteurvecteur..

Exemple 1: Exemple 1: Signal = [D2,D1,D0]; "déclaration de l’ensemble signal

Signal = [1,0,1] & [0,1,1]; " résultat de signal égal à [0,0,1]" résultat de signal égal à [0,0,1]Exemple 2:Exemple 2: [A,B] = C & D // Ce qui est équivalent à :

A = C & D; B = C & D;Exemple 3:Exemple 3:

[[A1,B1] = [D1,D2] & [C3,C2]; // Ce qui est équivalent à :

[A1,B1] = [D1 & C3, D2 & C2];

Exemple 4:X & [A,B,C]; // Ce qui est équivalent à :

[X & A,X & B,X & C]; 

2 & [A,B,C]; //le nombre "2" est d’abord remplace par son équivalent binaire (0010)On obtient alors :

[0 & A, 1 & B, 0 & C]; & B, 0 & C];

Page 20: ABEL-HDL I Présentation : ABEL-HDL est un langage de description de la structure à intégrer dans un PLD (HDL = Hardware Description Language) précurseur

Exemple 5: Génération du CS pour la sélection des boîtiers de Génération du CS pour la sélection des boîtiers de mémoiremémoire

Chip_Sel = !A7 & A6 & A5Chip_Sel = !A7 & A6 & A5; //Cas classique; //Cas classique

Addr = [A7,A6,A5];Addr = [A7,A6,A5]; déclaration d’un ensemble Addr" même déclaration d’un ensemble Addr" même résultat résultat

qu’en qu’en   Chip_Sel = Addr == [0,1,1];Chip_Sel = Addr == [0,1,1];    

Chip_Sel = Addr == 3;Chip_Sel = Addr == 3; " décimal 3 est égal à 011.(même " décimal 3 est égal à 011.(même résultat qu’en résultat qu’en

)Ce principe est très utile pour )Ce principe est très utile pour des variablesdes variables

de 16 bits ou plus.de 16 bits ou plus.

Exemple 6 : Génération du CS pour la sélection des boîtiers de Génération du CS pour la sélection des boîtiers de mémoiremémoire

  Addr = [a15..a0];Addr = [a15..a0]; "déclaration d’un ensemble Addr 16 bits"déclaration d’un ensemble Addr 16 bitsX = .X.;X = .X.; "simplification de la notation de .X."simplification de la notation de .X.

Chip_Sel = Addr == [1,0,1,X,X,X,X,X,X,X,X,X,X,X,X];Chip_Sel = Addr == [1,0,1,X,X,X,X,X,X,X,X,X,X,X,X];   Chip_Sel = (Addr >= ^HA000) & (Addr <= ^HBFFF);Chip_Sel = (Addr >= ^HA000) & (Addr <= ^HBFFF);

Page 21: ABEL-HDL I Présentation : ABEL-HDL est un langage de description de la structure à intégrer dans un PLD (HDL = Hardware Description Language) précurseur

V Fichier ABEL pour un PAL combinatoire :

Pour un fonctionnement combinatoire les sorties ne dépendent que des entrées. Les sorties doivent être déclarées de type combinatoire par la directive. par exemple Q0 istype 'com' .

La directive istype affecte uniquement les sorties; les autres broches sont automatiquement considérées comme des entrées. Certains PAL (ex P16L8) ont des sorties actives à l'état 0, c'est à dire que la sortie se fait par l'intermédiaire d'un inverseur; il faudra alors le préciser dans la directive istype de la façon suivante istype 'invert,com'.

Si la sortie est active à l'état 1 l'argument est buffer par ex: Q0 istype 'buffer,com'.

Si la sortie peut être indifféremment de type inversé ou non (cas du 16V8 en mode combinatoire) il est préférable de n'utiliser aucun argument (buffer ou invert); c'est le compilateur ABEL qui choisira le type permettant une optimisation de la structure interne.

istype :

Page 22: ABEL-HDL I Présentation : ABEL-HDL est un langage de description de la structure à intégrer dans un PLD (HDL = Hardware Description Language) précurseur

Les sorties peuvent être définies par des équations booléennes des entréen utilisant les opérateurs suivants:

= affectation (on affecte au terme de gauche l'équation définie à droite! complémentation logique& ET logique# OU logique$ OU exclusif!$ N OU exclusif

L'exemple ci-dessous est le fichier ABEL permettant de réaliser un décodage d'adresse pour un boîtier ROM placé de $2000 à $3000 et un boîtier RAM placé de $3000 à $4000 les sélection de boîtier étant actives à l'état 1.

V.1 Équations:

Page 23: ABEL-HDL I Présentation : ABEL-HDL est un langage de description de la structure à intégrer dans un PLD (HDL = Hardware Description Language) précurseur

module decodadr

title 'décodage d'adresses‘

A12,A13,A14,A15 pin 2,3,4,5; csrom,csram pin 13,12 istype 'com';

equationscsrom=!A15&!A14&A13&!A12; csram=!A15&!A14&A13&A12;

end

Il est aussi possible de décrire le fonctionnement sous forme comportementale. Ainsi l'équation Q=X & Y peut s'écrire

when X= =1 & Y= =1 then Q =1; else Q = 0; les équations comportementales se prêtent mieux à des fonctionnements séquentiels .

Page 24: ABEL-HDL I Présentation : ABEL-HDL est un langage de description de la structure à intégrer dans un PLD (HDL = Hardware Description Language) précurseur

Pour un montage comportant un grand nombre de sorties il peut être préférable d'utiliser des tables de vérité plutôt que des équations ce qui permet de s'affranchir du travail fastidieux de recherche des équations avec les outils traditionnels tels que les tableaux de Karnaugh.

L'exemple suivant présente un fichier ABEL permettant de réaliser un décodeur 3 vers 8 à sorties actives à l'état 1:

V2 Tables de vérité:

module decodtitle 'décodeur 3 vers 8'a0,a1,a3 pin 2,3,4;q0,q1,q2,q3,q4,q5,q6,q7 pin 19,18,17,16,15,14,13,12 istype 'com';entrees=[ a0,a1,a3];on,off =1,0;truth_table (entrees-> [ q0 , q1 , q2 , q3 , q4 , q5 , q6 , q7 ])0 ->[ on , off , off , off , off , off , off , off ];1 ->[ off , on , off , off , off , off , off , off ];2 ->[ off , off , on , off , off , off , off , off ];3 ->[ off , off , off , on , off , off , off , off ];4 ->[ on , off , off , off , on , off , off , off ];5 ->[ off , off , off , off , off , on , off , off ];6 ->[ off , off , off , off , off , off , on , off ];7 ->[ off , off , off , off , off , off , off , on ];End

Page 25: ABEL-HDL I Présentation : ABEL-HDL est un langage de description de la structure à intégrer dans un PLD (HDL = Hardware Description Language) précurseur

VI Fichier ABEL pour un PAL séquentiel:Le fichier ABEL doit contenir les indications concernant la nature de lasortie (reg_d pour des sorties sur bascules D ou reg_jk pour des sorties sur bascules JK) et les entrées réalisant l'horloge des registres (les PAL sont majoritairement synchrones) la validation des sorties et la mise à 0 asynchrone (si elles existent). Cela est fait à l'aide des extensions qui doivent être définies dans la rubrique équation .VI.1 Les extensions:Les extensions caractérisent le fonctionnement des étages de sorties.AR Reset asynchroneCLK Horloge des registres de sortieD entrée D d'une bascule DJ entrée J d'une bascule JKK entrée K d'une bascule JKOE Sortie trois états

L'exemple ci-dessous montre un extrait de fichier ABEL pour lequel :

- les sorties sont regroupées dans un vecteur appelé sortie .- les sorties se font sur les sorties directes (ou non inversées) des bascules D .- l'horloge des bascules est l'entrée appelée h .- la validation des sorties est l'entrée appelée oe .- la mise à 0 asynchrone est l'entrée appelé r .

Page 26: ABEL-HDL I Présentation : ABEL-HDL est un langage de description de la structure à intégrer dans un PLD (HDL = Hardware Description Language) précurseur

VI.2 Description par des équations :On écrit les équations des entrées des bascules (D J K AR OE) en utilisant les extensions et les opérateurs déjà définis L'exemple du V1 montre l'écriture des équations d'un PAL séquentiel. Cette solution convient parfaitement lorsque la mise en équation est simple et rapide pour des structures complexes il est préférable de travailler avec des machines d'états.VI.3 Machines d'état:Une machine d'état est une représentation symbolique de l'enchaînement séquentiel des états de sortie d'un système synchrone; ainsi la machine d'état correspondant à un compteur Johnson 4 bits serait la suivante : état A état B état C état D

0001 0010 0100 1000

Page 27: ABEL-HDL I Présentation : ABEL-HDL est un langage de description de la structure à intégrer dans un PLD (HDL = Hardware Description Language) précurseur

Le fichier ABEL serait le suivant:

module johnson.

title 'compteur Johnson 4 bits synchrone‘

h,en pin 2,3;q3,q2,q1,q0 pin 19,18,17,16 istype 'reg_d,invert';out=[q3,q2,q1,q0]; A=1; B=2; C=4; D=8;

equations out.clk=h; out.oe=en;state_diagram out state A:goto b; state B: goto C; state C:goto D; state D: goto A;

EndDans l'exemple précédent le passage d'un état à un autre est inconditionnel. Un passage conditionnel utilise l'expression :if condition then nom_étatelse nom_étatexemple : state X:if en then Y;else A;lorsque la machine d'état est en X si l'entrée en est à 1 alors on passe à l'état Y sinon on passe en A.

Page 28: ABEL-HDL I Présentation : ABEL-HDL est un langage de description de la structure à intégrer dans un PLD (HDL = Hardware Description Language) précurseur

VI 4 Exemples :Les exemples ci-dessous ne font apparaître que la partie "utile" du fichier ABEL; ne figurent pas l'en-tête et les déclarations du brochage et du type de sortie.

VI.21 Comparateur 4 bits :2 mots d'entrée X et Y de 4 bits chacun et 3 sorties Sup (X supérieur à Y), Inf (X inférieur à Y) et Egal (X=Y).

X=[X3..X0];Y=[Y3..Y0]; equations Sup=(X>Y); Inf=(X<Y); Egal=(X==Y);

Page 29: ABEL-HDL I Présentation : ABEL-HDL est un langage de description de la structure à intégrer dans un PLD (HDL = Hardware Description Language) précurseur

VI41 Compteur 4 bits avec mise à 0 asynchrone : :4 sorties regroupées dans un vecteur appelé out; r est l'entrée de mise à 0 4 sorties regroupées dans un vecteur appelé out; r est l'entrée de mise à 0 asynchrone active à 1 et H l'entrée d'horloge.asynchrone active à 1 et H l'entrée d'horloge.

out=[q3..q0]; equations out.clk = H;out=[q3..q0]; equations out.clk = H;when (r==1) then out : = 0; else out := out+1;when (r==1) then out : = 0; else out := out+1;

VI42 Verrou type D (D latch) :D est l'entrée de donnée et LE l'entrée de verrouillage active à 1.D est l'entrée de donnée et LE l'entrée de verrouillage active à 1.equationsequationsWhen (LE==0) then Q :=D; else Q :=Q;When (LE==0) then Q :=D; else Q :=Q;

VI43 Bascule D avec mise à 0 asynchrone :D est l'entrée de donnée, H l'entrée d'horloge et R l'entrée de mise à 0active à1.D est l'entrée de donnée, H l'entrée d'horloge et R l'entrée de mise à 0active à1. equations Q.clk = H; Q.ar = R;equations Q.clk = H; Q.ar = R; Q := D;Q := D;

Page 30: ABEL-HDL I Présentation : ABEL-HDL est un langage de description de la structure à intégrer dans un PLD (HDL = Hardware Description Language) précurseur