Sunteți pe pagina 1din 32

UNIVERSITATEA TEFAN CEL MARE SUCEAVA

FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR

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.

2. Cile de date (datapaths) consideraii teoretice


n acest laborator, vom vedea cum sunt proiectate cile de date. Reamintim, calea
de date este a doua component principal dintr-un microprocesor. Calea de date este
responsabil pentru vehicularea i manipularea datei. Cile de date includ uniti
funcionale precum:
sumatoare, registre de deplasare, mpritoare, ALU-uri i comparatoare;
registre i alte elemente de memorare pentru stocarea temporal a datelor;
magistrale, multiplexoare i buffere cu trei stri pentru transferul datelor ntre
diferite componente din calea de date i lumea extern.
Pentru ca, s funcioneze corect, calea de date trebuie comandat de semnalele
de control potrivite care trebuie s fie setate la timpul corespunztor. Semnalele de
control sunt necesare pentru toate liniile de selecie i de control pentru toate
componentele folosite n calea de date. Aceasta include toate liniile de selecie pentru
multiplexoare, ALU i alte uniti funcionale care au operaii multiple;
toate semnalele de activarea scrierii i a citirii pentru registre i fiierele de
registre ;
liniile de adrese pentru fiierele de registre ;
i semnalele de activare pentru bufferele cu trei stri.
De aceea, modul de lucru a cii de date este determinat de semnalele de control
care sunt sau nu setate n acelai timp. ntr-un microprocesor, aceste semnale de control
sunt generate de ctre unitatea de control.
Unele dintre semnalele de control generate de ctre unitatea de control sunt
dependente de data care este manevrat n calea de date. (De exemplu, rezultatul
testului de condiie cu un numr care este stocat ntr-un registru). De aceea, pentru ca
unitatea de control s genereze corect aceste semnale de control, calea de date trebuie
s furnizeze semnale de stare pentru unitatea de control. Aceste semnale de stare de
obicei sunt de la ieirea comparatoarelor. Comparatorul testeaz pentru o condiie de
logic dat pentru dou valori ale datelor din calea de date. Aceste valori sunt obinute fie
din elementele de memorie sau fie direct de la ieirile unitilor funcionale, sau sunt ca
constante cablate prin hardware. Semnalele de stare furnizeaz informaia pentru unitatea
de control pentru a determina n ce stare va merge mai departe. De exemplu, ntr-o
situaie de bucl condiional, semnalul de stare furnizeaz rezultatul condiiei care este
testat i i transmite unitii de control dac s repete bucle sau s iese din aceasta.
Din moment ce calea de date execut toate operaiile funcionale ale
microprocesorului (iar microprocesorul are rolul de a rezolva problemele), aceasta trebuie
s fie capabil s execute toate operaiile care sunt solicitate pentru a rezolva problema
dat. De exemplu, dac problema necesit adunarea a dou numere, calea de date
trebuie s conin un sumator. Dac problema necesit memorarea celor trei variabile
1

UNIVERSITATEA TEFAN CEL MARE SUCEAVA


FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR
temporale, calea de date trebuie s aib trei registre. Totui, pe lng aceste necesiti,
exist nc multe altele privind implementarea lor n calea de date. De exemplu, un
sumator poate fi implementat ca un circuit separat, sau ca parte a ALU. Aceste uniti
funcionale pot fi utilizate de mai multe ori. Registrele pot fi uniti de registre separate sau
combinate ntr-un fiier de registre. Mai departe, dou variabile temporale pot mpri
acelai registru dac nu sunt solicitate n acelai timp.
Calea de date se refer de asemenea i la proiectarea unui nivel de transfer al
datelor ntre registre (Register Transfer Level - RTL). n cadrul proiectrii utiliznd RTL
vom vedea cum este transferat o dat de la un registru la altul sau napoi la acelai
registru. Dac ntr-un registru se scrie aceeai dat, fr nici o alt modificare, atunci nu
s-a realizat nimic. Prin urmare, nainte de a scrie data ntr-un registru, aceasta trebui s
fie prelucrat; de obicei data trece prin una sau mai multe uniti funcionale.
Secvena operaiilor RTL data citit dintr-un registru, data modificat de
unitile funcionale i scrierea rezultatului ntr-un registru se numete o operaie
de transfer-registru. Fiecare operaie de transfer-registru trebuie s treac printr-un ciclu
de ceas (ceea ce este echivalent cu o stare din FSM Finite State Machine , din
moment ce FSM-ul i schimb starea la fiecare ciclu de ceas). Mai departe, pentru o
singur operaie de transfer-registru, unitatea funcional nu poate fi utilizat de mai multe
ori. Totui, aceeai unitate funcional poate fi utilizat doar o dat n acelai ciclu de
ceas, dar poate fi utilizat din nou la un ciclu de ceas diferit.
Mai departe, vom vedea cum sunt realizate cile de date i cum sunt folosite
pentru a rezolva problemele. Pentru nceput, vom descrie modul cum se proiecteaz cile
de date dedicate pentru rezolvarea unor probleme specifice i vom descrie cile de date
generale care pot fi folosite pentru rezolvarea diferitelor probleme.

2.1. Proiectarea cilor de date dedicate


Scopul proiectrii unei ci de date dedicate este acela de a realiza un circuit pentru
rezolvarea unei probleme specifice. n continuare, vom specifica problema sub forma unui
algoritm. Vom folosi un pseudo-cod n stil C pentru a scrie algoritmii. Interpretarea logic a
algoritmului este irelevant n ceea ce vom ncerca s realizm, prin urmare atunci cnd
se d un anumit cod de segment, vom lua pur i simplu acest cod aa cum este i nu l
vom optimiza.
ntr-un proiect utiliznd RTL, ne concentrm asupra modului n care se va transfera
data de la un registru la altul via unele uniti funcionale care le modific. n procesul de
proiectare, trebuie s ne decidem asupra urmtoarelor probleme:
Ce tip de registre trebuie s folosim i cte sunt necesare?
Ce tip de uniti funcionale sunt folosite i cte sunt necesare?
Poate fi o unitate funcional mprit cu siguran ntre dou sau mai multe
operaii?
Cum pot fi conectate mpreun unitile funcionale i regitrii astfel nct s fie
realizate toate transferurile datei specificate de ctre algoritm?
Din moment ce calea de date este responsabil pentru executarea tuturor operaiilor
asupra datelor, trebuie s fie capabil s execute toate instruciunile de manipulare a
datelor i testele de condiie specificate de ctre algoritm. De exemplu, instruciunea de
transfer:
A=A+3
preia valoarea care este memorat n variabila A, la care adun constanta 3 i
memoreaz rezultatul napoi n A. De notat c aici valoarea iniial a lui A este irelevant.
Calea de date trebuie s aib un registru pentru memorarea valorii A, pentru care calea
de date trebuie s execute operaia asupra datei specificat de ctre aceast instruciune.
2

UNIVERSITATEA TEFAN CEL MARE SUCEAVA


FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR
Mai departe, trebuie s existe i un sumator pentru realizarea adunrii. Constanta 3 poate
fi implementat prin cablare hardware ca o valoarea binar.
Urmtoarea ntrebare pus este cum vom conecta mpreun registrul, sumatorul i
constanta 3 astfel nct s se realizeze execuia instruciunii de transfer. Reamintindu-ne
din laboratorul nr.7 c, o valoare memorat ntr-un registru este disponibil la ieirea Q a
registrului. Din moment ce dorim s adunm A+3, vom conecta ieirea Q a registrului la
intrarea primului operand de la sumator iar constanta 3 o vom conecta la intrarea celui deal doilea operand. Vom dori s memorm rezultatul adunrii napoi n A (de ex., napoi n
acelai registru), prin urmare, vom conecta ieirea sumatorului la intrarea D a registrului,
aa cum este prezentat n figura 2-1 (a).
Memorarea rezultatului sumatorului ntr-un registru este ndeplinit de ctre
semnalul de control Load al registrului (de ex., denumit setarea ALoad). Acest semnal
ALoad este un exemplu la ceea ce ne vom referi ca fiind un semnal de control a cii de
date. Acest semnal de control controleaz operarea acestei ci de date. Unitatea de
control, despre care vom vorbi n acest capitol, va controla acest semnal prin activare
(asserting) sau dezactivare (de-asserting).
Memorarea actual a valorii ntr-un registru, totui, nu va aprea imediat atunci
cnd va fi setat ALoad. Din moment ce registrul este sincron semnalul apare la activarea
semnalului de ceas, prin urmare, memorarea actual a valorii va aprea la urmtorul front
activ al ceasului. Din motiv acesta, noua valoare a lui A nu va fi disponibil la ieirea Q a
registrului n timpul ciclului de ceas curent, dar va fi disponibil la nceputul urmtorului
ciclu de ceas.

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

