Pràctica 2 :: Programació de Dispositius PLD amb Llenguatge ABEL
[última actualització: 18/10/2004]
En aquesta pràctica es demana la implementació de dues funcions (una combinacional i una
altra de seqüencial) a través de la utilització del dispositiu programable del tipus GAL16V8.
Concretament, les funcions a implementar són:
-
Doble decodificador de 2 a 4, amb senyal d'habilitació independent per cadascun dels
decodificadors, i amb senyal d'entrada per al control de polaritat de les sortides (també
independent per cada un).
-
Comptador ascendent/descendent de 3 bits, amb senyal de posta a zero.
Llenguatge de programació de hardware (HDL) ABEL
ABEL (Advanced Boolean Expression Language) és un llenguatge de programació de dispositius
hardware, el qual a través d'un compil.lador transforma l'entrada d'un text (sota unes determinades
característiques i sintaxi) a un format intel.ligible per a un dispositiu PLD (és a dir,
ens programa els punts d'interconnexió). El diagrama de la Figura 1 ens mostra el procés de
disseny a seguir amb el llenguatge ABEL. La part superior correspon a l'entrada d'un disseny
independent de l'arquitectura, mentres que la part inferior mostra com realitzar tot el procés
per un tipus de dispositiu determinat.
|
Figura 1: Procés de disseny amb ABEL.
|
El llenguatge ABEL agafa descripcions lògiques d'alt nivell contingudes en fitxers font, per
convertir-los en fitxers de càrrega per al programador, segons formats i estàndards de programació
predefinits. Abans de crear el fitxer que contindrà el mapa de fusibles per al disseny lògic
amb què estiguem treballant, cal crear un fitxer font que contingui la descripció del disseny lògic:
aquest fitxer és de text (ASCII), i ha de ser escrit segons els requeriments i sintaxi de llenguatge
ABEL, amb una estructura semblant a la que reprodueix la Figura 2.
module nom del mòdul
title string
Identificació de dispositiu device Tipus de dispositiu
Declaracions de pins
equations
Equacions
end nom del mòdul
|
Figura 2: Estructura típica d'un programa en ABEL
|
L'estructura típica del llenguatge ABEL comprèn les següents característiques:
-
Sempre comença amb la paraula module, que associa el programa amb un nom (a l'exemple
de la Figura 3 el nom és Memory_Decoder, el qual ha de ser un identificador vàlid (ha de
començar per una lletra, tenir un màxim de 31 caràcters, ...)
-
La paraula clau title especifica un string per al títol (un conjunt de caràcters delimitat
per cometes senzilles), per a fer més entenedor el programa, tot i que no és obligatòria.
-
La declaració device inclou un identificador (a l'exemple de la Figura 3 aquest identificador
és MEMDEC) i un string que indica quin dispositiu concret es farà servir per a implementar
l'aplicació (a l'exemple citat, és P16V8 per indicar una GAL16V8). El compil.lador
utilitza aquesta informació quan genera els fitxers de documentació i per comprovar que
el dispositiu indicat pugui implementar realment les funcions lògiques especificades
(per nombre d'entrades/sortides, o de registres, ...) Les declaracions de pins indiquen
al programa els noms simbòlics associats amb els pins externs del dispositiu físic, i han
d'acabar sempre amb un punt i coma. Altres tipus de declaracions poden fer referència a
constants, senyals, o al seu agrupament.
-
Es poden incloure comentaris i altres declaracions sempre que es desitgi, per tal de documentar
millor el programa font. Han de començar amb unes cometes i acabar amb unes
altres cometes o final de línia.
-
Cal incloure una paraula clau que indiqui quin tipus de descripció lògica es farà: a l'exemple
de la Figura 3 és equations, que indica al programa que a continuació es defineix en forma
d'equacions lògiques (booleanes) la relació entre els senyals de sortida i els d'entrada. Cada
equació s'ha d'acabar amb un punt i coma. També es pot fer la descripció amb taules
de veritat o amb descripció d'estats.
-
El final del mòdul s'ha d'indicar obligatòriament amb la paraula end.
module Memory_Decoder
title `Memory Decoder PLD
J.Wakerly, Micro Systems Engineering'
MEMDEC device `P16V8';
@ALTERNATE
``Input pins
LARGE pin 1;
A16, A17, A18, A19 pin 2, 3, 4, 5;
A20, A21, A22, A23 pin 6, 7, 8, 9;
/RTEST pin 11;
IOSEL pin 18;
``Output pins
/ROMCS pin 12;
LOCAL pin 13;
equations
ROMCS = LARGE * A23 * A22 * A21 * A20 * A19 * A18 * A17 * A16
+ /LARGE * A19 * A18 * A17 * A16
+ RTEST;
LOCAL = LARGE * A23 * A22 * A21 * A20 * A19 * A18 * A17 * A16
+ /LARGE * A19 * A18 * A17 * A16
+ RTEST
+ IOSEL;
end Memory_Decoder
|
Figura 3: Exemple de programa en ABEL: decodificador de memòria
|
És possible també incloure una sèrie de vectors de test, de forma que a l'hora de compil.lar es
comprova si la descripció lògica realitzada verifica correctament tots els vectors de test.
A més, el llenguatge ABEL té una sèrie de directives (comencem amb el símbol @) que permeten
manipular d'una forma específica un conjunt d'equacions o símbols. A l'exemple anterior, la
directiva
@ALTERNATE indica al compil.lador que es farà servir un joc alternatiu de símbols per a
les operacions lògiques, en la forma que es mostra a la taula.
Operació lògica
|
@ALTERNATE
|
Per defecte
|
AND
|
*
|
&
|
OR
|
+
|
#
|
NOT
|
/
|
!
|
XOR
|
:+:
|
$
|
XNOR
|
:*:
|
!$
|
|
Taula 1: Equivalència entre símbols per a les operacions lògiques.
|
Les extensions de punt (
dot extensions) permeten referir específicament nodes i senyals interns
com associats a un senyal d'entrada. Es tracta de senyals com ara el rellotge, el preset, el clear,
entrades de registres, realimentacions, habilitacions de sortida, ...
Una altra de les capacitats dels llenguatges de programació de dispositius hardware, i per extensió
de l'ABEL, és la capacitat de treballar amb conjunts de senyals d'una forma idèntica (com si
fossin un bus): és el concepte de set. Per a treballar amb aquests conjunts de senyals, a més
dels operadors lògics d'assignació i aritmètics, s'introdueixen els operadors relacionals.
Pel que fa a l'estructura d'una aplicació seqüencial amb ABEL, cal tenir en compte algunes
consideracions:
-
Cal declarar com a 'reg' els pins associats a les sortides dels flip-flops.
-
La declaració de rellotge es fa a través d'una extensió de punt, darrera la paraula clau
equations, en la forma:
[q1,...,qn].clk = rellotge;
|
on qi són els senyals de sortida dels flip-flops que vénen afectats
pel senyal de rellotge, i rellotge és el nom del senyal d'entrada que es fa servir per a sincronitzar
les transicions.
-
El flux de la màquina d'estats es pot descriure de tres formes diferents:
-
if-then-else. S'utilitza quan es vol controlar la transició d'un estat a l'altre en
funció d'una determinada condició:
if (condició) then
A
else
B
|
i aniríem a l'estat A quan condició s'acomplís;
en cas contrari, el sistema aniria a l'estat B.
-
case-endcase. S'utilitza quan es vol expressar la transició a partir d'un estat segons
múltiples condicions:
case
condició 1: estat 1;
condició 2: estat 2;
.
.
.
condició N: estat N;
endcase;
|
-
goto. S'accedeix incondicionalment a un estat, a partir d'un altre:
-
La manera més habitual de donar la descripció lògica d'un sistema seqüencial és a través
d'un diagrama d'estats (tot i que també és possible fer-ho amb les taules de veritat). Es
comença amb la paraula clau state_diagram, i cada estat s'especica amb la paraula
state seguida del nom que s'assigni a aquell estat (una etiqueta) o del valor que prenguin
els biestables que defineixen l'estat ([0,1]).
Desenvolupament de la pràctica
Es tracta de realitzar la programació d'un dispositiu GAL16V8 a través del llenguatge ABEL-HDL,
generant el fitxer .JED corresponent, i a través del programador universal, transferir la
programació del dispositiu per a què implementi el disseny. L'estructura i patillatge d'aquest
dispositiu és la que es veu a la figura 4, i es correspon exactament amb una estructura PAL amb
un registre a la sortida, que aquí rep el nom de
MacroCell. En aquest cas concret, s'utilitza un
dispositiu d'AMD, de referència
PALCE16V8Q-25, sobre el qual és possible trobar informació addicional
accedint a les pàgines tècniques que el fabricant posa a disposició del públic (genèricament
www.amd.com o bé concretament
www.vantis.com/lit/docs/datasheets/pal_gal/p16v8.pdf
per accedir directament a aquest dispositiu).
|
Figura 4: Estructura del dispositiu GAL16V8, i detall de la macrocel.la lògica de sortida.
|
El llenguatge de programació de PLDs ABEL 4.30 disposa d'un entorn integrat que ens facilita
la tasca de disseny, compil.lació i generació de documents relatius a la implementació lògica que
es vol dur a terme. Aquest entorn estè composat per un conjunt de menús desplegables que
donen accés a les diferents utilitats (edició, compil.lació, llistats, generació de documentació,
simulació lògica, ajudes, etc). S'accedeix a l'entorn integrat de treball amb la comanda
abel4
[nom_de_fitxer], on
nom_de_fitxer especifica l'arxiu ASCII que volem editar per a implementar
el disseny lògic amb llenguatge ABEL. Si no s'especifica cap nom, l'entorn de treball s'inicia
igualment, però sense accedir a cap disseny específic.
La metodologia de treball per a la realització d'aquesta pràctica es pot resumir en els següents
apartats:
-
Donar un nom al nostre fitxer de text d'entrada que ens recordi de quin disseny es tracta
(no cal posar-hi extensió, ja que el mateix entorn hi afegeix l'entensió .ABL) i guardar-lo
al directori de treball, per tal de tenir-lo accessible sempre que es vulgui.
-
Un cop escrit en forma de text (tal i com marca la sintaxi del llenguatge ABEL-HDL),
compil.lar-lo amb l'opció Compile del menú. Si hi ha algun error sintàctic (compte, que
si es tracta d'un error lògic el compil.lador no se n'adonarà!) apareix en aquest moment, i
es pot anar a veure amb més detall al menú View (Errors), on ens apareix de quin tipus
d'error es tracta i a quina línia de programa s'ha produït.
-
Si ja no hi ha errors sintàctitcs, ja es pot generar el fitxer .JED que ens ha de servir per
a programar el dispositiu. Aquest fitxer s'obtè activant l'opció FPGA/PLDMap del menú
PartMap. Es pot veure el contingut de l'arxiu amb format JEDEC a través de l'opció
JEDEC/PROM Fuse File del menú View.
-
És possible consultar la relació de tots els dispositius disponibles per a gravar mitjançant
l'opció Devices del menú Help,
amb una descripció del seu patillatge.
-
L'arxiu ASCII (i per tant fàcilment imprimible) amb l'extensió .DOC ens proporciona
una completa informació sobre la configuració final del dispositiu, així com dels recursos
utilitzats per a implementar-hi el disseny.
Entorn programador universal
Quan disposem de l'arxiu .JED (recordem que portarà el nom que hàgiu donat en el vostre
programa a l'identificador de dispositiu de la paraula clau
device), cal transferir el mapa de
fusibles al dispositiu programable. Per això, accedirem al gravador universal de dispositius, i
actuarem segons el següent esquema:
-
Teclejarem l'ordre EXPRO des del subdirectori
C:\EXPRO, de manera que ens introduïm al
menú del gravador.
-
Cal seleccionar correctament, a través de les diferents opcions que ens ofereix el programa,
quin dispositiu volem gravar (recordeu que en aquest cas, es tracta d'un dispositiu
programable del fabricant AMD que respon a la descripció PALCE16V8Q-25.
-
A continuació, cal carregar en memòria l'arxiu amb extensió .JED generat anteriorment,
el qual indica l'estat en què quedarà cada un dels elements programables del dispositiu
(connectat o no).
-
Finalment, i quan el dispositiu estigui correctament situal al sòcol del gravador, realitzarem
el procés de gravació. Cal assegurar-se, abans de gravar, que el dispositiu programable no
conté cap altre disseny, ja que sinó caldrà abans borrar-lo.
Comprovació del disseny
Per a realitzar la comprovació del disseny implementat (és a dir, que el circuit especificat a
l'enunciat s'hagi implementat de forma correcta i que realitza la funció per a la qual ha estat
dissenyat), utilitzarem la placa de proves dissenyada a aquest efecte. A la figura 5 es mostra
quin és el diagrama esquemàtic d'aquesta placa, mentres que la taula 2 indica la correspondència
entre els pins de la GAL i els interruptors SWi per a les entrades digitals, així com entre els pins
de la GAL i els leds i entrades per als dos decodificadors 7-segments, per visualitzar les sortides.
Entrades
|
Switch
|
Pin GAL
|
SW1
|
2
|
SW2
|
3
|
SW3
|
4
|
SW4
|
5
|
SW5
|
6
|
SW6
|
7
|
SW7
|
8
|
SW8
|
9
|
|
Sortides
|
Pin GAL
|
Led
|
Ent.Decodificador
|
12
|
8
|
A1
|
13
|
7
|
B1
|
14
|
6
|
C1
|
15
|
5
|
D1
|
16
|
4
|
A2
|
17
|
3
|
B2
|
18
|
2
|
C2
|
19
|
1
|
D2
|
|
Taula 2: Correspondencia entre els pins de la GAL i les entrades i sortides digitals de la placa de proves.
|
|
Figura 5: Diagrama esquemàtic de la placa de proves.
|
Qüestionari Pràctica 2A
És recomanable omplir-lo abans d'iniciar la primera sessió d'aquesta pràctica.
-
Descriu quines serien les equacions lògiques (en sintaxi ABEL) per tal que les sortides del
decodificador siguin actives a nivell alt.
-
Posa les mateixes equacions per tal que les sortides siguin actives a nivell baix.
-
Indica quina assignació de pins realitzes per als senyals necessaris en la implementació del
doble decodificador, tenint en compte que les habilitacions han de ser actives a nivell baix.
-
Com descriuries aquest mateix disseny utilitzant una taula de veritat, en lloc d'equacions
lògiques?.
-
Afegeix una entrada addicional per cadascun dels decodificadors, de manera que es pugui
controlar la polaritat de les sortides. Utilitza qualsevol de les dues formes anteriors
(equacions lògiques o taula de veritat) per realitzar-ne la seva descripciò lògica.
-
Indica quins vectors de test s'han d'incloure en cadascun dels anteriors muntatges, per tal
de verificar-ne el funcionament.
Qüestionari Pràctica 2B
És recomanable omplir-lo abans d'iniciar la primera sessió d'aquesta pràctica.
-
Dibuixa el diagrama d'estats que realitza el comptador ascendent/descendet de 3 bits, amb
senyal de posta a zero.
-
Descriu aquest mateix diagrama d'estats en sintaxi ABEL a nivell baix.
-
Implementa aquest mateix comptador utilitzant equacions lògiques en lloc del diagrama
d'estats.
Inclou en totes les implementacions descrites els vectors de test necessaris per a la verificació
del disseny.