Sunteți pe pagina 1din 30

INTRODUCERE IN LIMBAJUL ABEL-HDL

1. Limbaje de descriere hardware (HDL-Hardware Description language)

Metodele tradi ionale de proiectare a unui sistem numeric (circuit logic) sunt cele bazate pe ecua iile booleene sau pe reprezentarea schematic . Orice circuit logic este alcatuit pan la urm dintr-un num r oarecare de por i si/sau circuite bistabile, care sunt blocurile func ionale de baz . Proiectarea se f cea in mod tradi ional pe baza ecua iilor boolene. Pentru a optimiza aceast metod s-au dezvoltat tehnici cum ar fi minimizarea ecua iilor, care permite utilizarea mai eficient a por ilor si circuitelor bistabile. Metoda ecua iilor boolene presupune scrierea practic a unei ecuatii, pentru fiecare circuit bistabil si pentru fiecare bloc de por i. Pentru un sistem secven ial num rul de ecua ii este cel putin egal cu cel al circuitelor bistabile(registrelor). Dac sistemul nostru are sute de circuite bistabile vom avea si sute de ecua ii. Astfel, desi teoretic orice sistem numeric poate fi descris pe baza ecua iilor boolene, aceasta descriere(ca metod ) este total nepractic daca avem zeci, sute sau mii de ecua ii. 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 ecua iilor boolene, prin utilizarea si a altor blocuri func ionale, mai complexe decât por ile si circuitele bistabile. Ele prezint avantajul ca permit o proiectare ierarhic si pun in eviden a mai bine rela iile care exist intre diversele blocuri func ionale. Mul i ani de zile

aceste metode au fost considerate optime pentru reprezentarea unui sistem numeric. Odat cu cresterea complexit ii sistemelor reprezentate si ele au devenit nepractice. Se mai utilizeaz pentru sisteme de complexitate mic sau medie. Marele dezavantaj al metodelor tradi ionale de proiectare este c un sistem trebuie specificat ca o re ea de elemente interconectate. In realitate ins un sistem numeric este specificat prin comportarea (behaviour) sa in anumite circumstan e specificate. Proiectantul trebuie s ajung de la aceasta form de specificare la un set de ecua ii 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 tradi ionale este modul in care este descris un sistem

complex. Este greu s lucr m cu sute de ecua ii, dar este inc posibil. Un sistem ins , care ar

fi descris prin mii de ecua ii, este practic inabordabil prin aceast metod . Mai mult, si o

reprezentare schematic in care apar sute sau mii de blocuri func ionale devine de nein eles. O descriere din punct de vedere al comport rii 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 (HDL- Hardware 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. ABEL este un limbaj HDL care poate fi utilizat pentru a descrie comportarea unui sistem sub mai multe forme, cum ar fi: ecua ii logice, tabele de adev r sau diagrame de stare, utilizând instruc iuni similare cu cele din limbajul C. Un compilator ABEL permite i simularea func ional a sistemului folosind vectorii de test, precum i implementarea sa 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).

1

2. Structura unui fi ier surs ABEL Un fi ier surs ABEL const din urm toarele elemente:

Antet(Header): incluzând Module, [ Options i Title ] Declara ii: Pin, Constant, Node, Sets, States, Library. Descrieri logice: Equations, Truth-table sau State_diagram [Vectori de test: Test_vectors ] End

Cuvintele cheie ale limbajului (recunoscute de ABEL drept comenzi, directive, etc.) nu sunt dependente de tipul de liter folosit (mare sau mic) pe când identificatorii defini i de utilizator depind de tipul de liter !!. De exemplu MODULE este acela i 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 declara ie), STATE(în state_diagram), STATE_DIAGRAM, STATE_REGISTER, TEST_VECTORS, THEN, TITLE, TRACE, TRUTH_TABLE, TEST_VECTORS, WITH .

Urm toarea 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

PAL200 device '22V10';

" pini intrare

A, B

" pini iesire

SUM, Carry_out

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

'semisumator '

pin 3, 5;

pin 15, 18 istype 'com';

2

3. Declara ii Module: fiecare fi ier surs începe cu o astfel de instruc iune urmat de un nume al modulului (identificator). Proiectele mari pot con ine mai multe module, fiecare cu propriile declara ii title, equations, end, etc.

Title: este op ional 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 instruc iunile TITLE, OPTIONS , precum i în declararea atributelor pentru pin i node.

device: este o declara ie op ional i asociaz un identificator de dispozitiv cu un anume circuit PLD. Este de dorit evitarea utiliz rii acestei declara ii în fi ierul surs deoarece astfel se p streaz independen a proiectului de tipul de circuit. Atunci când se lucreaz cu un mediu de programare integrat declararea tipului de circuit se face la crearea proiectului, dar poate fi modificat oricând i ulterior.

comentarii: comentariile pot ap rea oriunde în fi ierul surs ,