UNIVERSITATEA TEFAN CEL MARE SUCEAVA


FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR
vom avea nevoie s combinm cele dou ci de date, din figura 2-1, mpreun.
Este nevoie doar de un registru pentru A, din moment ce A este aceeai variabil
la cele dou instruciuni. Totui, registrul A are acum dou surse de date: una de la primul
sumator pentru B + C iar cealalt este de la al doilea sumator pentru A + 3. Problema este
c nu pot fi direct conectate mpreun dou sau mai multe surse la o singur destinaie,
aa cum este prezentat n figura 2-2 (a) deoarece semnalele lor vor ciocni, rezultnd
valori incorecte. Soluia este s folosim un multiplexor pentru a selecta care dintre cele
dou surse s treac n registrul A. Calea de date corect utiliznd un multiplexor este
prezentat n figura 2-2 (b).
Ambele instruciuni transfer o valoare ctre A, astfel c Aload trebuie s fie setat
pentru execuia ambelor instruciuni. Totui, valoarea actual care este scris n A,
depinde de selecia multiplexorului. Dac este activat Amux, atunci rezultatul de la ambele
sumatoare (de ex., rezultatul de la A + 3) este stocat n A; altfel, rezultatul de la sumatorul
principal este memorat n A. Din moment ce, cele dou sumatoare sunt circuite
combinaionale iar valoarea din registru este ntotdeauna disponibil la ieire, prin urmare,
rezultatele de la cele dou adunri sunt ntotdeauna disponibile la dou intrri ale
multiplexorului. Dar n funcie de semnalul de control Amux, doar o singur valoare va fi
trecut prin registrul A.
Secvena n care aceste dou instruciuni sunt executate depinde dac semnalul
Amux este prima dat activat (1L) sau dezactivat (0L). Dac aceast cale de date face
parte dintr-un microprocesor, atunci unitatea de control va determina cnd se va face
activarea sau dezactivarea acestui semnal de control Amux, din moment ce unitatea lui
de control execut secvena operaiilor cii de date.
Mai departe, de reinut c aceste dou instruciuni nu pot fi executate n acelai
ciclu de ceas. Din moment ce ambele instruciuni se scriu n acelai registru, iar un
registru poate zvor o valoare la un front activ al ceasului, prin urmare, doar un rezultat
de la sumator poate fi scris ntr-un registru ntr-un singur ciclu de ceas.
O alt instruciune va trebui s fie executat n alt ciclu de ceas, dar nu e necesar
la urmtorul ciclu.

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.

UNIVERSITATEA TEFAN CEL MARE SUCEAVA


FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR
Exemplul 1: Realizarea unei ci de date dedicate
Proiectarea unei ci de date care execut dou instruciuni:
A=B+C
i
A=A+3
Singura diferen dintre aceast cale de date i cea din figura 2.2.(b) este aceea c
ar trebui s foloseasc doar un singur sumator. ncepnd astfel cu acest sumator,
pentru a executa prima instruciune, intrarea primului operand de la sumator este de la
registrul B iar cel de-a doua intrare a operandului de la sumator este de la registrul C.
Totui, pentru a executa cea de-a doua instruciune, cei doi operanzi de intrare de la
sumator sunt registrul A i constanta 3. Din moment ce ambii operanzi de intrare au dou
surse diferite, din nou trebuie s folosim pentru fiecare operand de intrare cte un
multiplexor. Ieirea celor dou multiplexoare va fi conectat la cei doi operanzi de intrare
ai sumatorului, aa cum se prezint n figura 2.3. Pentru ambele instruciuni, rezultatul
adunrii este memorat ntr-un registru A, de aceea, ieirea sumatorului se va conecta la
intrarea registrului A.
De notat c cele dou linii de selecie pentru cele dou multiplexoare pot fi
conectate mpreun. Acest lucru e posibil deoarece cei doi operanzi B i C pentru prima
instruciune sunt conectai la intrarea 0 ale celor dou multiplexoare, iar cei doi operanzi A
i 3 pentru a doua instruciune sunt conectai la intrarea 1 a celor dou multiplexoare.
Astfel, deselectarea semnalului de selecie Mux va trece cei doi operanzi coreci pentru
prima instruciune, i la fel, setarea semnalului de selecie Mux va trece cei doi operanzi
coreci pentru a doua instruciune. Vom dori s reducem ct mai mult posibil numrul
semnalelor de control pentru calea de date, deoarece minimiznd numrul semnalelor de
control vom minimiza mrimea circuitului de ieire din unitatea de control.

Figura 2.3. Calea de date pentru a efectua A = A + 3 i A = B + C utiliznd doar un singur sumator.

2.1.1. Selectarea regitrilor


n majoritatea cazurilor, este nevoie de un registru pentru fiecare variabil utilizat
de ctre un algoritm. Totui, dac dou variabile nu sunt folosite n acelai timp, atunci ele
pot mpri acelai registru. Dac dou sau mai multe variabile mpart acelai registru,
atunci conexiunile pentru transferul de date pentru a transfera data la registru i a o prelua
din aceasta sunt realizate mult mai complex, din moment ce acum registrul are mai mult
dect o surs i o destinaie. Ca urmare, avnd surse multiple vom avea nevoie de un

UNIVERSITATEA TEFAN CEL MARE SUCEAVA


FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR
multiplexor pentru a selecta una dintre aceste surse pentru a o transfera ctre destinaie.
Figura 2.4. prezint un circuit cu un registru care are dou surse una de la o intrare
extern i una de la o ieire a sumatorului. Este nevoie de un multiplexor pentru a selecta
care dintre aceste dou surse trebuie s fie intrarea registrului.

Figura 2.4. Circuitul registrului cu dou surse.

nainte de a decide de cte registre vom avea nevoie, va fi necesar s determinm


cnd s folosim pentru a memora variabilele un singur fiier de registre care s conin
suficiente locaii, regitrii individuali separai sau combinaii ale acestora dou. n plus, pot
fi utilizai regitrii cu funcii speciale, precum regitri de deplasare i numrtoarele. De
exemplu, dac algoritmul are o instruciune cu bucl FOR, poate fi folosit un singur
registru de numrare nu doar pentru a memora variabila de numrare dar i pentru a
incrementa numrarea. Aceast metod nu reduce doar componenta de numrare, dar
sunt reduse i toate conexiunile cii de date dintre componente. Deciziile legate de
selectarea tipului de regitrii pentru utilizare va afecta modul cum sunt realizate
conexiunile pentru transferul de date dintre regitrii i unitile funcionale.

2.1.2. Selectarea unitilor funcionale


Este foarte uor s decidem ce tip de uniti funcionale sunt necesare. De
exemplu, dac algoritmul necesit adunarea a dou numere, atunci calea de date trebuie
s includ un sumator. Totui, nc avem nevoie s decidem cnd s se foloseasc un
sumator dedicat, o combinaie sumator-mpritor sau un ALU (care are implementat
operaia de adunare). Bineneles, aceste ntrebri pot fi rezolvate dac tim ce alte
operaii asupra datelor sunt solicitate de ctre algoritm Dac algoritmul are doar o
adunare i o mprire, atunci poate se dorete s se foloseasc o unitate combinat
sumator mpritor. Pe de alt parte, dac algoritmul solicit cteva operaii de adunare,
vom folosi doar un sumator sau mai multe sumatoare?
Utiliznd doar un sumator e posibil s scad mrimea cii de date n funcie de
numrul unitilor funcionale, dar poate de asemenea s creasc mrimea cii de date
din cauz c sunt necesare ci de transfer mult mai complexe. De exemplu, dac
algoritmul conine urmtoarele dou operaii de adunare:
a=b+c
d=e+f
Utilizarea separat a dou sumatoare va rezulta n calea de date prezentat ca n
figura 2.5.(a); de aceea utiliznd doar un sumator va necesita utilizarea a dou
multiplexoare suplimentare cu 2 intrri i o ieire pentru a selecta registrul care va furniza
intrarea operanzilor sumatorului, aa cum este prezentat n figura 2.5.(b). Mai departe, a
doua cale de date necesit dou semnale de control suplimentare pentru cele dou
multiplexoare. Dac ne lum dup viteza de execuie, calea de date din stnga poate
executa ambele instruciuni de adunare simultan n acelai ciclu de ceas, din moment ce
6

