Sunteți pe pagina 1din 11

Organizarea Calculatoarelor LABORATOR 4 Implementarea i simularea unui sumator/scztor pe 4 bii

SCOPUL LUCRRII
Pe baza sumatorului pe 4 bii implementat anterior, se cere construirea unui sumator/scztor cu operanzi reprezentai pe 4 bii. Sumator/scztorul se va simula iar apoi se va implementa folosind Placa de dezvoltare S3. In final se cere implementarea depirii la adunare/scdere numere cu semn.

Chestiuni teoretice
Complementul fa de 2. Dac X=xn-1.x1x0 este un numr binar pozitiv reprezentat pe n bii complementul su fa de 2 se noteaz X i se calculeaz ca X = 2 n | i | . Definiia riguroas este: X = (2 n | i |) mod 2 n Fie i un numr ntreg ce aparine intervalului [-2n-1, 2n-1). De exemplu dac n=4, i [8, 8) . Reprezentarea n cod complementar (fa de 2) a numrului i se noteaz cu i i se calculeaz dup urmtoarea regul: i0 | i | , i= n 2 | i | , i < 0 Pentru n=4 numerele i [8, 7] se reprezint conform figurii urmtoare: Codul complementar are o serie de proprieti remarcabile: 1. Numerele pozitive au bitul cel mai semnificativ 0 iar cele negative, 1 (vezi figura). Bitul cel mai semnificativ se numete bit de semn. 2. In laboratorul precedent s-a cerut implentarea unui scztor pe un bit. Prin cascadarea a n scztoare de un bit se poate obine un scztor pe n bii, aa cum sumatorul pe 4 bii s-a obinut prin cascadarea a 4 sumatoare de un bit. Dac un scztor pe 4 bii are de efectuat 5-2 rezultatul va fi:
figura 1 01010010 0011,

adic 3.

Care este rezultatul operaiei 2-5? Conform regulilor nvate la clasa a VI-a, mai nti ar trebui comparate modulele celor dou numere, apoi se scade modulul cel mai mic din modulul cel mai mare i se d semnul din fa operandului care modulul mai mare. Adic se face 5-2=3 i apoi semnul lui 3 se schimb. 1

Dac nu se ine seama de regula de la clasa a VI-a i scdem pe 5 din 2, obinem:


1 00100101 1101,

adic 3 (vezi figura de mai sus) i un mprumut care se va ignora.

Dac am vrea s implementm scderea ca la clasa a VI-a, pe lng scztor am mai avea nevoie de un comparator i de dou multiplexoare vectoriale. Scderea fr compararea modulelor are nevoie doar de scztor, dar rezultatul apare n complement fa de 2. 3. Nu este nevoie de un sumator special pentru adunarea numerelor reprezentate in cod complementar. Adunarea numerelor reprezentate n cod complementar se face cu acelai hardware ca cel folosit pentru adunarea numerelor naturale. Rezultatul va apare ns n cod complementar. Add4 (implementat anterior) funcioneaz perfect i pentru numere reprezentate n cod complementar pe 4 bii. ATENTIE: Bitul de semn particip la calcule! Un prim exemplu: 5+(-3), 5 =0101, 3 =1101
0101+ 1101 10010,

adic 2 (vezi figura de mai sus) i un transport care se va ignora.

Un al doilea exemplu: (-4) + (-3), 4 =1100, 3 =1101


1100+ 1101 11001,

adic 7 (vezi figura de mai sus) i un transport care se va ignora.

4. Nu este nevoie de hardware special pentru scdere, adic de scztor (dup ce v-ai chinuit atta cu el, cel puin unii dintre voi)! In loc de scdere se adun scztorului cu semn schimbat i rezultatul este ntotdeauna corect. Nu conteaz dac scztorul este pozitiv sau negativ! Operaia A-B se poate efectua ca A+(-B). Singura problem este c nu dispunem de numerele A i B, ci de reprezentarea lor n cod complementar, adic de A i de B . Operaia A-B= A+(-B) va executata de hardware ca A B = A + B Se poate arta imediat c dac B se reprezint n cod complementar ca B , atunci:
B = 2n B