încep cu ghilimele duble ( ") i

se termin fie tot cu ghilimele duble, fie la sfâr itul liniei (care situa ie apare prima) .

pin: prin aceste declara ii compilatorul asociaz numele simbolice cu conexiunile externe ale dispozitivului. Formatul este urm torul (pin_id - identificator pin):

[!]pin_id

pin

[nr. sau cod pin]

[istype 'atribut'] ;

Se pot specifica mai mul i pini pe aceia i linie sursa:

[!]pin_id , [!]pin_id, [!]pin_id

pin

Exemplu:

IN1, IN2, A1 pin 2, 3, 4;

OUT1

ENABLE

pin 9

istype 'reg';

pin;

pin 12 istype 'com';

istype 'com';

pin

!Chip_select

!S6

!S0

[nr. pin, [nr. pin, [nr. pin]]]

[istype 'atribut'];

Nu este neap rat nevoie s specific m un num r de pin. Numerele de pin pot fi specificate i mai târziu, în faza de implementare a proiectului, utilizând un fi ier de constrângeri utilizator (user constraint file), proiectul având astfel un caracter mai general i mai flexibil. ! indic un semnal activ în 0 -Low ( semnalul va fi inversat). istype este un atribut op ional; variante: 'com' pentru a indica natura combina ional a semnalului de ie ire sau 'reg' pentru un semnal de tip registru (memorat într-un bistabil). Acest atribut este folosit doar pentru pini de ie ire sau noduri interne (node).

node: declara iile node (nod intern) au acela i format ca declara iile pin; fiind îns vorba de semnale interne care nu au ca echivalent o conexiune extern , num rul de pin lipse te. Exemplu: temp1 node [istype 'com'];

3

alte declara ii permit definirea unor constante, mul imi (sets), macro-uri sau expresii care pot simplifica programul. Declararea unei constante are urm torul 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 declara ii sunt echivalente. Folosirea "

" reprezint o modalitate comod de

descriere a unui domeniu (range). Declara ia respectiv utilizeaz practic o nota ie vectorial :

de fiecare dat când vom folosi Data într-o ecua ie 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 semnifica ie special . Cele mai importante sunt :

.C. , .c. – descrie o tranzi ie complet a unui semnal de ceas folosit ca intrare (L,H,L; _| -- |_ ) .X. , .x. – descrie o valoare indiferent (don’t care) .Z., .z. - descrie o valoare tri-state

4. Numere

Numerele pot fi utilizate folosind patru baze de numera ie diferite:

zecimal i hexazecimal. Baza implicit este zecimal (f r prefixare). Se utilizeaz urm toarele prefixe:

Binar

Octal

Zecimal

Hexazecimal ^h

^b

^o

^d (implicit)

binar, octal,

Exemple: 35 , ^h35 , ^b101, ^h4FFB

5. Mul imi (sets)

O mul ime este o colec ie de semnale sau constante utilizate pentru a face referire la un

grup de semnale folosind un singur nume. Utilizarea mul imilor simplific semnificativ

opera iile logice: orice opera ie aplicat unei mul imi este aplicat de fapt fiec rui element al ei. O mul ime este descris printr-un ir de constante sau semnale, separate prin virgul sau

operatorul domeniu ( Exemple:

), ir cuprins obligatoriu între paranteze p trate [] .

[D0,D1,D2,D4,D5]

[D0

[b6

D6]

b0]

" domeniul poate fi enumerat cresc tor " domeniul poate fi enumerat si descresc tor

[D7 D15]

[b1,b2,a0

a3]

" un (sub)domeniu într-o mul ime mai mare

[!S7 !S0]

" domeniu descresc tor de semnale declarate active –low (în 0)

4

Urm toarea declaratie nu este permis : [D0, X] , unde X este de asemenea o mul ime X =

[X3

b. Opera ii cu mul imi Cea mai mare parte a opera iilor poate fi aplicat i unei mul imi, opera ia efectuându- se asupra fiec rui element al mul imii. Opera iile se efectueaz conform priorit ii

operatorilor, opera iile cu aceia i prioritate se efectueaz de la stânga la dreapta (dac nu exist paranteze). Exemplul 1:

X0];

în schimb se poate scrie corect: [D0, X3

X0];

Semnale = [D2,D1,D0];

Semnale = [1,0,1] & [0,1,1]; " rezulta Semnale = [0,0,1]

" declararea multimii Semnale

Exemplul 2:

[A,B] = C & D;

A = C & D;

B = C & D;

este de fapt echivalent cu dou instruc iuni:

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 urm toarei expresii lucrurile stau pu in diferit: 2 & [A,B,C]; acum num rul zecimal "2" este convertit în reprezentare binar i completat cu zerouri dac este necesar (010). Astfel ecua ia 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;

Exemplul 6:

este echivalent cu

[!A2,!A1,!A0];

[b3,b2,b1,b0] = 2; " echivalent cu b3=0,b2=0,b1=1,b0=0.

Exemplul 7: S presupunem c avem urm toarea ecua ie (pentru ie irea unui decodificator):

Chip_Sel = !A7 & A6 & A5 & A4; Mai întâi definim mul imea Adr :

Adr = [A7,A6,A5,A4]; Ecua ia propriu-zis va fi:

Chip_Sel = Adr == [0,1,1,1]; Care este echivalent cu:

Chip_Sel = !A7 & A6 & A5 & A4; Dac A7=0, A6=1 , A5=1 si A4=1 expresia Adr ==[0,1,1,1] este adev rat (sau 1) i Chip_Sel va fi i el 1 (sau adev rat). Alt modalitate de a scrie aceia i ecua ie este:

5

Chip_Sel = Adr == 7; " 7 zecimal =

0111 binar.

6. Operatori Exist patru tipuri de operatori de baz : logici, aritmetici, rela ionali 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 prezenta i operatorii aritmetici. Ultimii cinci operatori nu pot fi utiliza i cu operanzi de tip mul imi. Semnul - poate avea semnifica ii diferite: prezent între 2 operanzi are semnifica ia de sc dere (sau adunare complement fa de 2), dar prezent în fa a

unui operand are semnifica ia de complement fa de 2.

Operator

Exemplu

Descriere

-

-D1

Complement fa de 2 (schimbare de semn)

-

C1-C2

Sc dere

+

A+B

Adunare

operatori nu sunt folosi i cu mul imi:

Urm torii *

A*B

Înmul ire

/

A/B

Împ r ire întreag f r semn

%

A%B

Modulo: restul lui A/B

<<

A<<B

Deplasare A stânga cu B bi i

>>

A>>B

Deplasare B dreapta cu B bi i

c. Operatori rela ionali Ace ti operatori produc valoarea boolean adev rat True (-1) sau fals False (0). Valoarea –1 în cod complement fa de 2 este reprezentat în binar având to i bi ii în 1 (de ex. dac operandul are 8 bi i : 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

Operatorii rela ionali sunt f r semn: !0 este complementul fa de 1 al lui 0 sau 11111111 (dac operandul are 8 bi i) care are valoarea 255 în reprezentare f r semn. Astfel !0 > 9 este adev rat. Din acela i motiv i expresia –1 >5 este adev rat . O expresie rela ional poate fi folosit i împreun cu expresii numerice, ea fiind substituit cu –1 sau 0 func ie de rezultatul evalu rii. De exemplu avem expresia A = B !$ (C == D);

6

aici A va fi egal cu B dac C este egal cu D (adev rat sau 111… ; B XNOR 1 egal cu B) , altfel A va fi egal cu complementul lui B .

d. Operatori de asignare

Ace ti operatori sunt folosi i în ecua ii pentru a asigna valoarea unei expresii unui semnal de ie ire sau unui nod intern. Exist dou tipuri de astfel de operatori: combina ionali i de tip registru. În cazul unui operator combina ional asignarea are loc imediat, f r nici o întârziere. În cazul operatorului de tip registru asignarea are loc odat cu urm torul impuls de ceas al bistabilului asociat ie irii sau nodului intern. Un exemplu simplu de definire a unui bistabil ar fi :

Q1 pin istype 'reg'; Q1 : = D; Prima instruc iune (declara ie) define te bistabilul Q1, iar a doua instruc iune (ecua ie) spune c ie irea bistabilului va lua valoarea intr rii D la urm toarea tranzi ie activ a semnalului de ceas.

Operator

Descriere

=

Asignare combina ional

: = Asignare de tip registru

e. Prioritatea operatorilor(preceden a) Prioritatea operatorilor este dat în urm torul tabel , în ordine cresc toare de la 1 la 4. Operatorii cu aceia i prioritate sunt evalua i de la stânga la dreapta.

Prioritate

Operator

Descriere

1

-

Negare

1

!

NOT

2

&

AND

2

<<

deplasare stânga

2

>>

deplasare dreapta

2

*

înmul ire

2

/

împ r ire f r semn

2

%

modulo

3

+

adunare

3

-

sc dere

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

7. Descrierea logic Descrierea logic poate fi f cut cu ajutorul ecua iilor, tabelelor de adev r sau a diagramelor de stare.

7

a. Ecua ii ( equations ) Se utilizeaz cuvântul cheie equations pentru a începe descrierea logic . Expresiile pot con ine operatorii descri i anterior precum i instruc iunea "When-Then-Else". Instruc iunea "When-Then-Else" poate fi folosit în ecua ii pentru a descrie o func ie logic (ea se mai utilizeaz i în diagramele de stare pentru a descrie o succesiune de st ri).

Formatul instruc iunii "When-Then-Else" este urm torul :

WHEN condi ie THEN element = expresie; ELSE ecua ie;

sau

WHEN condi ie THEN ecua ie;

Exemple de ecua ii:

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 sec iuni în blocuri. Textul dintr-un bloc poate avea una sau mai multe linii. Blocurile pot fi folosite în ecua ii, tabele de adev r sau directive.

b. Tabele de adev r ( truth_table ) Cuvântul cheie este truth-table i sintaxa este:

TRUTH_TABLE ( in_ids - > out_ids ) intr ri - > ie iri ;

sau

TRUTH_TABLE ( in_ids : > reg_ids ) intr ri : > ie iri_regi trii ;

sau

TRUTH_TABLE ( in_ids :> reg_ids -> out_ids ) intr ri :> ie iri_regi trii -> ie iri;

în care "->" este folosit pentru ie iri combina ionale i " : >" pentru ie iri de tip registru, in_ids – identificatori intrari , out_ids – identificatori ie iri, reg_ids – identificatori registrii.

8

Prima linie a unei tabele de adev r (între paranteze) define te intr rile i ie irile, iar

urm toarele linii coresponden ele între valorile de intrare i cele de ie ire. Fiecare linie trebuie

. Intr rile i ie irile pot fi semnale singulare sau mul imi. Când se utilizeaz mul imi se folose te nota ia normal pentru acestea (5). O valoare indiferent este reprezentat prin ".X." (o constant predefinit a limbajului ABEL).

s se termine cu

;

Examplul 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 mul ime IN = [A,B]; i respectiv o mul ime OUT = [Sum, Carry_out]; tabela de adev r poate deveni mai simpl :

TRUTH_TABLE (IN -> OUT )

0 -> 0;

1 -> 2;

2 -> 2;

3 -> 3;

Exemplul 2: Un XOR cu dou intr ri 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 adev r pot fi utilizate i pentru descrierea ma inilor secven iale, în cazul acestui exemplu fiind vorba de un num r tor binar sincron de 3 bi i, cu ie irea de transport OUT (generat în starea 111). Se utilizeaz 3 bistabili QA, QB si QC care vor fi i ie irile num r torului. MODULE CNT3; "declaratii

CLOCK

pin; " intrare ceas

RESET

pin; " intrare reset

OUT

pin istype 'com'; " iesire transport (combina ional)

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)

[

0 0 0 ]

 

:> [ 0 0 1 ]

-> 0;

[

0 0 1 ]

:> [ 0 1 0 ]

-> 0;

[

0 1 0 ]

:> [ 0 1 1 ]

-> 0;

[

0

1 1

]

:> [ 1 0 0 ]

-> 0;

[

1 0 0 ]

:> [ 1 0 1 ]

-> 0;

[

1 0 1 ]

:> [ 1 1 0 ]

-> 0;

9

[

1 1 0 ]

 

:> [ 1 1 1

]

-> 0;

[

1

1 1

]

:> [ 0 0 0 ]

-> 1;

END CNT3;

Observatie Pentru utilizarea extensiilor de tip .DOT (cum ar fi .CLK i .AR) vezi sec iunea

7d.

c. Diagrame de stare ( State_diagram ) Sec iunea State_diagram con ine descrierea logic a unui circuit sub forma unor diagrame de stare. În aceasta sec iune se utilizeaz instruc iunile: "Goto", "Case" si "With". De obicei în sec iunea de declara ii se declar (se utilizeaz ) nume simbolice pentru st ri, programul fiind astfel mai u or lizibil. Declararea se face cu urm toarea 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 alc tuiesc practic un registru de stare). Sintaxa este urm toarea:

State_diagram registru_stare STATE valoare_stare : [ecuatie;] [ecuatie;]

:

:

instructiune_tranzitie_stare ;

Cuvântul cheie state_diagram indic începutul unei descrieri de ma in secven ial . Cuvântul cheie STATE i instruc iunile urm toare descriu o stare din diagrama de st ri, ele incluzând o valoare a st rii sau un nume simbolic pentru stare, o instruc iune care descrie tranzi ia st rii i, op ional, o ecua ie care descrie o ie irile asociate st rii. În descrierea de mai sus registru_stare este un identificator pentru semnalele care definesc starea ma inii secven iale. Se poate utiliza o nota ie simbolic a registrului de stare, definit anterior în sec iunea declara ii. valoare_stare: poate fi o expresie , o valoare sau un nume simbolic pentru starea curent . ecuatie : op ional, o ecua ie care descrie ie irile asociate st rii instructiune_tranzitie_stare: instruc iunile "If-Then-Else", CASE sau GOTO utilizate pentru a descrie starea urm toare; op ional sunt urmate de ecua iile de tranzi ie descrise cu o instruc iune WITH.

Instruc iunea If-Then-Else:

Este utilizat pentru a descrie urm toarea stare i pentru a specifica condi iile de tranzi ie mutual exclusive. Sintaxa este urm toarea:

