Sunteți pe pagina 1din 3

Reprezentarea numerelor in virgula fixa Prezinta modul in care este reprezentata informatia in calculator si detaliaza reprezentarile numerelor in virgula

fixa, analizand avantajele si scaderile fiecarui tip de codificare: semn-marime, complement de 1, complement de 2. Sunt solutionate probleme practice precum shiftarea numerelor in diferite reprezentari de virgula fixa dar si conversia numerelor in reprezentare cu set redundant de cifre. 1 Reprezentarea Numerelor in Calculator 1.1 Clasificarea Informatiei Informatia in calculator este organizata in cuvinte (words). Cuvantul este unitatea de informatie care are lungime fixa. El admite n cifre binare sau biti, unde n este in primul rand determinat din considerente legate de costul hard. In general este un multiplu de byte. ASCII (American Standard Code for Information Interchange) 1.2 Formate pentru Numere Pentru selectarea unei reprezentari de numar care sa fie utilizata in calculator trebuie sa se tina cont de urmatoarele: - tipul numerelor de reprezentat; - domeniul valoric care trebuie acoperit de reprezentare; - precizia numerelor, strict legata de acuratetea maxima a reprezentarii; - costul hardware-ului necesar memorarii numerelor; Exista doua formate de reprezentare a numerelor: - formate de virgula mobila(flotanta); - formate de vigula fixa; Formatele de virgula fixa au un domeniu mai restrans, dar si costul circuisticii hardware este mai mic. 1.2.1 Reprezentarea Numerelor in Vigula Fixa Reprezentarea in virgula fixa ofera un domeniu valoric restrans. Este dedusa in mod direct din forma zecimala ordinara a numerelor, in conformitate cu care numerele prezinta o virgula zecimala, la partea stanga a acesteia corespunzand partea intreaga a numarului, iar la partea dreapta corespunde partea zecimala. Fiecare pozitie are asociata o pondere, fapt pentru care se spune ca numerele sunt scrise intr-o notatie ponderata: notatie pozitionala.Coeficientii cu indici pozitivi reprezinta cifrele aflate la stanga virgulei si definesc partea intreaga. Coeficientii cu indici negativi se gasesc la dreapta virgulei si definesc partea fractionara a unui numar. In general trecerea unui numar dintr-o baza mare in una mica se poate face impartind numarul la baza dorita. 1.2.1.1 Numere binare Pentru o reprezentare uniforma a numerelor binare cu semn, din cei n biti considerati disponibili, unul este sacrificat pentru semn, si prin conventie este bitul situat in partea stanga (bitul cel mai semnificativ). Tot prin conventie se atribuie 0 pentru semnul + si 1 pentru semnul -. Bitii pot fi numerotati de la dreapta la stanga (cum se intampla la SPARC), caz in care se numeste reprezentare Little Endian, sau de la stanga la dreapta (cum se intampla la familia INTEL), caz in care se numeste reprezentare Big Endian. Exista 3 reprezentari fundamentale ale numerelor binare in virgula fixa: a) Sign-magnitude (semn-marime) b) Ones complement (complement de 1 C1) c) Twos complement (complement de 2 C2) Reprezentarea numerelor in semn marime ne permite tratarea uniforma a semnului impreuna cu cifrele reprezentand marimea.In consecinta operatiunea de adunare nu functioneaza direct, fiind necesara tatonarea semnelor celor 2 numere si operarea in consecinta doar a marimilor. Reprezentarea numerelor in complement de 1 . In ceea ce priveste numerele positive este identic cu cea semn-marime, situatia insa se schimba pt numerele negative.Atunci cand se aduna doua numere negative sau unul pozitiv si unul negativ, cel pozitiv fiind mai mare in modul rezultatul obtinut necesita o corectie asimilata aparitiei transportului pe bitul de semn.Aceasta corectie se numeste end around carry. Reprezentarea in complement de 2 Pentru numerele positive reprezentarea este identica cu cele dinainte.Pt numerele negative se obtine din reprezentarea in complement de 1 la care se mai adauga 1.Reprezentarea in complement de 2 permite tratarea uniforma a bitului de semn si a celui de marime, iar rezultatul obtinut nu necesita corectie.Exista o singura reprezentare a lui 0, ceea ce elibereaza o pozitie de cod, si anume 1000, care fiind cu o unitate mai mica decat -7 ii corespunde in mod firesc lui -8.Aceasta pozitie constituie anomalia complementului de 2 deoarece nu are corespondent in partea pozitiva a intervalului.Din punct de vedere istoric reprezentarea semnmarime nu s-a folosit, C1 s-a folosit, iar C2 se foloseste si azi. Reprezentarea BCD Exista multe aplicatii in care operatia dominanta reprezinta intrarea si iesirea de date, ori este cunoscut faptul ca in lumea exterioara operam in sistemul zecimal iar in sistemele de calcul operam in sistemul binar. Operatia implica multe conversii zecimalbinare respectiv binarzecimale. Aceste reprezentari implica multe calcule consumatoare de timp deci solutiile sunt nesatisfacatoare. Accelerarea operatiei de conversie se obtine pentru niste reprezentari aparte a numerelor zecimale si una dintre ele se caracterizeaza prin faptul ca fiecare cifra zecimala este convertita in mod separat. Un astfel de cod poarta denumirea de cod BCD (binary-codeddecimal), care este caracterizat prin faptul ca fiecare cifra binara este substituita printr-un cvartet binar. Conversia este foarte simpla, dar ea are dezavantajul ca operatia cea mai frecventa, care este adunarea, intampina dificultatea constituita de corectia de 6 deoarece sunt sume pe coduri de 4 biti care nu dau carry out desi corespondentul lor zecimal este mai mare decat 9. La operatia de adunare, care se efectueaza cifra zecimala cu cifra zecimala sau cvartet binar cu cvartet binar, fie se obtine carry din cifra cea mai semnificativa a cvartetului fie se obtine echivalentul binar corespunzator valorilor zecimale 10,11,12,13,14,15. Se aplica corectia de 6 constand din adunarea echivalentului binar al cifrei zecimale 6 la cvartetul rezultatului. Aceasta reprezentare permite conversia rapida a numerelor din zecimal in binary si invers.Fiecarei cifra zecimala a unui numar I se aloca un camp pe 4 biti.Adunarea in BCD necesita aplicarea unei corectii (corectie de 6) in cazul in care apare un transport pe bitul cel mai semnificativ sau in cazul in care valoarea rezultata este mai mare decat 9.Reprezentarea BCD este cea mai utilizata reprezentare pentru numerele zecimale. Reprezentarea in exces de 3 Este tot o reprezentare de tip BCD, dar codurile alocate fiecarei cifre zecimale sunt diferite la valoarea in binar a cifrei adaugandu-se valoarea 3.Aceasta reprezentare permite obtinerea rezultatelor corecte prin aplicarea unei corectii de 3, dupa cum urmeaza: daca s-a obtinut transport pe un grup de 4 cifre binare atunci se aduna 3 daca nu s-a obtinut transport este necesara scaderea valorii 3 Dezavantajul acestui cod este ca spre deosebire de BCD nu este un cod positional, ceea ce complica operatiile aritmetice. Un alt cod este codul zecimal exces de 3. Adunarea numerelor in acest cod se efectueaza fara nici un fel de interventie de tipul corectiei de 6 prin circuitele care realizeaza aceasta operatie asupra numerelor binare. Regula de obtinere a rezultatului in cod exces de 3 este: daca in urma efectuarii operatiei de adunare a doi cvarteti binari nu rezulta transport atunci se obtine rezultatul corect prin scaderea valorii 3 (a echivalentului binar al cifrei 3); daca la adunarea a doi cvarteti binari se obtine transport atunci rezultatul corect se obtine prin adunarea lui 3. Avantajul codificarii in exces de 3 consta in faptul ca nu mai depinde corectia adunarii echivalentilor binari ai cifrelor zecimale de operatia de corectie de 3, care poate fi efectuata in mod completamente independent. Cum corectia revendica o penalitate semnificativa de performanta, aceasta facilitate este extrem de importanta pentru constructia unor dispozitive eficiente de adunare a numerelor zecimale codificate binar. Prin eroare se schimba numarul de biti de 1 corespunzatori codificarii cifrei zecimale iar eroarea poate fi detectata imediat. Codul 2 din 5 este codul de eroare, el revendicand, pentru atributul suplimentar al detectarii erorilor, investitia suplimentara cu un bit. Relativ la codificarile zecimale putem spune ca ele revendica un numar mai mare de biti.