Adic B se obine prin complementarea lui B Un prim exemplu: 5-(+2), 5 =0101, 2 =0010, 2 =104 0010=10000-0010=1110
0101+ 1110 10011,

adic 3 i un transport care se va ignora. (-4) - (-3), 4 =1100, 3 =1101, (3) = 3 =104-1101=10000-1101=0011

Un al doilea exemplu:

1100+ 0011 1111,

adic -1. 2

Chiar dac n loc de a scdea B am adunat pe B , tot nu am scpat de scdere. Termenul B se obine efectund tot o scdere, i anume B = 2 n B . Dac nu scpm de ea, ideea prezentat mai sus nu are nici o valoare practic (din punct de vedere al implementrii). Aa cum vom vedea n continuare, nu este nevoie s se efectueze o scdere pentru a obine complementul unui numr. Complementarea se poate face prin 3 metode. Metoda de interes din punct de vedere al implementrii este cea prin intermediul complementului fat de 1. Mai exact, cantitatea care trebuie complementat se inverseaz bit cu bit i n final se adun un 1. De exemplu complementul lui 0010 este 1101+1=1110. Complementul fa de 1 se noteaz cu dou bare: complementul fa de 1 al lui B este B . Marele avantaj al acestei metode este c scderea se transform n inversarea bit cu bit a lui B plus adunarea unei uniti. Inversarea necesit un LUT per rang pe cnd scderea necesit dou LUT-uri per rang. Economie de un LUT per rang! Ultima problem const n adunarea unei uniti. Aceast operaie se poate face prin intermediul intrri Cin a rangului 0. Aceast intrare este conectat la mas (0L) la sumatorul pe 4 bii proiectata anterior. n concluzie, dac avem de adunat dou numere A i B reprezentate n cod complementar ca A i B , suma, reprezentat tot n cod complementar, se obine ca:

S = A+ B
D = A + B +1

(1)

Dac avem de efectuat A-B diferen D se obine ca: (2)

Adunarea se face cu un sumator pentru numere naturale. Bitul de semn particip la adunare. Pentru 4 bii, add4 este un astfel se sumator. Pentru a proiecta un bloc aritmetic care ofer la ieire fie suma fie diferena, mai este nevoie de un semnal care s decid ce operaie se face. Numele acestui semnal va fi S_nA (Sub or not Add). Dac S_nA este 0L se va face adunare iar dac este 1L se va face scdere. Ieirea blocului se va numi SD (sum or dif). Acest bloc va implementa urmtoarele prelucrri exprimate n stil C:
OP1= A if (S_nA==0) OP2= B ; else OP2= B ;

SD =OP1+OP2+S_nA; Dac executai mintal prelucrrile de mai sus vei vedea c SD este fie suma din relaia (1) dac S_nA=0L, fie diferena din relaia (2) dac S_nA=1L. Implementarea hardware necesit un sumator pentru numere naturale, cum este add4. Pentru fiecare bit k=0..n-1este nevoie de un sumator de un bit. Primul operand al acestui sumator este bitul k al lui A. Al doilea operand este fie bitul k a lui B dac operaia este adunare, fie negatul acestuia dac operaia este scdere. Pentru selecta fie bk, fie not bk, este nevoie de un MUX2. Pentru a genera pe not bk este nevoie de un inversor. Cin este 0L pentru adunare i 1L pentru scdere. Cu alte cuvinte este chiar S_nA. Sumator/scztorul pe 4 bii este prezentat n figura 2. Nu desenai aceast figur!

figura 2

Din figur se observ c structura marcat cu rou se repet de n-2 ori. Putem desena aceast structur o dat i apoi cu copy&paste s o repetm de n-1 ori. n final avem de modificat prima i ultima structur. Dei acest mod de lucru este posibil, un sumator/scztor pe 32 de nseamn o schem foarte mare care probabil nici nu poate fi cuprins ntr-un singur ecran fr ca numele pinilor s nu se mai observe. Din acest motiv se va prefera o alt metod de desenare, bazat pe magistrale

