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.