UNIVERSITATEA TEFAN CEL MARE SUCEAVA


FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR
sumatoarele sunt independente unul de cellalt. Totui, calea de date din dreapta trebuie
s execute aceste dou instruciuni secvenial n dou cicluri de ceas diferite, din moment
ce este disponibil doar un singur sumator. Decizia final pentru care cale de date s se
foloseasc depinde de proiectant.

Figura .5. Ci de date pentru realizarea a dou operaii de adunare: (a) utilizarea separat a dou
sumatoare; (b) utilizarea unui singur sumator.

2.1.3. Metode de transfer a datelor


Exist cteva metode prin care pot fi conectai mpreun regitrii i unitile
funcionale astfel nct s poat fi realizat transferurile de date corecte dintre uniti
diferite.
Surse multiple
Dac intrarea ctre o unitate are mai mult de o surs, atunci poate fi folosit un
multiplexor pentru a selecta care dintre sursele multiple s se foloseasc. Sursele pot fi:
din regitrii,
valori constante sau
ieiri de la alte uniti funcionale.
Figura 2.6. prezint dou astfel de exemple. n figura 2.6.(a), operandul din stnga al
sumatorului are patru surse: dou de la registre, una de la constanta 1 i una de la ieirea
unui ALU. n figura 2.6.(b), registrul a are dou surse: una de la constanta 1 i una de la
ieirea unui 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

UNIVERSITATEA TEFAN CEL MARE SUCEAVA


FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR
pentru registrul a, atunci este selectat linia Load pentru registrul a, n timp ce linia Load
pentru registrul d nu este selectat; iar dac ieirea sumatorului este pentru registrul d,
atunci este selectat linia Load pentru registrul d, n timp ce linia Load pentru registrul a
nu este. n oricare dintre aceste cazuri, doar registrul corect va prelua data n timp ce alte
uniti va ignora data pur i simplu.
Acest lucru va funciona i dac una dintre destinaii este o unitate funcional
combinaional. n acest caz, unitatea funcional va prelua data sursei i o va prelucra.
Totui, nu va fi folosit ieirea unitii funcionale (care nu este memorat n nici un
registru), deci, funcional nu va conta dac unitatea funcional va lucra pe surs,
deoarece nu este memorat rezultatul. Totui, este necesar un consum energetic pentru
unitatea funcional pentru a prelucra data, astfel dac dorim s reducem puterea de
consum, vom dori ca unitatea funcional s nu prelucreze de fapt data.
Magistrala cu trei stri
O alt schem permite surselor i destinaiilor multiple s fie conectate la aceeai
magistral dac sunt utilizate buffere cu trei stri. Punctul de vedere este acela c, atunci
cnd sunt conectate surse multpile la aceeai magistral, doar o singur surs poate fi
activ la orice moment de timp. Dac dou sau mai multe surse sunt active pe aceeai
magistral n acelai timp, atunci vor exista conflicte de date. Acest lucru apare atunci
cnd o surs scoate un 0 n timp ce o alt surs scoate un 1. Prin utilizarea buffer-elor
cu trei stri pentru a ne conecta ntre surse variate i magistrala de date comun,
trebuie s ne asigurm c doar un singur buffer cu trei stri este activ la orice timp,
n timp ce restul sunt toate dezactivate. Bufferele cu trei stri care sunt dezactivate au
valori mari ale impedanei Y de ieire, astfel ca s nu apar nici un conflict.
Figura 2.7. prezint o magistral cu trei stri cu cinci uniti conectate la ea (trei regitrii,
un ALU i un sumator). Un avantaj al utilizrii magistralei cu trei stri este acela c
magistrala este bidirecional, astfel c data poate circula n ambele direcii pe
magistral. Conexiunile pentru dat care pornesc de la o component ctre magistral
trebuie s fie cu trei stri, n timp ce conexiunile pentru data care pornete de la
magistral la o component nu trebuie s fie cu trei stri. De notat, de asemenea c att
intrarea datei ct i ieirea registrului trebuie s fie conectate la aceeai magistral cu trei
stri; n timp ce, intrarea i ieirea unitii funcionale (aa cum e sumatorul sau ALU) nu
trebuie s fie conectate la aceeai magistral cu trei stri.

Figura 2.7. Surse multiple care folosesc buffere cu trei stri pentru a mprii o magistral de date
comun.

UNIVERSITATEA TEFAN CEL MARE SUCEAVA


FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR

2.1.4 Generarea semnalelor de stare


Dei unitatea de control este responsabil pentru generarea secvenei strilor de
execuie, totui, calea de date trebuie s furnizeze rezultatele testelor de condiie pentru
unitatea de control astfel nct unitatea de control s poat determina care instruciune s
fie urmtoarea executat. Semnalele de stare sunt rezultatul testelor de condiie pe care
calea de date le furnizeaz unitii de control. Fiecare test de condiie al algoritmului
genereaz un semnal corespunztor de stare.
De exemplu, dac algoritmul are urmtoarea instruciune IF:
IF (A=0) THEN...
atunci calea de date trebuie s aib un comparator de egalitate care compar valoarea
din registrul A cu constanta 0, aa cum este prezentat n figura 2.8.(a). Ieirea
comparatorului este semnalul de stare pentru condiia (A=0). Acest semnal de stare este
1 atunci cnd condiia (A=0) este true; altfel, este 0. n figura 2.8.(b) se prezint un circuit
care folosete o poart NOR cu 8 intrri.

Figura 2.8. Comparator pentru generarea semnalului de stare (A=0).

Exist i momente n care nu este necesar s se foloseasc un comparator pentru


generarea unui semnal de stare. De exemplu, putem dori un semnal de stare care s se
activeze n urma unui test afirmativ de tipul este numrul impar?, aa ca n urmtoarea
instruciune IF
IF (A is an odd number) THEN ...
Vom putea foarte simplu s folosim bitul A0 a unui numr pe 8 bii din registrul A ca
semnal de stare pentru aceast condiie, din moment ce toate numerele impare au un 1 n
poziia bitului 0. Generarea acestui bit de stare este prezentat n figura 2-9.

Figura 2.9. Comparator pentru generarea unui semnal de stare (A este un numr impar).

2.2. Utilizarea cilor de date dedicate


Orice cale de date va avea un numr de semnale de control. Prin selectarea sau
deselectarea acestor semnale de control la orice moment de timp, calea de date va
executa diferite operaii de tip transfer-registru (de transfer ntre regitrii). Din moment ce
execuia unei operaii necesit selectarea sau deselectarea corect a tuturor semnalelor
9

UNIVERSITATEA TEFAN CEL MARE SUCEAVA


FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR
de control, ar fi indicat mai degrab ca s le gndim ca o unitate dect ca semnale
individuale. Atunci cnd sunt grupate mpreun, toate semnalele de control pentru o cale
de date sunt denumite ca fiind un cuvnt de control. De aceea, un cuvnt de control va
avea cte un bit pentru fiecare semnal de control din calea de date. Prin urmare, o
operaie de tip transfer-registru este determinat de ctre valoarea setat ntr-un cuvnt
de control, i astfel, putem s precizm modul de operare a cii de date prin specificarea
irului de bii din cuvntul de control. Fiecare cuvnt de control va fi valabil pe durata
unui ciclu de ceas. Prin combinarea laolalt a cuvintelor de control multiple ntr-o
oarecare secven, calea de date va executa operaiile specificate n ordinea care este
dat.
Exemplul 2: Derivarea cuvintelor de control pentru o cale de date
Calea de date din figura 2.3, care are dou semnale de control ALoad i Mux, a
fost proiectat ca s execute dou instruciuni: A = A + 3 i A = B + C. Prin urmare,
cuvntul de control pentru aceast cale de date are cte doi bii fiecare, cte unul pentru
fiecare semnal de control. Ordinea acestor doi bii n acest punct este arbitrar; totui,
atunci cnd ne decidem trebuie s fim consecveni n privina ordinii. Cele dou cuvinte de
control pentru execuia celor dou instruciuni sunt prezentate n figura 2.10.
Cuvntul de control 1 specific irul de bii a cuvntului de control pentru execuia
instruciunii, A = A + 3. Acest lucru este realizat prin setarea ambelor semnale ALoad i
Mux. Cuvntul de control 2 este pentru execuia instruciunii, A = B + C, prin selectarea lui
ALoad i prin deselectarea Mux.
Cuvnt de
control
1
2

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.

Pentru ca s opereze automat calea de date, unitatea de control va trebui s


genereze corect aceste semnale de control la momentele de timp corespunztoare. n
laboratorul urmtor vom nva cum s construim unitatea de control i dup aceea s o
combinm cu calea de date pentru a realiza un microprocesor.

2.3. Exemple de ci de date dedicate


Vom prezenta acum proiectarea cilor de date prin cteva exemple. Cile de date
realizate n exemple nu au neles practic dar reprezint ci de date corecte pentru
rezolvarea fiecrei probleme. Aa cum exist multe metode de scriere a unui program pe
calculator.

2.3.1. O instruciune simpl IF-THEN-ELSE


Exemplul 3: IF-THEN-ELSE
n acest exemplu, ne propunem s construim o cale de date dedicat avnd
mrimea de 4 bii pentru rezolvarea unui algoritm simplu IF-THEN-ELSE prezentat ca n
figura 2.11. Pentru a crea o cale de date pentru algoritm, vom avea nevoie s ne uitm la
toate instruciunile de manipulare a datelor din algoritm, din moment ce calea de date este
responsabil pentru manipularea datelor. Aceste instruciuni de manipulare a datelor sunt
10

UNIVERSITATEA TEFAN CEL MARE SUCEAVA


FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR
operaii de tip transfer-registru. n majoritatea cazurilor, o instruciune de manipulare este
echivalent cu o operaie de tip transfer-registru. Totui, e posibil s fie necesare dou
sau mai multe astfel de operaii ca s realizeze cteva instruciuni de manipulare a
datelor.
Algoritmul folosete dou variabile, A i B; prin urmare, calea de date ar trebui s
aib dou registre pe 4 bii cte unul pentru fiecare variabil. Linia 1 a algoritmului
introduce o valoare n A. Pentru a realiza aceast operaie, vom avea nevoie s conectm
semnalele de intrare a datei la intrarea registrului A, aa cum este prezentat n figura 212. Prin selectarea semnalului Aload, valoarea de intrare a datei va fi ncrcat n registrul
A la urmtorul front activ al ceasului.
Linia 2 a algoritmului testeaz valoarea lui A cu constanta 5. Calea de date din
figura 2-12 folosete o poart AND cu 4 intrri pentru comparatorul de egalitate cu cei
patru bii de intrare conectai ca 0101 la cei patru bii de ieire din registrul A. Din moment
ce 5 n zecimal este 0101 n binar, biii 0 i 2 nu sunt inversai pentru cei doi de 1 din irul
de bii, iar biii 1 i 3 sunt inversai pentru doi de 0. Cu aceast conexiune, poarta AND va
scoate la ieire un 1 atunci cnd intrarea este 5. Ieirea acestui comparator este semnalul
de stare pe 1 bit pentru condiia (A=5) de aceea calea de date l trimite ctre unitatea de
control.

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.

n funcie de semnalul de stare pentru comparaie (A=5), unitatea de control va


decide dac s se execute linia 3 sau linia 5 a algoritmului. Aceast decizie este luat de
ctre unitatea de control i nu de ctre calea de date.
De observat c n figura 2.12. este prezentat calea de date complet care este
alctuit din dou circuite separate. Acest lucru este pentru c algoritmul nu are nevoie ca
valorile A i B s fie folosite mpreun.
Figura 2.13. prezint cuvintele de control pentru realizarea instruciunilor din figura
2.11. utiliznd calea de date din figura 2.12. Cuvntul de control 1 execut instruciunea
INPUT A. Pentru a face acest lucru, trebuie s fie selectat semnalul ALoad, iar valoarea
datei de la portul de intrare s fie ncrcat n registru la urmtorul front activ al ceasului.
11

UNIVERSITATEA TEFAN CEL MARE SUCEAVA


FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR
Pentru aceast instruciune, nu vom avea nevoie s ncrcm o valoare n registrul B;
deci BLoad este deselectat pentru acest cuvnt de control. Mai departe, nu conteaz ce
scoate multiplexorul la ieire, prin urmare Muxsel poate fi o valoarea fr importan.
Pentru cuvintele de control 2 i 3, vom dori s ncrcm una din cele dou constante din
B; prin urmare, BLoad este selectat pentru ambele cuvinte de control, iar valoarea pentru
Muxsel determin care constant este ncrcat n B. Atunci cnd Muxsel este selectat,
constanta 8 este trecut la intrarea registrului B, iar atunci cnd este deselectat, constanta
13 este trecut n registru. Cuvntul de control 4 selecteaz semnalul Out pentru a activa
bufferul cu trei stri, pentru a furniza valoarea din registrul B.
Cuvnt de
control
1
2
3
4

Instruciune ALoad Muxsel BLoad Out


INPUT A
B=8
B = 13
OUTPUT B

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

UNIVERSITATEA TEFAN CEL MARE SUCEAVA


FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR

Figura 2.14. Algoritm pentru rezolvarea problemei de numrare din exemplul 4.

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

2.3.3. nsumarea lui n pn prin decrementare ajunge la 1


Exemplul 5: nsumarea lui n pn prin decrementare ajunge la 1
Se realizeaz o cale de date dedicat pe 8 bii pentru a genera i a aduna numere
de la n pn la 1, unde n este un numr de intrarea utilizat pe 8 bii. Calea de date ar
trebui s furnizeze suma numerelor atunci cnd este gata i s specifice dispozitivelor
externe terminarea calculului prin setarea semnalului Done. Algoritmul este prezentat n
figura 2-18.

Figura 2.17. Algoritmul pentru rezolvarea unei probleme de recapitulare (nsumare) din exemplul 5.

13

UNIVERSITATEA TEFAN CEL MARE SUCEAVA


FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR
Trebuie de reinut prima dat c avem nevoie de dou registre pe 8 bii cu funcie
de ncrcare pentru memorarea a dou variabile, n i sum. Registrul pentru sum trebuie
s includ o funcie Clear pentru iniializarea cu 0. Registrul pentru n ar trebui s fie de
asemenea un numrtor descresctor pentru decrementarea lui n. Pentru operaia de
adunare este folosit un sumator separat. Calea de date dedicat rezultat este prezentat
n figura 2.18.
Pentru iniializarea sum, vom putea selecta linia Clear. Selectarea lui nLoad va
introduce o valoare pentru n. Selectarea lui sumLoad va ncrca n registrului pentru sum
valoarea de la ieirea sumatorului, care reprezint suma lui sum plus n. Decrementarea n
cu 1 este ndeplinit de ctre selectarea lui nCount. n final, selectarea lui Out va activa
bufferul cu trei stri, de aceea este furnizat valoarea din registrul sum. Comparatorul
pentru condiia din bucla WHILE (n0) este o poart OR cu 8 intrri. Ieirea acestei pori
OR este semnalul de stare pentru unitatea de control. Cuvintele de control pentru acest
exemplu sunt prezentate n figura 2.20.

Figura 2.18. Calea de date dedicat pentru rezolvarea problemei de nsumare din exemplul 5

Cuvnt de
control
1
2
3
4
5

Instruciune

nLoad nCount sumLoad Clear

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

UNIVERSITATEA TEFAN CEL MARE SUCEAVA


FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR

Figura 2.20. Algoritm de rezolvare a problemei factoriale din exemplul 6.