IF expresie THEN expresie _stare [ELSE expresie _stare] ;

Mai sus, expresie_stare poate fi o expresie logic sau un nume simbolic al st rii. Clauza ELSE este op ional . Instruc iunile IF-Then-Else pot fi combinate cu instruc iuni Goto, Case i With.

10

OBS. "IF-Then-Else" poate fi utilizat doar în sec iunea state_diagram; pentru descrierea unor func ii logice combina ionale (sec iunea ecua ii) se utilizeaz "When-If-Then".

În urm torul exemplu (o ma in cu 2 st ri i dou ie iri) se define te mai întâi registrul de stare, în sec iunea declara ii:

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;

Instruc iunile "If-Then-Else" pot fi de asemenea imbricate.

Instruc iunea "with":

Sintaxa instruc iunii este:

instructiune_tranzitie_stare expresie_stare WITH ecuatie

[ecuatie ]

;

Unde instructiune_tranzitie_stare poate fi o instruc iune "If-then-else", 'Goto" sau "Case"; expresie_stare descrie starea urm toare, iar ecua ie este ecua ia care descrie ie irile asociate st rii. În locul unei simple expresii de stare se pot utiliza tot instruc iunile "If-Then-Else", "Goto" sau "Case".Instruc iunea "With" permite ca ecua iile de ie ire s fie scrise în termeni de tranzi ii. Exemplul 1:

if ( X#Y==1 ) then S1 with Z=1 else S2; În exemplul de mai sus ie irea Z va fi 1 în momentul în care expresia este evaluat ca fiind adev rat (tranzi ia f cându-se în starea S1). Expresia care apare împreun cu WITH poate fi orice expresie care va fi îns evaluat doar când condi ia anterioar este adev rat , ca în exemplul urm tor:

if X&!Y then S3 with Z=X#Y else S2 with Z=Y;

Instruc iunea este util i în descrierea ie irilor de tip registru deoarece aceste ie iri vor fi actualizate la urm torul ciclu al semnalului de ceas. Este astfel posibil s descriem c o anumit ie ire de tip registru va avea o valoare specific dup o anumit tranzi ie, ca în urm torul 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 asign ri asociat instruc iunii With.

11

Dimensiunea timp trebuie avut în vedere atunci când instruc iunea WITH se folose te împreun cu ie iri combina ionale sau asincrone (ca în cazul unei ma ini Mealy). La o ma in Mealy ie irile se modific în momentul în care se modific intr rile, astfel c ie irile vor fi stabile doar la sfâr itul unui timp de stare (înainte de tranzi ia activ a semnalului de ceas). Din acest punct de vedere o ma in Moore (cu ie iri sincrone cu starea) este mai avantajoas .

Instruc iunea Case :

Sintaxa este urm toarea:

CASE expresie : expresie _stare; [ expresie : expresie _stare; ]

:

ENDCASE ;

Unde expresie este orice expresie ABEL valid i expresie_stare descrie starea urm toare (urmat op ional de instruc iunea WITH). Exemplu:

State S0:

case ( A == 0) : S1; ( A == 1) : S0; endcase;

Instruc iunea case este utilizat pentru a specifica o secven de condi ii de tranzi ie mutual exclusive, corespunzând urm toarei st ri. Condi iile specificate trebuie s fie mutual exclusive (dou tranzi ii nu pot fi adev rate în acela i timp), în caz contrar rezultatele (tranzitia la starea urm toare) sunt imprevizibile.

d. Extensii de tip .DOT

Aceast categorie de facilit i 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) putând 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 urm tor.

Extensie

Independente de arhitectur sau extensii pin-to-pin (pin la pin)

Descriere

.ACLR

Reset asincron

.ASET

Preset asincron

.CLK

Intrare de ceas într-un bistabil cu comutare pe front.

.CLR

Reset sincron

.COM

Reac ie combina ional provenind de la intrarea de date

.FG

Reac ie registru (bistabil)

.OE

Activare ie ire (de tip buffer tri-state)

.PIN

Reac ie pin

.SET

Preset sincron

12

Extensii specifice circuitului (dependente de arhitectur )

.D

Intrare date într-un bistabil de tip D

.J

Intrare J într-un bistabil de tip

.K

Intrare K într-un bistabil de tip JK

.S

Intrare S într-un bistabil de tip SR

.R

Intrare R într-un bistabil de tip SR

.T

Intrare T într-un bistabil de tip T

.Q

Reac ie registru (bistabil)

.AP

Preset asincron

.AR

Reset asincron

.SP

Preset sincron

.SR

Reset sincron

Figura urm toare ilustreaz câteva din aceste extensii.

urm toare ilustreaz câteva din aceste extensii. (a) independent de arhitectur Exemplul 1: [S7 S0].oe =

(a) independent de arhitectur

Exemplul 1:

[S7

S0].oe

= ACTIV;

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

S0. Când ACTIV

este în 1 ie irile sunt active, în caz contrar(ACTIV=0) ie irile respective sunt în starea de

înalt impedan (High-Z). Exemplul 2:

Q.AR = reset; Y.AR = reset; [Z.ar, Y.ar] = reset; aici ie irea bistabilelor Z si Y va fi adus în 0 dac intrarea reset este în 1.

unde semnalul ACTIV controleaz bufferele tri-state ale celor 8 ie iri S7

Pentru în elegerea semnifica iei acestui tip de extensii vom exemplifica cu ajutorul unei ecua ii care folose te operatorul de asignare tip registru(:=) i unde Preset este o intrare :

Q1 := !Q1 # Preset; Aici Q1 î i va men ine starea (valoarea curent ) pân în momentul în care elementul de memorie (circuitul bistabil) asociat cu acest semnal prime te un semnal de ceas. Acesta ecua ie reprezint o descriere pin-to-pin a semnalului de ie ire Q1. Ea descrie comportarea semnalului în termeni de valori dorite pentru pinul de ie ire func ie de intrare i este complet independent de arhitectura dispozitivului utilizat pentru implementare.

13

Totu i, în ecua ia de mai sus exist o condi ie ambigu de reac ie pentru elementul de memorie. Semnalul Q1 apare în partea dreapt a ecua iei, dar nu avem nici o informa ie de unde anume provine aceast reac ie: direct din logica combina ional care formeaz intrarea

bistabilului sau din pinul de ie ire asociat cu semnalul Q1. Nu exist de asemenea nici o informa ie despre ce tip de bistabil se va utiliza (de i algoritmii de sintez pot , teoretic, plasa acesta ecua ie în orice tip de bistabil posibil). Ecua ia poate fi mai concret astfel:

Q1.CLK = Clock; Q1 := !Q1.FB # Preset;

"Semnal de ceas provenind de la o intrare " Reactie provenind din iesirea bistabilului

Acum setul de ecua ii descrie complet circuitul, informa ia fiind suficient pentru ca acest circuit s func ioneze indiferent de dispozitivul în care va fi implementat. Reac ia provine direct din ie irea 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 acela i circuit poate fi descris i într-o form detailat astfel:

Q1.CLK = Clock; Q1.D = !Q1.Q # Preset;

"Semnal de ceas de la intrare "Se utilizeaza CBB de tip D

În aceast form în care este descris intrarea D a bistabilului i specificat reac ia apar unele restric ii legate de arhitectura dispozitivului în care va fi implementat proiectul. Mai mult, ecua iile descriu doar intrarea i reac ia ne existând nici o informa ie despre configura ia pinului de ie ire. În consecin aceast descriere va func iona diferit când va fi implementat într-un dispozitiv cu ie iri inversate (negate) sau într-unul cu ie iri ne inversate. Pentru a men ine o comportare corect a pinului , folosind descrierea detailat , este necesar un element suplimentar al limbajului: atributul `buffer` (sau complementul s u, atributul `invert`). Atributul `buffer` ne asigur ca în implementarea final nu va exista inversare între ie irea bistabilului i pinul de ie ire asociat cu Q1. Astfel în sec iunea de declara ii trebuie s apar :

Q1 pin istype 'buffer';

Observa ie Pentru un circuit CPLD, si nu numai, o modalitate de a în elege diferen a între descrierea pin-to-pin si descrierea detailat este de a vedea descrierea detailat ca o specifica ie 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 câte ori folosim o descriere pin- to-pin in ABEL, va fi sintetizat o „macrocelul generic ” similar celei din figur , indiferent de tipul particular de macrocelul existent în dispozitivul PLD.

” similar celei din figur , indiferent de tipul particular de macrocelul existent în dispozitivul PLD.

14

8.

Vectori de test

Vectorii de test sunt op ionali i reprezint o modalitate de a verifica func ionarea corect a sistemului numeric proiectat. Ei sunt folositi pentru simularea modelului intern al dispozitivului i testarea func ional a dispozitivului programat. Prin intermediul lor specific m comportarea a teptat a sistemului prin descrierea explicit a ie irilor func ie de intr ri. Sintaxa este urm toarea :

Test_vectors (intrare [, intrare ]

[valori intr ri -> valori ie iri ; ]

:

Ca exemplu vom relua semisumatorul prezentat anterior pentru care vom avea:

-> ie ire [,ie ire]

)

Test_vectors

( [A, B] -> [Sum, Carry] )

[

0, 0 ]

-> [0, 0];

[

0, 1 ]

-> [1, 0];

[

1, 0 ]

-> [1, 0];

[

1, 1 ]

-> [1, 1];

sau utilizând 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 oric ror 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. Instruc iuni care descriu propriet i

ABEL permite transmiterea (în momentul implement rii) unor propriet i specifice dispozitivului PLD prin intermediul instruc iunii property. Aceste propriet i sunt de fapt transmise programului care face implementarea (fitter). Pentru dispozitivele CPLD aceste propriet i includ: viteza de varia ie a ie irilor (timpii de front -slew rate), , puterea consumat , valorile care vor fi preînc rcate în bistabili la power-up, utilizarea resurselor logice (plasare), optimizare sau protejarea la citire . Acelea i propriet i pot fi stabilite i ca op iuni 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. Declara ii de tip active-low (în 0) Un semnal de tip activ în 0 este definit prin prefixarea cu operatorul ! :

!OUT pin istype 'com' ; Când acest semnal va fi utilizat în descrierea logic , el va fi în mod automat complementat.

15

S consider m urm torul exemplu:

module EXEMPLU A, B pin ; !OUT pin istype 'com';

equations

OUT = A & !B # !A & B ;

end

În acest exemplu semnalul de ie ire OUT este XOR-ul între A si B , fiind în 1 (High) când doar una din intr ri este în 1, altcumva fiind în 0. Deoarece semnalul de ie ire a fost îns

declarat activ în 0 (!OUT), pinul de ie ire OUT va fi în 0 doar când numai una din intr ri este

în 1.

Acela i rezultat se putea ob ine inversând pe OUT la nivelul ecua iei i declarându-l doar ca OUT (o descriere explicit pin la pin a semnalului activ în 0), a a cum se vede în exemplul urm tor:

module EXEMPLU A, B pin ; OUT pin istype 'com';

equations

!OUT = A & !B # !A & B ;

end

Declara iile de tip activ în 0 pot fi utilizate i pentru mul imi, ca în urm torul 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 ecua ie 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 modific ri ale fi ierului surs ABEL, în momentul prelucrarii acestora. Se pot include condi ional sec iuni de surs ABEL, se pot include por iuni din alte surse ABEL, se pot afi a diverse mesaje pe parcursul compil rii, 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

}

16

