Sunteți pe pagina 1din 27

UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR

LABORATOR nr. 11
Unitile de control. Proiectarea unui microprocesor. Scopul laboratorului
n cadrul acestei lucrri se prezint modul n care sunt realizate unitile de control. Se vor uni cele dou componente, calea de date i unitatea de control, se vor scrie codurile VHDL corespunztoare i se vor testa funcionarea acestora.

Uniti de control consideraii teoretice


n laboratorul 10 am vzut cum este proiectat calea de date i cum este folosit pentru a executa un anumit algoritm prin specificarea cuvintelor care controleaz calea de date pentru fiecare ciclu de ceas. Am testat calea de date prin setarea manual a semnalelor cuvntului de control n timpul simulrii. Totui, pentru a avea o cale de date care s execute automat secvenele n conformitate cu cuvintele de control, este necesar o unitate de control care s genereze automat semnalele cuvintelor de control la fiecare ciclu de ceas. O unitate de control este o main cu stri finite n interiorul microprocesorului. Unitatea de control controleaz operaiile cii de date prin trecerea treptat printr-o secven de stri. Pentru fiecare stare n care se afl unitatea de control, logica de ieire care se afl n interiorul unitii de control va genera toate semnalele de control potrivite pentru calea de date astfel nct s execute o operaia asupra datei. Aceste operaii asupra datei se refer la operaiile de tip transfer-registru. Fiecare operaie de transferregistru este alctuit din citirea unei valori dintr-un registru, modificarea valorii acestuia de ctre una din sau mai multe uniti funcionale, iar n final, scrierea valorii modificate napoi n acelai registru sau n alt registru. Din moment ce o unitate de control este o main cu stri finite, circuitul pentru aceasta rezult exact aa cum a fost discutat i n laboratorul 6 care coninea un circuit cu urmtoarea stare, registrul de memorarea a strii i un circuit logic de ieire. Totui, circuitele secveniale sintetizate n laboratorul 6 erau FSM-uri de sine stttoare i nu au fost utilizate ca fcnd parte din circuite mai mari. Ceea ce dorim acum este s sintetizm FSM-uri ca unitate de control pentru microprocesoare. Diferena principal const n modul n care definim i utilizm semnalele de intrare i de ieire a FSM-ului. Modele de FSM au semnale de intrri i de ieire. Pentru o unitate de control, vom dori s fim mult mai precii n privind proveniena semnalelor, unde merg semnalele de ieire i pentru ce vor fi folosite aceste semnale. Exist dou tipuri de semnale de intrare i dou tipuri de semnale de ieire. Intrrile de control sunt semnale de intrare externe principale pentru o unitate de control. Exist semnale externe pentru controlul operaiei microprocesorului. De exemplu, un semnal Start i va spune microprocesorului ca s nceap execuia, sau semnalul de Reset va reseta memoria de stare n starea de iniializare. Semnalele de stare sunt semnale de intrare din calea de date. De obicei, comparatoarele din calea de date genereaz aceste semnale de stare pentru determinarea execuiei ramificaiilor dintr-un algoritm (de exemplu, pentru a testa cnd va fi sau nu nevoie s repetm bucla ). Aceste dou tipuri de semnale de intrare furnizeaz mpreun informaia pentru circuitul logic al strii urmtoare din FSM pentru a determina care dintre strile urmtoare s se execute la urmtorul ciclu de ceas. Ieirile de control sunt n primul rnd semnalele de ieire principale din microprocesor pentru lumea extern. De exemplu, atunci cnd un microprocesor termin 1

UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR de executat un algoritm, el scoate un semnal Done pentru a-i permite utilizatorului s tie ceea ce este realizat iar data care va fi scoas de ctre calea de date este valid. Semnalele de control sunt probabil cele mai importante dintre semnalele de intrare/ieire, din moment ce acestea sunt semnale care controleaz direct operaiile cii de date. La fiecare ciclu de ceas, unitatea de control va genera un set diferit de semnale de control pentru calea de date pentru a executa o operaie a de tip transfer-registru. Unul dintre primele lucruri pe care trebuie s-l facem atunci cnd construim un FSM este acela s generm o diagram de stare. Atunci cnd se scrie o diagram de stare pentru unitatea de control, trebuie s fim foarte ateni cu sincronizrile operaiilor de tip transfer-registru. Exist o problem i anume, atunci cnd se scrie o valoare ntr-un registru, aceea valoare nu este disponibil pn la nceputul ciclului urmtor de ceas. De aceea, dac vom citi din registru n ciclul curent de ceas, ar trebui s citim valoarea veche din registru i nu noua valoare care a fost scris n registru. FSM-urile pe care dorim s le proiectm n acest laborator sunt pentru controlul operaiilor dintr-o cale de date. Semnalele de ieire din aceste FSM-uri sunt semnalele de control pentru calea de date, iar unele dintre acestea sunt folosite pentru a ncrca registrele cu noua valoare. Aceste noi valori ale registrelor pot fi folosite de ctre comparatoare pentru a testa condiiile. Rezultatele acestor teste condiionale sunt semnale de stare folosite de ctre unitatea de control pentru a determina ctre ce stare urmtoare s mearg. n final, din strile diferite, sunt generate semnale de control diferite. Aadar, pentru o unitate de control, semnalele de stare (intrarea) i semnalele de control (ieirea) sunt dependente una de cealalt. De aceea, atunci cnd sunt generate semnalele de stare, trebuie s ne asigurm c ele sunt generate din testele asupra valorii registrului ales.

2.1. Realizarea unitii de control


n laboratorul 10 am vzut cum este construit i cum se folosete o cale de date pentru a implementa un algoritm. Toate instruciunile de manipulare a datei din algoritm sunt convertite n cuvinte de control, iar fiecare cuvnt de control este executat ntr-un ciclu de ceas pentru a realiza o operaie de tip transfer-registru. Este folosit o unitate de control pentru a genera semnalele de control potrivite din cuvintele de control astfel nct calea de date s poat s execute automat toate operaiile solicitate de tip transfer-registru. Aceste semnale de control sunt semnale de ieire din circuitul logic de ieire care se afl n interiorul FSM-ului. Pe lng generarea semnalelor de control, unitatea de control trebuie s controleze i secvenierea instruciunilor din algoritm. Calea de date este responsabil doar pentru manipularea datei; execut doar operaiile de tip transfer-registru. Unitatea de control determin cnd i n ce ordine va fi executat fiecare operaie de transfer-registru. Terminarea secvenei de ctre unitatea de control este stabilit n timpul elaborrii diagramei de stare. Diagrama de stare prezint ce operaie de tip transfer-registru este executat i secvena de execuie a acestor operaii. Este implementat o stare pentru fiecare cuvnt de control, iar fiecare stare este executat ntr-un ciclu de ceas. Arcurile din diagrama de stare sunt determinate de ctre secvena n care sunt executate instruciunile din algoritm. Execuia secvenial a instruciunilor este reprezentat de ctre trecerea necondiionat dintre stri (ex., arcurile fr etichet). Ramificaiile execuiei din algoritm sunt reprezentate de ctre tranziiile condiionate dintr-o stare cu dou arcuri de ieire: una cu o etichet pentru condiia true i alta cu o etichet pentru condiia false. Dac exist mai mult dect o condiie, atunci toate combinaiile posibile ale acestor condiii trebuie s fie etichetate cu 2

UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR arcuri de ieire din fiecare stare. Aceste condiii sunt semnale de stare generate de ctre calea de date, i trecute la logica strii urmtoare din FSM. Odat ce este obinut diagrama de stare, construcia actual a circuitului unitii de control urmeaz aceeai procedur ca i FSM-urile discutate n laboratorul 8. Se va prezenta acum construcia unor uniti de control simple cu cteva exemple.

2.1.1. Numrarea de la 1 la 10
Exemplul 1: Implementarea unei uniti de control pentru problema numrrii n acest exemplu, vom realiza construcia unei diagrame de stare i o unitate de control pentru controlul unei cii de date dedicate pentru a genera la ieire numerele de la 1 la 10. Algoritmul, calea de date dedicate i cuvintele de control sunt prezentate n figura 2-1.

Cuvnt de Instruciune iLoad Clear Out control 1 i=0 0 1 0 2 i=i+1 1 0 0 3 OUTPUT i 0 0 1 Figura 2.1. Problema de numrare pentru exemplul 1: (a) algoritm; (b) calea de date dedicat; (c) cuvintele de control.

Din algoritmul prezentat n figura 2.1.(a), vedem c exist trei instruciuni de manipulare a datei: linia 1, 3 i 4. Linia 2 nu este o instruciune de manipulare a datei, este o instruciune de control. n figura 2.1.(c) sunt prezentate trei cuvinte de control. Se ncepe prin atribuirea acestor trei cuvinte de control la trei stri separate din diagrama de stare, aa cum este prezentat n figura 2.2.(a). Le sunt date strilor nume simbolice s0, s1, s2 i s3 i sunt adnotate cu cuvntul de control i instruciunea care trebuie s se execute. n starea s0, vom dori ca unitatea de control s genereze semnalele de control pentru ca cuvntul de control 1 i s execute instruciunea i = 0. n starea s 1, vom dori ca unitatea de control s genereze semnalele de control pentru cuvntul de control 2 3

UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR pentru ca s se execute instruciunea i = i + 1. n starea s2 se execut instruciunea OUTPUT i. Secvena n care sunt conectate strile urmeaz secvena instruciunilor din algoritm. FSM-ul ncepe de la starea de reset s0, care iniializeaz i cu 0. Dup execuia liniei 1 din algoritm, execuia liniei 3 depinde de condiia din bucla While. Din moment ce linia 1 este executat n starea s0 iar linia 3 este executat n starea s1, prin urmare, trecerea din starea s0 n starea s1 depinde de condiia de test (i0). Aceast condiie este reprezentat prin cele dou arce de ieire din starea s0; un arc pleac spre starea s1 cu eticheta (i10) atunci cnd condiia este true, iar cellalt arc pleac ctre starea s 3 cu eticheta (i10) atunci cnd condiia este false. Execuia liniei 4 urmeaz imediat dup linia 3; astfel, exist un arc necondiionat de la starea s1 ctre s3. Avnd diagrama de stare derivat, construcia circuitului unitii de control este la fel ca pentru oricare FSM general. Tabela strii urmtoare este prezentat n figura 2.2.(b). Din moment ce avem un total de patru stri, sunt necesare dou bistabile pentru codificare. Astfel c, starea s0 este codificat Q1Q0 = 00, starea s1 este codificat Q1Q0 = 01 .a.m.d. n tabela cu starea urmtoare, aceste patru stri sunt repartizate pe patru rnduri, fiecare etichet cu numele strii i codificarea. Cele dou bistabile i semnalul de stare d un total de trei variabile (sau 23 combinaii diferite) pentru a lua n consideraie tabela strii urmtoare. Fiecare intrare a strii urmtoare din tabel este obinut din diagrama de stare dac ne uitm la ceea ce i corespunde strii urmtoare i la arcurile care pleac dintr-o stare i ajung la urmtoarea. De exemplu, uitndu-ne la diagrama de stare prezentat n figura 2.2.(a), arcul cu eticheta (i10) pleac din starea s0 i trece n starea s1. Corespunztor, n tabela cu starea urmtoare, intrarea strii urmtoare de la intersecia rndului s0 (00) i coloana etichetat (i10) are valoarea lui s1 (01). Din tabela cu starea urmtoare, vom obine tabela de implementare, aa cum este prezentat n figura 2.2.(c). Utiliznd dou bistabile pentru a implementa FSM-ul, tabela de implementare este aceeai ca i tabela cu starea urmtoare deoarece ecuaia caracteristic pentru bistabilul de tip D este Qnext = D. Din tabela de implementare, vom deriva (obine) ecuaiile de excitaie. Ecuaiile de excitaie sunt folosite pentru a deriva (obine) circuitul cu starea urmtoare pentru generarea intrrilor bistabilelor de memorare a strii. Din moment ce avem dou bistabile de tip D, sunt necesare dou ecuaii de excitaie (una pentru D1 i una pentru D0), aa cum este prezentat n figura 2.2.(d). Sunt obinute cele dou diagrame K pentru aceste dou ecuaii de excitaie prin extragerea biilor corespunztori din tabela de implementare. Circuitul logic de ieire pentru FSM este derivat din semnalele cuvintelor de control i din strile asignate cuvintelor de control. Pentru a deriva tabela de ieire, vom lua tabela cuvintelor de control i vom nlocui toate numerele cuvintelor de control cu codificarea actual a strii asignate acelui cuvnt de control. De exemplu, uitndu-ne la diagrama de stare din figura 2.2.(a), cuvntul de control 1 este asignat strii s0. Astfel, n tabela de ieire, vom nlocui cu 00 cuvntul de control 1. Valoarea 00 este codificarea pe care am dat-o strii s0 i care reprezint valoarea strii curente pentru cele dou bistabile, Q1 i Q0. Din moment ce nu exist nici un cuvnt de control asignat strii halt (de oprire), s3 (11), se pot deselecta toate semnalele de control pentru aceast stare. Tabela de ieire i rezultatul ecuaiilor de ieire sunt prezentate n figura 2.2.(e), respectiv (f). O dat ce am derivat ecuaiile de ieire i cele de excitaie, putem uor s realizm circuitul unitii de control prezentat n figura 2.2.(g). Memoria strii este alctuit din bistabile de tip D cu semnale de tergere asincron. Toate semnalele de tergere asincron sunt conectate la semnalul Reset global.

UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR

Starea curent Q1Q0 s0 00 s1 01 s2 10 s3 11 Starea curent Q1Q0 00 01 10 11

(a) Starea urmtoare Q1next Q0next (i10) (i10) s3 11 s1 01 s2 10 s2 11 s3 11 s1 01 s3 11 s3 11 (b) Starea urmtoare D1 D0 (i10) (i10) 11 01 10 11 11 01 11 11 (c)

(d) Q1Q0 00 01 10 11 iLoad 0 1 0 0 Clear 1 0 0 0 Out 0 0 1 0

(e) iLoad = Q1Q0 Clear = Q1Q0 Out = Q1Q0 (f)

UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR

(g) Figura 2.2. Construcia unei uniti de control pentru exemplul 1: (a) diagrama de stare; (b) tabela cu starea urmtoare; (c) tabela de implementare utiliznd bistabile de tip D; (d) maprile K i ecuaiile de excitaie; (e) tabela de ieire; (f) ecuaiile de ieire pentru cele trei semnale de control; (g) circuitul.

2.1.2. Instruciunea simpl IF-THEN-ELSE


Vom construi acum diagrama de stare i unitatea de control pentru a controla calea de date dedicat pentru o problem simpl IF-THEN-ELSE. Algoritmul, calea de date dedicat i cuvintele de control sunt prezentate n figura 2.3. Exemplul 2 prezint calea naiv de a crea o diagram de stare prin asignarea unei stri pentru fiecare cuvnt de control, exact ca la exemplul 1. Totui, vom vedea din exemplu c diagrama de stare creat n acest mod pentru aceast problem este incorect, deoarece semnalul de stare generat este greit. Exemplul 3 prezint derivarea corect a diagramei de stare i construcia unitii de control pentru problema IF-THEN-ELSE.

UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR
Cuvnt de control 1 2 3 4 Instruciune INPUT A B=8 B = 13 OUTPUT B ALoad 1 0 0 0 Muxsel x 1 0 x BLoa d 0 1 1 0 Out 0 0 0 1

(c) Figura 2.3. Problema IF-THEN-ELSE pentru exemplul 2 i exemplul 3: (a) algoritmul; (b) calea de date dedicat; (c) cuvintele de control.

Exemplul 2: Derivarea unei diagrame de stare incorecte n acest exemplu, vom deriva o diagram de stare pentru unitatea de control pentru controlul cii de date dedicate din exemplul 3 din laboratorul trecut pentru rezolvarea problemei IF-THEN-ELSE. Din algoritmul prezentat n figura 2.3.(a), vom vedea c exist patru instruciuni de manipulare a datei: liniile 1, 3, 5 i 7. Linia 2 nu este pentru instruciunea de manipulare a datei, este, mai degrab, o instruciune de control. Din exemplul 3, avem derivate patru cuvinte de control pentru aceste patru instruciuni de manipulare a datei pentru controlul cii de date dedicate prezentate n figura 2.3.(b). Aceste patru cuvinte de control sunt prezentate n figura 2.3.(c). Din nou, vom ncepe prin a transfera aceste patru cuvinte de control ctre patru stri separate n diagrama de stare, aa cum este prezentat n figura 2.4.(a). Aceste patru stri sunt date de numele simbolice s_input, s_equal, s_notequal i s_output, i sunt adnotate cu cuvntul de control i instruciunea la care sunt transferate. De exemplu, n starea s_input, vom dori ca unitatea de control s genereze semnalele cuvntului de control 1 pentru a executa instruciunea INPUT A, iar starea n s_equal, vom dori ca unitate de control s genereze semnalele cuvntului de control 2 pentru execuia instruciunii B = 8. Dup instruciunea INPUT A, execuia urmtoarelor dou instruciunii, B=8 i B=13 depinde de condiia instruciunii IF. Din moment ce aceste trei instruciuni sunt transferate ctre cele trei stri: s_input, s_equal i s_notequal, de aceea, trecerea din starea s_input la celelalte dou stri depinde de condiia (A=5) din instruciunea IF. Aceast execuie condiional este reprezentat de ctre cele dou arce de ieire din starea s_input: Un arc pleac ctre starea s_equal cu eticheta (A=5), atunci cnd condiia este true, i un arc care pleac ctre starea s_notequal cu eticheta (A=5) atunci cnd condiia este false. Instruciunea, OUTPUT B, este executat necondiionat dup execuia uneia dintre cele dou instruciuni, B=8 sau B=13; prin urmare, fie din starea s_equal sau s_notequal, exist un arc necondiionat care pleac ctre starea s_output. Algoritmul se oprete dup execuia OUTPUT B, astfel c vom face ca FSM s treac necondiionat napoi n starea s_output nsi. Conform algoritmului, dup introducerea unei valori pentru A n starea s_input, avem nevoie s testm condiia (A=5). Dac condiia este true, se va trece n starea s_equal pentru a executa instruciunea B=8; altfel, va trece n starea s_notequal pentru a executa instruciunea B=13. Fie din starea s_equal sau s_equal, starea urmtoare i final este s_output. Trebuie ca s considerm c starea s_input este executat n ciclul de ceas 1. n ciclul de ceas 2, este executat fie starea s_equal sau s_notequal. Atunci starea s_output este executat n ciclul de ceas 3. Exist dou puncte importante aici de neles i de amintit: 1. La un front al ceasului cresctor, este ncrcat un registru cu noua valoare dac este selectat semnalul de ncrcare; 2. La fiecare front cresctor al ceasului, FSM introduce o stare nou starea urmtoare. 7

UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR Dac construim unitatea de control bazat pe diagrama de stare prezentat n figura 2.4.(a), atunci poate aprea urmtorul scenariu. La primul front cresctor al ceasului, FSM introduce starea s_input. La puin timp dup introducerea strii s_input, FSM selecteaz semnalul de control ALoad pentru a ncrca o valoare pentru variabila A. Din moment ce un registru este ncrcat la un front cresctor al ceasului, iar primul front cresctor al ceasului a trecut, de aceea, valoarea pentru A va fi ncrcat n registru la urmtorul front activ al ceasului (de ex., de la nceputul ciclului de ceas 2). Totui, FSM are nevoie s mearg n starea urmtoare (fie s_equal sau s_notequal) bineneles de la nceputul ciclului de ceas 2. Figura 2.4.(b) prezint o diagram de sincronizare pentru aceast diagram de stare cu rezultat incorect. Utilizatorul introduce un 5. Diagrama arat c valoarea 5 este ncrcat n registrul A la timpul de 200ns (la nceputul ciclului de ceas 2). Din moment ce intrarea este un 5, testul pentru (A=5) ar trebui s fie true iar ieirea ar trebui s fie un 8. Totui, n diagrama de sincronizare, vedem c starea se schimb n s_notequal la timpul de 200ns. Acest lucru se datoreaz faptului c testul de condiie citete A cu valoarea 0 veche, mai degrab dect noua valoare 5. Prin urmare, ieirea 13 este incorect.

Figura 2.4. Exemplul 2: (a) diagrama de stare incorect; (b) diagrama de sincronizare incorect.

Deci ce cauzeaz ca testul de condiie pentru exemplul 1 s fie corect, dar testul de condiie pentru exemplul 2 s fie incorect? Motivul este acela c momentul asignrii acestor dou variabile difer. n exemplul 1, variabila i trece n 0 prin selectarea semnalului Clear asincron pentru registru. Din cauza tergerii asincrone, i va lua imediat valoarea 0 i nu va atepta pn la urmtorul ciclu de ceas; de aceea, testul de condiie este corect. Totui, n exemplul 2, utilizm semnalul ALoad pentru a se ncrca valoarea pentru registru. Prin urmare, A nu va lua noua valoare pn la nceputul urmtorului ciclu de ceas, dar testul de condiie are nevoie de valoare n ciclul de ceas curent, de aceea, testul este incorect.

UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR Exemplul 3: Derivarea unei diagrame de stare i unitate de control corecte n exemplul 2, dei comparatorul testeaz condiia (A=5), acesta nu ia valoarea corect pentru A n ciclul de ceas n care se face testul. Pentru ca s avem valoarea corect pentru A la intrarea comparatorului, este necesar s se atepte pn cnd valoarea este ncrcat n registru la urmtorul ciclu de ceas. Diagrama de stare modificat este prezentat n figura 2.5.(a) iar diagrama de sincronizare corespunztoare cu rezultatul corect n este prezentat n (b).

Figura 2.5. Exemplul 3: (a) diagrama de stare corect; (b) diagrama de sincronizare corect.

Acum c am derivat diagrama de stare corect, construcia circuitului unitii de control se face exact ca n exemplul anterior. Tabela cu starea urmtoare este prezentat n figura 2.6.(b). Din moment ce avem un total de cinci stri, sunt necesare trei bistabile pentru a realiza codificarea. Nu sunt utilizate ultimele trei codificri (101, 110 i 111). Tabela de implementare corespunztoare (utiliznd bistabile de tip D) i rezultatul ecuaiilor de excitaie sunt prezentate n figura 2.6.(c) i (d). Odat ce am derivat ecuaiile de excitaie i cea de ieire, putem desena circuitul unitii de control, aa cum este prezentat n figura 2.6.(g). Memoria de stare este alctuit din trei bistabile de tip D.

UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR

D2 = Q2Q1 + Q2Q1Q0 D1= Q2Q1Q0 Out = Q2Q1Q0 + Q2Q1(A=5) (d)

(e) ALoad = Q2Q1Q0 Muxsel = Q2Q1Q0 Bload = Q2Q1 Out = Q2Q1Q0 (f)

10

UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR

(g) Figura 2.6. Realizarea unei uniti de control pentru exemplul 3: (a) diagrama de stare; (b) tabela cu starea urmtoare; (c) tabela de implementare utiliznd bistabile de tip D; (d) ecuaiile de excitaie; (e) tabela de ieire; (f) ecuaiile de ieire pentru cele patru semnale de control; (g) circuitul.

2.2. Generarea semnalelor de stare


Exemplul 4: Generarea unui semnal de stare corect prin conectarea comparatorului la un punct diferit din calea de date n exemplul 2, diagrama de stare prezentat n figura 2.4.(a) derivat din calea de date prezentat n figura 2.3.(b) este greit, deoarece n starea s_input (atunci cnd este solicitat semnalul de stare), comparatorul nu preia valoarea de intrare corect. Acest dezavantaj, pentru soluia utilizat n exemplul 3, este eliminat prin solicitarea unui ciclu de ceas suplimentar pentru a executa algoritmul. O alt cale de a rezolva aceast problem de sincronizare este s conectm comparatorul la un punct diferit din calea de date n loc s aducem o stare suplimentar la diagrama de stare. Diagrama de stare din figura 2.4.(a) arat c trebuie s folosim o valoare de intrare imediat n starea s_input pentru comparaia (A=5). Calea de date prezentat n figura 2.3.(b) are comparatorul conectat la ieirea registrului A. Din cauza acestui lucru, vom avea nevoie de un ciclul de ceas suplimentar pn cnd data este scris n registru i va fi disponibil ca s fie testat. n loc s conectm comparatorul la ieirea registrului, putem conecta comparatorul direct la intrarea principal (de ex., intrarea registrului), aa cum este prezentat n figura 2.7. Prin aceast modalitate, nu mai trebuie s ateptm ca valoarea de intrare s fie scris prima dat n registru, dar n loc de asta, valoarea de intrare va fi imediat disponibil n starea s_input. Ca rezultat, comparatorul va avea valoarea corect pentru a realiza testul n ciclul de ceas corect i nu va mai trebui s se introduc o stare suplimentar la diagrama de stare. 11

UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR

Figura 2.7. Generarea semnalului de stare corect pentru exemplul 4.

Exemplul 5: nsumarea de la n pn la 1 Algoritmul, calea de date general i cuvintele de control sunt prezentate n figura 2.8. Figura 2.8.(c) prezint cinci cuvinte de control pentru controlul cii de date generale prezentate n figura 2.8.(b) pentru realizarea algoritmului prezentat n figura 2.8.(a). Figura 2.9.(a) prezint o prim ncercare de a deriva diagrama de stare pentru algoritmul din figura 2.8.(a). Cele cinci instruciuni de manipulare a datei sunt transferate ctre cinci stri. La reset, FSM ncepe din starea s 0 unde sum este iniializat cu 0 i ateapt semnalul Start. Semnalul Start spune unitii de control cnd s fie gata intrarea de date i s nceap execuia algoritmului. (Semnalul de Start este similar cu tasta Enter care se afl pe tastatura unui calculator). Arcurile rmase din diagrama de stare urmeaz secvena execuiei algoritmului. Starea s1 execut cuvntul de control 2 pentru a introduce numrul pentru n. Starea s2 execut cuvntul de control 3 pentru suma lui n. Starea s 3 execut cuvntul de control 4 pentru a decrementa n. n final, starea s 4 execut cuvntul de control 5 pentru a scoate valoarea pentru sum.

