Sunteți pe pagina 1din 31

Circuite integrate numerice Limbajul ABEL si aplicatii ale circuitelor CPLD INTRODUCERE IN LIMBAJUL ABEL-HDL 1.

. Limbaje de descriere hardware (HDL-Hardware Description language) Metodele tradiionale de proiectare a unui sistem numeric (circuit logic) sunt cele bazate pe ecuaiile booleene sau pe reprezentarea schematic. Orice circuit logic este alcatuit pan la urm dintr-un numr oarecare de pori si/sau circuite bistabile, care sunt blocurile funcionale de baz. Proiectarea se fcea in mod tradiional pe baza ecuaiilor boolene. Pentru a optimiza aceast metod s-au dezvoltat tehnici cum ar fi minimizarea ecuaiilor, care permite utilizarea mai eficient a porilor si circuitelor bistabile. Metoda ecuaiilor boolene presupune scrierea practic a unei ecuatii, pentru fiecare circuit bistabil si pentru fiecare bloc de pori. Pentru un sistem secvenial numrul de ecuaii este cel putin egal cu cel al circuitelor bistabile(registrelor). Dac sistemul nostru are sute de circuite bistabile vom avea si sute de ecuaii. Astfel, desi teoretic orice sistem numeric poate fi descris pe baza ecuaiilor boolene, aceasta descriere(ca metod) este total nepractic daca avem zeci, sute sau mii de ecuaii. Metodele bazate pe reprezentarea schematic (Schematics) sunt metode care folosesc o reprezentare grafic a sistemului numeric si care realizeaz in acelasi timp o extindere a metodei ecuaiilor boolene, prin utilizarea si a altor blocuri funcionale, mai complexe dect porile si circuitele bistabile. Ele prezint avantajul ca permit o proiectare ierarhic si pun in evidena mai bine relaiile care exist intre diversele blocuri funcionale. Muli ani de zile aceste metode au fost considerate optime pentru reprezentarea unui sistem numeric. Odat cu cresterea complexitii sistemelor reprezentate si ele au devenit nepractice. Se mai utilizeaz pentru sisteme de complexitate mic sau medie. Marele dezavantaj al metodelor tradiionale de proiectare este c un sistem trebuie specificat ca o reea de elemente interconectate. In realitate ins un sistem numeric este specificat prin comportarea (behaviour) sa in anumite circumstane specificate. Proiectantul trebuie s ajung de la aceasta form de specificare la un set de ecuaii sau o reprezentare grafica. Acest pas important poate fi in intregime eliminat prin utilizarea unui limbaj de descriere hardware(HDL). Un alt dezavantaj al metodelor tradiionale este modul in care este descris un sistem complex. Este greu s lucrm cu sute de ecuaii, dar este inc posibil. Un sistem ins, care ar fi descris prin mii de ecuaii, este practic inabordabil prin aceast metod. Mai mult, si o reprezentare schematic in care apar sute sau mii de blocuri funcionale devine de neineles. O descriere din punct de vedere al comportrii sistemului poate fi insa automat convertit intr-un cod surs HDL, cod care este apoi implementat prin intermediul unor programe de sintez. Limbajul ABEL (Advanced Boolean Equation Language) este un limbaj evoluat care permite o descriere din punct de vedere comportamental a unui circuit logic. ABEL este de asemenea un limbaj din categoria limbajelor de descriere hardware (HDLHardware Description Language), dezvoltat la origine de firma Data I/O pentru programarea dispozitivelor logice programabile (PLD-Programmable Logic Devices). Exist i alte limbaje similare, foarte utilizate, cum ar fi VHDL sau Verilog. Comparativ cu acestea ABEL este mult mai simplu, dar VHDL sau Verilog sunt mai adecvate pentru descrierea unor sisteme complexe. Prin raportare la alte limbaje de programare cunoscute ABEL este un limbaj care sar situa intre limbajul de asamblare si C, VHDL-ul este similar limabajului ADA, iar Verilogul este similar limabjului C. ABEL este un limbaj HDL care poate fi utilizat pentru a descrie comportarea unui sistem sub mai multe forme, cum ar fi: ecuaii logice, tabele de adevr sau diagrame de stare, utiliznd instruciuni similare cu cele din limbajul C. Un compilator ABEL permite i simularea funcional a sistemului folosind vectorii de test, precum i implementarea sa

Circuite integrate numerice Limbajul ABEL si aplicatii ale circuitelor CPLD folosind un dispozitiv PLD incepand de la cele mai simple (PAL sau GAL) si terminand cu cele mai complexe (CPLD-Complex Programmable Logic Devices sau FPGA- Field programmable Gate Array). 2. Structura unui fiier surs ABEL Un fiier surs ABEL const din urmtoarele elemente: Antet(Header): Declaraii: Descrieri logice: [Vectori de test: End incluznd Module, [ Options i Title ] Pin, Constant, Node, Sets, States, Library. Equations, Truth-table sau State_diagram Test_vectors ]

Cuvintele cheie ale limbajului (recunoscute de ABEL drept comenzi, directive, etc.) nu sunt dependente de tipul de liter folosit (mare sau mic) pe cnd identificatorii definii de utilizator depind de tipul de liter!!. De exemplu MODULE este acelai lucru cu module, dar identificatorul out1 este diferit de Out1! O machet(template) tipic a unui modul surs ABEL este dat mai jos: module nume modul [title sir] [identificator_dispozitiv device tip_dispozitiv;] declaratii pini alte declaratii equations ecuatii [Test_Vectors] [vectori de test] end nume modul Cuvintele cheie utilizate de limbajul ABEL sunt date n continuare: CASE, DECLARATIONS, DEVICE, ELSE, ENABLE, END, ENDCASE, ENDWITH, EQUATIONS, FUNCTIONAL_BLOCK, FUSES, GOTO, IF, IN, INTERFACE(ntr-un modul top), INTERFACE(ntr-un submodul), ISTYPE, LIBRARY, MACRO, MODULE, NODE, PIN, PROPERTY, STATE(ca declaraie), STATE(n state_diagram), STATE_DIAGRAM, STATE_REGISTER, TEST_VECTORS, THEN, TITLE, TRACE, TRUTH_TABLE, TEST_VECTORS, WITH . Urmtoarea surs ABEL este un exemplu de implementare a unui semisumator de un bit folosind un circuit PLD de tip PAL22V10: module primul_meu_circuit; title 'semisumator ' PAL200 device '22V10'; " pini intrare A, B pin 3, 5; " pini iesire SUM, Carry_out pin 15, 18 istype 'com'; equations SUM = (A & !B) # (!A & B) ;

