5. 5 Predstavljanje brojeva i aritmetička kola ...
5. 5 Predstavljanje brojeva i aritmetička kola ...
5. 5 Predstavljanje brojeva i aritmetička kola ...
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
<strong>5.</strong><br />
5 <strong>Predstavljanje</strong> <strong>brojeva</strong> i <strong>aritmetička</strong> <strong>kola</strong>...................................................................1<br />
<strong>5.</strong>1 Neoznačeni celi brojevi..........................................................................................1<br />
<strong>5.</strong>1.1 Prevođenje <strong>brojeva</strong>.........................................................................................2<br />
<strong>5.</strong>1.2 Oktalna i heksadecimalna reprezentacija.......................................................5<br />
<strong>5.</strong>2 Sabiranje neoznačenih <strong>brojeva</strong>..............................................................................6<br />
<strong>5.</strong>2.1 Sabirač sa rednim prenosom..........................................................................9<br />
<strong>5.</strong>3 Označeni brojevi..................................................................................................12<br />
<strong>5.</strong>3.1 <strong>Predstavljanje</strong> negativnih <strong>brojeva</strong>................................................................12<br />
<strong>5.</strong>3.2 Sabiranje i oduzimanje.................................................................................15<br />
<strong>5.</strong>3.3 Kolo za sabiranje i oduzimanje....................................................................18<br />
<strong>5.</strong>3.4 Aritmetičko prekoračenje.............................................................................19<br />
<strong>5.</strong>3.5 Performanse.................................................................................................21<br />
<strong>5.</strong>4 Brzi sabirači.........................................................................................................22<br />
<strong>5.</strong>4.1 Hijerarhijski sabirač sa ubrzanim prenosom................................................26<br />
<strong>5.</strong>4.2 Projektovanje aritmetičkih <strong>kola</strong> korišćenjem šematskog editora.................28<br />
<strong>5.</strong>4.3 Projektovanje aritmetičkih <strong>kola</strong> pomoću VHDL-a......................................29<br />
<strong>5.</strong>4.4 <strong>Predstavljanje</strong> <strong>brojeva</strong> u VHDL-u...............................................................32<br />
<strong>5.</strong>4.5 Aritmetičke naredbe dodele.........................................................................33<br />
<strong>5.</strong>5 Množenje..............................................................................................................35<br />
<strong>5.</strong><strong>5.</strong>1 Matrični množač neoznačenih <strong>brojeva</strong>........................................................37<br />
<strong>5.</strong><strong>5.</strong>2 Množenje označenih <strong>brojeva</strong>.......................................................................38<br />
<strong>5.</strong>6 Specifični formati za predstavljanje <strong>brojeva</strong>........................................................40<br />
<strong>5.</strong>6.1 Brojevi u fiksnom zarezu.............................................................................40<br />
<strong>5.</strong>6.2 Brojevi u pokretnom zarezu.........................................................................42<br />
<strong>5.</strong>6.3 Binarno kodirani decimalni brojevi.............................................................44<br />
<strong>5.</strong>7 ASCII karakter kod..............................................................................................49
5 <strong>Predstavljanje</strong> <strong>brojeva</strong> i <strong>aritmetička</strong> <strong>kola</strong><br />
Ovo poglavlje je posvećeno digitalnim kolima koja obavljaju aritmetičke operacije. Biće<br />
razmatrana digitalna <strong>kola</strong> za sabiranje, oduzimanje i množenje. Takođe, biće pokazano kako<br />
se piše VHDL kod koji opisuje <strong>aritmetička</strong> <strong>kola</strong>. Koncepti koji će tom prilikom biti uvedeni<br />
mogu se lako primeniti na mnoge druge tipove <strong>kola</strong>.<br />
Pre nego što se usredsredimo na konstrukciju aritmetičkih <strong>kola</strong>, bitno je uspostaviti vezu<br />
između <strong>brojeva</strong> sa kojima baratamo u realnom životu i načina na koji su u digitalnim<br />
sistemima predstavljaju numeričke veličine. Digitalni sistemi su izgrađeni od <strong>kola</strong> koja<br />
obrađuju binarne, ili logičke, promenljive. U prethodnim poglavljima bavili smo se logičkim<br />
promenljivama na jedan uopšteni način, koristeći logičke promenljive za predstavljanje stanja<br />
prekidača ili nekih drugih uslova koji nisu imali numeričku pozadinu. Da bi se predstavila<br />
neka numerička vrednost, nije dovoljna jedna logička promenljive, već više njih, pri čemu<br />
svaka promenljiva odgovara jednoj cifri broja. U ovom poglavlju biće opisano više načina<br />
kako se brojevi mogu predstaviti pomoću binarnih promenljivih i kako se pomoću takvih<br />
reprezentacija mogu obavljati osnovne računske operacije.<br />
<strong>5.</strong>1 Neoznačeni celi brojevi<br />
Najjednostavnija vrsta <strong>brojeva</strong> su svakako celi brojevi. Pozitivni celi brojevi se zovu<br />
neoznačeni, dok se celi brojevi koji mogu biti i negativni i pozitivni zovu označeni celi<br />
brojevi. U računarskoj terminologiji za cele brojeve koristi se termin intedžer (integer). Osim<br />
celih, kod digitalnih sistema koriste se i razlomljeni brojevi, o čemu će više reči biti u odeljku<br />
X.<br />
U svakodnevnom životu, za predstavljanje i baratanje brojevima koristimo decimalni<br />
brojni sistem. U ovom dobro poznatom sistemu, brojevi se zapisuju kao niz cifara koje imaju<br />
10 mogućih vrednosti, od 0 do 9. Decimalni sistem je pozicioni brojni sistem, s obzirom da je<br />
svakoj cifarskoj poziciji u zapisu broja pridružena težina, a vrednost broja je jednaka<br />
težinskoj suma cifara. Na primer, 1964 = 1×1000 + 9×100 + 6×10 + 4×1. Težine su stepeni<br />
broja 10, tako da, gledano s desna u levo, težina svake sledeće cifarske pozicije je 10 puta<br />
veća od prethodne. U opštem slučaju, n-to cifreni decimalni broj D oblika dn-1dn-2 ... d0 ima<br />
vrednost:<br />
V(D) = dn-1×10 n-1 + dn-2×10 n-2 + ... + d0×10 0<br />
= ∑ − n 1<br />
i<br />
d × 10<br />
i=<br />
0<br />
i<br />
S obzirom da u decimalnom sistemu postoji 10 cifara i da su težine cifarskih pozicija<br />
stepeni broja 10, kažemo da je 10 osnova ili baza (radix, na engleskom jeziku) decimalnog<br />
brojnog sistema. Decimalni brojni sistem je uobičajen i lako razumljiv. Međutim, u<br />
1
digitalnim sistemima nije praktično koristiti cifre koje imaju 10 različitih vrednosti. Kod<br />
digitalnih sistemima koristi se binarni brojni sistem, tj. pozicioni brojni sistem osnove 2, kod<br />
koga postoje samo dve cifre, 0 i 1. Binarne cifre se zovu bitovi, a celi binarni brojevi se<br />
predstavljaju kao niz bitova:<br />
B = bn-1bn-2 ... b0<br />
Po analogiji sa decimalnim brojevima, vrednost n-to bitnog broja B izračunava se na<br />
sledeći način:<br />
V(B) = bn-1×2 n-1 + bn-2×2 n-2 + ... + b0×2 0<br />
=∑ − n<br />
1<br />
i=<br />
0<br />
i<br />
b × 2<br />
(<strong>5.</strong>1)<br />
i<br />
Na primer, vrednost binarnog broja 1011 iznosi:<br />
V = 1×2 3 +0×2 2 +1×2 1 +1×2 0 .<br />
Uočimo da se cifre 0 i 1 koriste i u decimalnom i u binarnom brojnom sistemu, mada u<br />
njima imaju različita značenja. Na primer, broj 11 u decimalnom sistemu ima vrednost<br />
jedanaest, a u binarnom tri. Zato, kada baratamo sa brojevima iz različitih brojnih sistema<br />
koristimo indeks da bi smo ukazali na osnovu brojnog sistema. Tako, binarni broj 1011<br />
zapisujemo kao (1011)2. Vrednost ovog broja je V = 8 + 2 + 1 = 13, što znači: (1011)2=(13)10.<br />
Opseg celobrojnih vrednosti koje se mogu predstaviti binarnim brojem zavisi od broja<br />
bitova koji se koriste. Na primer, sa četiri bita moguće je predstaviti sve cele brojeve iz<br />
opsega od (0000)2=(0)10 do (1111)2=(15)10. U opštem slučaju, korišćenje n bita nam<br />
omogućava da predstavimo celobrojne vrednosti iz opsega 0 do 2 n -1. Neoznačeni celi brojevi<br />
predstavljeni u pozicionom binarnom sistemu se, takođe, nazivaju prirodnim binarnim<br />
brojevima.<br />
U zapisu binarnog broja, bit na krajnjoj desnoj poziciji, kome je pridružena težina 1, zove<br />
se bit najmanje težine (Last-Significant Bit - LSB). Kod neoznačenih celih <strong>brojeva</strong>, bit na<br />
krajnjoj levoj poziciji ima težinu 2 n-1 i zove se bit najveće težine (Most-Significant Bit -<br />
MSB). Često, pogodno je više sukcesivnih bitova tretirati kao jednu celinu. Grupa od četiri<br />
susedna bita zove se tetrada ili nibl, a grupa od osam bitova, bajt. Šesnaest bitova čine dva<br />
bajta ili jednu polu-reč; 32 bita su reč, a 64 bita dupla-reč.<br />
U principu, brojna osnova može biti bilo koji ceo broj, kao na primer 3, 5 ili 11. U<br />
brojnom sistemu osnove r figuriše r cifara, 0, 1, …, r-1, a vrednost broja X=(xn-1xn-2…x0)r<br />
određena je formulom:<br />
n 1<br />
V(X) = ∑ −<br />
i=<br />
0<br />
i<br />
x × r<br />
(<strong>5.</strong>2)<br />
i<br />
Tako, na primer, u brojnom sistemu osnove 5, postoje cifre 0, 1, 2, 3 i 4, a težine cifarskih<br />
pozicija su stepeni broja 5: 1, 5, 25, 125 i td.<br />
<strong>5.</strong>1.1 Prevođenje <strong>brojeva</strong><br />
Zadatak prevođenja <strong>brojeva</strong> je da se broj Ns iz osnove s konvertuje u broj Nr iste vrednosti<br />
iz osnove r. Konverzija Ns→Nr se može obaviti tako što će vrednost broja Ns izračunati u<br />
brojnom sistemu osnove r. Na primer, shodno jednačini (<strong>5.</strong>2) vrednost binarnog broja<br />
P=1425 iznosi:<br />
V (P) = (1×5 2 + 4×5 1 + 2×5 0 )10<br />
2
= (1×25 + 4×5 + 2×1)10<br />
= (47)10<br />
Dakle, važi 1425 = 4710.<br />
Uočimo da su u gornjem izračunavanju, najpre, sve cifre broja P, kao i stepeni broja 5<br />
izraženi kao decimalni brojevi, a da su potom sva potrebna množenja i sabiranja obavljena<br />
primenom decimalne aritmetike.<br />
Konverzija iz nedecimalnog u decimalni broj je laka, zato što se u toku konverzije<br />
računske operacije obavljaju u decimalnom sistemu. Međutim, obrnuta konverzija, iz<br />
decimalnog u nedecimalni sistem, primenom opisanog postupka, predstavlja problem za<br />
čoveka, zato što zahteva da se računske operacije izvode u nedecimalnom sistemu. Na<br />
primer, probajmo da konvertujmo decimalni broj D=(37)10 u binarni. Shodno jednačini (<strong>5.</strong>2),<br />
vrednost ovog broja iznosi:<br />
V(D) = (3×10 1 + 7×10 0 )10 = (3×10 + 7)10<br />
Zamenimo sada sve brojeve iz gornjeg izraza ekvivalentnim binarnim brojevima:<br />
V(D) = (11×1010 + 111)2<br />
Do binarnog broj koji je ekvivalentan decimalnom broju D možemo doći izračunavanjem<br />
gornjeg izraza primenom binarne aritmetike. Međutim, izračunavanje u nedecimalnoj brojnoj<br />
osnovi, ako se obavlja ručno, je naporno i podložno greškama. Zato se konverzija iz<br />
decimalnog u nedecimalni brojni sistem obavlja primenom jednog drugog postupka, koji<br />
omogućava da se računske operacije izvode u decimalnom sistemu.<br />
Konverzija decimalnog broja u nedecimalni sistem osnove r se može obaviti uzastopnim<br />
deljenjem decimalnog broja brojem r. Razmotrimo ovaj postupak na primeru binarnog<br />
sistema, r=2. Neka decimalni broj D=dk-1... d1d0, vrednosti V, treba konvertovati u binarni<br />
broj B=bn-1... b2b1b0. Brojevi D i B imaju istu vrednost V=V(D)=V(B), koja izražena bitovima<br />
broja B iznosi:<br />
V = bn-1×2 n-1 + ... + b2×2 2 + b1×2 1 + b0<br />
= 2×(bn-1×2 n-2 + ... + b1×2 0 ) + b0<br />
Ako V podelimo sa 2, rezultat možemo napisati u obliku:<br />
V R<br />
= Q +<br />
2 2<br />
gde je Q= bn-1×2 n-2 + ... + b1×2 0 celobrojni količnik, koji se može napisati u obliku Q0=<br />
2×(bn-1×2 n-3 + ... + b2×2 0 ) + b1, a R ostatak, R0=b0. Ponovno deljenje sa 2 daje Q0/2= Q1 +<br />
R1/2, gde se Q1 može napisati kao Q1 = 2×(bn-1×2 n-4 + ... + b3×2 0 ) + b2, a R1=b1. Znači,<br />
uzastopnim deljenjem celobrojnih količnika Qi sa 2, sve dok količnik ne postane jednak nuli,<br />
generiše se sekvenca ostataka (b0, b1, ..., bn-1). Uočimo da se ovim postupkom konverzije kao<br />
prvi određuje bit najmanje, a kao poslednji bit najveće težine ekvivalentnog binarnog broja.<br />
Opisani postupak se može direktno uopštiti na konverziju decimalnog broja u proizvoljnu<br />
osnovu r. Naime, ostaci koji se dobijaju uzastopnim deljenjem decimalnog broj sa r<br />
predstavljaju cifre ekvivalentnog broja iz osnove r.<br />
Primer 5-1: 17910→N2<br />
N/2 Q R<br />
3
Primer. 5-2: 3415 → N10<br />
Primer 5-3: 18310→N5<br />
Primer: 5-4: 2013→N5<br />
179/2 = 89 1 LSB<br />
89/2 = 44 1<br />
44/2 = 22 0<br />
22/2 = 11 0<br />
11/2 = 5 1<br />
5/2 = 2 1<br />
2/2 = 1 0<br />
1/2 = 0 1 MSB<br />
17910 = 110011012<br />
3415 = (3×5 2 + 4×5 1 + 1×5 0 )10<br />
= (75 + 20 + 1)10<br />
= (96)10<br />
N/5 Q R<br />
183/5 = 36 3<br />
36/5 = 7 1<br />
7/5 = 1 2<br />
1/5 = 0 1<br />
18310 = 12135<br />
Konverzija između dva nedecimalna sistema se najlakše sprovodi ako se kao među-korak<br />
koristi konverzija u decimalni sistem. Tako, broj 2013 treba prvo prevesti u decimalni<br />
broj, 2033→N10, a zatim dobijeni broj konvertovati u osnovu 5, N10→N5:<br />
2033→N10: 2013 = (2×3 2 + 0×3 1 + 1×3 0 )10<br />
1910→N5:<br />
2033→345<br />
= (18 + 1)10<br />
= 1910<br />
N/5 Q R<br />
19/5 = 3 4<br />
3/5 = 0 3<br />
1910 = 345<br />
4
<strong>5.</strong>1.2 Oktalna i heksadecimalna reprezentacija<br />
Projektanti digitalnog hardvera, u svom radu, pored decimalnog i binarnog, često koriste<br />
još dva brojna sistema: oktalni i heksadecimalni. Osnova oktalnog brojnog sistema je 8, a<br />
heksadecimalnog 16. U oktalnom sistemu, opseg cifara je 0 do 7. U heksadecimalnom<br />
sistemu postoji 16 cifara. Za označavanje prvih 10, koriste se iste cifre kao u decimalnom<br />
sistemu, tj. 0 do 9. Za označavanje heksadecimalnih cifara čije su decimalne vrednosti 10, 11,<br />
12, 13, 14 i 15 koriste se redom slova: A, B, C, D, E i F. U tabeli sa Sl. 5-1 navedeni su zapisi<br />
prvih 19 celih <strong>brojeva</strong> u četiri brojna sistema.<br />
Decimalni Binarni Oktalni Heksadecimalni<br />
00 00000 00 00<br />
01 00001 01 01<br />
02 00010 02 02<br />
03 00011 03 03<br />
04 00100 04 04<br />
05 00101 05 05<br />
06 00110 06 06<br />
07 00111 07 07<br />
08 01000 10 08<br />
09 01001 11 09<br />
10 01010 12 0A<br />
11 01011 13 0B<br />
12 01100 14 0C<br />
13 01101 15 0D<br />
14 01110 16 0E<br />
15 01111 17 0F<br />
16 10000 20 10<br />
17 10001 21 11<br />
18 10010 22 12<br />
Sl. 5-1 Reprezentacija <strong>brojeva</strong> u četiri brojna sistema.<br />
Kod digitalnih sistema dominira binarni brojni sistem. Razlog za korišćenje oktalnog i<br />
heksadecimalnog brojnog sistema leži u činjenici da oni omogućavaju skraćeno zapisivanje<br />
binarnih <strong>brojeva</strong>. Naime, jedna oktalna cifra predstavlja 3, a jedna heksadecimalna cifra 4<br />
bita. Binarni broj se prevodi u oktalni tako što se izdvajaju grupe od po 3 bita, počev od bita<br />
najmanje težine, i svaka grupa zamenjuje odgovarajućom oktalnom cifrom. Na primer,<br />
binarna sekvenca 101011111010100 se konvertuje u oktalni zapis na sledeći način:<br />
što znači (101011111010100)2 = (51724)8. Ako broj bita nije umnožak trojke, tada treba<br />
dodati odgovarajući broj nula sa leve strane. Na primer, (1101100)2 = (154)8:<br />
Slično, binarni broj se prevodi u heksadecimalni razvrstavanjem bitova u grupe od po 4<br />
bita. Tako, 16-bitni broj se predstavlja sa 4 heksadecimalne cifre. Na primer,<br />
(0101100111011010)2 = (59DA)16:<br />
5
Ako broj bitova nije umožak četvorke, tada, pre konverzije, sa leve strane treba dopisati<br />
odgovarajući broj nula. Na primer, (111100)2 = (3C)16:<br />
Konverzija oktalnog (heksadecimalnog) broja u binarni, obavlja se prostom zamenom<br />
oktalnih (heksadecimalnih) cifara sekvencama od 3 (4) bita koje imaju istu brojnu vrednost<br />
kao i cifre koje zamenjuju. Ispod su dati primeri koji ilustruju ovaj postupak:<br />
(603)8 = (110 000 011)2<br />
(A6)16 = (1010 0110)2<br />
Napomenimo da se oktalni brojevi danas retko koriste, iz razloga što većina savremenih<br />
računara i digitalnih sistema operiše sa binarnim brojevima čija je dužina umnožak bajta, npr.<br />
32 ili 64 bita. Ako je broj zapisan u oktalnom sistemu tada je teško direktno odrediti<br />
vrednosti pojedinačnih bajtova. Zato se mnogo češće koristi heksadecimalna notacija, kod<br />
koje dve cifre predstavljaju jedan bajt. Na primer, 32-bitni heksadecimalni broj<br />
(54AB20F3)16 sadrži 4 bajta čije su vrednosti: 5416, AB16, 2016 i F316.<br />
<strong>5.</strong>2 Sabiranje neoznačenih <strong>brojeva</strong><br />
Binarno sabiranje obavlja se sličan način kao decimalno sabiranje, s tom razlikom što<br />
pojedinačne cifre mogu biti samo 0 ili 1. Sabiranje dva jedno-bitna broja, u opštem slučaju,<br />
daje dvo-bitni rezultat, kao što je to ilustrovano na Sl. 5-2a. Ako su oba sabirka 0, tada će i<br />
njihov zbir biti 0, tj. (00)2. Ako je jedan sabirak 0, a drugi 1, zbir je 1, tj. (01)2. Ako su oba<br />
sabirka 1, zbir je 2, tj. (10)2. Bit manje težine ovog zbira zove se bit sume, ili sum, tj. s. Bit<br />
veće težine zove se bit prenosa ili carry, tj. c. Na Sl. 5-2b prikazana je tabela istinitosti koja<br />
definiše operaciju sabiranja dva bita. Lako se može uočiti da je bit sume AND, a bit prenosa<br />
XOR funkcija sabiraka. Na Sl. 5-2c je prikazana logička mreža koja realizuje funkcije s i c.<br />
Kolo koje obavlja sabiranje dva bita zove se polu-sabirač (half-adder - HA). Za<br />
predstavljanje polu-sabirača koristićemo grafički simbol sa Sl. 5-2d.<br />
(a) sabiranje dva bita.<br />
x y<br />
Prenos<br />
cx2 1<br />
Suma<br />
sx2 0<br />
0 0 0 0<br />
0 1 0 1<br />
1 0 0 1<br />
1 1 1 0<br />
(b) tabela istinitosti<br />
6
Sl. 5-2 Polu-sabirač.<br />
Polu-sabirač, razmatran kao izolovano kolo, nema neki veći praktični značaj. Od mnogo<br />
većeg interesa su <strong>kola</strong> koja obavljaju sabiranje više-bitnih <strong>brojeva</strong>. Prilikom sabiranja višebitnih<br />
<strong>brojeva</strong>, kao i kod sabiranja više-cifarskih decimalnih <strong>brojeva</strong>, potrebno je sabrati svaki<br />
par bitova (cifara), ali za svaku bitsku poziciju i dodatno je potrebno uračunati i prenos koji<br />
potiče iz prethodne pozicije, i-1. Na Sl. 5-3 je dat primer sabiranja dva 5-bitna broja<br />
X=(01111)2=(15)10 i Y=(01010)2=(10)10. Sa pet bita moguće je predstaviti cele brojeve iz<br />
opsega 0 do 31. Pošto u konkretnom slučaju važi S=X+Y=(25)10, pet bita biće dovoljna i za<br />
predstavljanje zbira. Uočimo da su na Sl. 5-3, sabirci simbolički označeni sa X=x4x3x2x1x0 i<br />
Y=y4y3y2y1y0. Na ovoj slici su takođe prikazani prenosi koji se generišu u toku sabiranja. Na<br />
primer, prilikom sabiranja bitova x0=1 i y0=0 dobija se suma s0=1 prenos c0=0; prilikom<br />
sabiranja bitova x1=1 i y1=1 dobija se suma s1=0 prenos c1=1 i tako dalje. Za ci kažemo da<br />
predstavlje izlazni prenos (carry-out) iz pozicije i, odnosno ulazni prenos (carry-in) na<br />
poziciju i+1.<br />
U poglavlju X je pokazano kako se projektuju kombinacione mreže polazeći od tabele<br />
istinitosti. Međutim, ovakav pristup nije praktičan za projektovanje sabirača koji treba da<br />
sabira dva 5-bitna broja. 5-bitni sabirač ima 10 ulaza, pa bi za opis njegovog ponašanja bilo<br />
potrebno formirati tabelu istinitosti od 2 10 =1024 vrsta! S toga, bolji pristup je nezavisno<br />
razmatrati sabiranje svakog para bita xi i yi.<br />
Sl. 5-3 Sabiranje više-bitnih binarnih <strong>brojeva</strong>.<br />
Za poziciju i=0 ne postoji ulazni prenos i stoga se sabiranje obavlja na isti način kao na<br />
Sl. 5-2a. Na svakoj od preostalih poziciju i=1,..., n-1, i-ti bitovi sabiraka, xi i yi, se sabiraju<br />
zajedno sa ulaznim prenosom ci. Tako, sada sabiranje na nivou svake bitske pozicije<br />
obuhvata tri bita, xi, yi i ci. Kako najveći zbir tri bita iznosi (11)2, to su za njegovo<br />
predstavljanje, kao i kod sabiranja dva jednobitna broja, potrebna dva bita: suma si, kao bit<br />
manje težine, i izlazni prenos ci+1, kao bit veće težine. Bit sume si predstavlja i-ti bit<br />
konačnog rezultata, dok se bit prenosa ci+1 pridodaje poziciji i+1 kao ulazni prenos. Funkcije<br />
sume i izlaznog prenosa definisane su tabelom istinitosti sa Sl. 5-4a. Bit sume si je zbir po<br />
modulu 2 bitova xi, yi i ci. Drugim rečima, bit sume je jednak 1 ako neparan broj sabiraka ima<br />
vrednost 1, odnosno, 0 ako paran broj sabiraka ima vrednost 1. Izlazni prenos ci+1 jednak je 1<br />
ako je zbir bitova xi, yi i ci veći od 1. Karnoove mape za funkcije si i ci+1 prikazane su na Sl.<br />
5-4a. Na osnovu Karnoovih mapa u mogućnosti smo da izvedemo optimalne izraze oblika<br />
zbir-proizvoda za funkcije ci+1 i si:<br />
ci+1 = xiyi + xici + yici<br />
si = xi’yici’+xiyi’ci’+xi’yi’ci+xiyici<br />
7
Efikasnija realizacija funkcija si i ci+1 može se postići korišćenjem XOR <strong>kola</strong>. XOR<br />
funkcija od dve promenljive definisana je izrazom x1⊕x2 = x1x2’ + x1’x2. Primenom<br />
algebarskih manipulacija, izraz za bit sume može se svesti na formu koja sadrži samo XOR<br />
<strong>kola</strong>, na sledeći način:<br />
si = (xi’yi+xiyi’)ci’+( xi’yi’+xiyi)ci<br />
= (xi’yi+xiyi’)ci’+( xi’yi+xiyi’)’ci<br />
= (xi ⊕ yi)ci’+(xi ⊕ yi)’ci<br />
= (xi ⊕ yi)⊕ ci<br />
U suštini, si predstavlja XOR funkcija od tri promenljive. Napomenimo, da je za XOR<br />
funkciju karakterističan naizmeničan raspored jedinica u Karnoovoj mapi, koji je takav da<br />
onemogućava sažimanje minterma (Sl. 5-4b).<br />
Izraz za funkciju ci+1, takođe, možemo preurediti na način da koristi XOR funkciju. Pri<br />
tome, trebe poći od izraza oblika zbir-minterma:<br />
ci+1 = cixi’yi + cixiyi + cixiyi’ + ci’xiyi<br />
= (ci +ci’)xiyi + ci(xi’yi + cixiyi’)<br />
= xiyi + ci(xi ⊕ yi)<br />
Uočimo da se član (xi⊕ yi) javlja u izrazima za obe funkcije si i ci+1. Ova činjenica<br />
omogućava da se prilikom realizacije funkcija si i ci+1 za izračunavanje člana (xi⊕ yi) koristi<br />
jedinstveno XOR kolo. Kombinaciona mreža koja realizuje funkcije si i ci+1 prikazana je na<br />
Sl. 5-4c. Ovo kolo se zove potpuni-sabirač (full-adder - FA). Grafički simbol potpunog<br />
sabirača prikazan je na Sl. 5-4d.<br />
Sl. 5-4 Potpuni sabirač.<br />
⊕ ⊕ ⊕<br />
8
Imajući u vidu imena <strong>kola</strong>, polu- i potpuni-sabirač, mogli bi smo naslutiti da je potpunisabirač<br />
moguće konstruisati pomoću dva polu-sabirača. Zaista, ako pažljivo pogledamo<br />
kombinacionu mrežu potpunog sabirača sa Sl. 5-4c, možemo učiti da se u njoj kruju dva<br />
polu-sabirača, uz dodatak jednog OR <strong>kola</strong> preko koga se formira izalaz ci+1, kao što je to<br />
naznačeno na Sl. 5-5a. Na Sl. 5-5b je prikazana blok šema potpunog sabirača realizovanog<br />
pomoću polu-sabirača.<br />
Sl. 5-5 Realizacija potpunog sabirača na bazi polu-sabirača.<br />
<strong>5.</strong>2.1 Sabirač sa rednim prenosom<br />
Kao što dobro znamo, ručno sabiranje se obavlja tako što se krene od cifre najmanje<br />
težine i redom sabiraju parovi cifara, sve do cifre najveće težine. Ako se na poziciji i javi<br />
prenos, tada se on dodaje ciframa na poziciji i+1. Identičan postupak se može primeniti i za<br />
konstrukciju digitalnog <strong>kola</strong> koje će obavljati sabiranje binarnih <strong>brojeva</strong>. Binarni sabirač se<br />
formira rednim povezivanjem potpunih sabirača, tako što izlazni prenos svakog potpunog<br />
sabirača služi kao ulazni prenos za potpuni sabirač koji zauzima prvu narednu bitsku poziciju<br />
veće težine. Ovakva vrsta sabirača se zove sabirač sa rednim prenosom ili RCA, prema<br />
engleskom nazivu Ripple-Carry Adder. Struktura n-to bitnog sabirača sa rednim prenosom<br />
prikazana je na Sl. 5-6a. Ova struktura se predstavlja grafičkim simbolom sa Sl. 5-6b.<br />
U opštem slučaju, zbir dva neoznačena n-to bitna broja ima n+1 bita. Kod binarnog<br />
sabirača, ovaj dodatni (n+1)-vi bit je predstavljen bitom izlaznog prenosa iz pozicije najveće<br />
težine, cn, tako da važi:<br />
(cnsn-1…s1s0) = (xn-1…x1x0) + (yn-1…y1y0).<br />
Međutim, digitalni sistemi obično manipulišu brojevima fiksnog obima, npr. 8, 16, 32 ili<br />
64 bita. Rezultat koji ima veći broj bita jednostavno ne bi mogao biti dalje procesiran od<br />
strane takvog sistema. Zato se izlazni prenos cn obično ne koristi kao deo sume, već kao<br />
indikacija prekoračenja dozvoljenog opsega rezultata.<br />
9
(a) unutrašnja struktura;<br />
(b) grafički simbol<br />
Sl. 5-6 n-bitni sabirač sa rednim prenosom.<br />
U strukturi sa Sl. 5-6a, proces izračunavanja počinje onog trenutka kada se na ulaze<br />
sabirača postavi novi par operanada X i Y. Međutim, s obzirom da svaki gejt u svakom<br />
potpunom sabiraču unosi izvesno kašnjenje, korektna vrednost izlazne sume S se ne generiše<br />
istog tog trenutka, već tek nakon nekog vremena. Da bi se u stepenu n-1 odredio bit sume sn-1<br />
neophodna je informacija o prenosu iz stepena n-2, tj. cn-1; da bi se u stepenu n-2 odredio<br />
izlazni prenos cn-1 potrebno je imati informaciju o vrednosti cn-2, i td. Neka kašnjenje<br />
potpunog sabirača iznosi ∆t – vreme od postavljanja ulaza xi, yi, ci do generisanja korektnih<br />
izlaza ci+1 i si. Izlazni prenos iz prvog stepena, c1, stiže do drugog stepena posle vremena ∆t<br />
nakon što su postavljeni x0 i y0. Izlazni prenos iz drugog stepena, c2, stiže do ulaza trećeg sa<br />
kašnjenjem od 2∆t, i td. Signal cn-1 je važeći posle kašnjenja od (n-1)∆t, a celokupna izlaza<br />
suma posle kašnjenja od n∆t.<br />
Napomenimo da vreme sabiranja zavisi i od vrednosti operanada. Kašnjenje od n∆t<br />
odgovara slučaju kada je jedan operand 11...11, a drugi 00...01. U ovom slučaju, prenos koji<br />
se javlja na poziciji 0, prenosi se kroz sve potpune sabirače postavljajući bitove sume na 0. Za<br />
bilo koji drugi par vrednosti operanada, kašnjenje će biti kraće. Na primer, sabiranje <strong>brojeva</strong><br />
00...00 i 00...01 traje samo ∆t. U opštem slučaju, vreme sabiranja određeno je najvećim<br />
brojem uzastopnih pozicija na kojima oba operanda imaju vrednost 1. Međutim, kao se<br />
sabirači koriste za sabiranje operanada proizvoljnih vrednosti, u radu sa sabiračem moramo<br />
računati sa maksimalnim kašnjenjem, n∆t, kako bi smo bili sigurni da ćemo sa izlaza sabirača<br />
uvek očitati ispravan rezultat.<br />
Znači, brzina rada sabirača sa rednim prenosom određena je vremenom prostiranja<br />
signala prenosa kroz potpune sabirače. Što je broj bita koji se sabira veći, to je brzina rada<br />
manja. Ako se radi sa brojevima velike dužine, 32 ili 64 bita, vreme sabiranja može biti<br />
10
neprihvatljivo dugo. Napomenimo da je sabirač sa rednim prenosom samo jednu od većeg<br />
broja različitih konstrukcija sabiračkih <strong>kola</strong>, koje se razlikuju po složenosti (ukupan broj<br />
gejtova) i brzini rada. Sabirač sa rednim prenosom je najjednostavnija, ali ujedno i najsporija<br />
varijanta. Konstrukcija brzih sabiračkih <strong>kola</strong> biće tema odeljka X.<br />
U dosadašnjoj diskusiji razmatrali smo isključivo neoznačene binarne brojeve. Sabiranje<br />
neoznačenih <strong>brojeva</strong> ne zahteva ulazni prenos u stepen 0, tj. c0. Bez obzira na to, ulaz c0 je<br />
prikazan na dijagramu sa Sl. 5-6a, kako bi smo istu strukturu mogli da koristimo i za<br />
oduzimanje binarnih <strong>brojeva</strong>, kao što će to biti pokazano u odeljku X.<br />
Binarni sabirači sa rednim prenosom se lako sprežu kako bi se formirale sabiračke mreže<br />
za veći broj bitova. Na Sl. 5-7 je pokazano kako se sa dva n-bitna sabirača formira 2n-bitni<br />
sabirač.<br />
Sl. 5-7 Sprezanje binarnih sabirača.<br />
Primer. 5-5 Projektovati kolo za množenje neoznačenog 8-bitnog broja konstantom 3.<br />
Odgovor: Neka je A=a7a6…a1a0 i P=3A. Za predstavljanje broja P potrebna su 10 bita:<br />
P=p9p8…p1p0. Pošto važi 3A=A+A+A, za realizaciju <strong>kola</strong> možemo upotrebiti binarne<br />
sabirače. Na Sl. 5-8a je prikazano rešenje koje koristi dva sabirača. Pri sabirač generiše<br />
A+A=2A. Njegov rezultat je predstavljen sa 9 bita: 8 bita sume i izlazni prenos sa pozicije<br />
najveće težine. Drugi sabirač računa 2A+A=3A. Ovaj sabirač je 9-to bitni, iz razlog što<br />
jedan od njegovih operanada, 2A, ima 9 bita. Uočimo da je ulaz x8 drugog sabirača<br />
povezan je na konstantu 0, s obzirom da A ima 8-bita.<br />
Na Sl. 5-8b je prikazano efikasnije rešenje, koje koristi samo jedan 9-bitni sabirač.<br />
Uočimo da je 8-bitni sabirač u rešenju sa Sl. 5-8a nepotreban, s obzirom da se 2A može<br />
dobiti prostim pomeranjem bitova broja A za jednu poziciju na levo, što daje:<br />
2A=a7a6…a1a00. (Ispravnost poslednjeg izraz se može lako proveriti na osnovu jednačine<br />
(<strong>5.</strong>2)). Za obavljanje ovog pomeranja nije potrebno nikakvo kolo, već je dovoljno dopisati<br />
jednu nulu sa desne strane broja, što upravo odgovara načinu na koji je operand A<br />
povezan sa Y ulazom sabirača.<br />
Uočimo, sada, da je u rešenju sa Sl. 5-8b, ulaz najmanje težine sabirača x0 fiksno<br />
postavljen na x0=0. To znači da će bit sume s0 uvek imati vrednost s0=a0. Ovo zapažanje<br />
nam omogućava da dodatno pojednostavimo rešenje, tako što ćemo 9-bitni sabirač<br />
zameniti 8-bitnim, kao na Sl. 5-8c.<br />
11
<strong>5.</strong>3 Označeni brojevi<br />
Sl. 5-8 Kolo koje množi 8-bitni neoznačeni broj sa 3.<br />
U decimalnom brojnom sistemu, znak broja se označava simbolom + ili – levo od cifre<br />
najveće težine. U binarnom brojnom sistemu, znak broja se označava dodatnim bitom koji u<br />
zapisu broja zauzima krajnju levu poziciju. Za pozitivne brojeve, ovaj bit jednak je 0, a za<br />
negativne 1. Znači, kod označenih <strong>brojeva</strong>, krajnji levi bit ukazuje na znak broja, dok se<br />
preostalih n-1 bita predstavlja maginitudu ili apsolutnu vrednost broja, kao što je prikazano<br />
na Sl. 5-9. Važno je zapaziti poziciju bita najveće težine (MSB). Kod neoznačenih <strong>brojeva</strong><br />
svih n bita predstavljaju magnitudu broja – kaže se da su svi bitvi značajni, a MSB se nalazi<br />
poziciji n-1. Kod označenih <strong>brojeva</strong>, značajni su n-1 bita, MSB bit se nalazi na poziciji n-2,<br />
dok bit na poziciji n-1 ukazuje na znak broja.<br />
Sl. 5-9 Formati predstavljana celih <strong>brojeva</strong>.<br />
<strong>5.</strong>3.1 <strong>Predstavljanje</strong> negativnih <strong>brojeva</strong><br />
Za razliku od pozitivnih <strong>brojeva</strong> koji se predstavljaju uvek na isti način, korišćenjem<br />
pozicionog brojnog sistema, za predstavljanje negativnih <strong>brojeva</strong> u upotrebi su tri<br />
reprezentacije: znak-magnituda, jedinični komplement i dvojični komplement.<br />
Znak-magnituda<br />
Kod decimalnog brojnog sistema, magnituda pozitivnih i negativnih <strong>brojeva</strong> predstavlja<br />
se na isti način, a znak je taj koji ukazuje da li se radi o pozitivnom ili negativnom broju.<br />
Ovakav način predstavljanja označenih <strong>brojeva</strong> zove se znak-magnituda, ili znak-apsolutna<br />
vrednost. Ista reprezentacija može se primeniti i na binarne brojeve, a razlika je samo u<br />
12
načinu kodiranja znaka: umesto + i – koristimo 0 i 1. Na primer, +5 = 0101, a -5=1101. Ispod<br />
je navedeno nekoliko 8-bitnih celih <strong>brojeva</strong> u formatu znak-magnituda i njihovi decimalni<br />
ekvivalenati:<br />
(01010101)2 = (+85)10 (11010101)2 = (-85)10<br />
(01111111)2 = (+127)10 (11111111)2 = (-127)10<br />
(00000000)2 = (+0)10 (10000000)2 = (-0)10<br />
Brojni sistem koji koristi reprezentaciju znak-magnituda sadrži isti broj pozitivnih i<br />
negativnih <strong>brojeva</strong>, a nula ima dvojnu reprezentaciju. Najveći pozitivni broj koji se u ovom<br />
sistemu može iskazati sa n bita je +(2 n -1) = 011…11; najmanji negativni broj je –(2 n -1) =<br />
111…11, dok se nula predstavlja sa 000…00 ili 100…00.<br />
Zbog sličnosti sa decimalnim sistemom, reprezentacija znak-magnituda je lako razumljiva<br />
i lako čitljiva. Međutim, iz razloga na koje će kasnije biti ukazano, ona nije pogodna za<br />
primenu kod digitalnih sistema. Pogodniji načini za predstavljanje označenih binarnih<br />
<strong>brojeva</strong> su komplementarne reprezentacije.<br />
Jedinični komplement<br />
U komplementarnom brojnom sistemu, negativni brojevi se definišu preko operacije<br />
komplementiranja koja se primenjuje na njima odgovarajuće pozitivne brojeve.<br />
Razmatraćemo dva komplementarna sistema: jedinični komplement i dvojični komplement,<br />
koji se razlikuju u definiciji operacije komplementiranja <strong>brojeva</strong>. U formatu jediničnog<br />
komplementa, n-bitna reprezentacija negativnog broja K se dobija oduzimanjem njemu<br />
odgovarajućeg pozitivnog broja P od 2 n -1, tj. K=(2 n -1)-P. Na primer, ako je n=4, tada je K =<br />
(2 4 -1)-P = (15)10-P = (1111)2-P. Ako +5 konvertujemo u negativan broj, dobićemo -5 = 1111<br />
– 0101 = 1010. Slično, +3=0011, a -3 = 1111 – 0011 = 1100. Jasno se uočava da se jedinični<br />
komplement datog binarnog broja dobija komplementiranjem svakog pojedinačnog bita,<br />
uključujući i bit znaka.<br />
Ispod je navedeno nekoliko 8-bitnih <strong>brojeva</strong> i njihovih jediničnih komplemenata:<br />
Najveći pozitivni broj koji se može predstaviti u jediničnom komplementu sa n bita je<br />
011…11 = 2 n -1, najmanji negativni broj je 100…00 = -(011…11)2 = -(2 n -1), dok nula ima<br />
dvojnu reprezentaciju: 000…00 ili 111…11.<br />
Brojni sistem jediničnog komplementa se može interpretirati i kao pozicioni brojni sistem<br />
kod koga bit znaka ima težinu –(2 n -1). Ako je B=bn-1bn-2...b1b0 binarni broj predstavljen u<br />
formatu jediničnog komplementa, tada je njegova vrednost:<br />
V<br />
( B)<br />
= b<br />
n−<br />
1<br />
× [ −(<br />
2<br />
n<br />
−1)]<br />
+<br />
∑ − n 2<br />
i<br />
i=<br />
0<br />
i<br />
b × 2<br />
13
Na primer, odredimo vrednost binarnog broja 1010 pod pretpostavkom da je broj<br />
predstavljen u jediničnom komplementu:<br />
V(1010) = 1×[-(2 3 -1)] + 0×2 2 + 1×2 1 + 0×2 0<br />
= (-7+0+2+0)10<br />
= (-5)10<br />
Jedinični komplement se lako izvodi, ali ispoljava izvesne nedostatke kada se koristi u<br />
aritmetičkim operacijama, o čemu će više reči biti u sledećem odeljku.<br />
Dvojični komplement<br />
U formatu dvojičnog komplementa, n-bitna reprezentacija negativnog broja K se dobija<br />
oduzimanjem njemu odgovarajućeg pozitivnog broja P od 2 n , tj. K = 2 n - P. Na primer, ako je<br />
n = 4, tada je K = 2 4 - P = (16)10 - P = (10000)2 - P. Da bi smo odredili dvojični komplement<br />
broja 5, treba obaviti oduzimanje 10000 – 0101, što daje -5 = 1011. Ili -3 = 10000 – 0011 =<br />
1101. Nalaženje dvojičnog komplementa na ovaj način je naporno jer zahteva da se obavi<br />
operacija oduzimanja. Međutim, ako je K1 jedinični, a K2 dvojični komplement broja P tada<br />
važi:<br />
K1 = (2 n -1) – P<br />
K2 = 2 n – P<br />
Odakle sledi K2 = K1 + 1. Dakle, jednostavniji način za nalaženje dvojičnog komplementa<br />
sastoji se u tome da se na jedinični komplement doda jedinica. Ovo je upravo način na koji se<br />
u digitalnoj tehnici dobija dvojični komplement. Ispod je navedeno nekoliko primera<br />
određivanja dvojičnog komplementa 8-bitnih <strong>brojeva</strong>:<br />
U jednom od gore navedenih slučajeva, konkretno, prilikom nalaženja dvojičnog<br />
komplementa nule, prilikom sabiranja jedinice sa jediničnim komplementom, pojavio se<br />
izlazni prenos iz pozicije najveće težine. Međutim, u radu sa dvojičnim komplementom,<br />
izlazni prenos se ignoriše i u obzir uzima samo n bita najmanje težine.<br />
Za ručno izvođenje postoji još jedan lakši način za nalaženje dvojičnog komplementa.<br />
Neka je dat broj B=bn-1bn-2 ... b1b0. Dvojični komplement broja B, K=kn-1kn-2 ... k1k0, može se<br />
odrediti na sledeći način: krećemo od bita najmanje težine na levo i prepisujemo bitove broja<br />
14
B sve dok ne naiđemo na prvu jedinicu, zatim prepisujemo i ovu jednici, a preostale bitove<br />
komplementiramo. Na primer, ako je B=0110, tada prepisujemo k0=b0=0 i k1=b1=1, i<br />
komplementiramo preostale bitove, k2=b2`=0 i k3=b3`=1. Znači, K=1010. Ili, na složenijm<br />
primeru, ako je B=101101000, tada je K= 010011000.<br />
U brojnom sistemu koji koristi dvojični komplement, nula se tretira kao pozitivan broj, i<br />
predstavlja na jedinstveni način: 000...00. Iz tog razloga broj pozitivnih <strong>brojeva</strong> je za jedan<br />
manji od broja negativnih. Naime, najveći pozitivni broj koji se može predstaviti sa n bita u<br />
formatu dvojičnog komplementa je 011...11 = 2 n -1, dok je najmanji negativan broj 10000000<br />
= -(011...11 + 1)2 = -(100...00)2 = -2 n .<br />
Brojni sistem dvojičnog komplementa se može interpretirati i kao pozicioni brojni sistem<br />
kod koga bit znaka ima težinu –2 n . Ako je B=bn-1bn-2...b1b0 binarni broj predstavljen u<br />
formatu dvojičnog komplementa, tada je njegova vrednost:<br />
V ( B)<br />
= −b<br />
n−<br />
1<br />
× 2<br />
n−1<br />
+<br />
∑ − n 2<br />
i=<br />
0<br />
i<br />
2 × b<br />
i<br />
Na primer, odredimo vrednost binarnog broja 1010 pod pretpostavkom da je broj<br />
predstavljen u dvojičnom komplementu:<br />
V(1010) = 1×(-2 3 ) + 0×2 2 + 1×2 1 + 0×2 0<br />
= (-8+0+2+0)10<br />
= (-6)10<br />
Tabela sa Sl. 5-10 ilustruje interpretaciju svih 16 4-bitnih kombinacija u tri razmatrana<br />
sistema za predstavljanje označenih <strong>brojeva</strong>. Uočimo da kod reprezentacija znak-magnituda i<br />
jedinični komplement postoje po dve binarne kombinacije koje predstavljaju vrednost nula.<br />
Kod dvojičnog komplementa postoji samo jedna takva kombinacija. Takođe, uočimo da je<br />
opseg <strong>brojeva</strong> koji se mogu predstavti sa 4 bita kod dvojičnog komplementa -8 do 7, dok je<br />
kod preostale dve reprezentacije -7 do 7.<br />
<strong>5.</strong>3.2 Sabiranje i oduzimanje<br />
b0b1b2b3<br />
znakmagnituda<br />
jedinični<br />
komplement<br />
dvojični<br />
komplement<br />
0111 +7 +7 +7<br />
0110 +6 +6 +6<br />
0101 +5 +5 +5<br />
0100 +4 +4 +4<br />
0011 +3 +3 +3<br />
0010 +2 +2 +2<br />
0001 +1 +1 +1<br />
0000 +0 +0 +0<br />
1000 -0 -7 -8<br />
1001 -1 -6 -7<br />
1010 -2 -5 -6<br />
1011 -3 -4 -5<br />
1100 -4 -3 -4<br />
1101 -5 -2 -3<br />
1110 -6 -1 -2<br />
1111 -7 -0 -1<br />
Sl. 5-10 Interpretacija 4-bitnih označenih celih <strong>brojeva</strong>.<br />
U prethodnom odeljku opisana su tri standardna načina za binarnu reprezentaciju <strong>brojeva</strong>.<br />
Međutim, nisu svi ovi načini podjednako pogodni za primenu u digitalnim sistemima.<br />
15
Osnovni kriterijum za izbor reprezentacije <strong>brojeva</strong> je lakoća sa kojom se nad brojevima u<br />
konkretnoj reprezentaciji obavljaju osnovne računske operacije, kao što su sabiranje i<br />
oduzimanje. U ovom odeljku, na konkretnim primerima, ukazaćemo na dobre i loše strane<br />
svake od tri reprezentacije.<br />
Sabiranje pozitivnih <strong>brojeva</strong> se obavlja na isti način u sve tri reprezentacije, tj. na isti<br />
način kao sabiranje neoznačenih <strong>brojeva</strong> (odeljak X). Međutim, kada se u računicu uvedu i<br />
negativni brojevi, između različitih reprezentacija ispoljavaju se značajne razlike.<br />
Sabiranje <strong>brojeva</strong> u formatu znak-magnituda<br />
Ako oba sabirka imaju isti znak, sabiranje <strong>brojeva</strong> u formatu znak-magnituda je<br />
jednostavno. Magnitude se saberu, a zbiru se dodeli znak sabiraka. Međutim, ako su sabirci<br />
različitog znaka, sabiranje postaje složenije. U tom slučaju, operacija sabiranja se svodi na<br />
oduzimanje manjeg broja od većeg. To znači da je za obavljanje operacije sabiranja<br />
neophodno digitalno kolo koje će ispitati znake sabiraka, uporediti njihove magnitue i biti u<br />
mogućnosti da u zavisnosti od ishoda poređenja obavi sabiranje ili oduzimanje. Složenost<br />
takvog <strong>kola</strong> je značajno veća od odgovarajućih <strong>kola</strong> koja barataju brojevima u<br />
komplementarnim reprezentacijama. Iz tog razloga reprezentacija znak-magnituda se ne<br />
koristi kod digitalnih sistema.<br />
Sabiranje <strong>brojeva</strong> u jediničnom komplementu<br />
Očigledna prednost jediničnog u odnosu na dvojični komplement je u tome što se<br />
negativni broj lako određuje prostim komplementiranjem svih bitova odgovarajućeg<br />
pozitivnog broja. Na Sl. 5-11 je prikazano šta se dešava prilikom sabiranja dva broja<br />
predstavljena u jediničnom komplementu. Navedena su četiri slučaja, pri čemu svaki slučaj<br />
odgovara jednoj konkretnoj kombinaciji znakova sabiraka. Kao što se može videti na gornjoj<br />
polovini slike, izračunavanja 5 + 2 = 7 i (-5) + 2 = (-3) su trivijalna; prostim binarnim<br />
sabiranjem operanada, uključujuči pri tome i bit znaka, dobija se ispravan rezultat. Međutim,<br />
to nije slučaj kod preostala dva primera. Izračunavanje 5 + (-2) = 3 daje bit vektor 10010.<br />
Prvo, rezultat ima pet, a ne četiri bita. Dodatni peti bit je posledica izlaznog prenosa sa<br />
pozicije znaka. Drugo, preostala četiri bita predstavljaju broj 2, a ne 3, što je očigledno<br />
pogrešan rezultat. Međutim, ako uzmemo izlazni prenos sa pozicije znaka i dodamo ga<br />
rezultatu na poziciji najmanje težine, novi rezultat biće ispravna suma, tj. 3. Slična situacija<br />
se javlja kod sabiranja (-5) + (-2) = (-7). Nakon inicjalnog sabiranja, rezultat je pogrešan, zato<br />
što su četiri bita sume 0111, što predstavlja +7, a ne -7. Ali, ponovo, tu je izlazni prenos iz<br />
pozicije bita znaka koji može biti iskorišćen za korekciju rezultata, na način kako je<br />
prikazano na Sl. 5-11.<br />
Sl. 5-11 Primeri sabiranja u jedničnom komplementu.<br />
Zaključak koji se nameće na osnovu razmatranih primera je da sabiranje <strong>brojeva</strong> u<br />
jediničnom komplementu u nekim slučajevima jednostavno, a u nekima nije. Ako je potrebna<br />
korekcija, neophodno je dodatno vreme kako bi se obavilo sabiranje inicijalnog rezultata i<br />
16
izlaznog prenosa. Tako, ukupno vreme sabiranja može biti i dvostruko duže od vremena<br />
sabiranja dva neoznačena broja.<br />
Sabiranje <strong>brojeva</strong> u dvojičnom komplementu<br />
Razmotrimo istu kombinaciju <strong>brojeva</strong> koju smo koristili u primerima za jedinični<br />
komplement. Na Sl. 5-12 je ilustrovano kako se obavlja sabiranje <strong>brojeva</strong> predstavljenih u<br />
dvojičnom komplementu. Sabiranja 5 + 2 = 7 i (-5) + 2 = (-3) su trivijalna. Izračunavanje 5 +<br />
(-2) = 3 daje ispravna četiri bita rezultata, 0011. Pri tome, izlazni prenos iz pozicije bita<br />
znaka, koji u ovom slučaju postoji, možemo, prosto, ignorisati. Četvrti slučaj je (-5) + (-2) =<br />
(-7). Ponovo, četiri bita rezultata, 1001, odgovaraju ispravnoj sumi (-7). I u ovom slučaju,<br />
izlazni prenos iz pozicije bita znaka se može ignorisati.<br />
Sl. 5-12 Primeri sabiranja u dvojičnom komplementu.<br />
Prethodni primeri pokazuju da je sabiranje <strong>brojeva</strong> u dvojičnom komplementu veoma<br />
jednostavno. Brojevi se sabiranju zajedno sa bitom znaka, a rezultat je uvek ispravan.<br />
Eventualni izlazni prenos iz pozicije bita znaka se jednostavno ignoriše. Znači, procedura<br />
sabiranja je uvek ista, nezavisno od znaka operanada, i može se obaviti binarnim sabiračem,<br />
kao što je onaj sa Sl. 5-6. Zbog svega toga, reprezentacija <strong>brojeva</strong> u dvojičnom komplementu<br />
je veoma pogodna za primenu u digitalnim sistemima.<br />
Oduzimanje u dvojičnom komplementu<br />
Najlakši način da se obavi oduzimanje je da se najpre umanjiocu promeni znak, a da se<br />
onda dobijena vrednost sabere sa umanjenikom. Promeni znaka umanjioca odgovara<br />
nalaženje njegovog dvojičnog komplementa. Na Sl. 5-13 je na nekoliko karakterističnih<br />
primera ilustrovan ovaj postupak. Operacija 5 – (+2) = 3 uključuje nalaženje dvojičnog<br />
komplementa broja +2, što daje 1110. Kada se ovaj broj sabere sa 0101 = (+5), dobija se<br />
rezultat 0011 = (+3) uz generisanje prenosa iz pozicije bita znaka. Ako ignorišemo prenos,<br />
rezultat je tačan. Slična situacija postoji za (-5) + (+2) = (-7). U preostala dva slučaja, izlazni<br />
prenos ne postoji i rezultat je tačan.<br />
Sl. 5-13 Primeri oduzimanja u dvojičnom komplementu.<br />
Sl. 5-14 predstavlja jednu vizuelnu ilustraciju procesa sabiranja i oduzimanja 4-bitnih<br />
<strong>brojeva</strong> u dvojičnom komplementu. Slika prikazuje brojčanik po čijem obodu su raspoređene<br />
17
svih 16 4-bitnih kombinacija. Ako bi smo ove binarne kombinacije interpretirali kao<br />
neoznačene cele brojeve, tada bi one predstavljale brojeve od 0 do 1<strong>5.</strong> Ako ih tretiramo kao<br />
brojeve u dvojičnom komplementu, tada njima odgovara opseg celih označenih <strong>brojeva</strong> od -8<br />
do 7, kao što je naznačeno po unutrašnjem obodu brojčanika. Kazaljku brojčanika možemo<br />
podesiti na bilo koji broj, a zatim na taj broj možemo dodati broj +n tako što ćemo odbrojati n<br />
puta unapred, tj. okrenuti kazaljku za n koraka u smeru kretanja kazaljke na časovniku. Jasno<br />
je da okretanjem kazalje za n koraka u suprotnom smeru, od polaznog broja oduzimamo broj<br />
n. Naravno, rezultat ovog postupka će biti tačan samo ako je n dovoljno malo da kazaljka<br />
prilikom okretanje ne pređe granicu između +7 i -8.<br />
Sl. 5-14 Grafička reprezentacija 4-bitnih <strong>brojeva</strong> u dvojičnom komplementu.<br />
Interesantno je uočiti još i sledeće. Krajnja pozicija kazaljke biće ista bilo da se ona<br />
okrene za n koraka u jednom smeru ili za 16-n koraka u suprotnom smeru. Dakle, umesto da<br />
radimo sa brojčanikom čija kazaljka može da se okreće u oba smera, možemo koristiti<br />
brojčanik sa kazaljkom koja se okreće samo u smeru kretanja kazaljke na časovniku<br />
(odgovara sabiranju), a da u slučajevima kada želimo da obavimo oduzimanje, prethodno<br />
preračunamo broj koraka po formuli 16-n. Uočimo da 16-n predstavlja upravo dvojični<br />
komplement broja n, a da ova grafička interpretacija potvrđuje naše ranije tvrđenje da se<br />
oduzimanje <strong>brojeva</strong> u dvojičnom komplementu može obaviti sabiranjem umenjenika i<br />
dvojičnog komplementa umanjioca.<br />
<strong>5.</strong>3.3 Kolo za sabiranje i oduzimanje<br />
Jedina razlika između sabiranja i oduzimanja je u tome što je kod oduzimanja potrebno<br />
koristiti dvojični komplement jednog od operanada. Neka su X i Y dva broja, koja treba<br />
sabrati ili oduzeti i neka je Y broj koji prilikom oduzimanja služi kao umanjilac, tj. neka je<br />
S=X±Y. Kao što znamo, dvojični komplement operanda Y se može dobiti dodavanjem<br />
jedinice na njegov jedinični komplement. Dodavanje jedinice na poziciju najmanje težine<br />
može se postići postavljanjem bita ulaznog prenosa c0 na 1. Jedinični komplement datog<br />
broja se dobija komplementiranjem svih njegovih bitova. Komplementiranje broja se može<br />
obaviti pomoću NOT gejtova. Međutim, za ovu namenu biće nam potrebno fleksibilnije kolo,<br />
kako bi smo mogli da u zavisnosti od željene operacije koristimo pravu ili komplementiranu<br />
vrednost operanda Y. Takvo kolo je XOR gejt. Interesantna osobina XOR gejta je da jedan od<br />
njegovih ulaza možemo koristiti kao upravljačku promenljivu pomoću koje ćemo birati da li<br />
će se na izlazu <strong>kola</strong> generisati prava ili komplementarna vrednost drugog ulaza. Ovo je jasno<br />
na osnovu definicije XOR operacije:<br />
z=x ⊗ y = x’y + xy’<br />
18
Neka je x upravljački ulaz. Za x=0, izlaz će biti identičan ulazu y, tj. z= 0’·y + 0·y’=1·y+0·<br />
y’= y. Ali, ako je x=1, izlaz će biti jednak komplementu ulaza y, tj. z= 1’·y + 1·y’=0·y+1· y’=<br />
y’. Drugim rečima, za x=1 XOR gejt funkcioniše kao invertor, dok za x=0, jednostavno<br />
prenosi vrednost sa ulaza y na izlaz.<br />
Kolo za sabiranje/oduzimanje možemo konstruisati na sledeći način. Pretposatavimo da<br />
postoji upravljački signal koji određuje da li treba obaviti sabiranje ili oduzimanje. Neka se<br />
ovaj signal zove Add / Sub (prema engleskim nazivima za sabiranje i oduzimanje: addition i<br />
subtraction). Takođe, neka vrednost 0 ovog signala bira sabiranje, a 1 oduzimanje. Crta iznad<br />
Add upravo ukazuje na ovu činjenicu. Napomenimo da je ovo često korišćena konvencija, tj.<br />
da crta iznad imena upravljačkog signala ukazuje da se akcija specificirana tim imenom<br />
obavlja kada signal ima vrednost 0. Neka je svaki bit operanda Y povezan na jedan ulaz<br />
jednog od XOR gejtova, a da su drugi ulazi svih XOR gejtova povezani na signal Add / Sub .<br />
Izlazi XOR gejtova predstavljaju Y, ako je Add / Sub=0,<br />
odnosno Y’, ako je Add / Sub =1. Tako<br />
dolazimo do <strong>kola</strong> sa Sl. 5-1<strong>5.</strong> Glavni deo ovog <strong>kola</strong> je n-to bitni sabirač, koji može biti<br />
realizovan korišćenjem strukture sabirača sa rednim prenosom sa Sl. 5-6(a). Uočimo da je<br />
upravljački ulaz Add / Sub povezan i na ulaz c0 sabirača. Na ovaj način, biće c0=1 kada se<br />
obavlja oduzimanje, što dodaje jedinicu koja je neophodna da bi se formirao dvojični<br />
komplement operanda Y. Kada se obavlja operacija sabiranja, c0 će biti 0 i neće uticati na<br />
rezultat.<br />
Sl. 5-15 Sabirač/oduzimač.<br />
Kombinovano kolo za sabiranje i oduzimanje je dobar primer jednog važnog koncepta<br />
koji se primenjuje u projektovanju digitalnih sistema. Korisno je projektovati <strong>kola</strong> koja će biti<br />
što je moguće više fleksibilna i na taj način iskoristiti zajedničke delove <strong>kola</strong> za što više<br />
različitih zadataka. Ovakvim pristupom minimizuje se broj gejtova potrebnih za realizaciju<br />
sistema. Takođe, značajno se samanjuje složenost povezivanja komponenti sistema.<br />
<strong>5.</strong>3.4 Aritmetičko prekoračenje<br />
Ako operacija sabiranja ili oduzimanja generiše rezultat koji premašuje opseg brojnog<br />
sistema kažemo da je došlo do aritmetičkog prekoračenja. Drugim rečima, aritmetičko<br />
prekoračenje se javlja u situacijama kada je rezultat pozitivan i suviše veliki ili negativan i<br />
suviše mali tako da ga nije moguće predstaviti raspoloživim značajnim bitovima. Ako za<br />
predstavljanje označenih <strong>brojeva</strong> koristimo n bita, tada rezultat mora biti u opsegu od -2 n-1 do<br />
(2 n-1 -1). Kada su sabirci različitog znaka, do aritmetičkog prekoračenja nikada neće doći, zato<br />
što će rezultat uvek biti manji od pozitivnog i veći od negativnog sabirka. Međutim, ako su<br />
sabirci istog znaka, može se desiti da rezultat bude veći od 2 n-1 -1, ako su oba sabirka<br />
19
pozitivna, odnosno, manji od -2 n-1 , ako su sabirci negativni. Da bi se osigurao ispravan rad<br />
aritmetičkog <strong>kola</strong>, neophodno je biti u mogućnosti detektovati pojavu aritmetičkog<br />
prekoračenja.<br />
Sl. 5-16 Primeri za određivanje uslova prekoračenja.<br />
Na Sl. 5-16 su prikazana četiri slučaja sabiranja <strong>brojeva</strong> u dvojičnom komplementu čije<br />
su magnitude 7 i 2. S obzirom da u ovom primeru za predstavljanje <strong>brojeva</strong> koristimo 4 bita,<br />
broj značajnih bitova je tri, b0-2. Kao što se vidi sa Sl. 5-16, kada su sabirci različitog znaka<br />
rezultat je tačan, tj. nema prekoračenja. Međutim, ako oba broja imaju isti znak, magnituda<br />
rezultata je 9 i ne može biti predstavljena sa samo tri značajna bita, tj. dolazi do prekoračenja.<br />
Ključ za detekciju pojave prekoračenja su dva prenosa: c3 – izlazni prenos iz pozicije najveće<br />
težine i c4 izlazni prenos iz pozicije znaka. Na osnovu primera sa Sl. 5-16, može se zaključiti<br />
da se prekoračenje javlja kada ova dva bita imaju različite vrednosti, a da je rezultat ispravan<br />
ako su njihove vrednosti iste. Izražen u obliku logičkog izraza, uslov prekoračenja glasi:<br />
Prekoračenje = c3c4’ + c3’c4<br />
= c3 ⊗ c4<br />
Ili, u opštem slučaju, za n bitne brojeve, imamo:<br />
Prekoračenje = cn-1 ⊗ cn<br />
Na Sl. 5-17a je prikazana struktura sabirača/oduzimača sa kolom za detekciju<br />
prekoračenja koje ispituje izlazne prenose.<br />
Drugi način za detekciju aritmetičkog prekoračenja upoređuje bitove znaka sabiraka i<br />
rezultata. Neka su X=xn-1xn-2…x0 i Y=yn-1yn-2…y0 binarni brojevi u dvojičnom komplementu, i<br />
S=sn-1sn-2…s0 rezultat njihovog sabiranja. Bitovi xn-1, yn-1 i sn-1 su bitovi znaka ova tri broja.<br />
Aritmetičko prekoračenje postoji ako smo sabiranjem pozitivnih <strong>brojeva</strong> dobili negativan<br />
rezultat ili ako smo sabiranjem negativnih <strong>brojeva</strong> dobili pozitivan rezultat, tj.:<br />
Prekoračenje = xn-1yn-1sn-1’ + xn-1’yn-1’sn-1<br />
Isto tvrđenje, kazano drugim rečima, glasi: do prekoračenja je došlo ako se rezultat<br />
razlikuje po znaku od oba sabirka, tj.:<br />
Prekoračenje = (xn-1 ⊗ sn-1) (yn-1 ⊗ sn-1)<br />
Kolo sabirača/oduzimača kod koga je detekcija prekoračenja realizovana shodno gornjem<br />
izrazu prikazano je na slici. Uočimo da je prvi način za detekciju prekoračenja, Sl. 5-17a,<br />
jednostavniji, jer zahteva sam još jedno dodatno XOR kolo, za razliku od drugog kod koga je<br />
potrebno ugraditi dodatna tri gejta. Međutim, prvo rešenje podrazumeva da je signal izlaznog<br />
prenosa cn-1 dostupan, što ne mora biti slučaj ako rasplažemo sabiračem koji se realizovan<br />
20
kao monolitna komponenta. U tom smislu, drugo rešenja je pogodnije jer koristi samo<br />
spoljašnje signale sabirača/oduzimača.<br />
(a) detekcija prekoračenja na osnovu izlaznih prenosa<br />
(b) detekcija prekoračenja na osnovu znaka sabiraka i rezultata.<br />
Sl. 5-17 Dva načina za detekciju aritmetičkog prekoračenja.<br />
Napomenimo da su dva pravila za detekciju aritmetičkog prekoračenja, u suštini,<br />
ekvivalentna. Potpuni sabirač na poziciji bita znaka obavlja sledeće izračunavanje: (cn, sn-1) =<br />
(xn-1 + yn-1 + cn-1). Ako su oba sabirka pozivitna, xn-1=yn-1=0, izlazni prenos iz pozicije znaka<br />
biće cn=0, bez obzira na vrednost cn-1. Za cn-1=0, bit znaka rezultata biće sn-1=0, što ukazuje<br />
da je rezultat pozitivan i da zbog toga prekoračenja nema. Međutim, ako je cn-1=1, bit znaka<br />
dobija vrednost sn-1=1, što ukazuje na negativan rezultat, tj. na pojavu prekoračenja. Slično,<br />
ako su oba sabirka negativna, xn-1=yn-1=1, izlazni prenos iz pozicije znaka biće cn=1, bez<br />
obzira na vrednost cn-1. Međutim, za cn-1=0, bit znaka dobija vrednost sn-1=0, što ukazuje na<br />
pozitivan rezultat, odnosno na prekoračenje. Dakle, u oba slučaja važi da prekoračenje postoji<br />
ako je cn≠cn-1.<br />
<strong>5.</strong>3.5 Performanse<br />
Prilikom kupovine digitalnog sistema, kao što je računar, kupac naročitu pažnju obraća na<br />
performanse koje se mogu očekivati od sistema, kao i na cenu sistema. Superiorne<br />
performanse obično znače i višu cenu. Međutim, ne tako retko, dešava se da se sistem sa<br />
21
značajno boljim performansama može kupiti po umereno višoj ceni. Takođe, dešava se i da<br />
za sistem sa tek nešto boljim performansama moramo platiti mnogo više. Zato se kao<br />
indikacija vrednosti sistema često koristi odnos cena/performanse.<br />
Sabiranje i oduzimanje <strong>brojeva</strong> su bazične operacije koje se često obavljaju u računarskim<br />
sistemima. Brzina izvršenja ovih operacija ima veliki uticaj na ukupne performanse računara.<br />
Iz tog razloga, razmotrimo brzinu rada <strong>kola</strong> za sabiranje i oduzimanje. Brzina rada ovog <strong>kola</strong><br />
određena je kašnjenjem od trenutka kada se na ulaze <strong>kola</strong> postave operandi X i Y do trenutka<br />
kada se na izlazu <strong>kola</strong> generišu korektne vrednosti svih bitova sume S i izlaznog prenosa cn.<br />
Najveći deo ovog kašnjenja potiče od n-bitnog sabirača. Pretpostavimo da je sabirač<br />
realizovan korišćenjem strukture sa rednim prenosom (Sl. 5-6), kod koje su potpuni sabirači<br />
realizovani kao na Sl. 5-4. Kao što se lako može zaključiti sa Sl. 5-4, kod ove realizacije<br />
potpunog sabirača, kašnjenje izlaznog prenosa, ∆t, jednako je kašnjenju kroz dva gejta, tj.<br />
∆t=2tg, gde je tg kašnjenje kroz jedan gejt. Iz odeljka <strong>5.</strong>2.1 znamo da ukupno kašnjenje<br />
sabirača sa rednim prenosom iznosi n∆t, što je ekvivalentno kašnjenju kroz 2n gejta. Pored<br />
kašnjenja koje je posledica prostiranja signala prenosa kroz sabirač, na ukupno kašnjenje <strong>kola</strong><br />
za sabiranje i oduzimanje dodatno utiču i ulazna XOR <strong>kola</strong>. Ako pretpostavimo da je<br />
kašnjenje kroz XOR kolo jednako tg, dolazimo do zaključka da kolo za sabiranje i<br />
oduzimanje unosi kašnjenje ekvivalentno kašnjenju kroz 2n+1 gejt. Za veće n, npr. n=32 ili<br />
n=64, iznos kašnjenja može biti toliko veliki da značajno degradira performanse celog<br />
sistema. Zato je bitno ispitati mogućnost alternativne realizacije binarnog sabirača, koja će se<br />
odlikovati većom brzinom rada.<br />
Brzina rada bilo kog digitalnog <strong>kola</strong> ograničena je najvećim kašnjenje duž neke od<br />
putanja kroz kolo. U slučaju <strong>kola</strong> sa Sl. 5-15, najduže kašnjenje se javlja duž putanje koja<br />
kreće od ulaza yi, prolazi kroz XOR gejt, a zatim kroz <strong>kola</strong> za generisanje prenosa svih<br />
potpunih sabirača. Najduže kašnjenje se zove kašnjenje kritičnog puta, a putanja koja<br />
uslovljava ovo kašnjenje kritična putanja.<br />
<strong>5.</strong>4 Brzi sabirači<br />
Kašnjenje uzrokovano propagacijom signala prenosa kroz sabirač sa rednim prenosom<br />
može se smanjiti ako promenimo strukturu sabirača na način da svaki stepen i, umesto da<br />
čeka da od stepena i-1 dobije ulazni prenos ci, pre nego što generiše svoj bit sume si,<br />
samostalno pokuša da odredi da li će vrednost ulaznog prenosa biti 0 ili 1. Da bi ukupne<br />
performanse sabirača bile poboljšanje, potrebo je da korektna procena vrednosti ulaznog<br />
prenosa bude obavljena za što je moguće kraće vreme.<br />
Pođimo od izraza za funkciju izlaznog prenosa i-tog stepena sabirača:<br />
ci+1 = xiyi + xici + yici<br />
Ako ovaj izraz rastavimo na sledeći način:<br />
ci+1 = xiyi + (xi + yi)ci<br />
funkciju ci+1 možemo napisati u obliku:<br />
gde je:<br />
ci+1 = gi + pici (<strong>5.</strong>3)<br />
gi = xiyi<br />
pi = xi + yi<br />
Jednačinu (<strong>5.</strong>3) možemo protumačiti na sledeći način. Kada je gi=1, tj. xi=yi=1, stepen i<br />
generiše izlazni prenos, ci+1=1, bez obzira na vrednost ulaznog prenosa ci. Zato se g zove<br />
22
funkcija generisanog prenosa. Funkcija pi jednaka je 1 ako je barem jedan od ulaza xi i yi<br />
jednak 1. U ovom slučaju, ci=1 uslovljava generisanje izlaznog prenosa ci+1, tj. efekat je kao<br />
da se ulazni prenos preneo na izlaz. Zbog toga se funkcija p zove funkcija propagiranog<br />
prenosa. Dakle, stepen i generiše prenos ako su oba njegova sabirka jednaka 1, a propagira<br />
prenos ako je jedan od sabiraka jednak 1.<br />
Jednačina (<strong>5.</strong>3) nam omogućava da rekurzivnom zamenom člana ci eliminišemo<br />
propagaciju prenosa kroz sabirač. Naime, kao što je ci+1 = gi + pici, tako je i ci = gi-1 + pi-1ci-1.<br />
Dakle,<br />
ci+1 = gi + pi(gi-1 + pi-1ci-1)<br />
= gi + pigi-1 + pipi-1ci-1<br />
Nastavljajući sa smenama, sve do c0, dolazimo do izraza za ci+1 sledećeg oblika:<br />
ci+1 = gi + pigi-1 + pipi-1gi-2 + ... + pipi-1... p2p1g0 + pipi-1...p1p0c0 (<strong>5.</strong>4)<br />
Dobijeni izraz se može realizovati u vidu tronivovske AND-OR mreže. U prvom nivou<br />
računaju se funkcije generisanog i propagiranog prenosa, gi i pi. U drugom nivou,<br />
izračunavaju se produktni članovi, koji se, potom, sumiraju u trećem nivou. S obzirom na<br />
mali broj nivoa, ci+1 se izračunava veoma brzo. Šta više, kašnjenje u izračunavanju izlaznih<br />
prenosa ci+1 je fiksno i ne zavisi od i, što znači da ni ukupno kašnjenje sabirača ne zavisi od<br />
obima operanada, tj. n. Binarni sabirač zasnovan na izrazu (<strong>5.</strong>4) zove se sabirač sa ubrzanim<br />
prenosom ili CLA sabirač, prema engleskom nazivu Carry-Lookahead Adder.<br />
Da bi smo bolje razumeli fizičko značenje izraza (<strong>5.</strong>4) uporedićemo konstrukcije sabirača<br />
sa ubrzanim i sabirača sa rednim prenosom. U tom cilju, analizaćemo detaljnu strukturu dva<br />
stepena najmanje težine oba sabirača.<br />
Sl. 5-18 prikazuje prva dva stepena sabirača sa rednim prenosom kod koga su funkcije<br />
izlaznog prenosa realizovane shodno izrazu (<strong>5.</strong>3). Mala brzina rada sabirača sa rednim<br />
prenosom posledica je dugačke putanje duž koje se prostire signal prenosa. Kao što je<br />
posebno naznačeno na Sl. 5-18, kritični put polazi od ulaza x0 i y0 i proteže se do izlaza c2,<br />
prolazeći kroz 5 gejta, 3 gejta u stepenu 0 i 2 u stepenu 1. Za sabirač sa n stepena, kritični put<br />
se nastavlja dalje sve do izlaza cn, prolazeći kroz svaki sledeći stepen na isti način kao kroz<br />
stepen 1. Dakle, kašnjenje kritičnog puta sabirača sa rednim prenosom iznosi 2n+1.<br />
23
Sl. 5-18 Detaljna struktura sabirača sa rednim prenosom.<br />
Na Sl. 5-19 je prikazana detaljna struktura prva dva stepena sabirača sa ubrzanim<br />
prenosom. Sada su funkcije izlaznog prenosa realizovane shodno izrazu (<strong>5.</strong>4), tj.:<br />
c1 = g0 + p0c0<br />
c2 = g1 + p1g0 + p1p0c0<br />
Kao što se može uočiti sa Sl. 5-19, u svakom stepenu sabirača sa rednim prenosom<br />
generišu se funkcije generisanog i propagiranog prenosa. Lokalno, ove funkcije se koriste,<br />
zajedno sa funkcijama g i p svih prethodnih stepena, za generisanje izlaznog prenosa tog<br />
stepene, ali i prosleđuju dalje ka svim narednim stepenima gde se koriste za određivanje<br />
njihovih izlaznih prenosa. Kritični put za određivanje izlaznog prenosa c2 naznačen je na Sl.<br />
5-19. U ovom kolu, c2 se određuje jednako brzo kao i c1, tj. nakon vremena koje je jednako<br />
kašnjenju kroz tri gejta, tj. 3tg. Čak iako ovu strukturu proširimo na n bita, konačni izlazni<br />
prenos cn generisaće se sa kašnjenjem od 3tg. Naravno, što je i veće, tj. kako se krećemo ka<br />
pozicijama veće težine, to izrazi za funkcije ci+1 postaju sve složeniji, što zahteva sve veći<br />
broj gejetova za njihovu realizaciju. Međutim, bez obzira na složenost, broj nivoa logike za<br />
izračunavanje ci+1 ostaje isti, tj. tri.<br />
Ukupno kašnjenje n-to bitnog sabirača sa ubrzanim prenosom isnosi 4tg. Vrednosti svih<br />
funkcija gi i pi određuju se nakon vremena tg. Dodatno kašnjenje od 2tg potrebno je za<br />
određivanje svih signala prenosa. Konačno, treba sačekati još dodatno vreme tg da bi se na<br />
izlazima svih XOR <strong>kola</strong> generisali bitovi sume.<br />
24
Sl. 5-19 Prva dva stepena sabirača sa ubrzanim prenosom.<br />
Izraz (<strong>5.</strong>4) se može realizovati pomoću brze, tri-nivolske AND-OR mreže. Međutim, za<br />
veliko i broj ulaza u pojedine gejtove, koji su potrebni za realizaciju ove funkcije, postaje<br />
isuviše veliki. Kao što je poznato iz poglavlja X, kod većine implementacionih tehnologija<br />
broj ulaza u gejtove, tj. fan-in faktor, ograničen je na relativno mali broj. Zato je neophodno<br />
prilikom projektovanja sabirača sa ubrzanim prenosom uzeti u obzir i ovu činjenicu. Da bi<br />
smo bliže ukazali na ovaj problem, razmotrimo izraze za prvih osam izlaznih prenosa:<br />
c1 = g0 + p0c0<br />
c2 = g1 + p1g0 + p1p0c0<br />
...<br />
c8 = g7 + p7g6 + p7p6g5 + p7p6p5g4 + p7p6p5p4g3 + p7p6p5p4p3g2 + p7p6p5p4p3p2g1<br />
+ p7p6p5p4p3p2p1g0 + p7p6p5p4p3p2p1p0c0<br />
Pretpostavimo da je fan-in raspoloživih gejtova ograničen na četiri ulaza. Očigledno,<br />
pomoću takvih gejtova nije moguće realizovati sve prethodne izraze u obliku tri-nivolske<br />
AND-OR mreže. Nejveći problem je c8, gde se čak zahteva jedno AND kolo sa 9 ulaza.<br />
Takođi, i za sumiranje produktnih članova potrebno je OR kolo sa 9 ulaza. Potreba za<br />
logičkim kolima sa velikim brojem ulaza potiče od produktnih i zbirnih članova sa velikim<br />
brojem literala. Međutim, pravilnom faktorizacijom, moguće je smanjiti maksimalnu veličinu<br />
članova u logičkom izrazu. Jedno moguće rešenje je sledeće:<br />
c8 = (g7 + p7g6 + p7p6g5 + p7p6p5g4)+ [(p7p6p5p4)(g3 + p3g2 + p3p2g1 +p3p2p1g0)]<br />
+ (p7p6p5p4)(p3p2p1p0)c0<br />
Za realizaciju ovog izraza potrebna su 11 AND i tri OR gejta. Međutim, sada<br />
propagaciono kašnjenje iznosi ne više 3tg već 5tg: jedno tg za određivanje gi i pi; 2tg za<br />
sumiranje produktnih članova u zagradama; jedno tg za produktni član u velikim zagradama i<br />
još jedno tg za konačno sumiranje. Dakle, ograničenje u pogledu maksimalnog broja ulaza u<br />
gejtove manifestuje se u povećanju broja nivoa AND-OR mreže, što neminovno povećava<br />
25
propagaciono kašnjenje. Ovaj zaključak nije ograničen samo na konkretno kolo, već veži<br />
generalno za bilo koju logičku mrežu.<br />
<strong>5.</strong>4.1 Hijerarhijski sabirač sa ubrzanim prenosom<br />
Projektovanje digitalnih sistema po pravilu zahteva nalaženje optimalnog kompromisa<br />
između brzine rada sistema i njegove cene. Težnja da se što više poveća brzina rada, obično<br />
ima za posledicu povećanje cene sistema. Isto tako, složenost sistema obično nije moguće<br />
smanjiti, a da to nema za posledicu smanjenje brzine rada. U kontekstu binarnog sabirača,<br />
struktura sa rednim prenosom predstavlja najjednostavnije, ali u isto vreme i najsporije<br />
rešenje. Sa druge strane, sabirač sa ubrzanim prenosom predstavlja najbrže rešenje, ali zato za<br />
neke primene, njegova složenost (cena) može biti isuviše velika. Međutim, mogu postojati<br />
primene kada ni jedna od ove dve varijante sabirača ne zadovoljava postavljene zahteve –<br />
sabirač sa rednim prenosom može biti previše spor, a sabirač sa ubrzanim prenosom previše<br />
složen. Zato je bitno raspolagati nekom fleksibilnom sabiračkom strukturom koja će<br />
omogućiti lako nalaženje kompromisa između složenosti i brzine rada. Jedna takva struktura<br />
je hijerarhijski sabirač sa ubrzanim prenosom.<br />
Pretpostavimo da želimo da projektujemo 32-sabirač. Sabirač možemo podeliti na četiri<br />
8-bitna bloka, tako da bitovi b0-7 pripadaju bloku 0, bitovi b8-15 pripadaju bloku 1, bitovi b16-23<br />
bloku 2 i bitovi b24-32 bloku 3. Svaki blok možemo realizovati kao 8-bitni sabirač sa ubrzanim<br />
prenosom. Signali izlaznog prenosa iz ovih blokova su c8, c16, c24 i c32. Postoje dva načina<br />
kako 8-bitne blokove možemo povezati u jedinstveni 32-bitni sabirač. Jedno rešenje je da<br />
blokove povežemo na isti način kao što bi smo povezali četiri stepena sabirača sa rednim<br />
prenosom (Sl. 5-20). Znači, kod ovog rešenja unutar blokova koristimo tehniku ubrzanog<br />
prenosa, dok se između blokva prenos prenosi redno.<br />
Sl. 5-20 Hijerarhijski CLA sabirač sa rednim prenosom između blokova.<br />
Brže kolo se može realizovati ako se i za generisanje prenosa između blokova, umesto<br />
rednog prenosa, koristi tehnika ubrzanog prenosa. Na Sl. 5-21 je prikazana struktura<br />
hijerarhijskog sabirača sa ubrzanim prenosom kod koga je iskorišćena ova tehnika. Svaki<br />
blok na gornjem delu Sl. 5-21 predstavlja jedan 8-bitni sabirač sa ubrzanim prenosom. Unutar<br />
bloka, u svakom njegovom unutrašnjem stepenu generišu se signali generisanog i<br />
propagiranog prenosa, gi i pi, na prethodno opisan način. Međutim, umesto da svaki blok<br />
generiše signal izlaznog prenosa iz svoje pozicije naveće težine, kao u rešenju sa Sl. 5-20,<br />
sada svaki blok generiše signale generisanog i propagiranog prenosa za celokupan blok. Neka<br />
su ovi signali označeni sa Gj i Pj. Signali Gj i Pj se koriste kao ulazi u <strong>kola</strong> za ubrzanje<br />
prenosa drugog nivoa, prikazana u doljem delu Sl. 5-21, koja određuju prenose između<br />
blokova. Izraze za funkcije Gj i Pj možemo odrediti na osnovu poznatog izraza za c8:<br />
c8 = g7 + p7g6 + p7p6g5 + p7p6p5g4 + p7p6p5p4g3 + p7p6p5p4p3g2 + p7p6p5p4p3p2g1<br />
+ p7p6p5p4p3p2p1g0 + p7p6p5p4p3p2p1p0c0<br />
26
Poslednji član u ovom izrazu kazuje da ako su sve interne funkcije propagiranog prenosa, pi,<br />
i=1,..,7, jednake 1, tada se signal ulaznog prenosa, c0, prenosi kroz celokupan blok. Dakle,<br />
P0 = p7p6p5p4p3p2p1p0<br />
Preostali članovi u izrazu za c8 ukazuju na sve ostale slučajeve kada blok generiše izlazni<br />
prenos. Dakle,<br />
G0 = g7 + p7g6 + p7p6g5 + ... + p7p6p5p4p3p2g1 + p7p6p5p4p3p2p1g0<br />
Konačno, izraz za c8 hijerarhijskog sabirača oblika je:<br />
c8 = G0 + P0c0<br />
Za blok 1, izrazi za G1 i P1 imaju istu formu, osim što indeks i treba zameniti indeksom<br />
i+8. Izrazi za G2, P2, G3 i P3, određuju se na isti način. Ako znamo funkcije generisanog i<br />
propagiranog prenosa na nivou blokova, tada možemo odrediti i izraze za ulazne prenose u<br />
svaki pojedinačni blok:<br />
c16 = G1 + P1c8<br />
= G1 + P1G0 +P1P0 c0<br />
Slično, izrazi za c24 i c32 su oblika:<br />
c24 = G2 + P2G1 +P2P1G0 + P2P1P0c0<br />
c32 = G3 + P3G2 +P3P2G1 + P3P2P1G0 + P3P2P1P0c0<br />
Izračunavanje signala prenosa c8, c16, c24 i c32 na osnovu poznatih vrednosti Gj i Pj unosi<br />
dva dodatna nivoa logike. Znači, pod pretpostavkom da je fan-in ograničen na 4 ulaza, vreme<br />
potrebno da se obavi sabiranje dva 32-bitna broja iznosi: 5tg za određivanje Gj i Pj (na osnovu<br />
prethodno sprovedene analize za c8), plus 3tg za ubrzanje prenosa na drugom nivou (zato što<br />
dva gejta u izrazu za c32 zahtevaju 5 ulaza i zbog toga moraju biti faktorizovani), plus jedno tg<br />
(XOR) za određivanje bitova sume, što u zbiru daje 9tg. Tačnije, konačna suma se generiše<br />
posle 8tg zato što c32 ne utiče na bitove sume. Međutim, c32 se koristi za detekciju<br />
aritmetičkog prekoračenja (Prekoračenje = c32 ⊗ c31). Dakle, trajanje operacije sabiranja,<br />
uključujući detekciju prekoračenja, ekvivalentno je kašnjenju kroz 9 gejtova.<br />
27
Sl. 5-21 Hijerarhijski sabirač sa ubrzanim prenosom.<br />
U odeljku X, utvrđeno je da sabiranje dva n-to bitna broja pomoću sabirača sa rednim<br />
prenosom traje (2n+1)tg, što za n=32 iznosi 65tg. Očigledno, isti zadatak sabirač sa ubrzanim<br />
prenosom obavi za oko 7 puta brže. Ovo značajno poboljšanje performansi ostvareno je na<br />
račun značajno veće složenosti sabirača sa ubrzanim prenosom.<br />
<strong>5.</strong>5 Projektovanje aritmetičkih <strong>kola</strong> korišćenjem šematskog editora<br />
Očigledan način za projektovanje aritmetičkih <strong>kola</strong> pomoću šematskog editora je crtanje<br />
logičke šeme koja će sadržati sva neophodna logička <strong>kola</strong>. Na primer, da bi smo kreirali nbitni<br />
sabirač sa rednim prenosom, treba najpre nacrtati logičku šemu potpunog sabirača.<br />
Zatim, treba kreirati logičku šemu višeg hijerarhijskog nivoa i u njoj povezati n instanci<br />
potpunog sabirača. Hijerarhijska logička šema kreirana na ovaj način trebalo bi liči na kolo sa<br />
Sl. 5-6a. Koristeći istu metodologiju možemo projektovati i kolo za sabiranje i oduzimanje sa<br />
Sl. 5-1<strong>5.</strong><br />
Glavni problem ovakvog načina unosa dizajna je u tome što može biti dugotrajan i<br />
naporan, naročito ako je broj bitova veliki. Ovaj problem bi postao još izraženiji i evidentniji<br />
ako bi smo pomoću šematskog editora pokušali da nacrtamo logičku šemu sabirača sa<br />
ubrzanim prenosom. Kao što je poznato iz odeljka <strong>5.</strong>4, sabirač sa ubrzanim prenosom ne<br />
poseduje homogenu strukturu, već se svaki njegov stepen, u delu logike za generisanje<br />
prenosa, razlikuje od ostalih. Iz tog razoga bilo bi neophodno nacrtati posebnu logičku šemu<br />
za svaki stepen sabirača. Šta više, u svakom sledećem stepenu, logika za generisanje prenosa<br />
postaje sve složenija, i zahteva sve već broj gejtova, tako da bi logičke šeme brzo postale<br />
glomazne i nepregledne. Daleko bolji način za kreiranje aritmetičkih <strong>kola</strong> pomoću šematskog<br />
editora je onaj koji se oslanja na korišćenje unapred projektovanih struktura.<br />
Kao što je naglešeno u odeljku X, sastavni deo alata za šematski unos dizajna je<br />
biblioteka grafičkih simbola osnovnih logičkih gejtova. Ovi gejtovi se koriste za kreiranje<br />
relativno jednostavnih <strong>kola</strong>. Pored biblioteke osnovnih gejtova, alati za šematski unos dizajna<br />
tipično poseduju i biblioteku često korišćenih, složenijih struktura, ako što su sabirači ili<br />
28
ALU jedinice. Svako takvo kolo može biti uvršćeno u logičku šemu i korišćeno kao deo<br />
većeg <strong>kola</strong>. Kod CAD sistema, za module ovog tipa koristi se pojam makroćelija ili<br />
megafunkcija.<br />
Postoje dva glavna tipa makroćelija: tehnološki-zavisne i tehnološki-nezavisne.<br />
Tehnološki-zavisna makroćelija je prilagođena konkretnoj implementacionoj tehnologiji. Na<br />
primer, u odeljku <strong>5.</strong>4 je razmatrana konstrukcija sabirača sa ubrzanim prenosom pod<br />
pretpostavkom da su na raspolaganju gejtovi sa najviše četiri ulaza. Makroćelija koja bi<br />
realizovala takav jedan sabirač bila bi tehnološki-zavisna. Tehnološki-nezavisne makroćelije<br />
mogu biti realizovane u bilo kojoj implementacionoj tehnologiji. Na primer, makroćelija koja<br />
bi sadržala različite opise sabirača za različite implementacione tehnologije bila bi<br />
tehnološki-nezavisna.<br />
<strong>5.</strong>6 Projektovanje aritmetičkih <strong>kola</strong> pomoću VHDL-a<br />
U odeljku <strong>5.</strong>5 je rečeno da se n-bitni sabirač može kreirati crtanjem hijerarhijske šeme<br />
koja će sadržati n instanci potpunog sabirača. Identičan pristup se može primeniti i u VHDLu.<br />
Najpre treba kreirati VHDL entitet za potpuni sabirač, a zatim treba kreirati entitet višeg<br />
hijerarhijskog nivoa koji će objediniti odgovarajući broj instanci potpunog sabirača. Kao prvi<br />
pokušaj projektovanja aritmetičkih <strong>kola</strong> pomoću VHDL-a, najpre će biti objašnjeno kako se u<br />
VHDL-u piše hijerarhijski kod za n-to bitni sabirač sa rednim prenosom.<br />
Kod za entitet potpunog sabirača prikazan je na Sl. 5-22. Ulazi entita su: ulazni prenos Cin<br />
i dva jednobitna sabirka x i y. Izlazi entiteta su: bit sume, s, i izlazni prenos, Cout. Suma i<br />
izlazni prenos opisani su pomoću logičkih izraza.<br />
LIBRARY IEEE;<br />
USE IEEE.STD_LOGIC_1164.ALL;<br />
ENTITY potpuni_sabirac IS<br />
PORT ( Cin, x, y : IN STD_LOGIC;<br />
s, Cout : OUT STD_LOGIC);<br />
END potpuni_sabirac;<br />
ARCHITECTURE LogickaFunkcija OF potpuni_sabirac is<br />
BEGIN<br />
s
END sabirac4;<br />
ARCHITECTURE Struktura OF sabirac4 IS<br />
SIGNAL c1,c2,c3 : STD_LOGIC;<br />
COMPONENT potpuni_sabirac<br />
PORT( Cin, x, y : IN STD_LOGIC;<br />
s,Cout : OUT STD_LOGIC);<br />
END COMPONENT;<br />
BEGIN<br />
stepen0: potpuni_sabirac PORT MAP(Cin,x0,y0,s0,c1);<br />
stepen1: potpuni_sabirac PORT MAP(c1,x1,y1,s1,c2);<br />
stepen2: potpuni_sabirac PORT MAP(c2,x2,y2,s2,c3);<br />
stepen3: potpuni_sabirac PORT MAP(<br />
Cin=>c3, Cout=>Cout, x=>x3, y=>y3, s=>s3);<br />
END Struktura;<br />
Sl. 5-23 VHDL kod za četvorobitni sabirač.<br />
Zapazimo da je arhitekturi dato ime Struktura. Ovo ime je izabrano zato što se stil<br />
kodiranja kod koga se kolo opisuje na hijerarhijski način, povezivanjem pod<strong>kola</strong>, zove<br />
strukturni stil kodiranja. U svim prethodnim primerima VHDL koda, signali su uvek bili<br />
deklarisani kao portovi u okviru deklaracije entiteta. Kao što se može videti na Sl. 5-23,<br />
signali takođe mogu biti deklarisani i u delu koda arhitekture pre ključne reči BEGIN. Na<br />
ovaj način, deklarisani su tri signala, c1, c2 i c3, koji se će prilikom opisivanja strukture<br />
sabirača biti korišćeni kao signali izlaznog prenosa iz prva tri stepena sabirača. U istom delu<br />
koda, kao druga, uvršćena je naredba koja se zove naredba za deklaraciju komponente.<br />
Sintaksa ove naredbe je slična deklaraciji entiteta. Ova naredba omogućava da se entitet<br />
potpuni_sabirac može koristiti kao podkolo u arhitekturi.<br />
U delu arhitekture VHDL koda sa Sl. 5-23, između ključnih reči BEGIN i END, 4-bitni<br />
sabirač je opisan pomoću četiri naredbe za instanciranje komponenti. Svaka od ovih naredbi<br />
počinje imenom instance, nakon koga sledi dvotačka. Stepenu najmanje težine sabirača dato<br />
je ime stepen0, a stepenu najveće težine ime stepen3. Nakon dvotačke sledi ime komponente,<br />
potpuni_sabirač, a zatim ključna reč PORT MAP. Konačno, u zagradama su navedena imena<br />
onih signala, prethodno deklarisanih u entitetu sabirač4, koji su povezani na ulazne i izlazne<br />
portove konkretne instance komponente potpuni_sabirač. Uočimo da su kod prve tri naredbe<br />
instanciranja imena signala navedena u istom redosledu kao u naredbi COMPONENT, kojom<br />
je deklarisana komponenta potpuni_sabirač, tj. u redosledu: Cin, x, y, s, Cout. Imena signala<br />
se mogu navesti i u proizvoljnom redosledu, ali onda je neophodno eksplicitno naznačiti koji<br />
signal je povezan na koji port komponente. Ovakav stil instanciranja komponente zove se<br />
pridruživanje po imenu, a primer njegovog korišćenja može se videti u četvrtoj naredbi, koja<br />
kreira instancu stepen3. Na primer, pridruživanje “Cin=>c3” znači da se signal c3 povezuje<br />
na port Cin. Uočimo da se kod pridruživanja “Cout=>Cout” ime signala Cout koristi i kao<br />
ime porta komponente potpuni_sabirač i kao ime signala unutar entiteta sabirač4. Do zabune<br />
ne dolazi jer VHDL kompajler ˝zna˝ da se sa leve strane znaka => uvek nalazi ime porta.<br />
Način na koji su imena signala pridružena instancama komponente potpuni_sabirač<br />
indirektno određuje način na koji su potpuni sabirači međusobno povezani. Na primer, signal<br />
c1 koji je povezan na port za izlazni prenos instance stepen0, takođe je povezan i na port za<br />
ulazni prenos instance stepen1. To znači da su ova dva porta instanci sabirač0 i sabirač1<br />
povezani signalom, tj. vezom, koja se zove c1. Kolo sintetizovano na osnovu VHDL koda sa<br />
Sl. 5-22 i Sl. 5-23 imaće istu strukturu kao i kolo sa Sl. 5-6.<br />
Alternativni stil kodiranja<br />
30
VHDL kod sa Sl. 5-24 sadrži naredbu za deklaraciju komponente potpuni_sabirac.<br />
Međutim, umesto da ova naredba bude uvršćena u sam kod za entitet sabirac4, ona može biti<br />
smeštena u tzv. VHDL paket. Uopšteno govoreći, VHDL paket omogućava da se pojedine<br />
VHDL konstrukcije dešinišu u jednom, a koriste u drugim izvornim fajlovima. Deklaracije<br />
tipova i deklaracije komponenti su primeri konstrukcija koje se obično smeštaju u pakete.<br />
Sa primerom korišćenja VHDL paketa za tipove podataka već smo se sreli u poglavlju X.<br />
U poglavlju X koristili smo paket pod imenom STD_LOGIC_1164 koji sadrži definiciju tip<br />
signala STD_LOGIC. Da bi se omogućio pristup sadržaju ovog paketa, dovoljno je u VHDL<br />
kod uvrstiti naredbe:<br />
LIBRARY IEEE;<br />
USE IEEE.STD_LOGIC_1164.ALL;<br />
Ove dve naredbe možemo videti i na Sl. 5-22 i Sl. 5-23, zato što se u kodu za<br />
potpuni_sabirac i sabirac4 koristi tip STD_LOGIC. Prva naredba omogućava pristup<br />
biblioteci koja se zove IEEE. Kao što je napomenuto u odeljku X, biblioteka predstavlja<br />
lokaciju, ili direktorijum u fajl-sistemu računara gde je smešten paket STD_LOGIC_1164.<br />
Kod sa Sl. 5-22 definiše paket pod imenom potpuni_sabirac_paket. Kod sa ove slike<br />
može biti smešten u zaseban izvorni fajl, ili može biti deo istog izvornog fajla u kome se<br />
nalazi opis entiteta potpuni_sabirac (Sl. 5-22). Sintaksa VHDL-a zahteva da deklaracija<br />
paketa sadrži svoje vlastite iskaze LIBRARY i USE. Unutar paketa, entitet potpuni_sabirac<br />
je definisan naredbom COMPONENT. Kompajliranjem ovog koda kreira se paket<br />
potpuni_sabirac_paket, koji se smešta u radni direktorijum, tj. u isti direktorijum gde se<br />
nalazi i izvorni fajl paketa.<br />
LIBRARY IEEE;<br />
USE IEEE.STD_LOGIC_1164.ALL;<br />
PACKAGE potpuni_sabirac_paket IS<br />
COMPONENT potpuni_sabirac<br />
PORT (Cin,x,y : IN STD_LOGIC;<br />
s,Cout : OUT STD_LOGIC);<br />
END COMPONENT;<br />
END potpuni_sabirac_paket;<br />
Sl. 5-24 Deklaracija paketa.<br />
Sa rasploživim paketom potpuni_sabirac_paket, komponenta potpuni_sabirac se može<br />
kao podkolo koristiti u drugim VHDL entitetima. Dovoljno je u kod za entitet naznačiti da se<br />
koristi paket potpuni_sabirac_paket:<br />
LIBRARY work;<br />
USE work.potpuni_sabirac_paket.ALL;<br />
Biblioteka work predstavlja radni direktorijum gde je smešten VHDL kod koji definiše<br />
paket. Ova naredba i nije neophoda, s obzirom da VHDL kompajler uvek ima pristup radnom<br />
direktorijumu.<br />
Na Sl. 5-25 je ilustrovano kako treba napisati VHDL kod koji koristi paket<br />
potpuni_sabirac_paket. Kod sa Sl. 5-25 je u suštini identičan kodu sa Sl. 5-23, s tom<br />
razlikom što sada postoji još jedna USE naredba, a iz koda za arhitekturu je izbačena naredba<br />
za deklaraciju komponente. Kola sintetizovana na osnovu dve varijante koda biće identičana.<br />
LIBRARY IEEE;<br />
USE IEEE.STD_LOGIC_1164.ALL;<br />
USE work.potpuni_sabirac_paket.ALL;<br />
ENTITY sabirac4 IS<br />
31
PORT (Cin : IN STD_LOGIC;<br />
x3,x2,x1,x0 : IN STD_LOGIC;<br />
y3,y2,y1,y0 : IN STD_LOGIC;<br />
s3,s2,s1,s0 : OUT STD_LOGIC;<br />
Cout : OUT STD_LOGIC);<br />
END sabirac4;<br />
ARCHITECTURE Struktura OF sabirac4 IS<br />
SIGNAL c1,c2,c3 : STD_LOGIC;<br />
BEGIN<br />
stepen0: potpuni_sabirac PORT MAP(Cin,x0,y0,s0,c1);<br />
stepen1: potpuni_sabirac PORT MAP(c1,x1,y1,s1,c2);<br />
stepen2: potpuni_sabirac PORT MAP(c2,x2,y2,s2,c3);<br />
stepen3: potpuni_sabirac PORT MAP(<br />
Cin=>c3, Cout=>Cout, x=>x3, y=>y3, s=>s3);<br />
END Struktura;<br />
Sl. 5-25 Alternativni način za opis četvoro-bitnog sabirača.<br />
<strong>5.</strong>6.1 <strong>Predstavljanje</strong> <strong>brojeva</strong> u VHDL-u<br />
U VHDL-u, brojevi se predstavljaju kao višebitni signali. Na primer, deklaracija<br />
SIGNAL C : STD_LOGIC_VECTOR(1 TO 3);<br />
definiše višebitni signal C. Tip podataka STD_LOGIC_VECTOR predstavlja linearno polje,<br />
ili vektor, podataka tipa STD_LOGIC. U VHDL žargonu, kaže se da je<br />
STD_LOGIC_VECTOR podtip, ili izvedeni tip, tipa STD_LOGIC. Takođe, postoji sličan<br />
podtip, BIT_VECTOR, koji odgovara tipu BIT. Prethodna deklaracija SIGNAL, definiše C<br />
kao tro-bitni signal tipa STD_LOGIC. U VHDL kodu, signal C se može koristiti kao<br />
kompaktna tro-bita veličina, jednostavno navodeći ime C. Ali, takođe, možemo se direktno<br />
obraćati i svakom njegovom pojedinačnom bitu, korišćenjem imena C(1), C(2) i C(3).<br />
Sintaksa “1 TO 3” u naredbi deklaracije višebitnog signala, kazuje da se bit najveće težine<br />
signala C zove C(1), a bit najmanje težine C(3). Signalu C se može dodeliti tro-bitna vrednost<br />
na sledeći način:<br />
C
ima sledeći efekat: X(3)=1, X(2)=1, X(1)=0 i X(0)=0.<br />
Na Sl. 5-26 je prikazana varijanta VHDL koda sa Sl. 5-25 u kojoj se koriste višebitni<br />
signali. Ulazni portovi za sabirke, X i Y, i izlazni port za sumu, S, deklarisani su kao 4-bitni<br />
signali. Interni signali izlaznog prenosa između stepena sabirača deklarisani su u arhitekturi u<br />
vidu jedinstvenog, tro-bitnog vektora C.<br />
LIBRARY IEEE;<br />
USE IEEE.STD_LOGIC_1164.ALL;<br />
USE work.potpuni_sabirac_paket.ALL;<br />
ENTITY sabirac4 IS<br />
PORT (Cin : IN STD_LOGIC;<br />
X,Y : IN STD_LOGIC_VECTOR(3 DOWNTO 0);<br />
S : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);<br />
Cout : OUT STD_LOGIC);<br />
END sabirac4;<br />
ARCHITECTURE Struktura OF sabirac4 IS<br />
SIGNAL C : STD_LOGIC_VECTOR(1 TO 3);<br />
BEGIN<br />
stepen0: potpuni_sabirac PORT MAP(Cin,X(0),Y(0),S(0),C(1));<br />
stepen1: potpuni_sabirac PORT MAP(C(1),X(1),Y(1),S(1),C(2));<br />
stepen2: potpuni_sabirac PORT MAP(C(2),X(2),Y(2),S(2),C(3));<br />
stepen3: potpuni_sabirac PORT MAP(C(3),X(3),Y(3),S(3),Cout);<br />
END Struktura;<br />
Sl. 5-26 Četvoro-bitni sabirač opisan korišćenjem višebitnih signala.<br />
<strong>5.</strong>6.2 Aritmetičke naredbe dodele<br />
Ako su signali X, Y i Z definisani na sledeći način:<br />
SIGNAL X,Y,S : STD_LOGIC_VECTOR(15 DOWNTO 0);<br />
tada, <strong>aritmetička</strong> naredba dodele:<br />
S
END sabirac4;<br />
ARCHITECTURE Struktura OF sabirac4 IS<br />
BEGIN<br />
S
tipa SIGNED. U svemu ostalom ovaj kod je identičan onome sa Sl. 5-28 i prevodi se u isto<br />
sabiračko kolo.<br />
LIBRARY IEEE;<br />
USE IEEE.STD_LOGIC_1164.ALL;<br />
USE IEEE.STD_LOGIC_ARITH.ALL;<br />
ENTITY sabirac4 IS<br />
PORT (Cin : IN STD_LOGIC;<br />
X,Y : IN SIGNED(15 DOWNTO 0);<br />
S : OUT SIGNED(15 DOWNTO 0);<br />
Cout,Prekoracenje : OUT STD_LOGIC);<br />
END sabirac4;<br />
ARCHITECTURE Struktura OF sabirac4 IS<br />
SIGNAL Sum : SIGNED(16 DOWNTO 0);<br />
BEGIN<br />
Sum
(24)10, tada je B/2 = 001100 = (12)10, a B/4 = 000110 = (6)10. Slično, ako je B = 101000 = (-<br />
24)10, tada je B/2 = 110100 = (-12)10, a B/4 = 111010 = (-6)10. Zapazimo da što je pozitivan<br />
broj manji to ima veći broj nula levo od prve jedinice. Za negativne brojeve važi da je broj<br />
manji, po apsolutnoj vrednosti, što ima više jedinica levo od prve nule.<br />
Razmotrimo sada problem množenja binarnih <strong>brojeva</strong> u opštem slučaju. Za početak,<br />
ograničićemo se na neoznačene binarne brojeve. Dva binarna broja se mogu pomnožiti<br />
korišćenjem iste procedure koja se koristi za množenje decimalnih <strong>brojeva</strong>. Na Sl. 5-30a je<br />
ilustrovano kako se mogu ručno pomnožiti dva 4-bitna broja. Množenik se pojedinačno<br />
množi svakom cifrom množenika, počev od cifre najmanje težine množioca. Ovako dobijeni<br />
parcijalni proizvodi se zapisuju jedan ispod drugog tako da je svaki naredni parcijalni<br />
proizvod pomeren za jednu cifarsku poziciju na levo u odnosu na predhodni. Zbir ovako<br />
pomerenih parcijalnih proizvoda daje konačni proizvod. Uočimo da je u kontekstu binarnih<br />
<strong>brojeva</strong>, množenje broja B bitnom b trivijalno: ako je b=1, proizvod je B; ako je b=0,<br />
proizvod je 0. Takođe, uočimo da je u primeru sa Sl. 5-30a, konačni proizvod 8-bitni. U<br />
opštem slučaju, proizvod n-bitnog i m-bitnog broja daje (n+m)-bitni proizvod.<br />
(a) ručno množenje<br />
(b) množenje prilagođeno hardverskoj realizaciji<br />
Sl. 5-30 Množenje neoznačenih <strong>brojeva</strong>.<br />
Procedura koja se koristi za ručno množenje, može se iskoristi za realizaciju <strong>kola</strong><br />
digitalnog množača. Međutim, umesto da se najpre kreiraju svi parcijalni proizvodi, a zatim<br />
saberu, kao što se to radi kod ručnog množenja, za hardversku realizaciju množača pogodnije<br />
je baratati jednim parcijalnim proizvodom, koji će se inicijalno postaviti na 0, a zatim na<br />
tekući parcijalni proizvod redom dodavati pomerene verzije množenika onako kako se one<br />
kreiraju. Neka su množenik, množilac i proizvod redom označeni kao: M=m3m2m1m0,<br />
Q=q3q2q1q0 i P=p7p6p5p4p3p2p1p0. U prvom koraku, ispituje se bit q0. Ako je q0=1, M se<br />
dodaje na parcijalni proizvod koji je inicijalno postavljen na 0. Ako je q0=0, na inicijalni<br />
parcijalni proizvod se dodaje 0. Ako je q1=1, tada na parcijalni proizvod treba dodati 2×M.<br />
Vrednost 2×M se dobija pomeranjem broja M za jednu poziciju na levo. Slično, ako je q2=1,<br />
na parcijalni proizvod treba dodati 4×M, i ako je q3=1, na parcijalni proizvod treba dodati<br />
8×M. Na taj način, nakon četiri obavljena sabiranja, parcijalni proizvod ima vrednost<br />
konačnog proizvoda.<br />
Jedna moguća hardverska realizacija množača, koja se oslanja na opisanu proceduru, je<br />
tzv. sekvencijalni množač. Ovo kolo bi koristilo jedan 8-bitni sabirač koji bi redom, tj.<br />
sekvencijalno, obavljao sva potrebna sabiranja. Mogućnost da se množač realizuje pomoću<br />
36
samo jednog sabirača je atraktivna sa stanovišta cene. Međutim, iz istog razloga, ovakim<br />
pristupom dobili bi smo relativno sporo rešenje. Mnogo brže kolo se može ralizovati ako se<br />
umesto jednog, za sabiranje parcijalnih proizvoda koristi više sabirača. Upravo će jedno<br />
takvo rešenje biti opisano u nastavku.<br />
<strong>5.</strong>7.1 Matrični množač neoznačenih <strong>brojeva</strong><br />
Na Sl. 5-30b, na jednom konkretnom primeru, ilustrovana je postupak množenja koji se<br />
može realizovati pomoću više sabirača. U svakom koraku, za izračunavanje novog<br />
parcijalnog proizvoda koristi se poseban 4-bitni sabirač. Uočimo da bitovi najmanje težine<br />
parcijalnih proizvoda nisu obuhvaćeni narednim sabiranjima, tako da mogu biti direktno<br />
uključeni u konačni proizvod, kao što je naznačeno strelicama.<br />
Brzo kolo za množenje može se projektovati korišćenjem matrične strukture koja je slična<br />
rasporedu bitova sa Sl. 5-30b. Razmotrimo slučaj 4x4, gde su množilač M=m3m2m1m0 i<br />
množenik Q=q3q2q1q0. Parcijalni proizvod 0, PP0=pp03pp02pp01pp00, može se generisati<br />
primenom AND operacije između bita q0 i svakog pojedinačnog bita množenika M:<br />
PP0 = m3q0 m2q0 m1q0 m0q0<br />
Parcijalni proizvod 1, PP1, se generiše tako što se najpre obavi AND operacija između<br />
bita q1 i M, a zatim dobijeni rezultat sabere sa PP0:<br />
Slično, parcijalni proizvod 2, PP2, se dobija kada se na PP1 doda q2 AND M, i td.<br />
Kolo koje realizuje prethodnu operaciju organizovano je u vidu matrice, ili polja<br />
elementarnih blokova, kao što je prikazano na Sl. 5-31a. U polju postoje dva tipa blokova. Na<br />
Sl. 5-31b prikazana je unutrašnja struktura blokova iz prve vrste, dok je na Sl. 5-31c<br />
prikazana struktura blokova koji čine drugu i treću vrstu.<br />
Uočimo da se u strukturi sa Sl. 5-31, pomerene verzije množenika dobijaju<br />
prosleđivanjem bitova mi dijagonalno kroz blokove. Takođe, uočimo da potpuni sabirači iz<br />
svake vrste formiraju sabirač sa rednim prenosom. U prvoj vrsti formiraju se i sabiraju q0×M<br />
i 2×q0×M. Tako dobijeni parcijalni proizvod PP1 se u drugoj vrsti sabira sa 4×q0×M, što<br />
daje PP2. Konačno, u trećoj vrsti, sabiranjem PP2 i 8×q0×M generiše se konačni proizvod,<br />
P.<br />
U opštem slučaju, matrični množač n×m ima m-1 vrstu od po n blokova, tj. n blokova<br />
tipa 1 (Sl. 5-31b) i n(m-1) blokova tipa 2 (Sl. 5-31c).<br />
37
<strong>5.</strong>7.2 Množenje označenih <strong>brojeva</strong><br />
(a) struktura <strong>kola</strong><br />
Sl. 5-31 Kolo množača 4 x 4.<br />
Množenje označenih decimalnih <strong>brojeva</strong> obavlja se po poznatom pravilu: najpre se<br />
pomnože magitude činioca, a zatim se odredi znak proizvoda; proizvod je pozitivan ako su<br />
činioci istog, a negativan ako su činioci različitog znaka. Ovo pravilo je pogodno zato što<br />
množenje označenih svodi na množenje neoznačenih <strong>brojeva</strong>, ali može se direktno primeniti<br />
na binarne brojeve samo ako su oni predstavljeni u obliku znak-magnituda. Međutim, ako<br />
baratamo sa brojevima u dvojičnom komplementu, neophodno je najpre konvertovati činice u<br />
oblik znak-magnituda, zatim pomnožiti magnitude, kao neoznačene brojeve, i odrediti znak<br />
proizvoda. Konačno, rezultat koji je u obliku znak-magnituda treba konvertovati u oblik<br />
dvojičnog komplementa.<br />
Na Sl. 5-32a je prikazana struktura množača n-bitnih <strong>brojeva</strong> u dvojičnom komplementu<br />
koji koristi prethodno opisanu proceduru. Za razliku od neoznačenih <strong>brojeva</strong>, gde proizvod<br />
dva n-bitna broja generiše 2n-bitni proizvod, proizvod dva n-bitna broja predstavljena u<br />
dvojičnom komplementu daje 2n-1 bitni rezultat. To je zato što magnitudu označenog nbitnog<br />
broja čine n-1 bita, pa je proizvod dve takve magnitude 2(n-1)-bitni broj, koji proširen<br />
bitom znaka, postaje (2n-1)-bitni broj. Kola za pre-komplementiranje određuju magnitude<br />
38
činioca. Ako je bit znaka činioca xn-1=0, tj. činilac je pozitivan, na izlazu <strong>kola</strong> za prekomplementiranje<br />
javlja se identična vrednost kao na njegovom ulazu; ako je bit znaka 1, tj.<br />
činilac je negativan, kolo za pre-komplementiranje generiše dvojični komplement od (xn-2, xn-<br />
3, ..., x0). Matrični množač neoznačenih <strong>brojeva</strong> množi (n-1)-bitne magnitude i generiše (2n-<br />
2) bitnu magnitudu proizvoda. Znak proizvoda, bit p2n-2, određuje se na osnovu znaka činilaca<br />
pomoću XOR gejta, p2n-2=xn-1 ⊗ yn-1. Kolo za post-komplementiranje, generiše dvojični<br />
komplement magnitude proizvoda, ako je p2n-2=1. Struktura blokova za pre- i postkomplementiranje<br />
je identična onoj sa Sl. 5-32b, stim razlikom što <strong>kola</strong> za prekomplementiranje<br />
sadrže n-1, a kolo za post-komplementiranje 2n-2 razreda. Kao što znamo,<br />
dvojični komplement se određuje tako što se na komplement broja doda jedinica.<br />
Komplementiranje se obavlja pomoću XOR <strong>kola</strong>, dok je se za dodavanje 1 koristi sabirač sa<br />
1, ili kolo za inkrementiranje. Za razliku od binarnog sabirača koji se sastoji od niza redno<br />
povezanih potpunih sabirača, kolo za inkrementiranje se sastoji od niza redno povezanih<br />
polu-sabirača. Polusabirač na poziciji najmanje težine sabira bit najmanje težine ulaznog<br />
broja sa 1. Polu-sabirači na preostalim pozicijama služe da bi se eventuali prenos iz pozicije<br />
najmanje težine preneo na sledeće pozicije veće težine. Dakle, za kolo sa Sl. 5-32b važi: ako<br />
je z=0, tada je B=A; ako je z=1, tada je B=A’+1.<br />
(a) blok dijagram<br />
39
(b) kolo za komplementiranje<br />
Sl. 5-32 Množač označenih <strong>brojeva</strong>.<br />
Treba napomenuti da <strong>kola</strong> za pre- i post-komplementiranje povećavaju ukupno kašnjenje<br />
množača. Iz tog razloga, za množenje označenih <strong>brojeva</strong> veću primenu nalaze matrični<br />
množači, koji su projektovani tako da direktno množe brojeve u dvojičnom komplementu.<br />
Međutim, izučavanje ovakvih struktura prevazilazi okvire osnovnog kursa digitalne<br />
elektronike i stoga one neće biti razmatrani u ovoj knjizi.<br />
<strong>5.</strong>8 Specifični formati za predstavljanje <strong>brojeva</strong><br />
U prethodnim odeljcima bavili smo se isključivo celim binarnim brojevima<br />
predstavljenim u pozicionom brojnom sistemu. Međutim, kod digitalnih sistema u upotrebi su<br />
i neki drugi, specifični formati za predstavljanje <strong>brojeva</strong>. U ovom odeljku ukratko ćemo se<br />
upoznati sa tri takva formata: brojevi u fiksnom zarezu, brojevi u pokretnom zarezu i<br />
binarno-kodirani decimalni brojevi.<br />
<strong>5.</strong>8.1 Brojevi u fiksnom zarezu<br />
Kod nekih aplikacija, zahteva se manipulacija brojevima koji nisu celobrojnog tipa. Jedno<br />
rešenje je korišćenje <strong>brojeva</strong> u fiksnom zarezu. Broj u fiksnim zarezom, se sastoji iz celog i<br />
razlomljenog dela. Ovakav broj se zapisuje u pozicionom brojnom sistemu na sledeći način:<br />
B = bn-1bn-2...b1b0 . b-1b-2...b-k<br />
Pozicije levo od tačke, definišu ceo, a desno od tačke razlomljni deo broja. Težine<br />
pozicija u razlomljenom delu su negativni stepeni osnove brojnog sistema. U binarnom<br />
brojnom sistemu, vrednost broja B iznosi:<br />
V ( B)<br />
=<br />
∑ − n 1<br />
i<br />
i=<br />
−k<br />
b × 2<br />
i<br />
Prevođenje razlomljenog binarnog broja u decimalni ekvivalent je trivijalno i obavlja se<br />
primenom prethodne jednačine, pri čemu se sve operacije obavljaju u decimalnom brojnom<br />
sistemu. Na primer, decimalni ekvivalent broja (1101.101)2 iznosi:<br />
(1101.101)2 = (1×2 3 + 1×2 2 + 0×2 1 + 1×2 0 + 1×2 -1 + 0×2 -2 + 1×2 -3 )10<br />
= (8 + 4 + 1 + 1/2 + 1/8)10<br />
= (13 + 0.5 + 0.125)10<br />
40
= (13.562)10<br />
Prevođenje decimilanog broja sa tačkom u binarni broj obuhvata nezavnisno prevođenje<br />
celog i razlomljenog dela. Celi deo se prevodi na način koji je opisan u odeljku <strong>5.</strong>1.1, tj.<br />
uzastopnim deljenjem sa 2 i izdvajanjem ostatka. Slično, razlomljeni deo se prevodi u binarni<br />
ekvivalent uzastopnim množenjem sa 2 i izdvajanjem celobrojnog dela iz dobijenog<br />
proizvoda. Neka razlomljeni decimalni broj D=0.d-1d-2 ... d-m, vrednosti V, treba konvertovati<br />
u binarni broj B=0.b-1b-2 ... b-k. Znači, treba odrediti bitove b-1, b-2, ..., b-k, tako da važi:<br />
V = b-1×2 -1 + b-2×2 -2 + ... + b-k×2 -k<br />
Ako V pomnožimo sa 2, dobićemo:<br />
2×V= b-1×2 0 + b-2×2 -1 ... + b-k×2 -(k-1)<br />
Celobrojni deo ovog množenja je b-1, a razlomljeni b-2×2 1 ... + b-k×2 -(k-1) , tj. 0.b-2b-3...b-k.<br />
Znači, ako množenjem polaznog decimalnog broja dobijemo kao celobrojni deo 0, važi b-1=0,<br />
a ako dobijemo 1, važi b-1=1. Množenjem dobijenog razlomljenog broja sa 2, kao celobrojni<br />
deo dobićemo b-2, a novi razlomljeni broj biće je: 0.b-3b-4...b-k. Ako nastavimo da množimo<br />
novi razlomljeni broj sa 2 i određujemo po jedan bit u svakom koraku, dobićemo sve bitove<br />
binarnog broja. Ovaj postupak se nastavlja sve dok razlomljeni broj ne postane jednak 0.<br />
Primer. 5-6 Odrediti binarni ekvivalent decimalnog broja 14.70312<strong>5.</strong><br />
Odgovor: Celobrojni deo zadatog decimalnog broja je (14)10, a razlomljeni (0.703125)10.<br />
Na poznati način nalazimo binarni ekvivalent celog dela:<br />
(14)10 = (1110)2<br />
Da bi smo našli binarni broj koji odgovara razlomljenom delu, primenjujemo prethodno<br />
opisanu proceduru konverzije:<br />
0.703125 × 2 = 1.40625 ⇒ b-1=1<br />
0.40625 × 2 = 0.8125 ⇒ b-2=0<br />
0.8125 × 2 = 1.625 ⇒ b-3=1<br />
0.625 × 2 = 1.25 ⇒ b-4=1<br />
0.25 × 2 = 0.5 ⇒ b-5=0<br />
0.5 × 2 = 1.0 ⇒ b-6=1<br />
Dakle, (14.703125)10 = (1110.101101)2<br />
Kao što znamo iz elementrane matematike, racionalan broj je onaj koji iza tačke ima<br />
konačan broj cifara. Broj sa beskonačnim brojem cifara iza tačke je iracionalan. Prevođenjem<br />
racionalnog binarnog broja u decimalni brojni sistem uvek se dobija racionalni decimalni<br />
broj. Međutim, prilikom obrunute konverzije, neki brojevi koji su u decimalnom sistemu<br />
racionalni u binarnom sistemu postaju iracionalni.<br />
Primer. 5-7 Odrediti binarni ekvivalent decimalnog broja 0.5<strong>5.</strong><br />
Odgovor:<br />
0.55 × 2 = 1.1 ⇒ b-1=1<br />
0.1 × 2 = 0.2 ⇒ b-2=0<br />
41
0.2 × 2 = 0.4 ⇒ b-3=0<br />
0.4 × 2 = 0.8 ⇒ b-4=0<br />
0.8 × 2 = 1.6 ⇒ b-5=1<br />
0.6 × 2 = 1.2 ⇒ b-6=1<br />
0.2 × 2 = 0.4 ⇒ b-7=0<br />
0.4 × 2 = 0.8 ⇒ b-8=0<br />
...<br />
Proces konverzije možemo nastaviti u nedgled, ali uslov kraja (razlomljeni deo jednak<br />
nuli), nikada neće biti ispunjen. Pažljivim analizom procesa konverzije možemo uočiti da<br />
će se u nastavku konverzije neprekidno ponavljati sekvenca razlomnjenih <strong>brojeva</strong> 0.2,<br />
0.4, 0.8, 0.6. Dakle,<br />
(0.55)10 = (0.10)2, gde uglaste zagrade obuhvataju binarnu sekvencu koja se<br />
neprekidno ponavlja, do u beskonačnost.<br />
Pošto digitalni sistemi mogu baratati samo brojevima ograničene dužine, konverzija mora<br />
biti prekinuta kada se prekorači raspoloživi broj bitova, što naravno unosi grešku. Na primer,<br />
ako je u primeru Primer. 5-7 broj bitova za predstavljanje razlomljenog dela ograničen na<br />
osam, decimalni broj 0.55 u digitalnom sistemu koji radi sa brojevima u fiksnom zarezu, će<br />
biti predstavljen sa: (0.10001100)2, što ustvari odgovara decimalnom broju (0.546875)10.<br />
Digitalna <strong>kola</strong> koja barataju brojevima u fiksnom zarezu su u suštini ista kao i ona koja se<br />
koriste za celobrojne binarne brojeve, pa ih iz tog razloga nećem posebno razmatrati.<br />
<strong>5.</strong>8.2 Brojevi u pokretnom zarezu<br />
Opseg <strong>brojeva</strong> u fiksnom zarezu ograničen je brojem značajnih cifara koje se koriste za<br />
predstavljanje broja. Na primer, ako za predstavljanje celih decimalnih <strong>brojeva</strong> koristimo 8<br />
cifara i znak, opseg vrednosti koje se mogu predstaviti je 0 do ±999999999. Ako osam cifara<br />
koristimo za predstavljanje razlomljenog dela, tada je opseg, obuhvaćen ovakvom<br />
reprezentacijom, od 0.0000001 do ±0.99999999. Međutim, kod mnogih tehničkih i naučnih<br />
primena, često je neophodno baratati brojevima koji su ili veoma veliki ili veoma mali.<br />
Umesto da koristimo reprezentaciju u fiksnom zarezu sa velikim brojem značajnih cifara,<br />
bolje rešenje je koristiti reprezentaciju u pokretnom zarezu. Broj u pokretnom zarezu je<br />
predstavljen manitsom, koja sadrži značajne cifre, i eksponentom osnove R. Format ovog<br />
zapisa je sledeći:<br />
manisa×R eksponent (<strong>5.</strong>6)<br />
Brojevi se obično normalizuju, tako da je tačka u mantisi uvek postavljena desno od prve<br />
nenulte cifre, kao na primer, <strong>5.</strong>341×10 42 ili 3.982×10 -31 . Dakle, broj u formatu pokretnog<br />
zareza se predstavlja parom (eksponent, mantisa), a pri tome se vrednost broja izračunava<br />
shodno izrazu (<strong>5.</strong>6).<br />
Binarna reprezentacija <strong>brojeva</strong> u formatu pokretnog zareza standardizovana je od strane<br />
organizacije IEEE. Ovaj standard definiše dva formata: obična (ili jednostruka) preciznost i<br />
dvostruka preciznost. Na Sl. 5-33 su prikazani oblici oba formata.<br />
42
Jednostruka preciznost<br />
(a) jednostruka preciznost<br />
(b) dvostruka preciznost<br />
Sl. 5-33 IEEE formati <strong>brojeva</strong> u pokretnom zarezu.<br />
Format jednostruke preciznosti prikazan je na Sl. 5-33a. Krajnji levi bit je bit znaka; 0<br />
ukazuje na pozitivan, a 1 na negativan broj. 8-bitno polje E sadrži vrednost eksponenta, a 23bitno<br />
polje M vrednost mantise. Eksponent može biti kako pozitivan tako i negativan. Umesto<br />
da se eksponent kodira kao 8-bitni označeni broj, što bi omogućilo predstavljanje vrednosti<br />
eksponenta u opsegu -127 do +127, za kodiranje eksponenta, kod IEEE standarda se koristi<br />
format “višak-127”. U ovom formatu, sadržaj polja E predstavlja zbir vrednosti stvarnog<br />
eksponenta i broja 127, tj. važi:<br />
eksponent = E – 127.<br />
Kodiranje eksponent u formatu “višak-127” se koristi kako bi se pojednostavile operacije<br />
sabiranja i oduzimanja <strong>brojeva</strong> u pokretnom zarezu. Mogu se sabirati/oduzimati samo brojevi<br />
koji imaju isti eksponent. Ako se eksponenti razlikuju, njihova razlika se komponzuje<br />
pomeranjem mantisa. Na primer, neka je potrebno sabrati brojeve 5×10 1 i 5×10 -1 . Najpre je<br />
potrebno izjednačiti eksponente. To se može uraditi tako što će se broj 5×10 1 napisati u<br />
obliku 500×10 -1 , odnosno tako što će se mantisa ovog broja pomeriti za dve pozicije u levo.<br />
Sabiranje daje rezultat 505×10 -1 . Konačno, rezultat se normalizuje na oblik <strong>5.</strong>05×10 1 .<br />
Kodiranje eksponenta u formatu “višak-127” omogućava da se eksponenti mogu lako<br />
porediti. S obzirom da je E uvek pozitivan broj, poređenje dva eksponenta se svodi na<br />
poređenje dva 8-bitni neoznačena cela <strong>brojeva</strong>. Dakle, opseg vrednosti polja E je 0 do 25<strong>5.</strong><br />
Pri tome, krajne vrednosti 0 i 255 imaju posebno značenje. Vrednost E=0 ukazuju na broj čija<br />
je vrednost 0 (“čista nula”); dok E=255 ukazuje na beskonačno veliku vrednost. Izuzimajući<br />
ova dva specijalna sučaja, normalni opseg eksponenta <strong>brojeva</strong> u jednostrukoj preciznosti je -<br />
126 do +127, što odgovara opsegu vrednosti u polju E od 1 do 254.<br />
Mantisa se predstavlja sa 23 bita. IEEE standard podrazumera normalizovanu mantisu,<br />
što znači da je bit najveće težine mantise uvek jednak 1. Zbog toga, ovaj bit može biti<br />
izostavljen iz zapisa mantise. Na taj način se efektivni broj bitava mantise povećava za jedan.<br />
Naime, ako je M binarna sekvenca u polju mantise, tada je stvarna vrednost mantise 1.M, što<br />
odgovara 24-bitnoj mantisi. Shodno tome, u formatu sa Sl. 5-33a moguće je predstaviti<br />
brojeve:<br />
Vrednost = ±1.M×2 E-127<br />
43
Dužina polja mantise od 23 bita omogućava predstavljanje <strong>brojeva</strong> sa preciznošću koja<br />
odgovara preciznosti od oko 7 decimalnih cifara. Opseg eksponenta, 2 -126 do 2 127 , približno<br />
odgovara opsegu 10 ±38 .<br />
Dvostruka tačnost<br />
Format za predstavljanje <strong>brojeva</strong> u pokretnom zarezu dvostruke tačnosti prikazan je na Sl.<br />
5-33b. Kao što se može videti, format dvostuke tačnosti koristi 64 bita, a u odnosu na<br />
jednostruku tačnost prošireni su i eksponent i mantisa. Time je pokriven daleko veći opseg i<br />
ostvarena veća preciznost <strong>brojeva</strong>. Polje za eksponent ima 11 bita i sadrži vrednost<br />
eksponenta izraženu u formatu “višak-1023”, tako da važi:<br />
eksponent = E – 1023<br />
Opseg za E je od 0 do 2047, pri čemu se, kao i kod jednostruke tačnosti, E=0 i E=2047<br />
koriste za predstavljanje vrednosti nula i beskonačno. Time je opseg eksponenta ograničen na<br />
od 1-1023 = -1022 do 2046 – 1023 = 1023.<br />
Mantisa ima 52 bita. Pošto se podrazumeva normalizovana mantisa, sadržaj ovog polja<br />
ukazuje na mantisu oblika 1.M. Dakle, vrednost broja u pokretnom zarezu koje je<br />
predstavljen u formatu dvostruke tačnosti iznosi:<br />
Vrednost = ±1.M×2 E-1023<br />
Format dvostruke tačnosti omogućava predstavljanje <strong>brojeva</strong> koji imaju preciznost od oko<br />
16 decimalnih cifara i opseg od oko 10 ±308 .<br />
Aritemtičke operacije nad brojevima u pokretnom zarezu su značajno složenije od<br />
operacija nad označenim celim brojevima. Problematika projektovanja aritmetičkih <strong>kola</strong> za<br />
rad sa brojevima u pokretnom zarezu neće biti razmatarana u ovoj knjizi.<br />
<strong>5.</strong>8.3 Binarno kodirani decimalni brojevi<br />
Digitalni sistemi najefikasnije manipulišu binarnim brojevima. Aritmetička <strong>kola</strong> za<br />
binarne brojeve su relativno jednostavna i brza. Međutim, ljudi su naviknuti da koriste<br />
decimalne brojeve. Kada postoji potreba da se u digitalni sistem unesu numerički podaci,<br />
čoveku je lakše da numeričke vrednosti unese u decimalnom obliku, na primer, preko<br />
decimalne tastature. Slično, kada digitalni sistem treba da saopšti neki numerički podatak,<br />
čovek očekuje da vidi decimalni broj, na primer, na displeju za prikaz decimalnih <strong>brojeva</strong>.<br />
Međutim, to znači da se ulazna i izlazna reprezentacija <strong>brojeva</strong> razliku od reprezentacije koja<br />
se koristi za interna izračunavanja. To dalje za sobom povlači potrebu da se obavi konverzija<br />
iz jednog u drugi oblik. U vremenu od pre nekoliko decenija, kada tehnologija proizvodnje<br />
digitalnih <strong>kola</strong> nije bila na nivou na kome je danas i kada <strong>kola</strong> kao što su mikrokontroleri ili<br />
FPGA čipovi nisu bila dostupna, konverzija iz decimalnog u binarni oblik zahtevala je<br />
ugradnju u sistem, za to vreme, složenih i skupih <strong>kola</strong>. Tipičan primer ovakvog uređaja je<br />
ručni kalkulator. Kako bi se problem ulazne i izlazne konverzije eliminisao ili barem ublažio,<br />
ne retko se koristio princip po kome su i interna izračunavanja unutar kalkulatora obavljana<br />
direktno nad decimalnim brojevima. Decimalni brojevi se mogu predstaviti unutar digitalnog<br />
sistema tako što će svaka decimalna cifra biti kodirana jednom specifičnom sekvencom<br />
bitova. Pošto postoji 10 decimalnih cifara, da bi se one kodirale neophodna su barem 4 bita.<br />
Na primer, možemo usvojiti da binarna sekvenca 0000 predstavlja decimalnu cifru 0, binarna<br />
sekvenca 0001 decimalnu cifru 1, sekvenca 0010 predstavlja cifru 2 i td. Ovakva način<br />
predstavljanja <strong>brojeva</strong> se zova binarno-kodirana decimalna (BCD) reprezentacija. Binarne<br />
sekvence koje zamenjuju decimalne brojeve zovu se binarno-kodirane decimalne cifre.<br />
Kodiranje decimalnih cifara<br />
44
U opštem slučaju, n-bitna sekvenca kod koje različite kombinacije bitova predstavljaju<br />
različite cifre, brojeve ili neku drugu informaciju ili podatke, zove se kod. Jedna konkretna nbitna<br />
kombinacija zove se kodna reč. Na primer, postoji ogroman broj načina kako se<br />
decimalnim ciframa mogu pridružiti četvorobitne sekvence. Svaki od ovih načina predstavlja<br />
jedan kod. U tabeli sa Sl. 5-34 navedene su četiri najčešće korišćena decimalna koda. BCD<br />
kod je verovatno najprirodniji decimalni kod, zato što su u ovom kodu decimalne cifre 0 do 9<br />
kodirane njihovim 4-bitnim neoznačenim binarnim reprezentacijama, 0000 do 1001. U BCD<br />
kodu kombinacije 1010 do 1111 su neiskorišćene. BCD kod je težinski kod sa težinama<br />
bitskih pozicija 8, 4, 2 i 1. Zato se ovaj kod zove još i kod ˝8421˝. Slično, kod ˝2421˝ je<br />
težinski decimalni kod sa težinama bitskih pozicija 2, 4, 2 i 1. Na primer, decimalna cifra 7 u<br />
ovom kodu se kodira sa 1101, zato što važi 7 = 1×2 + 1×4 + 0×2 + 1×1. Kod ˝2421˝ je<br />
takođe i auto-komplementarni kod, zato što komplement koda cifre A, takođe predstavlja<br />
kodnu reč i to cifre 9-A. U decimalnom brojnom sistemu cifra A’=9-A se zove komplement<br />
najveće cifre cifre A. Kod “višak 3” je takođe auto-komplementarni kod. Između koda “višak<br />
3” i koda BCD postoji jednostavna <strong>aritmetička</strong> relacija – kodna reč za datu cifru u kodu<br />
“višak 3” odgovara kodnoj reči u BCD kodu uvećanoj za (0011)2. Decimalni kodovi mogu<br />
imati i više od 4 bita. Na primer, bikvadratni kod koristi 7 bitova. Prva dva bita ukazuju da li<br />
je cifra iz opsega 0-4 ili 5-9, dok poslednjih 5 bitova ukazuje na jednu od 5 cifara u<br />
izabranom opsegu. Jedna potencijalna prednost kodova sa većim brojem bitova od minimalno<br />
potrebnog ogleda se u mogućnosti detekcije grešaka. Na primer, u bikvadratom kodu,<br />
promena vrednosti bilo kog bita u bilo kojoj kodnoj reči menja tu kodnu reč u binarnu<br />
kombinaciju koja ne odgovara ni jednoj drugoj kodnoj reči. Dakle, proverom ispravnosti<br />
kodnih reči možemo zaključiti da li je u prenosu ili obradi informacije kodirane u datom kodu<br />
došlo do greške. Bikvadrati kod od svih mogućih 128 7-bitnih kombinacija, za kodne reči<br />
koristi samo 10; sve ostale su pogrešne. Što je broj bitova veći to je veći i broj neiskorišćenih<br />
binarnih kombinacija, a time i mogućnost da eventualna greška ostane neprimećena manja.<br />
Konačno, kod “1-od-10” koristi čak 10 bita, tj. samo 10 od mogućih 1024 binarnih<br />
kombinacija. Svaka kodna reč u ovom kodu, sadrži samo jednu 1, a decimalna cifra je<br />
kodirana pozicijom jedinice.<br />
Decimalna cifra BCD (8421) 2421 Višak 3 Bikvadratni kod 1-od-10<br />
0 0000 0000 0011 0100001 1000000000<br />
1 0001 0001 0100 0100010 0100000000<br />
2 0010 0010 0101 0100100 0010000000<br />
3 0011 0011 0110 0101000 0001000000<br />
4 0100 0100 0111 0110000 0000100000<br />
5 0101 1011 1000 1000001 0000010000<br />
6 0110 1100 1001 1000010 0000001000<br />
7 0111 1101 1010 1000100 0000000100<br />
8 1000 1110 1011 1001000 0000000010<br />
9 1001 1111 1100 1010000 0000000001<br />
Nekorišćene binarne kombinacije:<br />
1010 0101 0000 0000000 0000000000<br />
1011 0110 0001 0000001 0000000011<br />
1100 0111 0010 0000010 0000000101<br />
1101 1000 1101 0000011 0000000110<br />
1110 1001 1110 0000100 0000000111<br />
1111 1010 1111 ... ...<br />
Sl. 5-34 Decimalni kodovi.<br />
45
Sabiranje BCD cifara<br />
Postupak sabiranja dve BCD cifre komplikuje činjenica da njihov zbir može biti veći od<br />
9, što zahteva naknadnu korekciju rezultata. Neka su X=x3x2x1x0 i Y=y3y2y1y0 dve BCD cifre i<br />
S=s3s2s1s0 BCD cifra njihovog zbira, S=X+Y. Očigledno, ako je X+Y≤9, tada se sabiranje<br />
BCD cifara svodi na sabiranje neoznačenih 4-bitnih <strong>brojeva</strong>. Ali, ako je X+Y>9, rezultat će<br />
zahtevati dve BCD cifre. Uz to, suma koju daje 4-bitni sabirač, interpretirana kao BCD cifra,<br />
može biti pogrešna.<br />
Postoje dva slučaja kada treba obaviti korekciju rezultata: (a) suma je veća od 9 i manja<br />
ili jednaka 15 (ne postoji izalazni prenos iz 4-bitnog sabirača) i (b) suma je veća od 15<br />
(postoji izlazni prenos iz 4-bitnog sabirača). Na Sl. 5-35 su ilustrovana ova dva slučaja.<br />
Sl. 5-35 Sabiranje BCD cifara.<br />
U prvom slučaju, 4-bitno sabiranje daje 7+5=12=Z. Da bi se dobio korektan BCD<br />
rezultat, neophodno je generisati S=2 i izlazni prenos 1. Korekcija koju treba izvršiti nad<br />
rezultatom binarnog sabiranja, nameće se na osnovu činjenice da se 4-bitno binarno sabiranje<br />
obavlja po modulu 16, dok se decimalno sabiranje obavlja po modulu 10. Znači, ako je<br />
rezultat veći od 9, korektna decimalna cifra se može dobiti dodavanjem broja 6 na rezultat<br />
binarnog sabiranja. Drugi primer sa slike, pokazuje šta se dešava ako je X+Y>1<strong>5.</strong> U ovom<br />
slučaju četiri bita najmanje težine vrednosti Z predstavljaju cifru 1, što je pogrešano.<br />
Međutim, sada izlazni prenos postoji, a njegova vrednost je 16. Ponovo, dodavanjem broja 6<br />
na sumu Z dobijamo korektan rezulta. Znači, izračunavanje koje je potrebno obaviti da bi se<br />
izračunao zbir dva BCD broja obuhvata sledeće aktivnosti:<br />
Z = X + Y<br />
Ako je Z≤9, tada S=Z i izlazni_prenos = 0<br />
Ako je Z>9, tada S=Z+6 i izlazni_prenos = 1<br />
Na Sl. 5-36 je prikazan blok dijagram jedno-bitnog BCD sabirača koji je zasnovan na<br />
prehodnom razmatranju. Prikazano rešenje koristi dva 4-bitna sabirača, jedan se koristi za<br />
inicijalno binarno sabiranje BCD cifara, a drugi za korekciju rezultata. Blok koji detektuje da<br />
li je Z>9 generiše izazni signal Korekcija ako je rezultat inicijalnog binarnog sabiranja veći<br />
od 9. Signal Korekcija upravlja multiplikserom, tako da kroz multiplekser prolazi vrednost 6,<br />
ako je potrebno obaviti korekciju; u suprotnom, ako korekcija nije potrebna, kroz<br />
multiplekser prolazi vrednost 0. Na taj način, na izlazu <strong>kola</strong> dobojamo S=Z+0, ako je<br />
Korekcija=0, odnosno S=Z+6 i izlazni_prenos cout=1, ako je Korekcija=1.<br />
46
VHDL opis BCD sabirača<br />
Sl. 5-36 Blok-dijagram jednobitnog BCD sabirača.<br />
Na Sl. 5-37 prikazan je VHDL kod jednobitnog BCD sabirača. Ulazi X i Y definisani su<br />
kao četvro-bitni brojevi. Izlaz za sumu, S, definisan je kao peto-bitni broj, kod koga se izlazni<br />
prenos javlja na poziciji S4, dok se suma generiše na bitovima S3-0. Rezultat binarnog<br />
sabiranja, Z, je takođe definisan kao peto-bitni broj. Kao što je ranije napomenuto, VHDL<br />
zahteva da barem jedan od operanada u aritmetičkoj operaciji ima isti broj bita kao i rezultat.<br />
Ovaj zahtev objašnjava zašto je u izrazu Z9. Ako je ovaj<br />
uslov ispunjen, naredba dodeljuje vrednost 1 signalu Korekcija; u suprotom, signal Korekcija<br />
dobija vrednost 0.<br />
LIBRARY IEEE;<br />
USE IEEE.STD_LOGIC_1164.ALL;<br />
USE IEEE.STD_LOGIC_UNSIGNED.ALL;<br />
ENTITY BCD IS<br />
PORT (X,Y : IN STD_LOGIC_VECTOR(3 DOWNTO 0);<br />
S : OUT STD_LOGIC_VECTOR(4 DOWNTO 0));<br />
END BCD;<br />
ARCHITECTURE Ponasanje OF BCD IS<br />
SIGNAL Z : STD_LOGIC_VECTOR(4 DOWNTO 0);<br />
SIGNAL Korekcija : STD_LOGIC;<br />
BEGIN<br />
Z
Korekcija 9 ELSE '0';<br />
S
Oduzimanje BCD <strong>brojeva</strong> može se ostvariti primenom koncepta komplementa osnove.<br />
Kao što za baratanje negativnim binarnim brojevima koristimo dvojični komplement, tako za<br />
baratanje negativnim decimalnim brojevima možemo koristiti reprezentaciju u komplementu<br />
cifre 10.<br />
<strong>5.</strong>9 ASCII karakter kod<br />
U prethodnim odeljcima ovog poglavlja upoznali smo se sa različitim načinima za<br />
predstavljanje numeričkih podataka kod digitalnih sistema. Međutim, digitalni sistemi ne<br />
moraju isključivo da manipulišu numeričkim podacima. Šta više, većina podataka koje<br />
obrađuju savremeni računari i nije numeričke prirode. Najčešće korišćeni tip nenumeričkih<br />
podataka je tekst. Tekst čini niz karaktera iz nekog karakter seta. U računaru se svaki<br />
karakter predstavlja određenom sekvencom bitova, shodno usvojenoj konvenciji, ili<br />
standardu.<br />
Najčešće korišćeni karakter kod je ASCII (American Standard Code for Information<br />
Interchange). ASCII kod je definisan tabelom sa slike. ASCII kod koristi 7-bitne sekvence za<br />
predstavljanje 128 različitih karaktera. Deset karaktera su decimalne cifre 0 do 9. Uočimo da<br />
kod svih 10 cifara tri viša bita uvek imaju istu vrednost, b6b5b4=011, a da se pojedinačne cifre<br />
idntifikuju nižim bitovima, b3-0. Velika i mala slova su kodirana na način koji olakšava<br />
sortiranje tekstualnih informacija. Numeričke vrednosti kodova za slova A do Z čine niz<br />
uzastopnih <strong>brojeva</strong>. Na taj način, sortiranje slova (ili reči) se postiže prostim aritmetičkim<br />
poređenjem kodnih reči koje predstavljaju slova.<br />
Slova abecede i brojevi jednim imenom se zovu alfanumerički karakteri. Osim<br />
alfanumeričkih karaktera, ASCII kod sadrži interpukcijske znake, kao što su ! i ?, često<br />
korišćene simbole, kao što su % i #, i skup upravljačkih karaktera.<br />
U računarskim sistemima, upravljački karakteri se koriste ze potrebe prenosa podataka<br />
između različitih uređaja, kao što su štampači i displeji, i za druge ne-tekstualne namene. Na<br />
primer, karakter označen u ASCII tabeli kao CR (Carriage Return) ukazuje da ispisivanje<br />
teksta na displeju ili štampaču treba nastaviti u novom redu.<br />
ASCII kod se prevashodno koristi za kodiranje tekstualnih informacija. Ovaj kod nije<br />
pogodan za reprezentaciju <strong>brojeva</strong> koji se kao operandi koriste u aritmetičkim operacijama.<br />
Ako ipak postoji potreba za tim, najbolje je najpre konvertovati ASCII-kodirane brojeve u<br />
binarnu reprezentaciju, pa tek onda primeniti aritmetičku operacije.<br />
ASCII standard koristi 7 bita za kodiranje karaktera. Međutim, u računarskim sistemima,<br />
prirodnija veličina je 8 bita ili jedan bajt. Postoje dva uobičajena načina kako se ASCII<br />
kodirani karakteri mogu proširiti na veličinu jednog bajta. Prvi način je postaviti osmi bit, b7,<br />
na 0. Drugi način je iskoristiti ovaj dodatni bit za indikaciju parnosti preostalih 7 bitova, tj.<br />
naznačiti da li je ukupan broj jedinica u 7-bitnom kodu paran ili neparan.<br />
Koncept parnosti se široko primenjuje kod digitalnih sistema za ispitivanje ispravnosti<br />
prenosa podataka. U toku prenosa digitalne informacije iz jedne tačke u neku drugu, moguće<br />
pomoću veza (žica) velike dužine, uvek postoji mogućnost da pojedini bitovi budu narušeni.<br />
Na primer, pod uticajem električnih smetnji ili nekog drugog poremećaja, može se desiti da<br />
predajnik pošalje bit čija je vrednost 1, a da prijemnik primi vrednost 0. Pretpostavimo da se<br />
informacija koja se prenosi sastoji iz niza podataka, a da svaki podatak čine n bita.<br />
Najjednostavniji mehanizam za proveru ispravnosti prenosa podrazumeva da se na predajnoj<br />
strani svakom podatku pridoda jedan bit, p, koji će ukazivati na parnost n-bitnog podatka.<br />
Postoje dva tipa parnosti. Kod parne-parnosti, vrednost bita p se određuje tako da ukupan<br />
broj jedinica u (n+1)-bitnoj sekvenci (n-bita podataka i jedan bit parnosti) bude paran. Kod<br />
49
neparne-parnosti, bit p se postavlja tako da ukupan broj jedinica bude neparan. Bit parnosti<br />
se prenosi zajedno sa podatkom, a na prijemnoj strani se određuje parnost primljene (n+1)bite<br />
sekvence i proverava da li je ona ispravna.<br />
Za generisanje i proveru parnosti mogu se koristiti XOR gejtovi. Na primer, bit parneparnosti<br />
4-bitnog podatka x3x2x1x0 određen je sledećom logičkom funkcijom:<br />
p= x3 ⊕ x2 ⊕ x1 ⊕ x0<br />
Na prijemnoj strani provera se obavlja uz pomoć funkcije:<br />
c = p ⊕ x3 ⊕ x2 ⊕ x1 ⊕ x0<br />
Ako je c=0, parnost primljenih bitova je ispravna. Ako je c=1, izvesno je da je došlo do<br />
greške u prenosu. Uočimo da uslov c=0 ne garantuje da je primljeni podatak ispravan. Ako<br />
su u toku prenosa dva ili bilo koji paran broj bitova promenili svoje vrednosti parnost neće<br />
biti promenjena i zbog toga greška u prenosu neće biti detektovana. Greška se detektuje samo<br />
ako je broj narušenih bitova neparan, tj. 1, 3, 5 i td.<br />
Atraktivnost tehnike parnosti leži u njenoj jednostavnosti. Treba napomenuti da osim<br />
tehnike parnosti, postoje brojne druge tehnike koje obezbeđuju mnogo pouzdanije<br />
mehanizme za proveru ispravnosti prenosa. Međutim, veća pouzdanost se postiže na račun<br />
povećanja broja bitova koji se pridodaju izvornom podatku.<br />
50