12

UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR

(c) Figura 2.8. Problema nsumrii pentru exemplul 5: (a) algoritmul; (b) calea de date general; (c) cuvintele de control.

n starea s1, vom introduce o valoare pentru n i imediat trebuie s se fac testul pentru condiia (n0). Similar, n starea s3, vom executa instruciunea n = n -1 i imediat se face testul pentru condiia (n0). Totui, ne reamintim din exemplul 3 c nu putem testa o condiie care implic o valoare care va fi scris ntr-un registru n acelai ciclu de ceas. Dac vom ncerca s rezolvm aceast problem de sincronizare aa cum am fcut n exemplul 3, vom obine diagrama de stare prezentat ca n figura 2.9.(b), unde este nserat o stare de ateptare suplimentar, s_wait. Pe de alt parte, n exemplul 4 am artat c nu este necesar ca de fiecare dat s se genereze o stare suplimentar dac se gsete punctul corect din calea de date pentru a conecta comparatorul astfel nct s obinem semnalul de stare corect.

Figura 2.9. Dou diagrame de stare posibile pentru a rezolva problema de nsumare din exemplul 5: (a) fr o stare de ateptare suplimentar; (b) cu o stare de ateptare suplimentar.

Pentru optimizare, diagrama de stare din figura 2.9.(a) ar fi o alegere mai bun dac poate fi generat semnalul de stare corect, din cauz c necesit o stare n minus. Astfel c problema este s gsim o locaie din calea de date pentru a conecta comparatorul astfel nct s scoat atunci cnd este necesar un semnal de stare corect pentru testul (n0) n timpul ciclului de ceas. Diagrama de stare din figura 2.9.(a) solicit un semnal de stare (n0) la strile s1 i s3. De aceea, trebuie s gsim un punct din calea de date astfel nct valoarea corect pentru n s fie disponibil la momentele de timp cnd sunt executate strile s1 i s3. 13

UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR n starea s3 este executat instruciunea n = n -1. Calea de date, pentru a executa instruciune n = n -1, trebuie s aib valoarea pentru n la intrarea operandului A din ALU (punctul C din figura 2.8.(b)), iar rezultatul de la decrementarea n-1 va fi disponibil la ieirea ALU (punctul D din figura 2.8.(b)) n timpul aceluiai ciclu de ceas. Conform cu diagrama de stare din figura 2.9.(a), vom dori s testm n nainte de decrementare. Dac conectm comparatorul la intrarea operandului A din ALU n punctul C, vom compara valoarea lui n nainte de decrementarea din timpul ciclului de ceas. Mai departe, valoarea lui n nu va mai fi disponibil la ciclul urmtor la punctul C. Motivul este execuia strilor s2 sau s4 la urmtorul ciclu de ceas, iar pentru ambele stri este necesar valoarea pentru sum. Astfel c la urmtorul ciclu de ceas, va fi disponibil n punctul C valoarea pentru sum i nu n. Din moment ce rezultatul decrementrii este disponibil la punctul D la ciclul curent al ceasului, comparatorul ar trebui s fie conectat la ieirea ALU la punctul D. Problema acum este dac mai avem nevoie de n n starea s1. n starea s1, este executat instruciunea INPUT n, iar valoarea pentru n este memorat ntr-un fiier de registre. Pentru starea s3, vom avea nevoie s conectm comparatorul la punctul D, dar pentru starea s1, vom avea nevoie s conectm comparatorul fie la punctul A sau la punctul B. Totui, pentru a genera semnalul de stare corect pentru ambele stri, comparatorul trebuie s fie conectat la un punct care este corect pentru ambele cazuri. Ultimul punct de notat este c, din moment ce comparatorul este un circuit combinaional, va scoate constant o valoare. Atunci cnd FSM este n alt stare dect s1 sau s3, atunci comparatorul ar trebui s compare o alt valoare cu 0. Pentru moment, n starea s2, ALU evalueaz sum+n, astfel comparatorul ar trebui s compare rezultatul lui sum+n cu 0. Totui, acest lucru nu va afecta operaia corect a unitii de control, deoarece n starea s2, logica strii urmtoare nu utilizeaz acest semnal de stare pentru a determina care este urmtoarea stare. Avnd derivat diagrama de stare corect prezentat n figura 2.9.(a) i semnalul de stare corect pentru calea de date prezentat n figura 2.10, putem acum s terminm construcia circuitului unitii de control, aa cum este prezentat n figura 2.11. Din diagrama de stare, putem s derivm tabela cu starea urmtoare, aa cum este prezentat n figura 2.11.(b). Sunt necesare pentru codificarea celor cinci stri trei bistabile, Q2, Q1 i Q0. Derivarea ecuaiilor de excitaie (figura 2.11.(d)), ecuaiile de ieire (figura 2.11.(f)) i n final circuitul unitii de control complet (figura 2.11.(g)) urmeaz aceeai procedur ca i pentru sintetizarea unui FSM general.

14

UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR

Figura 2.10. Generarea semnalului de stare (n0) din calea de date pentru exemplul 5.

15

UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR

16

UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR

Figura 2.11. Construcia unei uniti de control pentru exemplul 5: (a) diagrama de stare; (b) tabela cu starea urmtoare; (c) tabela de implementare; (d) maprile K i ecuaiile de excitaie; (e) tabela de ieire; (f) ecuaiile de ieire; (g) circuitul.

2.3. Diagrame ASM i tabele cu starea de aciune


Dezavantajul utilizrii unei diagrame de stare pentru a descrie comportamentul unui circuit secvenial este acela c nu descrie precis informaia de sincronizare, care este foarte important pentru funcionarea corect a unui circuit. Diagramele algoritmice ale mainii de stare (Algorithmic State Machine - ASM) i tabelele cu aciunile asupra strilor (state action table ) sunt dou metode alternative pentru a descrie mult mai sigur i precis circuitele secveniale. Tabela de aciune a strii utilizeaz un format tabelar, n timp ce diagrama ASM utilizeaz un format de blocuri grafice.