Dup analizarea algoritmului, vom trage concluzia c sunt necesare urmtoarele


registre i uniti funcionale pentru calea de date:
Un numrtor descresctor pe 8 bii cu ncrcare paralel pentru memorarea
variabilei n i pentru decrementarea lui n. ncrcare paralel va permite preluarea
lui n.
Un registru pe 8 bii cu ncrcare pentru memorarea variabilei product.
O unitate funcional de nmulire.
Un comparator mai mare ca unu pentru generarea semnalului de stare pentru
unitatea de control.
Un buffer cu trei stri pentru ieire.
O cale de date complet este prezentat n figura 2.21. Portul de intrare este
conectat la intrarea registrului n. Prin selectarea nLoad, valoarea de la portul de intrare
este ncrcat ntr-un registru n, de aceea se realizeaz instruciunea de la linia 1. Din
moment ce registrul n este de asemenea un numrtor descresctor, prin selectarea lui
nCount, se va executa linia 5.
Registrul product are dou surse, una din linia 2 iar a doua din linia 4. Este utilizat
un multiplexor cu 2 intrri i o ieire pentru a selecta una din aceste dou surse folosind
linia de selecie productMux.

Figura 2.21. Cale de date dedicat pentru rezolvarea problemei factoriale din exemplul 6.

Cuvintele de control pentru evaluarea factorial utiliznd calea de date prezentat


n figura 2.21. are 5 semnale de control: productMux, productLoad, nLoad, nCount i Out
aa cum este prezentat n figura 2.22.(a).
De reinut c utiliznd aceast cale de date dedicat, pot fi realizate n paralel
cteva instruciuni, aa cum este prezentat de cuvintele de control din figura 2.22.(b).
15

UNIVERSITATEA TEFAN CEL MARE SUCEAVA


FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR
Cuvnt de
control
1
2
3
4
5
Cuvnt de
control
1
2
5

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

//pentru numrarea numrului de 0 i bi ii de 1


//pentru bucla de opt ori

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

UNIVERSITATEA TEFAN CEL MARE SUCEAVA


FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR
Calea de date dedicat pentru implementarea algoritmului este prezentat n figura
2.24. De reinut c nu exist nici o conexiune ntre shifter i cele dou numrtoare; sunt
circuite complet separate.
Cuvintele de control pentru acest exemplu sunt prezentate n figura 2.25. De notat
c exist cteva cuvinte de control cu valori care nu conteaz (dont care). De exemplu, n
cuvntul de control 2 pentru iniializarea countbit cu 0, nu conteaz setrile pentru
semnalul Down, din moment ce nu exist nici o incrementare sau decrementare de
numrtor.

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

Figura 2.25. Cuvinte de control pentru rezolvarea problemei de numrare de 0 i 1 al exemplului 7.

17

UNIVERSITATEA TEFAN CEL MARE SUCEAVA


FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR

2.4. Ci de date generale


Precum sugereaz i numele, o cale de date este general n sensul c poate fi
folosit pentru a rezolva diverse probleme n loc de o singur problem specific, att
timp ct are toate unitile funcionale necesare i suficieni regitrii pentru memorarea
datelor temporale. Ideea utilizrii unei ci de date este c putem folosi un circuit a cii de
date gata fcut pentru a rezolva problema dat fr ca s fim nevoii s-l modificm.
Figura 2.26. prezint un exemplu a unei ci de date generale simple. Conine o
unitate funcional, ALU i un registru pe 8 bii pentru memorarea datelor. Magistrala
pentru transferul de date ntre componente are limea de 8 bii. Toate liniile de control
sunt de limea unui bit.

Figura 2.26. Un simplu circuit a cii de date generale.

Exist apte semnale de control (numerotate de la 0 la 6) pentru controlul


operaiilor acestei ci de date generale simpl. Atunci cnd sunt grupate mpreun, vor
forma cuvntul de control pentru aceast cale de date.
De exemplu, pentru a ncrca o valoare de la intrarea extern de date, va trebui s
setm cuvntul de control dup cum urmeaz:
IE ALU2 ALU1 ALU0 Load Clear OE
Cuvnt de control
6
5
4
3
2
1
0
Valoare
1
0
0
0
1
0
0
Prin setarea IE = 1, selectm intrarea extern care trece prin multiplexor. Din
tabela de operaii ALU, vedem c dac setm liniile de control ALU: ALU2, ALU1, ALU0 pe
000 se selecteaz operaia de trecere, care trece data de la intrarea operandului A a ALU
la ieirea lui ALU fr nici o modificare. n final, setarea Load = 1 ncarc valoarea de la
ieirea lui ALU ntr-un registru. De aceea, avem memorat valoarea de intrare ntr-un
registru. Nu vom dori ca s tergem registrul sau s scoatem valoarea din registru, astfel
c ambele semnale Clear i OE sunt setate pe 0.
De reinut c actuala scriere a registrului apare la urmtorul front cresctor al
ceasului.

18

UNIVERSITATEA TEFAN CEL MARE SUCEAVA


FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR

2.5. Utilizarea cilor de date generale


Utilizarea unei ci de date generale este exact ca i cnd am utiliza o cale de dat
dedicat. Vom avea de selectat (sau deselectat) semnalele de control corespunztoare la
timpul potrivit astfel nct transferul de date dintre regitrii s fie corect pentru a realiza o
instruciune de manipulare a datei. Urmtorul exemplu prezint cum putem folosi o cale
de date general ca aceea prezentat ca n figura 2.26. pentru a rezolva o problem.
Exemplul 8: Utilizarea unei ci de date generale pentru a genera numerele de la 1 la
10
Pentru vedea cum este folosit o cale de date general pentru a realiza un calcul,
ar trebui s scriem mai nti cuvintele de control pentru a genera i a furniza numerele de
la 1 la 10 prin utilizarea ci de date generale prezentate ca n figura 2-26. Acest exemplu,
bineneles, este identic cu exemplul 4, cu excepia c se utilizeaz o cale de date diferit.
De aceea, doar cuvintele de control vor fi diferite. Algoritmul se repet n figura 2-27 (a)
iar cuvintele de control care utilizeaz aceast cale de date general pentru a rezolva
problema sunt prezentate n figura 2-27 (b).

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

Cuvntul de control 1 iniializeaz i cu 0 prin selectarea semnalului Clear pentru un


registru. Nu este necesar ALU n aceast operaie. Load este deselectat deoarece nu
avem nevoie ca s memorm ieirea lui ALU n registru. n acest moment, de asemenea
nu vom dori ca s scoatem valoarea din registru, astfel c linia de control OE este de
asemenea deselectat.
Cuvntul de control 2 incrementeaz i, astfel c avem nevoie s adunm 1 la
valoarea care este memorat n registru. Dei, ALU are o operaie de incrementare nu o
putem folosi deoarece ALU a fost proiectat astfel nct operaia incrementeaz mai
degrab operandul A dect operandul B, iar aceast cale de date este conectat astfel
nct ieirea registrului trece doar n operandul B. Putem obine un 1 pentru operandul A
prin setarea lui IE pe 0, din moment ce linia de intrare 0 a multiplexorului este legat la
constanta 1. Operandul B va avea valoarea registrului. n final, vom avea nevoie s
ncrcm rezultatul adunrii napoi ntr-un registru, astfel c linia Load va fi setat.
Cuvntul de control 3 scoate valoarea din registru. Din nou nu ne vor interesa
intrrile ALU i operaia lui ALU, astfel c nu va exista nici o valoare de ncrcat n
registru. Cu siguran nu vom dori s tergem registrul. Dorim doar s scoatem valoarea
din registru, prin urmare vom selecta OE prin setarea pe 1.
Aa ca i la calea de date dedicat, calea de date general trebuie s furnizeze
semnalul de stare pentru condiia (i10) pentru unitatea de control. Folosind acest semnal
19

UNIVERSITATEA TEFAN CEL MARE SUCEAVA


FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR
de stare, unitatea de control va determina s se repete sau s se termine cuvntul de
control 2 i 3. Prin urmare, trebuie s aducem un comparator la aceast cale de date
general pentru a testa dac este fals sau adevrat condiia (i10). Ieirea acestui
comparator este semnalul de stare pe care calea de date l trimite napoi la unitatea de
control. Din moment ce variabila i este stocat n registru, ar trebui s conectm ieirea
registrului la intrarea acestui comparator, aa cum este artat n figura 2.28.

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