Circuite integrate numerice Limbajul ABEL si aplicatii ale circuitelor CPLD Carry_out = A & B; end primul_meu_circuit; 3. Declaraii Module: fiecare fiier surs ncepe cu o astfel de instruciune urmat de un nume al modulului (identificator). Proiectele mari pot conine mai multe module, fiecare cu propriile declaraii title, equations, end, etc. Title: este opional i poate fi folosit pentru identificarea proiectului. Numele trebuie s fie cuprins ntre ghilimele (simple). Linia respectiv este ignorat de compilator fiind util numai pentru documentare. ir: reprezint este o serie de caractere ASCII cuprinse ntre ghilimele simple ( ` ). irurile sunt folosite pentru instruciunile TITLE, OPTIONS , precum i n declararea atributelor pentru pin i node. device: este o declaraie opional i asociaz un identificator de dispozitiv cu un anume circuit PLD. Este de dorit evitarea utilizrii acestei declaraii n fiierul surs deoarece astfel se pstreaz independena proiectului de tipul de circuit. Atunci cnd se lucreaz cu un mediu de programare integrat declararea tipului de circuit se face la crearea proiectului, dar poate fi modificat oricnd i ulterior. comentarii: comentariile pot aprea oriunde n fiierul surs , ncep cu ghilimele duble ( ")i se termin fie tot cu ghilimele duble, fie la sfritul liniei (care situaie apare prima) . pin: prin aceste declaraii compilatorul asociaz numele simbolice cu conexiunile externe ale dispozitivului. Formatul este urmtorul (pin_id - identificator pin): [!]pin_id pin [nr. sau cod pin] [istype 'atribut'] ;

Se pot specifica mai muli pini pe aceiai linie sursa: [!]pin_id , [!]pin_id, [!]pin_id pin [nr. pin, [nr. pin, [nr. pin]]] [istype 'atribut'];

Exemplu: IN1, IN2, A1 pin 2, 3, 4; OUT1 pin 9 istype 'reg'; ENABLE pin; !Chip_select pin 12 istype 'com'; !S0..!S6 pin istype 'com'; Nu este neaprat nevoie s specificm un numr de pin. Numerele de pin pot fi specificate i mai trziu, n faza de implementare a proiectului, utiliznd un fiier de constrngeri utilizator (user constraint file), proiectul avnd astfel un caracter mai general i mai flexibil. ! indic un semnal activ n 0 -Low ( semnalul va fi inversat). istype este un atribut opional; variante: 'com' pentru a indica natura combinaional a semnalului de ieire sau 'reg' pentru un semnal de tip registru (memorat ntr-un bistabil). Acest atribut este folosit doar pentru pini de ieire sau noduri interne (node).

Circuite integrate numerice Limbajul ABEL si aplicatii ale circuitelor CPLD node: declaraiile node (nod intern) au acelai format ca declaraiile pin; fiind ns vorba de semnale interne care nu au ca echivalent o conexiune extern, numrul de pin lipsete. Exemplu: temp1 node [istype 'com']; alte declaraii permit definirea unor constante, mulimi (sets), macro-uri sau expresii care pot simplifica programul. Declararea unei constante are urmtorul format: id [, id],... = expresie [, expresie].. ; Exemple: A = 21; c = .C. ; x = .x. z = .Z. ; ADDR = [1,0,1,1]; LARGE = B & C; Data = [D3, D2, D1, D0]; Data = [D3..D0]; Ultimele dou declaraii sunt echivalente. Folosirea " .. " reprezint o modalitate comod de descriere a unui domeniu (range). Declaraia respectiv utilizeaz practic o notaie vectorial: de fiecare dat cnd vom folosi Data ntr-o ecuaie ne vom referi de fapt la vectorul [D3,D2,D1,D0]. Constante speciale(predefinite) n ABEL se pot utiliza o serie de constante cu o semnificaie special. Cele mai importante sunt : .C. , .c. descrie o tranziie complet a unui semnal de ceas folosit ca intrare (L,H,L; _|--|_ ) .X. , .x. descrie o valoare indiferent (dont care) .Z., .z. - descrie o valoare tri-state 4. Numere Numerele pot fi utilizate folosind patru baze de numeraie diferite: zecimal i hexazecimal. Baza implicit este zecimal (fr prefixare). Se utilizeaz urmtoarele prefixe: Binar ^b Octal ^o Zecimal ^d (implicit) Hexazecimal ^h Exemple: 35 , ^h35 , ^b101, ^h4FFB 5. Mulimi (sets) O mulime este o colecie de semnale sau constante utilizate pentru a face referire la un grup de semnale folosind un singur nume. Utilizarea mulimilor simplific semnificativ operaiile logice: orice operaie aplicat unei mulimi este aplicat de fapt fiecrui element al ei. O mulime este descris printr-un ir de constante sau semnale, separate prin virgul sau operatorul domeniu ( .. ), ir cuprins obligatoriu ntre paranteze ptrate [] . Exemple: [D0,D1,D2,D4,D5] [D0..D6] " domeniul poate fi enumerat cresctor [b6..b0] " domeniul poate fi enumerat si descresctor binar, octal,

Circuite integrate numerice Limbajul ABEL si aplicatii ale circuitelor CPLD [D7..D15] [b1,b2,a0..a3] " un (sub)domeniu ntr-o mulime mai mare [!S7..!S0] " domeniu descresctor de semnale declarate active low (n 0) Urmtoarea declaratie nu este permis : [D0, X] , unde X este de asemenea o mulime X = [X3..X0]; n schimb se poate scrie corect: [D0, X3..X0]; b. Operaii cu mulimi Cea mai mare parte a operaiilor poate fi aplicat i unei mulimi, operaia efectunduse asupra fiecrui element al mulimii. Operaiile se efectueaz conform prioritii operatorilor, operaiile cu aceiai prioritate se efectueaz de la stnga la dreapta (dac nu exist paranteze). Exemplul 1: Semnale = [D2,D1,D0]; " declararea multimii Semnale Semnale = [1,0,1] & [0,1,1]; " rezulta Semnale = [0,0,1] Exemplul 2: [A,B] = C & D; este de fapt echivalent cu dou instruciuni: A = C & D; B = C & D; Exemplul 3: [A1,B1] = [D1,D2] & [C3,C2]; este echivalent cu: [A1,B1] = [D1 & C3, D2 & C2]; astfel vom avea A1 = D1 & C3, si B1= D2 & C2. Exemplul 4: X & [A,B,C]; care este echivalent cu [X&A, X&B, X&C]; n cazul urmtoarei expresii lucrurile stau puin diferit: 2 & [A,B,C]; acum numrul zecimal "2" este convertit n reprezentare binar i completat cu zerouri dac este necesar (010). Astfel ecuaia de mai sus este echivalent cu: [0 & A, 1 & B, 0 & C]; Exemplul 5: A = [A2,A1,A0]; "declaratii de multimi B = [B2,B1,B0 ]; A # B; este echivalent cu [A2 # B2, A1 # B1, A0 # B0]; !A; este echivalent cu [!A2,!A1,!A0]; Exemplul 6: [b3,b2,b1,b0] = 2; " echivalent cu b3=0,b2=0,b1=1,b0=0. Exemplul 7: S presupunem c avem urmtoarea ecuaie (pentru ieirea unui decodificator): Chip_Sel = !A7 & A6 & A5 & A4; Mai nti definim mulimea Adr : Adr = [A7,A6,A5,A4]; Ecuaia propriu-zis va fi: Chip_Sel = Adr == [0,1,1,1]; Care este echivalent cu:

Circuite integrate numerice Limbajul ABEL si aplicatii ale circuitelor CPLD Chip_Sel = !A7 & A6 & A5 & A4; Dac A7=0, A6=1 , A5=1 si A4=1 expresia Adr ==[0,1,1,1] este adevrat (sau 1) i Chip_Sel va fi i el 1 (sau adevrat). Alt modalitate de a scrie aceiai ecuaie este: Chip_Sel = Adr = = 7; " 7 zecimal = 0111 binar. 6. Operatori Exist patru tipuri de operatori de baz: logici, aritmetici, relaionali i de asignare. a. Operatori logici Setul implicit de operatori logici (la nivel de bit) este descris n tabelul de mai jos.. Folosind directiva @ALTERNATE se poate eventual comuta la un set alternativ de operatori logici. Operator (implicit) Descriere Operator alternativ ! NOT (complement fa de 1) / & AND * # OR + $ XOR ( or exclusiv ) :+: !$ XNOR ( nor exclusiv) :*: b. Operatori aritmetici n continuare sunt prezentai operatorii aritmetici. Ultimii cinci operatori nu pot fi utilizai cu operanzi de tip mulimi. Semnul - poate avea semnificaii diferite: prezent ntre 2 operanzi are semnificaia de scdere (sau adunare complement fa de 2), dar prezent n faa unui operand are semnificaia de complement fa de 2. Operator Exemplu Descriere -D1 Complement fa de 2 (schimbare de semn) C1-C2 Scdere + A+B Adunare Urmtorii operatori nu sunt folosii cu mulimi: * A*B nmulire / A/B mprire ntreag fr semn % A%B Modulo: restul lui A/B << A<<B Deplasare A stnga cu B bii >> A>>B Deplasare B dreapta cu B bii c. Operatori relaionali Aceti operatori produc valoarea boolean adevrat True (-1) sau fals False (0). Valoarea 1 n cod complement fa de 2 este reprezentat n binar avnd toi biii n 1 (de ex. dac operandul are 8 bii : 1111 1111 ). Operator Exemplu Descriere == A==B sau 3==5 (false) Egal != A!=B sau 3 != 5 (true) Diferit < A<B sau 3 < 5 (true) Mai mic <= A<=B sau 3 <= 5 (true) Mai mic sau egal > A>B sau -1 > 5 (true) Mai mare >= A>=B sau !0 >= 5 (true) Mai mare sau egal

Circuite integrate numerice Limbajul ABEL si aplicatii ale circuitelor CPLD Operatorii relaionali sunt fr semn: !0 este complementul fa de 1 al lui 0 sau 11111111 (dac operandul are 8 bii) care are valoarea 255 n reprezentare fr semn. Astfel !0 > 9 este adevrat. Din acelai motiv i expresia 1 >5 este adevrat. O expresie relaional poate fi folosit i mpreun cu expresii numerice, ea fiind substituit cu 1 sau 0 funcie de rezultatul evalurii. De exemplu avem expresia A = B !$ (C == D); aici A va fi egal cu B dac C este egal cu D (adevrat sau 111 ; B XNOR 1 egal cu B) , altfel A va fi egal cu complementul lui B . d. Operatori de asignare Aceti operatori sunt folosii n ecuaii pentru a asigna valoarea unei expresii unui semnal de ieire sau unui nod intern. Exist dou tipuri de astfel de operatori: combinaionali i de tip registru. n cazul unui operator combinaional asignarea are loc imediat, fr nici o ntrziere. n cazul operatorului de tip registru asignarea are loc odat cu urmtorul impuls de ceas al bistabilului asociat ieirii sau nodului intern. Un exemplu simplu de definire a unui bistabil ar fi : Q1 pin istype 'reg'; Q1 : = D; Prima instruciune (declaraie) definete bistabilul Q1, iar a doua instruciune (ecuaie) spune c ieirea bistabilului va lua valoarea intrrii D la urmtoarea tranziie activ a semnalului de ceas. Operator Descriere = Asignare combinaional := Asignare de tip registru e. Prioritatea operatorilor(precedena) Prioritatea operatorilor este dat n urmtorul tabel , n ordine cresctoare de la 1 la 4. Operatorii cu aceiai prioritate sunt evaluai de la stnga la dreapta. Prioritate Operator Descriere 1 Negare 1 ! NOT 2 & AND 2 << deplasare stnga 2 >> deplasare dreapta 2 * nmulire 2 / mprire fr semn 2 % modulo 3 + adunare 3 scdere 3 # OR 3 $ XOR 3 !$ XNOR 4 == egal 4 != diferit 4 < mai mic 4 <= mai mic sau egal 4 > mai mare 4 >= mai mare sau egal

Circuite integrate numerice Limbajul ABEL si aplicatii ale circuitelor CPLD 7. Descrierea logic Descrierea logic poate fi fcut cu ajutorul ecuaiilor, tabelelor de adevr sau a diagramelor de stare. a. Ecuaii (equations) Se utilizeaz cuvntul cheie equations pentru a ncepe descrierea logic. Expresiile pot conine operatorii descrii anterior precum i instruciunea "When-Then-Else". Instruciunea "When-Then-Else" poate fi folosit n ecuaii pentru a descrie o funcie logic (ea se mai utilizeaz i n diagramele de stare pentru a descrie o succesiune de stri). Formatul instruciunii "When-Then-Else" este urmtorul : WHEN condiie THEN element = expresie; ELSE ecuaie; sau WHEN condiie THEN ecuaie; Exemple de ecuaii: SUM = (A & !B) # (!A & B) ; A0 := EN & !D1 & D3 & !D7; WHEN (A == B) THEN D1_out = A1; ELSE WHEN (A == C) THEN D1_out = A0; WHEN (A>B) THEN { X1 :=D1; X2 :=D2; } Se pot utiliza i acoladele { } pentru a grupa diverse seciuni n blocuri. Textul dintrun bloc poate avea una sau mai multe linii. Blocurile pot fi folosite n ecuaii, tabele de adevr sau directive. b. Tabele de adevr ( truth_table ) Cuvntul cheie cu care se ncepe descrierea este truth_table i sintaxa este: TRUTH_TABLE ( in_ids - > out_ids ) intrri - > ieiri ; sau TRUTH_TABLE ( in_ids : > reg_ids ) intrri : > ieiri_registre ; sau TRUTH_TABLE ( in_ids :> reg_ids -> out_ids ) intrri :> ieiri_regitrii -> ieiri; n care "->" este folosit pentru ieiri combinaionale i " : >" pentru ieiri de tip registru, in_ids identificatori intrari , out_ids identificatori ieiri, reg_ids identificatori registre.

Circuite integrate numerice Limbajul ABEL si aplicatii ale circuitelor CPLD Prima linie a unei tabele de adevr (ntre paranteze) definete intrrile i ieirile, iar urmtoarele linii corespondenele ntre valorile de intrare i cele de ieire. Fiecare linie trebuie s se termine cu ; . Intrrile i ieirile pot fi semnale singulare sau mulimi. Cnd se utilizeaz mulimi se folosete notaia normal pentru acestea (5). O valoare indiferent este reprezentat prin ".X." (o constant predefinit a limbajului ABEL). Exemplul 1: descrierea unui semisumator TRUTH_TABLE ( [ A, B] -> [Sum, Carry_out] ) [ 0, 0 ] -> [0, 0 ] ; [ 0, 1 ] -> [1, 0 ] ; [ 1, 0 ] -> [1, 0 ] ; [ 1, 1 ] -> [1, 1 ] ; Dac vom defini o mulime IN = [A,B]; i respectiv o mulime OUT = [Sum, Carry_out]; tabela de adevr poate deveni mai simpl: TRUTH_TABLE (IN -> OUT ) 0 -> 0; 1 -> 2; 2 -> 2; 3 -> 3; Exemplul 2: Un XOR cu dou intrri plus o intrare de activare, activ n 1 : TRUTH_TABLE ([EN, A, B] -> OUT ) [ 0, .X.,.X.] -> .X. ; [ 1, 0 , 0 ] -> 0 ; [ 1, 0 , 1 ] -> 1 ; [ 1, 1 , 0 ] -> 1 ; [ 1, 1 , 1 ] -> 0 ; Exemplul 3: Tabelele de adevr pot fi utilizate i pentru descrierea mainilor secveniale, n cazul acestui exemplu fiind vorba de un numrtor binar sincron de 3 bii, cu ieirea de transport OUT (generat n starea 111). Se utilizeaz 3 bistabili QA, QB si QC care vor fi i ieirile numrtorului. MODULE CNT3; "declaratii CLOCK pin; " intrare ceas RESET pin; " intrare reset OUT pin istype 'com'; " iesire transport (combinaional) QC,QB,QA pin istype 'reg'; " iesiri numarator (tip registru, bistabili) [QC,QB,QA].CLK = CLOCK; "semnalul de ceas pentru bistabili [QC,QB,QA].AR = RESET; " reset asincron pentru aceiasi bistabili TRUTH_TABLE ( [QC, QB, QA] :> [QC,QB,QA] -> OUT) [000] :> [ 0 0 1 ] -> 0; [001] :> [ 0 1 0 ] -> 0; [010] :> [ 0 1 1 ] -> 0; [011] :> [ 1 0 0 ] -> 0; [100] :> [ 1 0 1 ] -> 0; [101] :> [ 1 1 0 ] -> 0;

Circuite integrate numerice Limbajul ABEL si aplicatii ale circuitelor CPLD [110] [111] END CNT3; :> [ 1 1 1 ] :> [ 0 0 0 ] -> 0; -> 1;

Observatie Pentru utilizarea extensiilor de tip .DOT (cum ar fi .CLK i .AR) vezi seciunea 7d. c. Diagrame de stare ( State_diagram ) Seciunea State_diagram conine descrierea logic a unui circuit sub forma unor diagrame de stare. n aceasta seciune se utilizeaz instruciunile: "Goto", "Case" si "With". De obicei n seciunea de declaraii se declar (se utilizeaz) nume simbolice pentru stri, programul fiind astfel mai uor lizibil. Declararea se face cu urmtoarea sintax (unde state_id identificator stare): state_id [, state_id ...] STATE ; Ca un exemplu avem: SREG = [Q1, Q2]; care asociaz numele simbolic SREG cu starea definit prin intermediul bistabililor Q1 si Q2 (cei doi bistabili alctuiesc practic un registru de stare). Sintaxa este urmtoarea: State_diagram registru_stare STATE valoare_stare : [ecuatie;] [ecuatie;] : : instructiune_tranzitie_stare ; ... Cuvntul cheie state_diagram indic nceputul unei descrieri de main secvenial. Cuvntul cheie STATE i instruciunile urmtoare descriu o stare din diagrama de stri, ele incluznd o valoare a strii sau un nume simbolic pentru stare, o instruciune care descrie tranziia strii i, opional, o ecuaie care descrie o ieirile asociate strii. n descrierea de mai sus registru_stare este un identificator pentru semnalele care definesc starea mainii secveniale. Se poate utiliza o notaie simbolic a registrului de stare, definit anterior n seciunea declaraii. valoare_stare: poate fi o expresie , o valoare sau un nume simbolic pentru starea curent. ecuatie : opional, o ecuaie care descrie ieirile asociate strii instructiune_tranzitie_stare: instruciunile "If-Then-Else", CASE sau GOTO utilizate pentru a descrie starea urmtoare; opional sunt urmate de ecuaiile de tranziie descrise cu o instruciune WITH. Instruciunea If-Then-Else: Este utilizat pentru a descrie urmtoarea stare i pentru a specifica condiiile de tranziie mutual exclusive. Sintaxa este urmtoarea: IF expresie THEN expresie _stare [ELSE expresie _stare] ; Mai sus, expresie_stare poate fi o expresie logic sau un nume simbolic al strii. Clauza ELSE este opional. Instruciunile IF-Then-Else pot fi combinate cu instruciuni Goto, Case i With.

10

Circuite integrate numerice Limbajul ABEL si aplicatii ale circuitelor CPLD OBS. "IF-Then-Else" poate fi utilizat doar n seciunea state_diagram; pentru descrierea unor funcii logice combinaionale (seciunea ecuaii) se utilizeaz "When-If-Then". n urmtorul exemplu (o main cu 2 stri i dou ieiri) se definete mai nti registrul de stare, n seciunea declaraii: SREG = [Q1, Q0]; "definim registrul de stare S0 = [0, 1]; S1 = [1, 1]; state_diagram SREG state S0: OUT1 = 1; if A then S1 else S0; state S1: OUT2 =1; if A then S0 else S1; Instruciunile "If-Then-Else" pot fi de asemenea imbricate. Instruciunea "with": Sintaxa instruciunii este: instructiune_tranzitie_stare expresie_stare WITH ecuatie [ecuatie ] ... ; Unde instructiune_tranzitie_stare poate fi o instruciune "If-then-else", 'Goto" sau "Case"; expresie_stare descrie starea urmtoare, iar ecuaie este ecuaia care descrie ieirile asociate strii. n locul unei simple expresii de stare se pot utiliza tot instruciunile "If-Then-Else", "Goto" sau "Case".Instruciunea "With" permite ca ecuaiile de ieire s fie scrise n termeni de tranziii. Exemplul 1: if ( X#Y==1 ) then S1 with Z=1 else S2; n exemplul de mai sus ieirea Z va fi 1 n momentul n care expresia este evaluat ca fiind adevrat (tranziia fcndu-se n starea S1). Expresia care apare mpreun cu WITH poate fi orice expresie care va fi ns evaluat doar cnd condiia anterioar este adevrat, ca n exemplul urmtor: if X&!Y then S3 with Z=X#Y else S2 with Z=Y; Instruciunea este util i n descrierea ieirilor de tip registru deoarece aceste ieiri vor fi actualizate la urmtorul ciclu al semnalului de ceas. Este astfel posibil s descriem c o anumit ieire de tip registru va avea o valoare specific dup o anumit tranziie, ca n urmtorul exemplu: state S1: if RST then S2 with { OUT1 : = 1; Error_Adrs : = ADDRESS; } else if (ADDRESS <= ^hC101) then S4 else S1; S-au utilizat acoladele pentru a delimita blocul de asignri asociat instruciunii With.

11

Circuite integrate numerice Limbajul ABEL si aplicatii ale circuitelor CPLD Dimensiunea timp trebuie avut n vedere atunci cnd instruciunea WITH se folosete mpreun cu ieiri combinaionale sau asincrone (ca n cazul unei maini Mealy). La o main Mealy ieirile se modific n momentul n care se modific intrrile, astfel c ieirile vor fi stabile doar la sfritul unui timp de stare (nainte de tranziia activ a semnalului de ceas). Din acest punct de vedere o main Moore (cu ieiri sincrone cu starea) este mai avantajoas. Instruciunea Case : Sintaxa este urmtoarea: CASE expresie : expresie _stare; [ expresie : expresie _stare; ] : ENDCASE ; Unde expresie este orice expresie ABEL valid i expresie_stare descrie starea urmtoare (urmat opional de instruciunea WITH). Exemplu: State S0: case ( A == 0) : S1; ( A == 1) : S0; endcase; Instruciunea case este utilizat pentru a specifica o secven de condiii de tranziie mutual exclusive, corespunznd urmtoarei stri. Condiiile specificate trebuie s fie mutual exclusive (dou tranziii nu pot fi adevrate n acelai timp), n caz contrar rezultatele (tranzitia la starea urmtoare) sunt imprevizibile. d. Extensii de tip .DOT Aceast categorie de faciliti se pot utiliza pentru a descrie mai precis comportarea circuitului. Reprezint o modalitate de a descrie semnalele interne i nodurile asociate cu un semnal primar. Sintaxa folosit este nume_semnal.extensie. Numele extensiei este independent de tipul de liter folosit (mare sau mic). Unele din aceste extensii sunt de uz general (numite i independente de arhitectur sau pin-to-pin) putnd fi folosite pentru o mare varietate de circuite programabile (PAL, GAL, CPLD, etc). Altele pot fi folosite doar pentru clase specifice de circuite, fiind numite i dependente de arhitectur sau cu extensii detailate. n general se pot utiliza ambele categorii de extensii. O parte din aceste extensii sunt descrise n tabelul urmtor. Extensie Descriere Independente de arhitectur sau extensii pin-to-pin (pin la pin) .ACLR Reset asincron .ASET Preset asincron .CLK Intrare de ceas ntr-un bistabil cu comutare pe front. .CLR Reset sincron .COM Reacie combinaional provenind de la intrarea de date .FG Reacie registru (bistabil) .OE Activare ieire (de tip buffer tri-state) .PIN Reacie pin .SET Preset sincron Extensii specifice circuitului (dependente de arhitectur)

12

Circuite integrate numerice Limbajul ABEL si aplicatii ale circuitelor CPLD .D .J .K .S .R .T .Q .AP .AR .SP .SR Intrare date ntr-un bistabil de tip D Intrare J ntr-un bistabil de tip Intrare K ntr-un bistabil de tip JK Intrare S ntr-un bistabil de tip SR Intrare R ntr-un bistabil de tip SR Intrare T ntr-un bistabil de tip T Reacie registru (bistabil) Preset asincron Reset asincron Preset sincron Reset sincron

Figura urmtoare ilustreaz cteva din aceste extensii.

(a) independent de arhitectur

(b) dependent de arhitectura bistabilului (D sau T)

Exemplul 1: [S7..S0].oe = ACTIV; unde semnalul ACTIV controleaz bufferele tri-state ale celor 8 ieiri S7..S0. Cnd ACTIV este n 1 ieirile sunt active, n caz contrar(ACTIV=0) ieirile respective sunt n starea de nalt impedan (High-Z). Exemplul 2: Q.AR = reset; Y.AR = reset; [Z.ar, Y.ar] = reset; aici ieirea bistabilelor Z si Y va fi adus n 0 dac intrarea reset este n 1. Pentru nelegerea semnificaiei acestui tip de extensii vom exemplifica cu ajutorul unei ecuaii care folosete operatorul de asignare tip registru(:=) i unde Preset este o intrare : Q1 := !Q1 # Preset; Aici Q1 i va menine starea (valoarea curent) pn n momentul n care elementul de memorie (circuitul bistabil) asociat cu acest semnal primete un semnal de ceas. Acesta ecuaie reprezint o descriere pin-to-pin a semnalului de ieire Q1. Ea descrie comportarea semnalului n termeni de valori dorite pentru pinul de ieire funcie de intrare i este complet independent de arhitectura dispozitivului utilizat pentru implementare. Totui, n ecuaia de mai sus exist o condiie ambigu de reacie pentru elementul de memorie. Semnalul Q1 apare n partea dreapt a ecuaiei, dar nu avem nici o informaie de 13

Circuite integrate numerice Limbajul ABEL si aplicatii ale circuitelor CPLD unde anume provine aceast reacie: direct din logica combinaional care formeaz intrarea bistabilului sau din pinul de ieire asociat cu semnalul Q1. Nu exist de asemenea nici o informaie despre ce tip de bistabil se va utiliza (dei algoritmii de sintez pot , teoretic, plasa acesta ecuaie n orice tip de bistabil posibil). Ecuaia poate fi mai concret astfel: Q1.CLK = Clock; "Semnal de ceas provenind de la o intrare Q1 := !Q1.FB # Preset; " Reactie provenind din iesirea bistabilului Acum setul de ecuaii descrie complet circuitul, informaia fiind suficient pentru ca acest circuit s funcioneze indiferent de dispozitivul n care va fi implementat. Reacia provine direct din ieirea negat a bistabilului , iar extensia .CLK arat ca bistabilul este cu comutare pe front (i nu unul de tip latch !). Spre deosebire de descrierea pin-to-pin acelai circuit poate fi descris i ntr-o form detailat astfel: Q1.CLK = Clock; "Semnal de ceas de la intrare Q1.D = !Q1.Q # Preset; "Se utilizeaza CBB de tip D n aceast form n care este descris intrarea D a bistabilului i specificat reacia apar unele restricii legate de arhitectura dispozitivului n care va fi implementat proiectul. Mai mult, ecuaiile descriu doar intrarea i reacia ne existnd nici o informaie despre configuraia pinului de ieire. n consecin aceast descriere va funciona diferit cnd va fi implementat ntr-un dispozitiv cu ieiri inversate (negate) sau ntr-unul cu ieiri ne inversate. Pentru a menine o comportare corect a pinului , folosind descrierea detailat, este necesar un element suplimentar al limbajului: atributul `buffer` (sau complementul su, atributul `invert`). Atributul `buffer` ne asigur ca n implementarea final nu va exista inversare ntre ieirea bistabilului i pinul de ieire asociat cu Q1. Astfel n seciunea de declaraii trebuie s apar: Q1 pin istype 'buffer'; Observaie Pentru un circuit CPLD, si nu numai, o modalitate de a nelege diferena ntre descrierea pin-to-pin si descrierea detailat este de a vedea descrierea detailat ca o specificaie a macrocelulei. n figur este prezentat o macrocelul generic asociat semnalului q1. Se observ c exist un nivel de inversare programabil ntre iesirea bistabilului si pin, astfel c pinul q1 poate avea o comportare diferit de cea a iesirii Q(q1.q). Ori de cte ori folosim o descriere pinto-pin in ABEL, va fi sintetizat o macrocelul generic similar celei din figur, indiferent de tipul particular de macrocelul existent n dispozitivul PLD.

8. Vectori de test Vectorii de test sunt opionali i reprezint o modalitate de a verifica funcionarea corect a sistemului numeric proiectat. Ei sunt folositi pentru simularea modelului intern al dispozitivului i testarea funcional a dispozitivului programat. Prin intermediul lor

14

Circuite integrate numerice Limbajul ABEL si aplicatii ale circuitelor CPLD specificm comportarea ateptat a sistemului prin descrierea explicit a ieirilor funcie de intrri. Sintaxa este urmtoarea : Test_vectors (intrare [, intrare ].. -> ieire [,ieire] .. ) [valori intrri -> valori ieiri ; ] : Ca exemplu vom relua semisumatorul prezentat anterior pentru care vom avea: Test_vectors ( [A, B] -> [Sum, Carry] ) [ 0, 0 ] -> [0, 0]; [ 0, 1 ] -> [1, 0]; [ 1, 0 ] -> [1, 0]; [ 1, 1 ] -> [1, 1]; sau utiliznd constantele numerice definite anterior: Test_vectors ( [A, B] -> [Sum, Carry] ) 0 -> 0; 1 -> 2; 2 -> 2; 3 -> 3; Este permis folosirea constantelor .X. , .C., .Z. ca i a oricror alte constante simbolice definite anterior: test_vectors ( [CLK, RESET, A, B ] -> [ Y0, Y1, Y3] ) [.X., 1, .X.,.X.] -> [ S0, 0, 0]; [.C., 0, 0, 1 ] -> [ S0, 0, 0]; [.C., 1, 1, 0 ] -> [ S0, 0, 1]; 9. Instruciuni care descriu proprieti ABEL permite transmiterea (n momentul implementrii) unor proprieti specifice dispozitivului PLD prin intermediul instruciunii property. Aceste proprieti sunt de fapt transmise programului care face implementarea (fitter). Pentru dispozitivele CPLD aceste proprieti includ: viteza de variaie a ieirilor (timpii de front -slew rate), , puterea consumat, valorile care vor fi prencrcate n bistabili la power-up, utilizarea resurselor logice (plasare), optimizare sau protejarea la citire . Aceleai proprieti pot fi stabilite i ca opiuni ale diverselor componente ale mediului integrat de dezvoltare (compilator, fitter, programator), lucru care este de dorit deoarece ofer o mai mare independen de dispozitiv a proiectului . 10. Diverse a. Declaraii de tip active-low (n 0) Un semnal de tip activ n 0 este definit prin prefixarea cu operatorul ! : !OUT pin istype 'com' ; Cnd acest semnal va fi utilizat n descrierea logic, el va fi n mod automat complementat. S considerm urmtorul exemplu: module EXEMPLU A, B pin ; !OUT pin istype 'com';

15

Circuite integrate numerice Limbajul ABEL si aplicatii ale circuitelor CPLD equations OUT = A & !B # !A & B ; end n acest exemplu semnalul de ieire OUT este XOR-ul ntre A si B , fiind n 1 (High) cnd doar una din intrri este n 1, altcumva fiind n 0. Deoarece semnalul de ieire a fost ns declarat activ n 0 (!OUT), pinul de ieire OUT va fi n 0 doar cnd numai una din intrri este n 1. Acelai rezultat se putea obine inversnd pe OUT la nivelul ecuaiei i declarndu-l doar ca OUT (o descriere explicit pin la pin a semnalului activ n 0), aa cum se vede n exemplul urmtor: module EXEMPLU A, B pin ; OUT pin istype 'com'; equations !OUT = A & !B # !A & B ; end Declaraiile de tip activ n 0 pot fi utilizate i pentru mulimi, ca n urmtorul exemplu: A = [A2,A1,A0]; " declaratie multime B = [B2,B1.B0]; " declaratie multime X = [X2,X1.X0]; " declaratie multime !X = A & !B # !A & B; Ultima ecuaie este echivalent cu a scrie : !X0 = A0 & !B0 # !A0 & B0; !X1 = A1 & !B1 # !A1 & B1; !X2 = A2 & !B2 # !A2 & B2; b. Directive Utilizarea directivelor duce la anumite modificri ale fiierului surs ABEL, n momentul prelucrarii acestora. Se pot include condiional seciuni de surs ABEL, se pot include poriuni din alte surse ABEL, se pot afia diverse mesaje pe parcursul compilrii, etc. Prin utilizarea i de parametrii, unele din directive permit construirea i manipularea unor structuri complexe. Sintaxa utilizat este: @directiva [parametrii] Un exemplu prezentat anterior este directiva @ALTERNATE. Alte directive mai utilizate ar fi: @CONST, @DCSET, @EXIT, @IF, @INCLUDE, @MESSAGE, @REPEAT, @RADIX, etc. Exemplu: @repeat 100 { [.C.]->[0,0] " insereaza de 100 de ori vectorul de test cuprins ntre acolade " in textul sursa, intr-o sectiune test_vectors } 11. Exemple Familia de circuite destinat implementrii acestor circuite este cea de circuite CPLD Xilinx(9500, 9500XL, 9500XV, Cool Runner) desi unele din ele pot fi implementate si

16

Circuite integrate numerice Limbajul ABEL si aplicatii ale circuitelor CPLD folosind circuite simple PLD (PAL sau GAL). Compilatorul ABEL se presupune c este cel din mediul de programare Xilinx Webpack. n toate exemplele care urmeaz cuvintele cheie au fost reprezentate, pa cat posibil, cu litere ngroate(bold). 11.1. Diverse circuite MSI din familiile logice standardizate 11.1.1 Buffer tri-state, octal, bi-directional 74LS245(74HC245,etc)

module SN74LS245 title 'Octal Bidirectional Bus Transceiver' OE_, DIR pin; A1..A8 pin istype 'com'; B1..B8 pin istype 'com'; A = [A8..A1]; B = [B8..B1]; X =.X.; Z = .Z.; equations A = B; B = A; A.oe = !DIR & !OE_; B.oe = DIR & !OE_; test_vectors ([OE_,DIR,A,B] -> [A,B]) [1, 0, 0, 0] -> [Z,Z]; [0,0,X,^h00] -> [^h00,X]; [0,0,X,^h55] -> [^h55,X]; [0,0,X,^hAA] -> [^hAA,X]; [0,0,X,^hFF] -> [^hFF,X]; [0,0,X,^hF0] -> [^hF0,X]; [0,1,X,X] -> [Z,X]; [0,1,^h00,X] -> [X,^h00]; [0,1,^h55,X] -> [X,^h55]; [0,1,^hAA,X] -> [X,^hAA]; end

17

Circuite integrate numerice Limbajul ABEL si aplicatii ale circuitelor CPLD 11.1.2 Registru de deplasare serie, cu ncrcare paralel, asincron, 74LS165 (74HCT165,etc)

Module SN74LS165 Title 'Parallel-Load 8-bit Shift Register, async load' ShLd, ClkInh, Clk, SER pin; A,B,C,D,E,F,G,H pin; QA,QB,QC,QD,QE,QF,QG node istype 'reg, buffer'; QH pin istype 'reg, buffer'; QH_ pin istype 'com'; Equations QH_ = !QH; [QH,QG,QF,QE,QD,QC,QB,QA] : = [QG,QF,QE,QD,QC,QB,QA,SER]; [QH,QG,QF,QE,QD,QC,QB,QA].clk = Clk # ClkInh; when (!ShLd) then { [QH,QG,QF,QE,QD,QC,QB,QA].ar = ![H,G,F,E,D,C,B,A]; [QH,QG,QF,QE,QD,QC,QB,QA].ap = [H,G,F,E,D,C,B,A]; } Test_Vectors ([Clk,ClkInh,ShLd,SER,A,B,C,D,E,F,G,H]->[QA,QB,QC,QD,QE,QF,QG,QH,QH_]) [.C., 1 , 0 , 0 ,1,0,1,0,1,0,1,1]->[ 1, 0, 1, 0, 1, 0, 1, 1, 0 ]; [.C., 1 , 1 , 0 ,1,0,1,0,1,0,1,1]->[ 1, 0, 1, 0, 1, 0, 1, 1, 0 ]; [.C., 0 , 1 , 0 ,0,0,0,0,0,0,0,0]->[ 0, 1, 0, 1, 0, 1, 0, 1, 0 ]; [.C., 0 , 1 , 0 ,0,0,0,0,0,0,0,0]->[ 0, 0, 1, 0, 1, 0, 1, 0, 1 ]; [.C., 0 , 1 , 1 ,0,0,0,0,0,0,0,0]->[ 1, 0, 0, 1, 0, 1, 0, 1, 0 ]; [.C., 0 , 1 , 1 ,0,1,1,1,1,0,0,0]->[ 1, 1, 0, 0, 1, 0, 1, 0, 1 ]; [.C., 0 , 1 , 0 ,0,1,1,1,1,1,0,0]->[ 0, 1, 1, 0, 0, 1, 0, 1, 0 ]; [ 0 , 0 , 1 , 0 ,0,1,1,1,1,1,0,0]->[ 0, 1, 1, 0, 0, 1, 0, 1, 0 ]; [ 0 , 1 , 1 , 0 ,0,1,1,1,1,1,0,0]->[ 0, 0, 1, 1, 0, 0, 1, 0, 1 ]; [.C., 1 , 0 , 0 ,0,1,1,1,1,1,0,0]->[ 0, 1, 1, 1, 1, 1, 0, 0, 1 ]; End 18

Circuite integrate numerice Limbajul ABEL si aplicatii ale circuitelor CPLD 11.1.3 Registru octal, de tip D-latch(transparent), cu iesire tri-state 74LS373 (74HCT373,etc.) Registru octal, de tip D cu comutare pe front, cu iesire tri-state 74LS374 (74HCT374, etc.)

Module SN74LS373 Title 'Octal D-type Transparent Latch' OC,C pin; D8..D1 pin; Q8..Q1 pin istype 'reg,buffer'; Input = [D8..D1]; Output = [Q8..Q1]; Equations Output := Input; Output.lh = C; asa se genereaza un latch transparent in high!! Output.oe = !OC; Test_Vectors ([OC ,C ,Input] -> Output) [ 1 ,.X., .X. ] -> .Z.; [ 0 , 1 ,^h00 ] -> ^h00; [ 0 , 1 ,^h55 ] -> ^h55; [ 0 , 1 ,^hAA ] -> ^hAA; [ 0 , 1 ,^hFF ] -> ^hFF; [ 0 , 1 ,^hA5 ] -> ^hA5; [ 0 , 0 ,^hA5 ] -> ^hA5; [ 0 , 0 ,^h00 ] -> ^hA5; [ 0 , 1 ,^h22 ] -> ^h22; End Module SN74LS374 Title 'Octal edge triggered D-type flip-flops' OC, CLK D8..D1 Q8..Q1 pin; pin; pin istype 'reg,buffer';

19

Circuite integrate numerice Limbajul ABEL si aplicatii ale circuitelor CPLD Input = [D8..D1]; Output = [Q8..Q1]; .C.= c; Equations Output := Input; Output.clk = CLK; Output.oe = !OC; Test_Vectors ([OC ,CLK ,Input] -> Output) [ 1 ,.X., .X. ] -> .Z.; [ 0 , c ,^h00 ] -> ^h00; [ 0 , c ,^h55 ] -> ^h55; [ 0 , c ,^hAA ] -> ^hAA; [ 0 , c ,^hFF ] -> ^hFF; [ 0 , c ,^hA5 ] -> ^hA5; [ 0 , 0 ,^hA5 ] -> ^hA5; [ 0 , 0 ,^h00 ] -> ^hA5; [ 0 , c ,^h22 ] -> ^h22; End 11.2 Decodificator de adrese Exemplul prezint una din aplicaiile tipice ale logicii programabile i anume realizarea unui decodificator pentru spaiul de memorie al unui microprocesor de 8 biti. Pentru identificarea spaiului specific de adres se utilizeaz cei mai semnificativi bii A15..A10, dintr-o magistral de adrese de 16 bii(A15..A0).

Exist 4 seciuni de natur diferit n spaiul de memorie de 64k, fiecare identificat printr-un semnal de ieire al decodificatorului, i anume: DRAM: 0000- DFFF H (RAM dinamic) I/O : E000 E7FF H (porturi intrare /ieire mapate n memorie) ROM2: F000-F7FF H (EPROM 2) ROM1 : F800-FFFF H (EPROM 1) Semnalele de ieire sunt active n 0 (se utilizeaz semnal definite explicit ca fiind active n 0). Utilizarea mulimii Adresa i a notaiei pentru un domeniu (..) simplific substanial programul.

20

Circuite integrate numerice Limbajul ABEL si aplicatii ale circuitelor CPLD module dec_mem title ` decodificator memorie uP ` A15..A0 ROM1,IO,ROM2,DRAM H,L,X = 1, 0, .X. ; Adresa =[ A15..A0];

pin; pin istype `com`;

equations !DRAM = (Adresa <= ^hDFFF); !IO = (Adresa >= ^hE000) & (Adresa <= ^hE7FF); !ROM2 = (Adresa >= ^hF000) & (Adresa <= ^hF7FF); !ROM1 = (Adresa >= ^hF800); test_vectors (Adresa -> [ROM1,ROM2,IO,DRAM]) ^h0000 -> [ H,H, H, L ]; ^h4000 -> [ H, H, H, L ]; ^h8000 -> [ H, H, H, L ]; ^hC000 -> [ H, H, H, L ]; ^hE000 -> [ H, H, L, H ]; ^hE800 -> [ H, H, H, H ]; ^hF000 -> [ H, L, H, H ]; ^hF800 -> [ L, H, H, H ]; end 11.2 Multiplexor 12 : 4 Exemplul prezint de fapt un multiplexor 3 la 1, pentru 3 grupe de semnale, fiecare grup avnd 4 bii: a3..a0, b3..b0 i c3..c0. Se utilizeaz dou semnale de selecie (s1,s0) , combinaia s1s0=11 (3) avnd acelai efect ca s1s0=10 (2). Ieirea este reprezentat de y3..y0. Folosirea instruciunii when .. then permite cea mai compact descriere a unui multiplexor. Pentru toate grupele de semnale relevante s-au utilizat mulimi: select, a, b, c i y.

module Mux12to4 title `multiplexor 12 la 4 `

21

Circuite integrate numerice Limbajul ABEL si aplicatii ale circuitelor CPLD a0..a3 pin; b0..b3 pin; c0..c3 pin; s1,s0 pin; ``selectii y0..y3 pin; ``iesiri H = [1,1,1,1]; L = [0,0,0,0]; X = .X. ; select = [s1,s0]; y = [y3..y0]; a = [a3..a0]; b = [b3..b0]; c = [c3..c0]; equations when (select == 0) then y = a; when (select == 1) then y = b; when (select == 2) then y = c; when (select == 3) then y = c; test_vectors ([select, a, b, c] [ 0 , 1, X, X] [ 0 ,10, H, L] [ 0 , 5, H, L] [ 1 , H, 3, H] [ 1 ,10, 7, H] [ 1 , L,15, L] [ 2 , L, L, 8] [ 2 , H, H, 9] [ 2 , L, L, 1] [ 3 , H, H, 0] [ 3 , L, L, 9] [ 3 , H, L, 0] end -> -> -> -> -> -> -> -> -> -> -> -> -> y) 1; 10; 5; 3; 7; 15; 8; 9; 1; 0; 9; 0; ``select = 0 ``select = 1 ``select = 2 ``select = 3 a->y b->y c->y c->y

11.3 Comparator de 4 bii n acest exemplu este prezentat un comparator de 4 bii cu dou intrri generice de 4 bii A (A3..A0) i B (B3..B0), oferind 4 ieiri active n 1 (NE- diferit , EQ- egal, GT- mai mare i LT- mai mic) . Tem S se completeze corespunztor vectorii de test care s permit verificarea din punct de vedere funcional a tuturor celor 4 ieiri. Pentru vectorii de test se pot defini i utiliza constante corespunztoare, care s uureze scrierea.

22

Circuite integrate numerice Limbajul ABEL si aplicatii ale circuitelor CPLD

module comp4 title ` comparator 4 biti ` A3..A0 pin; A = [A3..A0]; B3..B0 pin; B = [B3..B0]; NE,EQ,GT,LT pin istype `com`; ``NE diferit ``EQ- egal ``GT- mai mare ``LT mai mic equations EQ = (A = = B); NE = !(A = = B); GT = (A > B); LT = !((A > B) # (A = = B)); Test_vectors `` aici vectorii de test !!! end 11.4 Decodificator pentru un afior LED cu 7 segmente Astfel de decodificatoare exist i n diverse familii de circuite numerice (ex. 7446, 7447, 4053, etc.) dar o implementare PLD ofer ntotdeauna o flexibilitate suplimentar. El stabilete o coresponden ntre mrimea de intrare de 4 bii interpretat ca un cod BCD de 4 bii (cifre ntre 0 i 9) si un sistem de afiare alfanumeric organizat sub forma a 7 segmente. Prin aprinderea diferit a segmentelor este posibil afiarea cel puin a cifrelor de la 0 la 9. Cele 7 segmente sunt notate de la a la g poziia lor fiind standard pentru toate afioarele (vezi asignare n comentariu i figura).

Decodificatorul este realizat pentru un afior cu anod comun, aprinderea segmentului (ON) presupunnd c ieirea respectiv este adus n 0 logic. Pentru afioarele cu catod comun ieirea este activ n 1 si este suficient s modificm doar definirea constantelor ON si OFF. Mai exist i o intrare de activare Ena, activ n 0 logic. Cnd intrarea este inactiv (Ena

23

Circuite integrate numerice Limbajul ABEL si aplicatii ale circuitelor CPLD =1 ), ieirile sunt aduse n starea de nalt impedan (High -Z) toate segmentele fiind stinse, indiferent de starea intrrilor. module bcd7 title `dec afisor 7segmente ` `` identificare segmente `` -a`` f| |b `` -g`` e| |c `` -dD3,D2,D1,D0,Ena pin; a,b,c,d,e,f,g pin istype `com`; bcd = [D3,D2,D1,D0]; led = [a,b,c,d,e,f,g]; ON,OFF = 0,1; ``LED-uri cu anod comun L,H,X,Z = 0,1,.X.,.Z.; equations led.oe = !Ena; truth_table (bcd -> [ a, b, c, d, e, f, g ]) 0 -> [ ON, ON, ON, ON, ON, ON, OFF]; 1 -> [ OFF,ON, ON, OFF,OFF,OFF,OFF]; 2 -> [ ON, ON, OFF,ON, ON, OFF,ON ]; 3 -> [ ON, ON, ON, ON, OFF,OFF,ON ]; 4 -> [ OFF,ON, ON, OFF,OFF,ON, ON ]; 5 -> [ ON, OFF,ON, ON, OFF,ON, ON ]; 6 -> [ ON, OFF,ON, ON, ON, ON, ON ]; 7 -> [ ON, ON, ON, OFF,OFF,OFF,OFF]; 8 -> [ ON, ON, ON, ON, ON, ON, ON ]; 9 -> [ ON, ON, ON, ON, OFF,ON, ON ]; end 11.5 Numrtor universal de 4 bii Urmtorul exemplu ilustreaz implementarea unui numrtor binar sincron de 4 bii. Numrtorul este bidirecional, sensul de numrare fiind controlat prin intermediul intrrii u_d . De asemenea numrtorul poate fi ncrcat paralel, intrarea de ncrcare fiind ld (activ n 1) i intrrile corespunztoare de date fiind d3..d0. Este posibil i oprirea/pornirea numrrii cu ajutorul intrrii cnten (1 numr, 0 - oprit). Ieirile sunt q3 ..q0. Exist i o intrare asincron de aducere n 0(reset) numit rst. Descrierea funcionrii se face cu ajutorul ecuaiilor i nu al diagramelor de stare, fiind mult mai compact n acest caz. Exist 4 moduri de operare ale numrtorului: - ncrcare paralel (sincron) a datelor de pe intrrile de date (LOAD) - numrare oprit (HOLD) - numr n sus (DOWN) - numr n jos (UP)

24

Circuite integrate numerice Limbajul ABEL si aplicatii ale circuitelor CPLD Modul ncrcare este prioritar, activarea intrrii ld (n 1) fcnd ca ieirile q s ia valoarea intrrilor d , la urmtorul semnal de ceas (ncrcare sincron). Modul numrare oprit este al doilea ca prioritate; pentru a numra este necesar ca intrarea cnten=1. n momentul n care cnten = 0 (dac i ld=0) numrarea se oprete, ieirile q pstrndu-i valoarea avut n acel moment. Numrtorul este resetat (q3..q0 = 0) n momentul n care intrarea rst =1 (asincron, independent de evolutia intrarii de ceas) . Asignrile pentru mulimea count sunt asignri de tip registru (: =), toi bistabilii au acelai semnal de ceas i respectiv acelai semnal de reset asincron (se utilizeaz extensiile .DOT de tip .clk i .ar).

module unicnt4 title ` numarator binar de 4 biti bidirectional cu incarcare paralela `; "constante X = .X.; "Intrari d3..d0 pin; "intrari date 4-biti clk pin; "intrare ceas rst pin; "reset asincron cnten pin; "activare numarare ld pin; "incarca date paralel u_d pin; "Up/Down sens numarare 1 =up(in sus), 0- down (in jos) "Iesiri q3..q0 pin istype `reg`; "bistabili si iesiri numarator "definire multimi data = [d3..d0]; "date intrare count = [q3..q0]; "numarator "definirea modurilor de lucru MODE = [cnten, ld, u_d] ; "Modul de lucru este definit LOAD = (MODE = = [ X , 1, X ]); "ca o multime de valori ale HOLD = (MODE = = [ 0 , 0, X ]); " intrarilor de control. UP = (MODE = = [ 1 , 0, 1 ]); " Numele simbolic este definit ca multimea MODE DOWN = ( MODE = = [ 1 , 0, 0 ] ); " careia i se asigneaza o valoare equations when LOAD then count := data else when UP then count := count + 1 else when DOWN then count := count - 1 else when HOLD then count := count; count.clk = clk; 25 "incarca date paralel "numara in sus " numara in jos "opreste numararea "semnalul de ceas pentru toti bistabilii

Circuite integrate numerice Limbajul ABEL si aplicatii ale circuitelor CPLD count.ar = rst; test_vectors "aici vectori de test end 11.6 Numrtor zecimal (decimal) sincron, bidirectional, cu semnal de reset sincron Numratorul de patru biti va fi descris ca o masin secvential cu 10 stri: S0 la S9. Semnalul de ceas este Clk, sensul de numrare este stabilit cu intrarea Dir (Dir=1 numr in sus, iar cu Dir=0 numr in jos), iar Clr este semnalul de reset activ in 1. Module counter10 Title Numarator zecimal bidirectional cu reset sincron "intrari Clk pin; "semnalul de ceas Clr,Dir pin; " reset si directie de numarare Dir=1 up /Dir=0 down "iesiri Q3..Q0 pin istype reg; "registre si iesiri numarator "Definim si asignam starile numaratorului S0 = ^b0000; S4 = ^b0100; S8 = ^b1000; S1 = ^b0001; S5 = ^b0101; S9 = ^b1001; S2 = ^b0010; S6 = ^b0110; S3 = ^b0011; S7 = ^b0111; "Numaratorul propriu-zis ca vector CNT = [Q3,Q2,Q1,Q0]; Equations "ceasul pentru toate bistabilele CNT.CLK = Clk; State_diagram [Q3,Q2,Q1,Q0] State S0: if Clr then S0 "reset else if Dir then S1 " in sus else S9; "sau in jos State S1: if Clr then S0 else if Dir then S2 else S0; State S2: if Clr then S0 else if Dir then S3 else S1; State S3: if Clr then S0 else if Dir then S4 else S2; State S4: if Clr then S0 "si intrarea de reset asincrona

26

Circuite integrate numerice Limbajul ABEL si aplicatii ale circuitelor CPLD else if Dir then S5 else S3; State S5: if Clr then S0 else if Dir then S6 else S4; State S6: if Clr then S0 else if Dir then S7 else S5; State S7: if Clr then S0 else if Dir then S8 else S6; State S8: if Clr then S0 else if Dir then S9 else S7; State S9: if Clr then S0 else if Dir then S0 else S8; End counter10 11.7 Main secvenial sincron Maina sincron are trei stri: A,B si C. Mai are trei intrri: start, hold si reset si trei iesiri: halt(sincron-ca o masin Moore), in_B si in_C (asincrone-ca o masin Mealy). Mai exist, evident, si o intrare de ceas(tact) clock precum i o intrare de activare enab, pentru ieiri, care sunt de tip tri-state. Urmtoarea diagram de stare descrie tranziiile de stare i iesirile mainii. Maina pornete din starea A si rmane acolo pn cnd intrarea start devine 1. Trece apoi n starea B, n starea C i napoi n starea A.

27

Circuite integrate numerice Limbajul ABEL si aplicatii ale circuitelor CPLD Rmane n starea A pan cand start devine din nou activ n 1. Daca intrarea reset este activ, n 1, maina se intoarce n starea A la urmtorul semnal de ceas(tact). Dac acest reset apare n starea B, o ieire sincron halt se activeaz (n 1) i rmane activ pn cnd start devine activ din nou. Pe durata strilor B si C, ieirile asincrone in_B si in_C trec n 1 pentru a indica starea curent. Activarea intrrii hold (in 1) face ca maina s rmn n starea B sau C pn cnd hold devine inactiv sau se activeaz reset. Valoarea vectorilor de stare este aleas astfel ca la pornire (power-up), cnd toate registrele(bistabilele) sunt iniializate implicit n 0, s se plece dintr-o stare cunoscut, starea A (registrul de stare este 00)!!. module Masina de paine title 'Exemplu de masina secventiala'; q1,q0 pin istype 'reg,buffer'; clock,enab,start,hold,reset pin; halt pin istype 'reg, buffer '; in_B,in_C pin; ''definim registrul de stare, avem nevoie de 2 registre(bistabile) sreg = [q1,q0]; ''Definim si valorile starilor ... A = 0; B = 1; C = 2; equations [q1, q0, halt].clk = clock; [q1, q0, halt].oe = !enab; state_diagram sreg; State A: ''Sta in starea A pana cand start devine activ. in_B = 0; in_C = 0; IF (start & !reset) THEN B WITH halt : = 0; ELSE A WITH halt : = halt; State B: ''trece in starea C daca reset nu este activ in_B = 1; ''sau hold este activ; halt devine activ daca avem reset in_C = 0; IF (reset) THEN A WITH halt : = 1; ELSE IF (hold) THEN B WITH halt : = 0; ELSE C WITH halt : = 0; '' State C: ''Se intoarce in A daca halt nu este activ. in_B = 0; ''Reset-ul este prioritar fata de hold. in_C = 1; IF (hold & !reset) THEN C WITH halt : = 0; ELSE A WITH halt : = 0; ''aici vectorii de test... end

28

Circuite integrate numerice Limbajul ABEL si aplicatii ale circuitelor CPLD 11.8 Proiectarea ierarhic Proiectarea ierarhic reprezint o modalitate de a dezvolta aplicaii mai complexe ca un tot unitar. Mai reprezint si un mod util de organiza si structura un proiect ABEL-HDL. Vor exista mai multe module, din care unul pe nivelul superior (numit si nivel top) si cel puin unul pe un nivel inferior. La rndul lor modulele de pe nivelele inferioare pot instania (apela) alte module aflate pe nivele inferioare fa de ele. In modulul de pe nivelul superior interfaa (intrri->iesiri) este definit cu ajutorul cuvntului cheie INTERFACE, iar identificarea instanei modulului este fcut cu FUNCTIONAL_BLOCK (pot exista mai multe instanieri ale aceluiasi modul). Vom prezenta un exemplu elementar, pur didactic, in care vom implementa, la nivelul top, o poart NAND cu ajutorul unui modul AND definit pe un nivel inferior. Sursa pentru modulul top este urmtoarea: MODULE NAND1 TITLE 'Poarta NAND ierarhica instantiaza o poarta AND.' I1, I2, O1 pin; and1 INTERFACE(IN1, IN2 -> OUT1); my_and functional_block and1; EQUATIONS my_and.IN1 = I1; my_and.IN2 = I2; O1 = ! my_and.OUT1; END Modulul de pe nivelul inferior este descris de sursa urmtoare: MODULE and1 TITLE 'Poarta and1 care va fi instantiata de NAND1' IN1, IN2, OUT1 pin; EQUATIONS OUT1 = IN1 & IN2; END Numele pinilor (simbolul asignat) trebuie s fie acelasi (atenie la tipul de litera!) cu cel care apare in declaraia interface din modulul top. Deasemenea numele modulului instaniat (la noi and1) declarat in modulul top trebuie s fie acelasi cu cel care apare in declaraia MODULE din modulul de pe nivel inferior. Este bine ca mai inti s fie create sursele pentru modulele inferioare si dup aceea sursele pentru modulele de pe nivelele superioare. 11.9 Alte descrieri ABEL utile, orientate pe arhitectura CPLD Xilinx 11.9.1 Crearea semnalelor bi-directionale Exemplul este util pentru implementarea unor registre de stare, la care biii individuali din componena acestora pot fi scrii sau citii, prin intermediul datelor vehiculate pe o magistral tri-state. Avem doi bistabili (doua registre) out0 si out1. Semnalele de ceas strobe0 si strobe1 precum i cel de activare a bufferului de iesire read se presupune ca au fost definite anterior. Data de pe pinul de pe intrare poate fi scris in registrul out0 astfel:

29

Circuite integrate numerice Limbajul ABEL si aplicatii ale circuitelor CPLD out0:= out0.pin; out0.clk = strobe0; `` data de pe pin in registru `` pe frontul crescator al lui strobe0

Data din out0 este citit napoi pe pin(pe magistral) astfel: out0.oe = read; `` read este activ in 1

n out1 se va scrie un 1, pe frontul cresctor al lui strobe1, numai cand starea lui out0 si cea pinului este diferit (un XOR): out1 : = out0.q $ out0.pin; out1.clk = strobe1; 11.9.2 Multiplexarea a dou sau mai multe semnale de iesire O modalitate simpl este de lega impreun pinii de iesire corespunztori celor dou semnale multiplexate (dout1, dout2) si de a utiliza bufferele de iesire tri-state(comandate cu select si !select). La un moment dat nu trebuie s fie activ (n 1) dect un singur semnal de control al bufferului, deci numai o iesire poate fi activ, restul fiind in tri-state. Acesta este si motivul pentru care semnalele de comand pentru aceste buffere, in exemplul nostru, sunt complementare.

Legate impreuna in afara circuitului

dout0 : = data0; dout1 : = data1; dout0.oe = select; dout1.oe = !select;

30

Circuite integrate numerice Limbajul ABEL si aplicatii ale circuitelor CPLD Se poate utiliza multiplexorul dintr-o alt macrocelul i data s fie adus la ieire printr-un singur pin. Dezavantajul este c se foloseste o macrocelul pentru fiecare bit al multiplexorului. n exemplul de mai jos s0 = = select. dout = data0 & select # data1 & !select;

Se mai poate utiliza i registrul(bistabilul) din macrocelula respectiv pentru a scurta timpul de propagare de la intrarea de ceas la ieire (tCO). dout := data0 & select # data1 & !select;

Observatie La toate circuitele CPLD ale firmei Xilinx nu exist posibilitatea implementrii unei magistrale interne de tip tri-state.

31