Chestiuni practice
n laboratorul 2 s-a explicat procesul prin care o schem se reprezint la nivelul ierarhic superior prin intermediul unui simbol simbolul pentru add1. Cum scopul final este s implementm un procesor, este de ateptat ca i sumator/scztorul pe care-l vom proiecta s fie folosit n schema procesorului tot prin intermediul unui simbol. Dei acest sumator/scztor nu este nc gata, ne putem face o idee despre modul n care va arta simbolul asociat dac vom crea un simbol pentru add4. Simbolul generat pentru add4 este prezentat n figura 3. Simbolul asociat unui sumator pe 32 de bii, ct este limea cii de date la MIPS ar avea 32 de terminale pentru operandul A, 32 pentru B i nc 32 pentru S. In total 96 de terminale! Este clar c un asemenea simbol nu ar putea fi folosit.
figura 3

n general conectarea elementelor unei scheme se poate face prin fire sau prin grupe de fire magistrale. Magistralele sunt necesare pentru a micora numrul de fire, n cazul n care prelucrrile se fac

pe un numr mare de bii. n acest laborator multe conexiuni se for face prin intermediul magistralelor. 4

Desfurarea lucrrii
Pasul 1: Crearea proiectului. Se face conform metodologiei prezentate n primul laborator. Proiectul se va numi AddSub4. Pasul 2: Crearea schemei sumatorului pe 4 bii folosind magistrale. Se adaug la proiect sumatorul pe 1 bit din laboratorul 2. Pentru aceasta facei clic dreapta n fereastra Sources i din meniul contextual ce va apare selectai Add Copy of SourceAdugai fiierul add1.sch din laboratorul 2. n continuare adugai un nou fiier de tip sch la proiect. Numele acestuia va fi ad4.sch. Nu copiai fiierul add4.sch din laboratorul 2! Plasai 4 sumatoare de 1 bit i conectai-le ca n figura 4, aa cum ai mai fcut-o pentru add4.sch n lab2.

figura 5

figura 4

n cazul sumatorului pe 4 bii, suma devenea disponibil n exterior prin intermediul a 4 marcherii IO numii S0, S1, S2 i S3. Cei patru marcheri pot fi nlocuii cu un singur marcher IO de tip bus, i anume S(3:0), ca n figura 5. NU desenai aceast figur! Pentru desenarea schemei bazat pe magistrale procedai dup cum urmeaz: Adugai o conexiune care se termin n aer la ambele capete iar apoi la captul din stnga adugai un marcher IO, ca n figura 6

figura 6

Schimbai numele marcherului IO, asignat automat din XLXN_12, n S(3:0). Vei obine situaia din figura 7. Atenie: n schema dumneavoastr numele conexiunii poate fi altul.

figura 7

Observai ca firul ataat de marcherul IO i-a schimbat grosimea deoarece este ataat de un marcher de magistrala. Conexiunea (firul) a devenit magistral! Dac facei dublu clic magistrala nou aprut, vei constata c numele acesteia este S(3:0). Toate mediile de desenare, i ISE nu face excepie, consider magistrala o grupare de conexiuni singulare. Relaia dintre magistral i conexiunile singulare definite implicit odat cu definirea magistralei se aseamn cu definirea unui vector. De exemplu char S[4]; a definit un vector de 4 elemente: S[0], S[1], S[2], S[3] Deoarece magistrala nu este altceva dect o mulime de fire, se poate folosi conectarea prin nume explicat n laboratorul 1. Astfel specificarea legturilor dintre marcherul IO S(3:0) i terminalele sumatoarelor de 1 bit se poate face ca n figura 8. NU desenai aceast figur!

figura 8