UNIVERSITATEA TEFAN CEL MARE SUCEAVA


FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR

Figura 2.29. O trasare a simulrii pentru exemplul 9 utiliznd cuvinte de control prezentate n figura
2.27.(b).

2.6 O cale de date general mult mai complex


Atunci cnd o cale de date general particular nu conine toate unitile
funcionale i/sau regitrii necesari pentru a efectua toate operaiile solicitate specificate n
algoritmul pe care dorim s-l implementm, atunci avem nevoie s selectm o cale de
date mult mai complex. Exemplul 9 ne arat nevoia selectrii a unei ci de date mult mai
complexe.
Exemplul 9: Determinarea necesitii pentru o cale de date complex
O s folosim calea de date simpl din figura 2.26. pentru a genera i aduna
numerele de la n pn la 1, unde n este numrul de intrare pe 8 bii al utilizatorului, iar
ieirea este suma acestor numere. Algoritmul care s realizeze acest lucru este prezentat
n figura 2.30. Algoritmul necesit utilizarea a dou variabile, n pentru intrarea care
numr pn la 0, i sum pentru a aduna totalul. Acest lucru nseamn c vom avea
nevoie de doi regitrii n calea de date, asta dac nu dorim ca utilizatorul s introduc
manual numerele de la n pn la 1 i s foloseasc doar un registru pentru a memora
suma. De aceea tragem concluzia c aceast cale de date din figura 2.26. nu poate fi
folosit pentru a implementa acest algoritm.

Figura 2.30. Algoritmul pentru a genera i a face suma numerelor de la n pn la 1.

21

UNIVERSITATEA TEFAN CEL MARE SUCEAVA


FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR

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

UNIVERSITATEA TEFAN CEL MARE SUCEAVA


FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR
Exemplul 10: Utilizarea unei ci de date complete pentru a nsuma numerele
Algoritmul de nsumare din figura 2.30 poate fi implementat utiliznd calea de date
prezentat n figura 2.31. Cuvintele de control pentru manipularea cii de date pentru
acest algoritm sunt prezentate n figura 2.32.
Cuvntul de control 1 iniializeaz sum cu 0 prin executarea unei scderi cu cei doi
operanzi identici. Locaia fiierului de registre (RF) utilizat pentru aceti doi operanzi este
arbitrar deoarece nu conteaz ce valoare are, att timp ct ambii operanzi iau aceeai
valoare. Vom folosi locaia RF 00 pentru a memora valoarea variabilei sum. De aceea,
vom selecta toate cele trei linii de activare RF, i vom seta adresa de scriere RF i ambele
adrese de citire la locaia 0. Nu este solicitat shifter-ul, astfel c este selectat operaia de
trecere.

Figura 2.32. Cuvintele de control pentru a genera i a nsuma numerele de la n pn la 1 utiliznd


calea de date din figura 2.32.

Toate operaiile specificate de cuvntul de control sunt executate ntr-un singur


ciclu de ceas. Evoluia n timp pentru operaiile acestui cuvnt de control este dup cum
urmeaz. La frontul activ al ceasului, FSM introduce starea pentru acest cuvnt de
control. Sunt selectate semnalele de control potrivite pentru acest cuvnt de control la
calea de date. Data din locaia 0 a RF este citit de ambele porturi i trecut n ALU.
Reamintim c acest fiier de registre este construit astfel nct data de la portul de citire
s fie imediat disponibil, i nu trebuie s se atepte pn la urmtorul front activ al
ceasului. Din moment ce att ALU ct i shifter-ul sunt circuite combinaionale, ele vor
prelucra data n acelai ciclu de ceas. Rezultatul este scris napoi n locaia 0 a RF la
urmtorul front activ al ceasului. De aceea, actualizarea sau noua valoare din locaia 0 a
RF nu este disponibil pn la nceputul urmtorului front activ al ceasului.
Cuvntul de control 2 introduce valoarea n i o memoreaz n locaia 1 a RF.
Pentru a citi de la intrare, vom seta IE = 1. Pentru a scrie n n locaia 1 a RF, vom seta
WE = 1 i WA1,0 = 01. Ambele ALU i shifterul nu sunt utilizate n acest cuvnt de control,
astfel c liniile lor de selecie nu sunt importante.
Cuvntul de control 3 citete sum prin Portul A setnd RAE = 1 i RAA1,0 = 00 i n
prin Portul B setnd RBE = 1 i RBA1,0 = 01. Aceste dou numere sunt adunate mpreun
prin setarea liniilor de selecie ALU, ALU2,1,0 la 100. Rezultatul adunrii trece prin shifter i
multiplexor dup care este scris napoi n locaia 0 a RF.
Cuvntul de control 4 decrementeaz n cu 1 utiliznd operaia de decrementare a
ALU (111). Din locaia 01 a RF, n este citit prin Portul A i trece la operandul A din ALU.
ALU decrementeaz operandul A cu 1 iar rezultatul este scris napoi n locaia 01 a RF.
Cuvntul de control 5 scoate rezultatul care este memorat n sum prin citirea din
locaia 0 a RF prin intermediul Portului A i l trece prin ALU i shifter. OE este selectat
pentru a activa buffer-ul cu trei stri pentru ieire.
Trasarea simulrii cuvintelor de control este prezentat n figura 2.33. Din nou, sunt
setate manual semnalele de control a cii de date de la n (memorate n RF(1)) i ajunge
pn la 0, punct n care este selectat OE, iar valoarea nsumrii 55 apare la ieire.
23

UNIVERSITATEA TEFAN CEL MARE SUCEAVA


FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR

Figura 2.33. Trasarea simulrii pentru cuvintele de control a problemei de nsumare din figura 2.32.

Exemplul 11: Utilizarea unei ci de date generale pentru a implementa nmulirea a


dou numere
Scrierea cuvintelor de control pentru realizarea nmulirii a dou numere fr semn
utiliznd calea de date general prezentat n figura 2.31. Sunt introduse dou numere
prin portul de intrare a datei. Algoritmul de nmulire este prezentat n figura 2.35.

Figura 2.34. Algoritm de nmulire a dou numere fr semn.

Cuvintele de control pentru manipularea cii de date pentru a realiza nmulirea a


dou numere fr semn sunt prezentate n figura 2.35.
Cuvntul de control 1 transfer un 0 (obinut prin scderea unui numr cu el nsui)
la RF(0). RF(0) este utilizat pentru a memora variabila prod.
Cuvintele de control 2 i 3 introduc dou numere fr semn A i B n RF(1) i
RF(2). Este setat IE la 1 astfel nct valoarea s vin de la Input Data, i din cauza
acestui lucru, nu mai are importan ce va mai face ALU i shifter-ul. WE este selectat
pentru a scrie. WA1,0 sunt setate la adresele 01 pentru variabila A i 10 pentru variabila B.
Cuvntul de control 4 execut adunarea lui prod cu A. Variabila prod, memorat n
RF(0), este citit prin Portul A; iar variabila A, din RF(1), este citit prin Portul B. Este
selectat ALU pentru adunare, iar rezultatul este trecut prin shifter. Cu WE selectat i WA1,0
setate pe 00, rezultatul este scris napoi n RF(0).
Cuvntul de control 5 decrementeaz B. Variabila B, din RF(2), este citit prin
Portul A. ALU este selectat pentru operaia de decrementare, iar rezultatul este din nou
trecut prin shifter. Rezultatul este scris napoi n RF(2).
Cuvntul de control 6 scoate rezultatul memorat n prod prin citirea lui RF(0) prin
Portul A, i trecerea acestei valori prin ALU i shifter. Valoarea este trecut la portul de
ieire a datei prin selectarea lui OE.

24

UNIVERSITATEA TEFAN CEL MARE SUCEAVA


FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR

Figura 2.35. Cuvintele de control pentru nmulirea a dou numere fr semn utiliznd calea de date
din figura 2.31.

2.7. Comportarea n timp


