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

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 multiplexor pentru a selecta una dintre aceste surse pentru a o transfera ctre destinaie.

UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR 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 sumatoarele sunt independente unul de cellalt. Totui, calea de date din dreapta trebuie 6

UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR 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

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 A=A+3 A=B+C ALoad 1 1 Mux 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 INPUT A B=8 B = 13 OUTPUT B ALoa d 1 0 0 0 Muxse l x 1 0 x BLoa d 0 1 1 0 Out 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. INPUT A B=8 B = 13 OUTPUT B iLoad 1 0 0 0 Clea r x 1 0 x Out 0 1 1 0 Cuvnt de control 1 2 3 4 Instr. INPUT A B=8 B = 13 OUTPUT B iLoad 1 0 0 0 Clea r x 1 0 x Out 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 sum = 0 INPUT n Sum = sum +n N=n1 OUTPUT sum

nLoa d 0 1 0 0 0

nCoun t 0 0 0 1 0

sumLoa d 0 0 1 0 0

Clear 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 INPUT n product = 1 product=product *n n=n1 OUTPUT product Instruciune INPUT n, product=1 product = product * n, n = n-1 OUTPUT product productMux x 1 0 x x (a) productMux 1 0 x productLoad 0 1 1 0 0 productLoad 1 1 nLoad 1 0 0 0 0 nLoad 1 0 nCount 0 0 0 1 0 nCount 0 1 Out 0 0 0 0 1 Out 0 0

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 //pentru num rarea num rului de 0 i bi ii de 1 counteight = 0 //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

16

UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR
Figura 2.23. Algoritm pentru rezolvarea problemei de numrarea de 0 i 1 din exemplul 7.

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 INPUT n countbit = 0, counteight = 0 countbit=countbit + 1 countbit=countbit - 1 n = n >> 1 counteight =counteight + 1 OUTPUT1,OUTPUT0, fr ASSERT nLoad 1 0 0 0 0 0 0 nShift 0 0 0 0 1 0 0 eightCount x 0 0 0 0 1 0 Down x x 0 1 x x x bitCount x 0 1 1 0 0 0 Clear X 1 0 0 0 0 0 Out 0 0 0 0 0 0 1

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: Cuvnt de control IE ALU ALU1 ALU Load Clear OE 6 4 2 1 0 2 0 5 3 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 (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.

ALU2ALU1ALU0 5-3 xxx 100 (adun) xxx

Load 2 0 1 0

Clear 1 1 0 0

OE 0 0 0 1

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

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. Cuvnt de Instruciune IE ALU2ALU1ALU0 Load Clear O control 6 5-3 2 1 E 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

O E 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 c ii 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 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. 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;

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; END Behavioral;

29

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" => -- sc dere 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; END PROCESS; END Behavior;

30

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

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