Reprezentarea numerelor in virgula mobila Aplicatiile reale necesita extinderea domeniului valoric si posibilitatea reprezentarii numerelor in virgula flotanta. Numerele in virgula flotanta au o reprezentare redundanta acest lucru fiind vizibil in reprezentarea cu mantisa si exponent. Exista multe aplicatii care necesita acoperirea unui domeniu valoric mare si care, in general, nu poate fi acoperit prin reprezentarea in virgula fixa. In aceste cazuri se apeleaza la cel de-al doilea tip de reprezentare, corespunzator asa numitei notatii stiintific (nu este o notatie pozitionala), in conformitate cu care un numar este reprezentat prin 3 numere. Mantisa M este reprezentata in semn-marime sau in complement de 2, iar exponentul E este reprezentat in semn-marime sau in cod exces (pentru a permite reprezentarea numerelor negative ca intregi fara semn). Baza B este uzual 2, sau o putere a lui 2, dar foarte rar poate fi si 10. Se spune despre baza ca este built-into-the-circuit deoarece ea nu este reprezentata in mod explicit. Reprezentarea in virgula flotanta se confrunta cu doua probleme principale: 1. Problema mantisei: in conformitate cu care, un numar poate fi reprezentat in mod redundant. In vederea efectuarii unor operatii in virgula flotanta si in vederea obtinerii rezultatelor in virgula flotanta se apeleaza la o forma normala de reprezentare a numerelor sau, altfel spus, se apeleaza la operatia denormalizare a numerelor. 2. Problema exponentului: este legata de problema lui 0, Datorita unei erori de rotunjire sau a unei scaderi intre numere de valoare foarte apropiata, mantisa in loc sa fie 0 este un numar foarte mic 0 . Este posibil ca acest numar foarte mic sa nu poata fi reprezentat cu ajutorul formatului de virgula flotanta, decat daca se permite operatia de denormalizare a mantisei. Semnalizarea cazurilor speciale, cum este denormalizarea, revendica coduri care in mod normal ar fi reprezentat valori ale exponentului. In principiu, formatele de virgula flotanta care iau in consideratie situatiile de exceptie folosesc o reprezentare ca intreg in exces a exponentului, cu valorile extreme folosite pentru a semnaliza situatiile speciale. Exponentul negativ apare ca urmare a reprezentarii sale cu deplasament. Valoarea deplasamentului fiind aleasa in asa fel incat intervalul de reprezentare sa fie impartit in 2 parti continand aceeasi cantitate de numere si anume intervalul 0-1 si intervalul 1-. 2 Standardul IEEE 754 pentru Reprezentarea Numerelor in Virgula Flotanta La inceputul anilor 80 fabricantii de calculatoare uzitau de modalitati diferite de reprezentare ale numerelor in virgula flotanta, adica fiecare avea formatul propriu. Difereau numarul de biti pentru reprezentarea numarului si al mantisei, difereau modalitatile de tratare ale underflow-ului si overflow-ului, precum si a conditilor speciale (impartirea la 0, extragerea de radacina patratica dintr-un numar negativ, etc.). Toate acestea faceau portabilitatea software-ului sa fie afectata in mod semnificativ. Pentru a corecta acesta situatie, la sfarsitul deceniului opt, IEEE a organizat un comitet pentru standardizarea aritmeticii in virgula mobila. Scopul urmarit era acela de a permite schimbul de date in virgula mobila intre calculatoare diferite si de a furniza proiectantilor hardware un model considerat corect. Rezultatele activitatii au condus la Standardul IEEE 754(IEEE,1985) propus de profesorul de matematica William Kahan, de la Berkley. Standardul defineste trei formate: precizie simpla (32 de biti), precizie dubla (64 de biti) si precizie extinsa (80 de biti). 3 Standardul IBM S/360, S/370 Standardul prezinta trei formate: precizie simpla (32 de biti), precizie dubla (64 de biti) si precizie extinsa (80 de biti). In campul exponentului se reprezinta numere intregi in exces de 64 si pentru toate versiuniile este format din 7 biti. Mantisa este un numar fractionar reprezentat in semn-marime nefolosindu-se solutia bit ascuns (hidden bit - (0.M)). Baza nu mai este 2 ci 16 iar normalizarea se face in consecinta, fiecare incrementare sau decrementare a exponentului mutand virgula la stanga sau la dreapta cu 4 pozitii binare. In acest standard nu avem posibilitatea de a reprezenta situatii speciale de tipul NaN-not a number, nici de overflow, nici de denormalizare, iar zero este reprezentat cu zero peste tot. Sumatoare Ripple, Carry-Lookahead si Carry Save 1 Dispozitive de adunare si scadere 1.1 Sumatorul Serial (Serial Adder) Sumatorul serial este un automat secvential, a carui comportare este data de tabelul de stari. Avem doua stari posibile din punct de vedere functional: S0 - starea la care se aduna la un moment dat 2 biti si din starea anterioar nu a venit transport (carry); S1 - starea la care se aduna la un moment dat 2 biti si avem carry. Din nefericire un sumator serial executa suma intr-un numar de impulsuri de clock egal cu n (dimensiune operanzilor) si de accea, uzual, se apeleaza la sumatoare paralele. 2 Sumatoare Paralele 2.1 Ripple Carry Adder (RCA) Un sumator cu transport propagat serial se obtine prin legarea in serie (cascada) a n celule sumator complet pe 1 bit, daca avem operanzi pe n biti. In mod caracteristic, operatia propriu-zisa se executa intr-un singur impuls de clock, numai ca perioada acestui clock trebuie sa acopere intervalul de timp necesar propagarii transportului in maniera seriala prin intreaga schema. Daca delay-ul (intarzierea) printr-un circuit poarta AND sau OR este d (intarzierea pe o poarta XOR se considera a fi 2d), atunci perioada clock-ului trebuie sa fie T 2nd . Operatia de scadere se bazeaza pe adunarea complementului. Pe 4 biti, un astfel de sumator va avea intarzierea RCA-ului corespunzator, 8d, la care se adauga 2d de la portile XOR suplimentare, per total 10d. Desi arhitectura este simpla si regulata in consecinta usor de implementat indiferent de dimensiune, rezultatul apare dupa o intarziere ce depinde in mod direct de aceasta dimensiune, acest fapt fiind principalul dezavantaj al acestui sumator. 2.2 Carry lookahead adder CLA (Sumator cu transport anticipat) La anterioarele solutii, faptul ca transportul trebuia propagat in maniera seriala greva asupra performantei solutiei, si s-a plecat de la ideea imbunatatirii timpului de propagare a transportului prin generarea in mod anticipat al transportului intr-o maniera care sa fie bazata pe istoria valorica a operanzilor: gi - variabila de generare a transportului (generate); pi - variabila de propagare a transportului (propagate); Celula de insumare sufera o transformare in constructiile CLA, ea se eticheteaza cu +*, si deseori este denumita celula degenerata de insumare. Avantajele acestei constructii de tip CLA sunt: avem doar 5 niveluri logice fata de 2n niveluri logice ca la ripple-carry-adder pentru obtinerea sumei. Cele 5 niveluri logice sunt: y generarea lui p si g; y 2,3-generarea lui carry; y 4,5-XOR pentru suma. Un alt avantaj consta in intarzierea constanta a aparitiei rezultatului indiferent de numarul de biti operati. Deoarece din punct de vedere tehnologic obtinerea unor porti cu numar oricat de mare de intrari nu e posibila, avantajul sumatoarelor CLA nu poate fi exploatat decat pentru dimensiuni reduse ale operanzilor cel mult 4 biti. Astfel sunt folositi hibrizii in care segmente pe 4 biti CLA sunt interconectate in maniera RCA. Dezavantajele sunt: creste numarului intrarilor din portile AND pentru carry si OR (pentru bitul i avem i+1 intrari); creste fan-out-ul p-urilor, adica numarul de circuite pe care le poate alimenta. Structura de interconectare stufoasa Numar mari de intrari pe poarta. 2.3 Carry Save Adder Aceasta solutie se caracterizeaza prin faptul ca este alcatuita din mai multe niveluri de celule sumatoare complet disjuncte. O astfel de structura de sumatoare permite insumarea la fiecare nivel nu a doi operanzi ci a trei operanzi. Ea apare ca foarte utila atunci cand se incearca accelerarea operatiei de inmultire, care se bazeaza pe adunari repetate, prin pipelinizare aritmetica. Mentionam ca pentru a obtine suma corecta bazata pe CSA, la salvarea transportului este obligatoriu ca ultimul nivel de insumare sa fie reprezentat de un sumator clasic (de exemplu un RCA). Sumatoare Carry Select si Carry-Skip