11. Exemple Familia de circuite destinat implement rii acestor circuite este cea de circuite CPLD Xilinx(9500,9500XL,9500XV, Cool Runner) desi ele pot fi implementate si 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 cu litere îngrosate(bold).

11.1. Diverse circuite MSI din familiile logice standardizate

11.1.1 Buffer tri-state, octal, bi-directional 74LS245(74HC245,etc)

tri-state, octal, bi-directional 74LS245 (74HC245,etc) module SN74LS245 title 'Octal Bidirectional Bus
tri-state, octal, bi-directional 74LS245 (74HC245,etc) module SN74LS245 title 'Octal Bidirectional Bus

module SN74LS245

title 'Octal Bidirectional Bus Transceiver'

OE_, DIR

A1

B1

A8

B8

pin; pin istype 'com'; 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

11.1.2 Registru de deplasare, cu încarcare paralel , asincron , 74LS165 (74HCT165,etc)

paralel , asincron , 74LS165 (74HCT165,etc) Module SN74LS165 Title 'Parallel-Load 8-bit Shift
paralel , asincron , 74LS165 (74HCT165,etc) Module SN74LS165 Title 'Parallel-Load 8-bit Shift

Module SN74LS165

Title 'Parallel-Load 8-bit Shift Register, async load'

ShLd, ClkInh, Clk, SER A,B,C,D,E,F,G,H QA,QB,QC,QD,QE,QF,QG QH QH_

pin; pin; node istype 'reg, buffer'; pin istype 'reg, buffer'; 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

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

pe front, cu iesire tri-state 74LS374 (74HCT374, etc.) Module SN74LS373 Title 'Octal D-type Transparent

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;

genereaza un latch transparent in high!! Output.oe = !OC; Test_Vectors ([OC ,C ,Input] -> Output) [

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

19

Module SN74LS374 Title 'Octal edge triggered D-type flip-flops'

OC, CLK

pin;

D8

D1

pin;

Q8

Q1

pin istype 'reg,buffer';

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 aplica iile tipice ale logicii programabile i realizarea unui decodificator pentru spa iul de memorie al unui microprocesor de 8 biti.

anume

Pentru identificarea spa iului specific de adres se utilizeaz cei mai semnificativi bi i

A15

A10,

dintr-o magistral de adrese de 16 bi i(A15

i A15 A10, dintr-o magistral de adrese de 16 bi i(A15 Exist 4 sec iuni de

Exist 4 sec iuni de natur diferit în spa iul de memorie de 64k, fiecare identificat printr-un semnal de ie ire al decodificatorului, i anume:

DRAM: 0000- DFFF H (RAM dinamic) I/O : E000 –E7FF H (porturi intrare /ie ire mapate în memorie)

20

ROM2: F000-F7FF H

(EPROM 2)

ROM1 : F800-FFFF H

(EPROM 1)

Semnalele de ie ire sunt active în 0 (se utilizeaz semnal definite explicit ca fiind active în 0).

simplific substan ial

Utilizarea mul imii Adresa i a nota iei pentru un domeniu ( programul.

)

module dec_mem

title ` decodificator memorie uP `

A15

ROM1,IO,ROM2,DRAM

H,L,X = 1, 0, .X. ; Adresa =[ A15 A0];

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 având 4 bi i: a3

combina ia s1s0=11 (3) având acela i efect ca s1s0=10 (2). Ie irea este reprezentat de

y3

Se utilizeaz dou semnale de selec ie (s1,s0) ,

a0,

b3

b0

i c3

c0.

Folosirea instruc iunii when

then permite cea mai compact descriere a unui multiplexor. Pentru toate grupele de semnale relevante s-au utilizat mul imi: select, a, b, c i y.

a unui multiplexor. Pentru toate grupele de semnale relevante s-au utilizat mul imi: select, a, b,
a unui multiplexor. Pentru toate grupele de semnale relevante s-au utilizat mul imi: select, a, b,

21

module Mux12to4

title `multiplexor 12 la 4 `

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]

->

y)

[

0 , 1, X, X]

->

1;

``select = 0

a->y

[

0 ,10, H, L]

->

10;

[

0 , 5, H, L]

->

5;

[

1 , H, 3, H]

->

3;

``select = 1

b->y

[

1 ,10, 7, H]

->

7;

[

1 , L,15, L]

->

15;

[

2 , L, L, 8]

->

8;

``select = 2

c->y

[

2 , H, H, 9]

->

9;

[

2 , L, L, 1]

->

1;

[

3 , H, H, 0]

->

0;

``select = 3

c->y

[

3 , L, L, 9]

->

9;

3 , H, L, 0] end