2.3.1 Diagrame ASM


Diagramele ASM sunt folosite pentru a desena grafic mult mai precis operaiile unui FSM. Sunt identice cu blocurile utilizate n programarea calculatoarelor dar utilizeaz diferite forme de blocuri, aa cum este prezentat n figura 2.12, pentru a descrie o secven de aciuni. Diagrama ASM deseneaz similar informaia ca i la diagrama de stare. Totui, diagramele ASM descriu sincronizarea relaiilor dintre stri. Dreptunghiul prezentat n figura 2.12.(a) este cutia de stare (dialog) (state box) pentru a reprezenta o stare din FSM. Prin urmare, fiecare cutie de stare, este executat ntr-un ciclu de ceas i este similar cu nodul dintr-o diagram de stare. O stare din FSM este pentru a realiza aciunile de manipulare a datelor i cele de intrare/ieire. Fiecare cutie de stare conine o operaie de tip transfer-registru necondiionat (pentru tipul Moore) care se va executa n aceast stare. Exist o legtur care intr n cutia de stare i o legtur care prsete cutia de stare. n afar, dreptunghiul este etichetat n colul din stnga sus cu numele simbolic al strii, n timp ce n colul din dreapta sus este etichetat cu codificarea 17

UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR strii n binar (dac se cunoate). De exemplu, figura 2.12.(b) prezint o cutie de stare cu operaia de tip transfer-registru count=0. Numele simbolic dat strii este s2, iar codificarea n binar dat strii este 010. Atunci cnd FSM este n starea s 2, registrul pentru memorarea variabilei count este resetat pe 0. Atunci cnd o operaie de tip transfer-registru nu este specificat pentru un registru din cutia de stare, se va presupune c, coninutul registrului va rmne neschimbat. Un registru i schimb valoarea doar la o stare atunci cnd operaia de tip transfer-registru scrie registrul din aceea cutie de stare. Cutia n form de romb prezentat n figura 2.12.(c) este cutia de decizii. Scopul cutiei de decizii este s testeze condiia scris n cutie, adic dac este fals sau adevrat. Exist o legtur care intr n cutia de decizii i dou legturi care pleac din cutie. Cele dou legturi care pleac din cutia de decizii sunt etichetate cu 1 i 0. Dac dup test condiia dat este true, atunci este activ legtura etichetat cu 1; altfel, este activ legtura cu eticheta 0. Cutia de decizii nu reprezint o stare i astfel nu este scris nici o aciune n cutie. Este utilizat pentru a determina trecerea n urmtoarea stare. Cutia de decizii este de asemenea utilizat pentru a descrie un FSM Mealy unde aciunile depind de condiia de intrare. Cutia de condiie sub form oval prezentat n figura 2.12.(d) este de asemenea folosit pentru a realiza operaii de tip transfer-registru exact ca i la cutia de stare. Totui, spre deosebire de cutia de stare, cutia de condiie este folosit pentru manipulrile condiionate ale datelor din FSM-urile Mealy. Blocurile ASM prezentate n figura 2.12.(e), permite gruparea mpreun a unei cutii de stare cu zero sau mai multe cutii de decizie sau de condiie pentru a forma o singur stare. Toate aciunile specificate n interiorul blocului ASM sunt executate ntr-o singur stare sau ntr-un ciclu de ceas. Ca i la cutia de stare, blocul ASM este etichetat cu numele strii n afar n colul din stnga sus i codificarea strii n colul din dreapta sus. Blocul ASM trebuie s nceap cu o cutie de stare care conine zero sau mai multe operaii necondiionate de tip transfer-registru. Dup cutia de stare, pot s existe zero sau mai multe cutii de decizie i cutii de condiie. Blocul ASM va avea un singur punct de intrare i unul sau mai multe legturi de ieire conectate la alte stri. Figura 2.12.(f) prezint un exemplu a unui bloc ASM. Numele simbolic a strii este s0 i folosete codificare 00. Atunci cnd FSM introduce aceast stare, variabila sum este iniializat cu 0 iar semnalul Start este testat. Dac nu exist nici un semnal Start, i anume, Start=0, FSM-ul reintroduce aceast stare la urmtorul ciclu de ceas. Dac exist un semnal Start, atunci este preluat o intrare pentru a ncrca variabila n. Scrierea actual a registrelor sum i n cu valorile noi apare la urmtorul front activ al ceasului Cu alte cuvinte, registrul sum nu este zero pn la urmtorul ciclu de ceas, iar valoarea de intrare pentru n nu este disponibil pn la urmtorul ciclu de ceas.

18

UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR

Figura 2.12. Simboluri folosite ntr-o diagram ASM: (a) cutia de stare; (b) exemplul unei cutii de stare; (c) cutia de decizii; (d) cutia de condiie; (e) blocul ASM; (f) exemplul unui bloc ASM.

Exemplul 6: diagrama ASM Moore n acest exemplu, vom genera o diagram ASM pentru un FSM Moore bazat pe algoritmul i calea de date prezentate n figura 2.3.(a) i (b) pentru problema IF-THENELSE. Linia 1 din algoritm este pus n cutia de stare cu eticheta s_input i codificarea 000, aa cum este prezentat n figura 2.13.(a). Este folosit o cutie de decizii pentru testul de condiie din linia 2 i trebuie s fie pus n interiorul unul bloc ASM. Testul depinde de valoarea din starea s_input; prin urmare, nu se poate executa n aceeai stare cu linia 1 dar este transferat ctre starea s_extra, fr s existe nici o aciune care s se execute necondiionat la momentul acestui ciclu de ceas; de aceea, cutia de stare iniial este goal. Dac punem ambele linii 1 i 2 n acelai bloc ASM, ca n figura 2.13.(b), atunci sincronizarea va fi greit deoarece ncercm s citim din registru pentru o valoare care nu a fost actualizat nc. Pentru un FSM Moore, aciunile sunt executate necondiionat, prin urmare, liniile 3 i 5 din algoritm sunt puse n dou cutii de stare separate. Cele dou legturi de ieire din cutia de decizii merg spre cele dou cutii de stare: una pentru cazul cnd condiia este true iar cealalt pentru cazul cnd condiia este false. n final, ambele stri, s_notequal i s_equal, merg spre starea s_output pentru a realiza ieirea. Dac facem ieirea n strile s_notequal i s_equal, aa cum este prezentat n figura 2.13.(c), atunci din nou, ieirea va fi greit deoarece va fi citit din registrul B nainte ca acesta s fie reactualizat. Dac 19

UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR dorim ca ieirea s se fac mpreun cu asignarea lui B n aceeai stare, atunci putem face ca ieirea s fie direct o constant mai degrab dect s prelum valoarea din B.

Figura 2-13 Diagrama ASM Moore pentru exemplul 2-3: (a) diagrama ASM corect; (b) blocul ASM greit; (c) ieire greit.

Exemplul 7: Diagrama ASM Mealy Vom deriva diagrama ASM pentru acelai algoritm i cale de date IF-THEN-ELSE utilizate n exemplul 6, cu excepia c va fi fcut pentru FSM Mealy. Rezultatul diagramei ASM este prezentat n figura 2.14. Principala diferen dintre aceste dou sunt transferurile condiionate (linia 3 i 5 din algoritm) care sunt executate n aceeai stare ca i testul n s_extra. Cele dou transferuri condiionate sunt puse separat n dou cutii ovale de condiie. Legturile de intrare sunt aceleai. Din moment ce cele dou cutii de condiie sunt puse n acelai bloc ASM, atunci blocul ASM va avea doar o singur legtur de ieire ctre starea s_output pentru a efectua ieirea. Avantajul acestei maini Mealy nu este doar pentru faptul c aceasta necesit puine stri, i de aceea rezult i o unitate de control mai mic, dar i pentru faptul c necesit i puine cicluri de ceas pentru a executa algoritmul.

20

UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR

Figura 2.14. Diagrama ASM Mealy pentru exemplul 7.

2.3.2 Tabelele cu aciunea strilor


Tabela cu aciunea strilor este un alt mod de a descrie comportamentul circuitelor secveniale. Pe cnd diagrama ASM este exact ca i diagrama de stare, tabela cu aciunea strilor este similar cu combinarea ntre tabelele de ieire cu tabelele cu starea urmtoare. Are trei coloane: starea curent, urmtoarea stare i aciunile asupra cii de date. Intrrile strii urmtoare i cii de date pot fi cu sau fr condiie. Totui, n loc s enumerm toate condiiile posibile i s le listm ntr-o coloan, ca n cazul tabelei cu starea urmtoare, condiia va fi scris, atunci cnd va fi necesar, n faa intrrii strii urmtoare. Dac nu este scris nici o condiie n fa intrrii strii urmtoare, atunci starea urmtoare va fi necondiionat (de ex., FSM va merge necondiionat la aceast stare urmtoare). Dac starea urmtoare este calificat cu o condiie, atunci FSM va merge n acea stare doar dac respectiva condiie este true. Aciunile cii de date sunt descrise ca i n tabela cu cuvintele de control. Ca i la strile urmtoare, aceste aciuni ale cii de date pot fi condiionate sau necondiionate. Dac o aciune nu este calificat cu o condiie n fa nseamn c este necondiionat. Altfel, aciune este condiionat, i este executat doar dac avem condiia true. Din moment ce aciunile cii de date Moore sunt dependente doar de starea curent, atunci toate aciunile cii de date pentru un FSM Moore nu vor avea condiie. Figura 2.15. prezint un tabel de aciune a strii de tip Moore corespunztor diagramei ASM din exemplul 6. Din starea curent s_input, necondiionat FSM va executa aciunea INPUT4 i apoi necondiionat va merge n starea s_extra. Din starea s_extra, FSM va merge fie n starea s_notequal fie n starea s_equal, n funcie de condiia (A=5). Nu este executat nici o aciune n aceast stare. n starea s_notequal, este executat aciunea B=13, iar apoi va trece FSM necondiionat n starea s_output. n starea s_equal, este executat aciunea B=8, i apoi FSM va trece necondiionat n starea s_output. n starea s_output, FSM execut aciunea OUTPUT B i se va oprii n starea final prin salt necondiionat la aceeai stare final. Toate aciunile din aceast stare sunt executate necondiionat, de aceea este un FSM de tip Moore. Atunci cnd FSM intr ntr-o stare, ntotdeauna execut necondiionat aciunile corespunztoare acelei stri, i dup aceea determin care s fie starea urmtoare. 21

UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR Figura 2.16. prezint un tabel de aciune a strii de tip Mealy care corespunde diagramei de stare din exemplul 6. n starea curent s_extra, sunt executate fie o aciune fie dou aciuni condiionate, n funcie de rezultatul testului de condiie. Dup execuia aciunii, FSM va trece n starea s_output necondiionat.

Figura 2.15. Tabela de aciune a strii de tip Moore.

Figura 2.16. Tabela de aciune a strii de tip Mealy

2.4. Cod VHDL


LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY fsm IS PORT ( clock, reset, start: IN std_logic; IE: OUT std_logic; WE: OUT std_logic; WA: OUT std_logic_vector (1 DOWNTO 0); RAE: OUT std_logic; RAA: OUT std_logic_vector (1 DOWNTO 0); RBE: OUT std_logic; RBA: OUT std_logic_vector (1 DOWNTO 0); aluSel : OUT std_logic_vector(2 DOWNTO 0); shSel: OUT std_logic_vector (1 DOWNTO 0); OE: OUT std_logic; done: OUT std_logic; neq0: IN std_logic); END fsm;

22

UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR
-- Continuare program -ARCHITECTURE fsm_arc OF fsm IS TYPE state_type IS (s0, s1, s2, s3, s4, s5); SIGNAL state: state_type; BEGIN next_state_logic: PROCESS(reset, clock) BEGIN IF(reset = '1') THEN state <= s0; ELSIF(clock'EVENT AND clock = '1') THEN CASE state IS WHEN s0 => IF(start = '1') THEN state <= s1; ELSE state <= s0; END IF; WHEN s1 => state <= s2; WHEN s2 => state <= s3; WHEN s3 => state <= s4; WHEN s4 => IF(neq0 = '1') THEN state <= s3; ELSE state <= s5; END IF; WHEN s5 => state <= s0; WHEN OTHERS => state <= s0; END CASE; END IF; END PROCESS; output_logic: PROCESS(state) BEGIN CASE state IS WHEN s1 => IE<='0'; WE<='1'; WA<="00"; RAE<='1'; RAA<="00"; RBE<='1'; RBA<="00"; aluSel<="101"; shSel<="00"; OE<='0'; done<='0'; WHEN s2 => IE<='1'; WE<='1'; WA<="01"; RAE<='0'; RAA<="00"; RBE<='0'; RBA<="00"; aluSel<="000"; shSel<="00"; OE<='0'; done<='0'; WHEN s3 => IE<='0'; WE<='1'; WA<="00"; RAE<='1'; RAA<="00"; RBE<='1'; RBA<="01"; aluSel<="100"; shSel<="00"; OE<='0'; done<='0'; WHEN s4 => IE<='0'; WE<='1'; WA<="01"; RAE<='1'; RAA<="01"; RBE<='0'; RBA<="00"; aluSel<="111"; shSel<="00"; OE<='0'; done<='0'; WHEN s5 => IE<='0'; WE<='0'; WA<="00"; RAE<='1'; RAA<="00"; RBE<='0'; RBA<="00"; aluSel<="000"; shSel<="00"; OE<='1'; done<='1'; WHEN others => IE<='0'; WE<='0'; WA<="00"; RAE<='0'; RAA<="00"; RBE<='0'; RBA<="00"; aluSel<="000"; shSel<="00"; OE<='0'; done<='0'; END CASE; END PROCESS; END fsm_arc;

Figura 2.17. Codul comportamental a FSM pentru algoritmul de nsumare .

23

UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR
LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY sum IS PORT ( clock, reset, start: IN std_logic; input: IN std_logic_vector(7 DOWNTO 0); done: OUT std_logic; output: OUT std_logic_vector(7 DOWNTO 0)); END sum; ARCHITECTURE Structural OF sum IS COMPONENT fsm PORT ( clock, reset, start: IN std_logic; IE: OUT std_logic; WE: OUT std_logic; WA: OUT std_logic_vector (1 DOWNTO 0); RAE: OUT std_logic; RAA: OUT std_logic_vector (1 DOWNTO 0); RBE: OUT std_logic; RBA: OUT std_logic_vector (1 DOWNTO 0); aluSel : OUT std_logic_vector(2 DOWNTO 0); shSel: OUT std_logic_vector (1 DOWNTO 0); OE: OUT std_logic; done: OUT std_logic; neq0: IN std_logic); END COMPONENT; COMPONENT datapath PORT ( clock: IN std_logic; input: IN std_logic_vector( 7 DOWNTO 0 ); IE, WE: IN std_logic; WA: IN std_logic_vector (1 DOWNTO 0); RAE: IN std_logic; RAA: IN std_logic_vector (1 DOWNTO 0); RBE: IN std_logic; RBA: IN std_logic_vector (1 DOWNTO 0); aluSel : IN std_logic_vector(2 DOWNTO 0); shSel: IN std_logic_vector (1 DOWNTO 0); OE: IN std_logic; output: OUT std_logic_vector(7 DOWNTO 0); neq0: OUT std_logic); END COMPONENT; SIGNAL IE, WE: std_logic; SIGNAL WA: std_logic_vector (1 DOWNTO 0); SIGNAL RAE: std_logic; SIGNAL RAA: std_logic_vector (1 DOWNTO 0); SIGNAL RBE: std_logic; SIGNAL RBA: std_logic_vector (1 DOWNTO 0); SIGNAL aluSel: std_logic_vector(2 DOWNTO 0); SIGNAL shSel: std_logic_vector (1 DOWNTO 0); SIGNAL OE: std_logic; SIGNAL neq0: std_logic; BEGIN -- FSM control unit-U0: fsm PORT MAP(clock,reset,start,IE,WE,WA,RAE,RAA,RBE,RBA, aluSel,shSel,OE,done,neq0); -- Datapath U1: datapath PORT MAP (clock,input,IE,WE,WA,RAE,RAA,RBE,RBA, aluSel,shSel,OE,output,neq0); END Structural;

Figura 2.18. Codul structural a FSM pentru algoritmul de nsumare.

24

UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR

Figura 2.19. Trasarea simulrii a FSM pentru algoritmul de nsumare, cu intrarea n = 10.

LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_unsigned.all; ENTITY sum IS PORT ( clock, reset, start: IN std_logic; input: IN std_logic_vector(7 DOWNTO 0); done: OUT std_logic; output: OUT std_logic_vector(7 DOWNTO 0)); END sum; ARCHITECTURE FSMD OF sum IS TYPE state_type IS (s0, s1, s2, s3, s4, s5); SIGNAL state: state_type; BEGIN next_state_logic: PROCESS(reset, clock) VARIABLE sum: std_logic_vector(7 DOWNTO 0); VARIABLE n: std_logic_vector(7 DOWNTO 0); BEGIN IF(reset = '1') THEN state <= s0; done <= '0'; output <= (others => '0'); ELSIF(clock'EVENT AND clock = '1') THEN CASE state IS WHEN s0 => IF (start = '1') THEN state <= s1; ELSE state <= s0; END IF; sum := (others => '0'); done <= '0'; output <= (others => '0'); WHEN s1 => state <= s2; sum := (others => '0'); done <= '0'; output <= (others => '0'); WHEN s2 => state <= s3; n := input; done <= '0'; output <= (others => '0');

25

UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR
-- Continuare program - WHEN s3 => state <= s4; sum := sum + n; done <= '0'; output <= (others => '0'); WHEN s4 => -- citirea lui n din instructiunea urmatoare este INAINTEA decrementarii -- de aceea, vom avea nevoie sa comparam cu 1 si nu cu 0-IF (n /= 1) THEN state <= s3; ELSE state <= s5; END IF; n := n - 1; done <= '0'; output <= (others => '0'); WHEN s5 => state <= s0; done <= '1'; output <= sum; WHEN OTHERS => state <= s0; END CASE; END IF; END PROCESS; END FSMD;

Figura 2.20. Codul VHDL pentru un model FSMD (finite-state machine with datapath FSM cu cale de date) pentru algoritmul de nsumare.

Figura 2.21. Trasarea simulrii a algoritmul de nsumare FSMD cu intrarea n=10.

26

UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR
LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY sum IS PORT ( start: IN STD_LOGIC; done: OUT STD_LOGIC; output: OUT INTEGER); END sum; ARCHITECTURE Behavioral OF sum IS BEGIN PROCESS VARIABLE n: integer; VARIABLE sum: integer; BEGIN IF (start = '0') THEN done <= '0'; output <= 0; ELSE sum := 0; n := 10; FOR i in n DOWNTO 1 LOOP sum := sum + i; END LOOP; done <= '1'; output <= sum; END IF; END PROCESS; END Behavioral;

Figura 2.22. Codul VHDL pentru modelul comportamental a algoritmului de nsumare.

Figura 2.23. Trasarea simulrii pentru modelul comportamental a algoritmul de nsumare FSMD

3. Desfurarea lucrrii
1. Se studiaz circuitele secveniale corespunztoare unitilor de control pentru exemplele studiate n laboratorul 10 legate de calea de date. 2. Se vor scrie codurile VHDL pentru unitile de control i se vor testa automat cile de date.

27