1 Carry Select Adder (CSEA) Este o modalitate diferita de a efectua operatia de adunare in mod paralelizat, pe baza unei investitii suplimentare. In anumite tehnologii faptul ca semnalul de carry trebuie sa comande foarte multe intrari duce la intarzieri si de aceea semnalul trebuie amplificat. Carry-ul real selecteaza suma calculata in paralel atat pentru eventualitatea in care el va fi 1, cat si in cea in care carry-ul va veni ca 0. Problema care se pune este cum sa se faca impartirea intrarilor in segmente RCA astfel incat adunarea sa se faca in forma cea mai favorabila. De exemplu, un sumator pe 32 de biti ar fi implementat cel mai favorabil in aceasta tehnologie cu segmente 6-7-6-5-4-4. 2 Carry Skip Adder (CSkA) Aceasta solutie este situata ca si cost si performana de siliciu intre RCA si CLA, si ea porneste de la ecuatia corespunzatoare lui CLA. In situatia in care din intrari pentru un anumit segment nu s-a generat carry datorita carry-ului de intrare in segment, este posibil totusi sa fie generat carry dar acesta nu va fi generat in maniera seriala conform solutiei RCA ci va omite (skip) propagarea seriala prin traversarea portii AND, conditionata pe intrari de factorul logic. Concluzia este ca in anumite situatii este posibil ca prin divizarea numarului de ranguri al sumatorului in segmente inegale RCA, sa se obtina o solutie mai performanta decat cea corespunzatoare impartirii in segmente RCA egale. 3 Dispozitive de inmultire binara Inmultirea e considerata alaturi de adunare ca fiind o operatie aritmetica de baza. Din punct de vedere statistic adunarile reprezinta peste 50% iar inmultirile aproximativ 30% din operatiile aritmetice efectuate. Vom trata inmultirea numerelor binare cu semn, dar pentru aceasta e necesara intelegerea numarului fara semn. Algoritmul de inmultire presupune o iteratie in care vor fi efectuate 2 operatii, una de adunare, alta de aliniere, deplasare a rezultatului partial curent in vederea adunarii la produsul partial viitor. 3.1 Sinteza unui dispozitiv de inmultire pentru numere in semn marime Deoarece adunarea nu functioneaza pentru numerele in semn marime, ceea ce se va opera va fi partea de marime din fiecare operand. Semnele operanzilor vor fi utilizate la final pentru a fi stabilit semnul rezultatului. Vom presupune existenta a 3 registrii A(acumulator), M(multiplier), Q(multiplicand). Desi algoritmul este simplu si se preteaza usor implementarii performante, marele dezavantaj il constituie faptul ca in sistemele de calcul reprezentarea numarului este in complement de 2. Declare register A[7:0]; Q[7:0]; M[7:0] COUNT [7:0] Declare BUS INBUS [7:0]; OUTBUS [7:0]; A<- O <- Count <-O,M<-INBUS; Q<-INBUS; ifQ[0]then A<-A+M; RightShift A.Q,Count<-Count+1; If Count + 7 then go to Add; A[7] <-M[7]xorQ[0]; OUTBUS<-A; OUTBUS<-Q[7:1]; END 3.2 Dispozitive de inmultire in complement de 2 dupa metoda lui James Robertson James Robertson a descoperit o modalitate prin care numerele in complement de 2 pot fi tratate similar celor in semn marime sub rezerva unei corectii. Tinand cont de formula lui Robertson algoritmul de inmultire pentru un numar in complement de 2 este extrem de similar inmultirii in semn marime. Declare register A[7:0]; Q[7:0]; M[7:0] COUNT [2:0];F; Declare BUS INBUS [7:0]; OUTBUS [7:0]; A<-O; Count <-O; F<-O; M<-INBUS; Q<-INBUS; If Q[0]the A<-A+M; A[7] <-F; RightShift A.Q; Count<-Count+1; If Count 7then go to Add; If Q[0] then A<-A-M; OUTBUS<-A;OUTBUS Q; END.