Documente Academic
Documente Profesional
Documente Cultură
Laborator 10
Laborator 10
LABORATOR nr. 10
Calea de date.
Proiectarea unui microprocesor.
1. Scopul laboratorului
n cadrul acestei lucrri se prezint modul n care se realizeaz calea de date. Se
prezint i modul de implementarea al acesteia utiliznd limbajul VHDL.
Figura 2.1. Ci de date simple: (a) pentru execuia lui A = A + 3; (b) pentru execuia lui A = A + C.
Ca un alt exemplu, calea de date prezentat n figura 2-1 (b) poate realiza execuia
instruciunii:
A=B+C
unde B i C sunt dou variabile memorate n dou registre separate, care furnizeaz cele
dou intrri ale operanzilor pentru sumator. Ieirea sumatorului este conectat la intrarea
D a registrului A pentru a memora rezultatul sumatorului.
Execuia instruciunii este realizat simplu prin activarea semnalului Aload iar
memorarea actual a valorii pentru A apare la urmtorul front activ al ceasului. n timpul
ciclului de ceas curent, sumatorul va executa adunarea lui B i C, iar rezultatul de la
sumator trebuie s fie gata i disponibil la ieire nainte s se termine ciclul de ceas curent
astfel c, la urmtorul front activ al ceasului, valoarea curent va fi scris n A. Din
moment ce nu avem scrise valori n registrul B sau C, nu vom avea nevoie s controlm
cele dou semnale Load.
Dac dorim ca o singur cale de date s execute ambele instruciuni:
A=B+C
i
A=A+3
3
Figura 2.2. Calea de date pentru execuia lui A = A + 3 i A = B + C: (a) fr multiplexor care este
greit; (b) cu multiplexor care este corect.
Figura 2.3. Calea de date pentru a efectua A = A + 3 i A = B + C utiliznd doar un singur sumator.
Figura .5. Ci de date pentru realizarea a dou operaii de adunare: (a) utilizarea separat a dou
sumatoare; (b) utilizarea unui singur sumator.
Figura 2.6. Exemple de surse multiple care folosesc multiplexoare: (a) un operand al sumatorului
avnd patru surse; (b) un registru avnd dou surse.
Destinaii multiple
O surs care are multiple destinaii nu necesit nici un circuit n plus. O surs poate
fi direct conectat la destinaii diferite, iar toate destinaiile unde data nu este solicitat ar
trebui s ignore pur i simplu sursa de date. De exemplu, n figura 2.5.(b), ieirea
sumatorului are dou destinaii: registrul a i registrul d. Dac ieirea sumatorului este
7
Figura 2.7. Surse multiple care folosesc buffere cu trei stri pentru a mprii o magistral de date
comun.
Figura 2.9. Comparator pentru generarea unui semnal de stare (A este un numr impar).
Instruciune
ALoad
Mux
A=A+3
A=B+C
1
1
1
0
Figura 2.10. Cuvinte de control pentru calea de date din figura 2-3 pentru execuia celor dou
instruciuni: A = A + 3 i A = B + C.
Figura 2.11. Algoritm pentru rezolvarea unei probleme simple IF-THEN-ELSE pentru exemplul 3
Figura 2.12. Cale de date dedicat pentru rezolvarea unei probleme simple IF-THEN-ELSE din
exemplul 3.
1
0
0
0
x
1
0
x
0
1
1
0
0
0
0
1
Figura 2.13. Cuvintele de control pentru rezolvarea unei probleme simple din exemplul 3
2.3.2. Numrarea de la 1 la 10
Exemplul 4: Numrarea de la 1 la 10
Se construiete o cale de date dedicat avnd mrimea pe 4 bii pentru a genera i
a furniza numerele de la 0 la 10. Algoritmul pentru aceast problem de numrare este
prezentat n figura 2.14.
Pentru algoritm, vom vedea c vom avea nevoie din nou de un registru pe 4 bii
pentru memorarea valorii lui i. Pentru linia 3, poate fi folosit un sumator pentru
incrementarea lui i. Ambele linii 1 i 3 scriu o valoare n i, de aceea se vor furniza dou
surse pentru registru. Primul impuls ar fi s folosim 2 multiplexoare. Totui, de reamintit c
ncrcarea lui 0 ntr-un registru este echivalent cu a terge registrul prin linia asincron
Clear, att timp ct evoluia n timp este corect. Calea de date rezultat este prezentat
n figura 2.15.(a). Pentru linia 1, am selectat semnalul Clear ca s iniializeze i cu 0, iar
pentru linia 3, am selectat semnalul iLoad pentru a se ncrca rezultatul din sumator, din
moment ce se adun un 1 la valoarea curent din i. Selectarea lui Out va scoate la ieire
i. Semnalul de stare pentru testul de condiie (i 10) este realizat de ctre poarta NAND
cu 4 intrri, unde cei patru bii de intrare ai porii NAND sunt conectai la cele patru linii de
ieire din registru care reprezint o valoare binar egal cu 1010 pentru constanta
zecimal 10.
Alternativ, n loc s utilizm separat un registru i un sumator, putem s utilizm un
singur numrtor cresctor pe 4 bii pentru a implementa algoritmul, aa cum este
prezentat n figura 2.15.(b).
Cuvintele de control pentru cele dou ci diferite din figura 2.15. sunt prezentate n
figura 2.16.
De reinut c cuvintele de control 2 i 3 (corespunztoare liniilor 3 i 4 din algoritm)
trebuie s se execute de zece ori pentru ca s rezulte cele zece numere. Bucla
algoritmului este implementat n unitatea de control.
12
Figura 2.15. Cale de date dedicat pentru rezolvarea problemei de numrare din exemplul 4: (a)
utilizarea separat a unui sumator i a unui registru; (b) utilizarea unui singur numrtor cresctor.
Cuvnt
de
control
1
2
3
4
Instruc.
iLoad
Clear
Out
INPUT A
B=8
B = 13
OUTPUT B
1
0
0
0
x
1
0
x
0
1
1
0
Cuvnt
de
control
1
2
3
4
Instr.
iLoad
Clear
Out
INPUT A
B=8
B = 13
OUTPUT B
1
0
0
0
x
1
0
x
0
1
1
0
(a)
(b)
Figura 2.16. Cuvinte de control pentru rezolvarea problemei de numrare din exemplul 4: (a)
utiliznd calea de date n figura 2.16.(a); (b) utiliznd calea de date n figura 2.16.(b).
Figura 2.17. Algoritmul pentru rezolvarea unei probleme de recapitulare (nsumare) din exemplul 5.
13
Figura 2.18. Calea de date dedicat pentru rezolvarea problemei de nsumare din exemplul 5
Cuvnt de
control
1
2
3
4
5
Instruciune
sum = 0
INPUT n
Sum = sum +n
N=n1
OUTPUT sum
0
1
0
0
0
0
0
0
1
0
0
0
1
0
0
1
0
0
0
0
Out
0
0
0
0
1
Figura 2.19. Cuvinte de control pentru rezolvarea problemei de nsumare din exemplul 5.
2.3.4. Factorial n
Exemplul 6: Factorial n
Se proiecteaz o cale de date dedicat pe 8 bii pentru evaluarea factorial n.
Factorial n este definit ca fiind produsul 1 x 2 x 3 x... x n. Figura 2.20. prezint algoritmul
de rezolvare factorial n, unde n este numrul de intrare al utilizatorului pe 8 bii. Calea de
date ar trebui s specifice dispozitivelor externe completarea calculului prin selectarea
semnalului Done i furnizarea datei de ieire.
14
Figura 2.21. Cale de date dedicat pentru rezolvarea problemei factoriale din exemplul 6.
Instruciune
productMux
productLoad
nLoad
nCount
Out
INPUT n
product = 1
product=product *n
n=n1
OUTPUT product
x
1
0
x
x
0
1
1
0
0
1
0
0
0
0
0
0
0
1
0
0
0
0
0
1
Instruciune
(a)
productMux
productLoad
nLoad
nCount
Out
1
0
1
1
1
0
0
1
0
0
INPUT n, product=1
product = product * n, n =
n-1
OUTPUT product
0
0
0
1
(b)
Figura 2.22. Cuvintele de control pentru rezolvarea problemei factoriale din exemplul 6 (a) utiliznd
cinci cuvinte de control , (b) utiliznd numai trei cuvinte de control
2.3.5. Numrarea de 0 i 1
Exemplul 7: Numrarea de 0 i 1
n acest exemplu, vom dori s construim o cale de date pentru rezolvarea
urmtoarei probleme: Intrarea este un numr pe 8 bii. Ieirea este 1 dac numrul are
acelai numr de bii pe 0 i 1, altfel, rezult un 0. (De ex., numrul 10111011 va scoate
un 0; iar numrul 10100011 va scoate un 1). Algoritmul pentru rezolvarea problemei este
prezentat n figura 2.23. Bucla WHILE este executat de opt ori folosind variabila
counteight pentru cei 8 bii ai numrului de intrare n. Pentru fiecare bit din n, dac este 1,
variabila countbit este incrementat, altfel este decrementat. La sfritul buclei WHILE,
dac countbit este egal cu 0, atunci exist acelai numr din 0 i 1 n n.
Dup analizarea algoritmului, tragem concluzia c sunt necesari urmtorii regitrii i
uniti funcionale pentru calea de date:
Un shifter pe 8 bii realizat cu un registru cu ncrcare paralel pentru memorarea
i deplasarea lui n.
Un numrtor cresctor pe 4 bii pentru counteight.
Un numrtor descresctor pe 4 bii pentru countbit.
Un comparator diferit de 8 pentru buclarea de 8 ori.
Un comparator egal cu 0 pentru testarea lui countbit.
INPUT n
countbit = 0
counteight = 0
WHILE (counteight 8) {
IF (n0 = 1) THEN
//testeaz cnd bitul 0 al lui n este 1
countbit = countbit + 1
ELSE
countbit = countbit 1
END IF
n = n >> 1
//deplaseaz n la dreapta cu un bit
counteight = counteight + 1;
}
IF (countbit = 0) THEN
OUTPUT 1
ELSE
OUTPUT 0
END IF
ASSERT Done
Figura 2.23. Algoritm pentru rezolvarea problemei de numrarea de 0 i 1 din exemplul 7.
16
Figura 2.24.Cale de date dedicat pentru rezolvarea problemei de numrarea de 0 i 1 din exemplul 7
Cuvnt
de
control
1
2
3
4
5
6
7
Instruciune
nLoad
nShift
eightCount
Down
bitCount
Clear
Out
INPUT n
countbit = 0,
counteight = 0
countbit=countbit + 1
countbit=countbit - 1
n = n >> 1
counteight
=counteight + 1
OUTPUT1,OUTPUT0
, fr ASSERT
1
0
0
0
x
0
x
x
x
0
X
1
0
0
0
0
0
0
0
0
1
0
0
0
0
1
0
1
x
x
1
1
0
0
0
0
0
0
0
0
0
0
17
18
(a)
Cuvnt de
control
1
2
3
Instruciune
i=0
i=i+1
OUTPUT i
IE
6
x
0
x
ALU2ALU1ALU0
5-3
xxx
100 (adun)
xxx
Load
2
0
1
0
Clear
1
1
0
0
OE
0
0
0
1
(b)
Figura 2.27. Generarea i ieirea numerelor de la 0 la 10: (a) algoritm; (b) cuvintele de control pentru
calea de date din figura 2-26 care folosete trei cuvinte de control.
Figura 2.28. Circuitul comparator pentru generarea semnalului de stare (i0) adus la calea de date
general.
Trasarea simulrii pentru acest numrtor este prezentat n figura 2.29. De reinut
c sunt necesare dou cicluri de ceas pentru fiecare numrare, aa cum este prezentat n
trasarea semnalului de ieire primul ciclu este pentru cuvntul de control 2 unde ieirea
arat o valoare Z (nalt impedan), iar al doilea ciclu este pentru cuvntul de control 3
unde numrul actual apare la ieire. Aceste dou cicluri sunt repetate de zece ori pentru
cele zece numere. De exemplu, la 500ns (de la nceputul primului din cele dou impulsuri
de ceas), Load = 1 iar OE = 0. Coninutul curent al registrului este 1. Din moment ce OE =
0, ieirea va fi Z. La 700ns (de la nceputul celui de-al doilea ciclu de dou impulsuri de
ceas), registrul este setat pe valoarea 2. Load este deselectat i OE este selectat iar
numrul 2 este la ieire.
Aceast trasare a simulrii a fost obinut prin selectarea i deselectarea manual
a celor apte semnale de control a cii de date la fiecare ciclu de ceas. S-a realizat
aceasta deoarece dorim ca s testm ieirea cii de date i nu avem construit nc
unitatea de control pentru generarea automat a acestor semnale de control. Ceea ce
avem nevoie eventual s realizm cu adevrat este ca s construim o unitate de control
bazat pe cuvintele de control din figura 2.27.(b). Unitatea de control va genera semnale
de control potrivite pentru calea de date pentru fiecare ciclu de ceas.
20
Figura 2.29. O trasare a simulrii pentru exemplul 9 utiliznd cuvinte de control prezentate n figura
2.27.(b).
21
SH1
SH0
Operaia
0
0
1
1
0
1
0
1
De trecere
Deplasare la stnga i umplerea cu 0
Deplasare la dreapta i umplerea cu 0
Rotire la dreapta
(c)
Figura 2.31. Calea de date general complex cu un fiier de registre: (a) circuit; (b) operaiile ALU; (c)
operaiile shifter-ului.
Pentru a implementa algoritmul din figura 2.30. vom avea de o cale de date mult
mai complex care include cel puin doi regitrii. O cale de date posibil este prezentat
n figura 2.31.(a). Diferena principal dintre aceast cale de date i cea anterioar este
c se folosete fiierul de registre (RF) cu patru locaii n loc s avem doar un registru.
Fiierul de registre, aa cum s-a artat n laboratorul 9, are un port de scriere i dou
porturi de citire. Pentru a accesa un port anume, trebuie s fie selectat linia de activare
pentru acel port i s fie setat adresa pentru locaie. Liniile proiectate sunt WE pentru
activarea scrierii, RAE pentru activarea citirii Portului A i RBE pentru activarea citirii
Portului B, WA1,0 pentru adresa de scriere, RAA1,0 pentru adresa de citire a portului A, i
RBA1,0 pentru adresa de citire a Portului B. Porturile A i B de citire pot citi simultan, i
sunt conectate la cei doi operanzi de intarare A i B ai ALU. Operaiile ALU sunt
specificate n figura 2.31.(b). Rezultatul din ALU este transferat printr-un shifter, operaiile
fiind specificate n figura 2.31.(c). n calea de date este disponibil un shifter, dei nu este
solicitat de ctre algoritmul din figura 2.30. Ieirea shifter-ului este reintrodus napoi n
fiierul de registre prin intermediul multiplexorului sau poate fi extern scoas prin activarea
buffer-ului cu trei stri de ieire. Noua calea de date are o lime de 8 bii.
22
Figura 2.33. Trasarea simulrii pentru cuvintele de control a problemei de nsumare din figura 2.32.
24
Figura 2.35. Cuvintele de control pentru nmulirea a dou numere fr semn utiliznd calea de date
din figura 2.31.
Figura 2.36. Evoluia n timp pentru operaiile de scriere i citire pentru un cuvnt de control.
25
Figura 2.38. Trasarea simulrii pentru utilizarea a dou cuvinte de control din figura 2.37.
Cuvnt de
control
1
2
3
Instruciune
i=0
i=i+1
i = i + 1 i OUTPUT i
IE
6
x
0
0
ALU2ALU1ALU0
5-3
xxx
100 (adun)
100 (adun)
Load
2
0
1
1
Clear
1
1
0
0
OE
0
0
0
1
Figura 2.39. Optimizarea cuvintelor de control pentru algoritmul de numrare utiliznd calea de date
din figura 2.26.(a).
26
Figura 2.40. Trasarea simulrii corecte pentru utilizarea a trei cuvinte de control din figura 2.39.
27
BEGIN
SHSel <= nShift & nLoad;
U0: shiftreg PORT MAP(Clock,SHSel,Input,ShiftOut);
N0eq1 <= ShiftOut(0);
-- counteight
Up <= '0';
U1: counter PORT MAP(Clock,Clear,eightCount,Up,CounteightOut);
eq8 <= '1' WHEN CounteightOut = 8 ELSE '0';
Count <= CONV_STD_LOGIC_VECTOR(CounteightOut, 4); -- for debug
-- countbit
U2: counter PORT MAP(Clock,Clear,bitCount,Down,CountbitOut);
Equal <= '1' WHEN CountbitOut = 0 ELSE '0';
Output <= Equal WHEN OutDone = '1' ELSE 'Z';
Done <= OutDone;
END Structural;
Figura 2.41. Codul VHDL pentru calea de date din figura 2.24.
28
31
3. Desfurarea lucrrii
1. Se va studia calea de date si exemplele aferente.
2. Se vor scrie i testa exemplele scrise n VHDL.
32