[

->

0;

11.3 Comparator de 4 bi i

În acest exemplu este prezentat un comparator de 4 bi i cu dou intr ri generice de 4

oferind 4 ie iri active în 1 (NE- diferit , EQ- egal, GT- mai

bi i A (A3

A0)

i B (B3

B0),

mare i LT- mai mic) .

Tem S se completeze corespunz tor vectorii de test care s permit verificarea din punct de vedere func ional a tuturor celor 4 ie iri. Pentru vectorii de test se pot defini i utiliza constante corespunz toare, care s u ureze scrierea.

22

module comp4 title ` comparator 4 biti ` A3 A0 pin ; A = [A3

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

(A = = B)); Test_vectors `` aici vectorii de test !!! end 11.4 Decodificator pentru un

11.4 Decodificator pentru un afi or 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 stabile te o coresponden între m rimea de intrare de 4 bi i interpretat ca un cod BCD de 4 bi i (cifre între 0 i 9) si un sistem de afi are alfanumeric organizat sub forma a 7 segmente. Prin aprinderea diferit a segmentelor este posibil afi area cel pu in a cifrelor de la 0 la 9. Cele 7 segmente sunt notate de la a la g pozi ia lor fiind standard pentru toate afi oarele (vezi asignare în comentariu si figura). Decodificatorul este realizat pentru un afi or cu anod comun, aprinderea segmentului (ON) presupunând c ie irea respectiv este adus în 0 logic. Pentru afi oarele cu catod comun ie irea este activ în 1 si este suficient s modific m doar definirea constantelor ON si OFF. Mai exist i o intrare de activare Ena, activ în 0 logic. Când intrarea este inactiv (Ena =1 ), ie irile sunt aduse în starea de înalt impedan (High -Z) toate segmentele fiind stinse, indiferent de starea intr rilor.

23

module bcd7 title `dec afisor 7segmente ` `` identificare segmente `` -a- `` f| ``

module bcd7

title `dec afisor 7segmente ` `` identificare segmente `` -a-

`` f|

``

`` e|

`` -d-

D3,D2,D1,D0,Ena pin;

a,b,c,d,e,f,g

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

-g-

|b

|c

pin istype `com`;

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 Num r tor universal de 4 bi i Urm torul exemplu ilustreaz implementarea unui num r tor binar sincron de 4 bi i. Num r torul este bidirec ional, sensul de num rare fiind controlat prin intermediul intr rii

u_d . De asemenea num r torul poate fi înc rcat paralel, intrarea de înc rcare fiind ld (activ

Este posibil i oprirea/pornirea

Exist i o

în 1) i intr rile corespunz toare de date fiind d3

num r rii cu ajutorul intr rii cnten (1 num r , 0 - oprit). Ie irile sunt q3 intrare asincron de aducere în 0(reset) numit rst.

d0.

q0.

24

Descrierea func ion rii se face cu ajutorul ecua iilor i nu al diagramelor de stare, fiind mult mai compact în acest caz. Exist 4 moduri de operare ale num r torului:

- înc rcare paralel (sincron ) a datelor de pe intr rile de date (LOAD)

- num rare oprit (HOLD)

- num r în sus (DOWN)

- num r în jos (UP) Modul înc rcare este prioritar, activarea intr rii ld (în 1) f când ca ie irile q s ia valoarea intr rilor d , la urm torul semnal de ceas (înc rcare sincron ). Modul num rare oprit este al doilea ca prioritate; pentru a num ra este necesar ca intrarea cnten=1. În momentul în care cnten = 0 (dac i ld=0) num rarea se opre te, ie irile q p strându- i valoarea avut în acel moment.

= 0) în momentul în care intrarea rst =1 (asincron,

independent de evolutia intrarii de ceas) . Asign rile pentru mul imea count sunt asign ri de tip registru (: =), to i bistabilii au acela i semnal de ceas i respectiv acela i semnal de reset asincron (se utilizeaz extensiile .DOT de tip .clk i .ar).

Num r torul este resetat (q3

q0

tip .clk i .ar). Num r torul este resetat ( q3 q0 module unicnt4 title `

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] ; LOAD = (MODE = = [ X , 1, X ]);

HOLD = (MODE = = [ 0 , 0, X ]);

UP =

DOWN = ( MODE = = [ 1 , 0, 0 ] ); " careia i se asigneaza o valoare

"Modul de lucru este definit "ca o multime de valori ale " intrarilor de control. " Numele simbolic este definit ca multimea MODE

(MODE = = [ 1 , 0, 1 ]);

25

equations

when

LOAD then count := data

"incarca date paralel

else when UP

then count := count + 1

"numara in sus

else when DOWN then count := count - 1

" numara in jos

else when HOLD count.clk = clk; count.ar = rst;

then count := count;

"opreste numararea "semnalul de ceas pentru toti bistabilii "si intrarea de reset asincrona

test_vectors "aici vectori de test end

11.6 Ma in secvential sincron Ma ina sincron are trei st ri: A,B si C. Mai are trei intr ri: 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 ie iri care sunt de tip tri-state. Urm toarea diagram de stare descrie tranzi iile de stare i iesirile ma inii. Ma ina porne te din starea A si r mane acolo pân când intrarea start devine 1. Trece apoi în starea B, în starea C i înapoi în starea A. R mane în starea A pan cand start devine din nou activ în 1. Daca intrarea reset este activ , în 1, ma ina se intoarce în starea A la urm torul semnal de ceas(tact). Dac acest reset apare în starea B, o ie ire sincron halt se activeaz (în 1) i r mane activ pân când start devine activ din nou. Pe durata st rilor B si C, ie irile asincrone in_B si in_C trec în 1 pentru a indica starea curent . Activarea intr rii hold (in 1) face ca ma ina s r