n figura 2.27.(b) din exemplul 8 pentru a genera ieirea numerelor de la 1 la 10,
sunt utilizate dou cuvinte de control pentru adunare i pentru operaiile de ieire.
Cuvntul de control 2 realizeaz adunarea i scrierea rezultatului ntr-un registru, n timp
ce cuvntul de control 3 scoate numrul memorat n i. Pe durata ciclului de ceas pentru
cuvntul de control 2, operaia ncepe cu constanta 1 care trece prin multiplexor, urmat
de ctre ALU care realizeaz operaia de adunare i + 1, aa cum este prezentat n figura
2.36. Valoarea curent a lui i este disponibil la ieirea registrului de la nceputul ciclului
de ceas curent. Rezultatul de la adunare este disponibil foarte puin nainte de a ncepe
urmtorul ciclu de ceas (urmtorul front cresctor al ceasului).
Pentru cuvntul de control 2, vom realiza att citirea ct i scrierea aceluiai
registru, i, ntr-un ciclu de ceas pentru execuia instruciunii i = i + 1. Citirea este pentru i
care este pe partea stng de la semnul egal, iar scrierea este pentru i care este pe
partea dreapt de la semnul egal. Pentru ambele analize, am observat c execuia att
pentru citire ct i pentru scriere n acelai registru n acelai ciclu de ceas nu creeaz nici
un conflict deoarece citirea apare la nceputul ciclului de ceas curent i , prin urmare,
preia valoarea curent care se afl n registru. Scrierea apare la nceputul urmtorului
ciclu de ceas, ceea ce se ntmpl nainte de citire.
Ca rezultat, valoarea care este disponibil la ieirea registrului din ciclul de ceas
curent este nc valoarea scris anterior, valoarea care este nainte de adunarea lui i + 1.
Dac selectm semnalul OE din ciclul de ceas curent pentru a scoate valoarea registrului
(ceea ce se realizeaz prin adunare i operaiile de ieire n acelai ciclu de ceas aa cum
este prezentat n cuvntul de control 2 din figura 2.38), valoarea de ieire este valoarea
de dinaintea adunrii i nu rezultatul de dup adunare. Conform algoritmului din figura
2.27.(b), ieirea trebuie s fie pentru valoarea de dup adunare. Din cauza acestui lucru,
figura 2.27.(b) utilizeaz cuvntul de control 3 (care ncepe la urmtorul ciclu de ceas)
pentru a scoate valoarea de dup adunare.

Figura 2.36. Evoluia n timp pentru operaiile de scriere i citire pentru un cuvnt de control.

25

UNIVERSITATEA TEFAN CEL MARE SUCEAVA


FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR
Trasarea simulrii pentru cuvintele de control din figura 2.37 (unde adunarea i
operaiile de ieire sunt amndou realizate n acelai cuvnt de control) este prezentat
n figura 2.38. Exist dou diferene principale ntre aceast trasare a simulrii i cea din
figura 2.29. Prima este aceea c acum fiecare numrtor necesit doar un singur ciclu de
ceas fa de dou, deoarece cuvntul de control 2 se repet de zece ori. Ca rezultat,
timpul pentru numrare pn la zece este jumtate (2.3 s fa de 4.1 s). Al doilea
aspect este acela c prima valoare de ieire este 0 i nu 1 (aa cum trebuie s fie). Prima
dat, cuvntul de control 2 se execut ntr-un ciclu de ceas ntre 100ns i 300ns. Valoarea
incrementat (1) nu este scris n registru pn la 300ns, astfel c OE fiind selectat
nainte de 300ns, valoarea de ieire este 0.
Dorim ca s avem nevoie doar de o jumtate de timp pentru a executa algoritmul,
dar nu dorim ca s fie scos la nceput un 0 suplimentar. Exist cteva soluii posibile, una
dintre acestea este prezentat n figura 2.40. n figura 2.40, semnalul de control OE nu
este selectat n cuvntul de control 2, care este executat doar o singur dat la nceputul
buclei. (De reinut c, cuvintele de control 1 i 2 sunt echivalente pentru a asigna
constanta de la 1 la i). Trasarea simulrii corecte pentru acest set al cuvintelor de control
este prezentat n figura 2.40. Din nou, sunt necesare doar 2.3s pentru completarea
algoritmului, dar de aceast dat, numrarea ncepe de la 1 i nu de la 0.
Instruciune
IE
ALU2ALU1ALU0
Load Clear OE
Cuvnt de
control
6
5-3
2
1
0
1
i=0
x
xxx
0
1
0
2
i = i + 1 i OUTPUT i
0
100 (adun)
1
0
1
Figura 2.37. Algoritmul de numrare utiliznd dou cuvinte de control pentru calea de date din figura
2.26.(a).

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

UNIVERSITATEA TEFAN CEL MARE SUCEAVA


FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR

Figura 2.40. Trasarea simulrii corecte pentru utilizarea a trei cuvinte de control din figura 2.39.

2.8. VHDL pentru cile de date


n modelarea cii de date folosind VHDL, vom avea nevoie s lucrm la nivelul
structural. Prima dat, toate componentele utilizate n calea de date trebuie s fie descrise
individual. Nu conteaz unde sunt descrise aceste componente, pot fi descrise la nivel
comportamental, legtur de date sau nivel structural. Aceste componente sunt conectate
mpreun ntr-o entitate care folosete metoda de nivel structural.

2.8.1. Calea de date dedicat