Dei aceast schema este corect, are un dezavantaj: modul de conectare marcheriterminale nu este bine evideniat. In extremis, se pot construi scheme n care conexiunile s se fac numai prin nume. Astfel de scheme nu i relev aproape de loc funcionalitatea. La cealalt extrema se pot desena scheme n care conectivitatea s se fac numai cu fire. i aceste scheme sunt aproape imposibil de interpretat din cauza numrului mare de fire. De aceea ntr-o schema trebuie pstrat o balan ntre conectarea prin nume i conectarea prin fir, astfel nct din schem s rezulte ct mai clar funcia ndeplinit. n cazul magistralelor, exist posibilitatea evidenierii conectivitii dac se procedeaz dup cum urmeaz. Se prelungete magistrala A(3:0) ca n figura 9.

figura 9

Apoi apsai butonul de desenare fire i validai check box-ul Automatically...., conform figura 10.

figura 10

Pentru a aduga o conexiune terminal magistral, poziionai cursorul n dreptul unui terminal de exemplu S-ul rangului 3 n figura 10. Poziionarea este corect n momentul n care apar cele 4 ptrele. Facei clic. Apoi, poziionai cursorul pe magistral. i n acest caz, poziionarea este corect n momentul n care apar cele 4 ptrele. Atenie: de obicei aceste ultime 4 ptrele nu apar, chiar dar poziionarea este corect! Facei clic. Faptul c un fir este conectat la magistral este specificat prin apariia triunghiului isoscel (tap) cu baza aezat pe magistral. Realizai toate conexiunile aferente lui S(3:0) ca n figura 11.

figura 11

Conectare bus membru de bus se supune anumitor restricii: o Bus-ul conectat la un marcher IO de bus are acelai nume ca marcherul. o Magistrala trebuie s aib aceeai dimensiune ca terminalul de bus al unui modul sau ca marcherul IO de bus la care se conecteaz. o Cnd un fir sau o submagistral se conecteaz la o magistral prin intermediul unui tap, numele submagistralei sau firului trebuie s fie un subset al numelui magistralei.

n momentul n care ai adugat conexiuni terminal de modul bus, aceste conexiuni au primit un nume automat, dat de ISE. Se poate s apar i o avertizare ca respectiva conexiune are un nume temporar, nume care trebuie schimbat deoarece nu respect regulile enunate anterior. Dac facei Check Schematic nainte de modificarea numelor nainte de modificarea numelor vei obine o mulime de erori! Pentru a schimba numele conexiunilor adugate apsai butonul Add net name, setai Increase the Name i pornii cu S(0). Numele se schimb conform metodei prezentate n laboratorul1. Dup ce schimbai toate numele trebuie s obinei situaia din figura 12.

figura 12

In continuare adugai marcherii OP1 i OP2 plus magistralele aferente i marcherii Cin i Cout. Trebuie s obinei situaia din figura 13.

figura 13

Apoi verificai c marcherii OP1, OP2 i Cin sunt de tip Input iar S i Cout sunt de tip Output. Atenie: Avei grij ca tap-urile magistralei OP2 s nu se termin n magistrala OP1. Pentru aceasta schimbai culoarea tap-ului. n acest sens din meniul Edit al ferestrei principale ISE (NU a editorului de scheme) selectai Preferences, ca n figura 14. Apoi selectai Colors, apsai butonul New, acceptai numele CustomScheme i n final modificai culoarea Bus Tap la rou.

figura 14

Dup ce ai obinut situaia din figura 13, verificai schema i salvai. Pasul 3: Crearea schemei inversorului vectorial pe 4 bii. Se creeaz un nou fiier de tip schematic cu numele not4.sch, ce va fi folosit pentru desenarea inversorului vectorial pe 4 bii. Acest fiier va conine cele 4 inversoare din figura 2. Dup ce ai obinut situaia din figura 15, verificai schema i salvai.

figura 15

10

Pasul 4: Crearea schemei multiplexorului vectorial pentru 2 vectori de 4 bii. Se creeaz un nou fiier de tip schematic cu numele MUX2V4.sch, ce va fi folosit pentru desenarea multiplexorului vectorial. Acest fiier va conine cele patru MUX2 din figura 2. Dup ce ai obinut situaia din figura 16, verificai schema i salvai.

figura 16

VA CONTINUA!

11