Figura 2.41 prezint codul VHDL pentru calea de date dedicat pentru figura 2.24.
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
ENTITY Datapath IS PORT (
Clock: IN STD_LOGIC;
-- intrarea c ii de date principale
Input: IN STD_LOGIC_VECTOR(7 DOWNTO 0);
-- semnalele de control
nLoad: IN STD_LOGIC;
nShift: IN STD_LOGIC;
eightCount: IN STD_LOGIC;
Clear: IN STD_LOGIC;
bitCount: IN STD_LOGIC;
Down: IN STD_LOGIC;
OutDone: IN STD_LOGIC;
-- semnalele de stare
eq8: OUT STD_LOGIC;
N0eq1: OUT STD_LOGIC;
-- ie irea cii de date principale
Count: OUT STD_LOGIC_VECTOR(3 DOWNTO 0); -- pentru compilare
Done: OUT STD_LOGIC;
Output: OUT STD_LOGIC);
END Datapath;
ARCHITECTURE Structural OF Datapath IS
COMPONENT shiftreg PORT (
Clock: IN STD_LOGIC;
SHSel: IN STD_LOGIC_VECTOR(1 DOWNTO 0);
D: IN STD_LOGIC_VECTOR(7 DOWNTO 0);
Q: OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END COMPONENT;

27

UNIVERSITATEA TEFAN CEL MARE SUCEAVA


FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR
-- continuare program -COMPONENT counter PORT (
Clock: IN STD_LOGIC;
Clear: IN STD_LOGIC;
Count: IN STD_LOGIC;
Down: IN STD_LOGIC;
Q: OUT INTEGER RANGE 0 TO 15);
END COMPONENT;
SIGNAL
SIGNAL
SIGNAL
SIGNAL
SIGNAL
SIGNAL

SHSel: STD_LOGIC_VECTOR(1 DOWNTO 0);


ShiftOut: STD_LOGIC_VECTOR(7 DOWNTO 0);
CountbitOut: INTEGER RANGE 0 TO 15;
CounteightOut: INTEGER RANGE 0 TO 15;
Equal: STD_LOGIC;
Up: STD_LOGIC;

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.

2.8.2 Calea de date general


Figura 2.42. i figura 2.43. prezint un cod VHDL complet pentru realizarea
circuitului cii de date generale i complexe din figura 2.31. Figura 2.42 prezint definiiile
tuturor componentelor utilizate n calea de date. Codurile VHDL i construciile detaliate a
componentelor utilizate n circuitul cii de date au fost discutate anterior. Figura 2.43.
prezint entitatea care conecteaz aceste componente mpreun la nivel structural pentru
a forma calea de date.
-- 2-to-1 MUX
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY mux2 IS PORT (
S: IN STD_LOGIC;
-- linia de selec ie
D1, D0: IN STD_LOGIC_VECTOR(7 downto 0);
-- intrarea
magistralei de date
Y: OUT STD_LOGIC_VECTOR(7 downto 0));
-- ie irea magistrale
de date
END mux2;

28

UNIVERSITATEA TEFAN CEL MARE SUCEAVA


FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR
-- continuare program -ARCHITECTURE Behavioral OF mux2 IS
BEGIN
PROCESS(S, D1, D0)
BEGIN
IF(S = '0' )THEN
Y <= D0;
ELSE
Y <= D1;
END IF;
END PROCESS;
END Behavioral;
---------------------------------------------------------------------------- Register File
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
--USE IEEE.STD_LOGIC_ARITH.ALL;
ENTITY regfile IS PORT (
clk: IN STD_LOGIC;
-- ceas
WE: IN STD_LOGIC;
--activarea scrierii
WA: IN STD_LOGIC_VECTOR(1 DOWNTO 0); -- adresa scrierii
input: IN STD_LOGIC_VECTOR(7 DOWNTO 0);
--intrarea
RAE: IN STD_LOGIC;
-- porturile de activare a scriere A i B
RAA: IN STD_LOGIC_VECTOR(1 DOWNTO 0); --porturile adreselor de
scriere A i B
RBE: IN STD_LOGIC;
-- porturile de activare a citirii A i B
RBA: IN STD_LOGIC_VECTOR(1 DOWNTO 0); --porturile adreselor de
citire A i B
Aout, Bout: OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); --portul de
ie ire A i B
END regfile;
ARCHITECTURE Behavioral OF regfile IS
SUBTYPE reg IS STD_LOGIC_VECTOR(7 DOWNTO 0);
TYPE regArray IS array(0 TO 3) OF reg;
SIGNAL RF: regArray;
--con inutul fi ierului de registre
BEGIN
WritePort: PROCESS (clk)
BEGIN
IF (clk'EVENT AND clk = '1') THEN
IF (WE = '1') THEN
RF(CONV_INTEGER(WA)) <= input;
END IF;
END IF;
END PROCESS;
ReadPortA: PROCESS (RAE, RAA)
BEGIN
IF (RAE = '1') then
Aout <= RF(CONV_INTEGER(RAA));
ELSE
Aout <= (others => '0');
END IF;
END PROCESS;
ReadPortB: PROCESS (RBE, RBA)
BEGIN
IF (RBE = '1') then
Bout <= RF(CONV_INTEGER(RBA));
ELSE
Bout <= (others => '0');
END IF;
END PROCESS;
29
END Behavioral;

UNIVERSITATEA TEFAN CEL MARE SUCEAVA


FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR
-- continuare program --------------------------------------------------------------------------- ALU ------LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
-- need the following to perform arithmetics on STD_LOGIC_VECTORs
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY alu IS PORT (
ALUSel: IN STD_LOGIC_VECTOR(2 DOWNTO 0); -- selec ia pt. opera ii
A, B: IN STD_LOGIC_VECTOR(7 DOWNTO 0); -- operanzii de intrare
F: OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); -- ie ire
END alu;
ARCHITECTURE Behavior OF alu IS
BEGIN
PROCESS(ALUSel, A, B)
BEGIN
CASE ALUSel IS
WHEN "000" => -- trecerea lui A
F <= A;
WHEN "001" =>
-- SI (AND)
F <= A AND B;
WHEN "010" =>
-- SAU (OR)
F <= A OR B;
WHEN "011" =>
-- NOT
F <= NOT A;
WHEN "100" =>
-- adunare
F <= A + B;
WHEN "101" =>
-- scdere
F <= A - B;
WHEN "110" =>
-- incrementare
F <= A + 1;
WHEN others =>
-- decrementare
F <= A - 1;
END CASE;
END PROCESS;
END Behavior;
-------------------------------------------------------------------------- Shifter
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY shifter IS PORT (
SHSel: IN STD_LOGIC_VECTOR(1 DOWNTO 0);
input: IN STD_LOGIC_VECTOR(7 DOWNTO 0);
output: OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END shifter;
ARCHITECTURE Behavior OF shifter IS
BEGIN
PROCESS(SHSel, input)
BEGIN
CASE SHSel IS
WHEN "00" => -- trecere
output <= input;
WHEN "01" => -- deplasare dreapta
output <= input(6 DOWNTO 0) & '0';
WHEN "10" => -- deplasare stnga
output <= '0' & input(7 DOWNTO 1);
WHEN OTHERS => -- rotire dreapta
output <= input(0) & input(7 DOWNTO 1);
END CASE;
30
END PROCESS;
END Behavior;

UNIVERSITATEA TEFAN CEL MARE SUCEAVA


FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR
-- continuare program --------------------------------------------------------------------------- Tri-state buffer
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY TriStateBuffer IS PORT (
E: IN STD_LOGIC;
D: IN STD_LOGIC_VECTOR(7 DOWNTO 0);
Y: OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END TriStateBuffer;
ARCHITECTURE Behavioral OF TriStateBuffer IS
BEGIN
PROCESS (E, D)
-- daca nu e d primeste mesaj de eroare
BEGIN
IF (E = '1') THEN
Y <= D;
ELSE
Y <= (OTHERS => 'Z'); -- pentru a primi 8 valori de Z
END IF;
END PROCESS;
END Behavioral;
Figura 2.42. Componentele pentru calea de date din figura 2.32.
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY datapath IS 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));
END datapath;
ARCHITECTURE Structural OF datapath IS
COMPONENT mux2 PORT (
S: IN STD_LOGIC;
-- select lines
D1, D0: IN STD_LOGIC_VECTOR(7 DOWNTO 0);
-- data bus input
Y: OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
-- data bus output
END COMPONENT;
COMPONENT regfile PORT (
clk: IN STD_LOGIC; --clock
WE: IN STD_LOGIC;
--write enable
WA: IN STD_LOGIC_VECTOR(1 DOWNTO 0); --write address
input: IN STD_LOGIC_VECTOR(7 DOWNTO 0); --input
RAE: IN STD_LOGIC; --read enable ports A & B
RAA: IN STD_LOGIC_VECTOR(1 DOWNTO 0); --read address port A & B
RBE: IN STD_LOGIC; --read enable ports A & B
RBA: IN STD_LOGIC_VECTOR(1 DOWNTO 0); --read address port A & B
Aout, Bout: OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); --output port A & B
END COMPONENT;

31

UNIVERSITATEA TEFAN CEL MARE SUCEAVA


FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR
-- continuare program -COMPONENT alu PORT (
ALUSel: IN STD_LOGIC_VECTOR(2 DOWNTO 0); -- select for operations
A, B: IN STD_LOGIC_VECTOR(7 DOWNTO 0); -- input operands
F: OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); -- output
END COMPONENT;
COMPONENT shifter PORT (
SHSel: IN STD_LOGIC_VECTOR(1 DOWNTO 0); -- select for operations
input: IN STD_LOGIC_VECTOR(7 DOWNTO 0); -- input operands
output: OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); -- output
END COMPONENT;
COMPONENT tristatebuffer PORT (
E: IN STD_LOGIC;
D: IN STD_LOGIC_VECTOR(7 downto 0);
Y: OUT STD_LOGIC_VECTOR(7 downto 0));
END COMPONENT;
SIGNAL muxout, rfAout, rfBout: STD_LOGIC_VECTOR( 7 DOWNTO 0 );
SIGNAL aluout, shiftout, tristateout: STD_LOGIC_VECTOR( 7 DOWNTO 0 );
BEGIN
-- SE FACE MODELAREA STRUCTURALA
U0: mux2 PORT MAP( IE, input, shiftout, muxout );
U1: regfile PORT MAP(clock,WE,WA,muxout,RAE,RAA,RBE,RBA,rfAout,rfBout );
U2: alu PORT MAP( ALUsel, rfAout, rfBout, aluout );
U3: shifter PORT MAP(SHSel,aluout,shiftout);
U4: tristatebuffer PORT MAP(OE, shiftout, tristateout);
output <= tristateout;
END Structural;
Figura 2.43. Calea de date din figura 2.32. construit la nivel structural.

3. Desfurarea lucrrii
1. Se va studia calea de date si exemplele aferente.
2. Se vor scrie i testa exemplele scrise n VHDL.

32

S-ar putea să vă placă și