Transcript pps
Digitaalaritmeetika
L16. Loogikaelementide pered. Standartsed kombinatoorsed ja mäluga elemendid.
L17. Digitaalaritmeetika. Aritmeetika operatsioonide realiseerimine.
© Peeter Ellervee I207 - Digitaalloogika ja süsteemid - L17 1
Kahendarvud
J.F. Wakerly “Digital Design: Principles and Practices” – 2.4-7, 5.9-10 D = d i ·2 i , i = n, …, p-1 101.001
2 = 1·4 + 0·2 + 1·1 + 0·0.5 + 0·0.25 + 1·0.125
= 5.125
10 Negatiivsed arvud?
Täiendkood (2’s complement): -A = (~A)+1 -23 10 = -10111 2 = (~10111 2 )+1 2 = 111 01001 2 Pöördkood (1’s complement): -A = (~A) -23 10 = -10111 2 = 111 01000 2 © Peeter Ellervee I207 - Digitaalloogika ja süsteemid - L17 2
Kahendarvud
Arvu summa tema pöördarvuga annab 0-i Täiendkood üks null: 00…0 -13 10 + 13 10 = 10011 2 + 01101 2 = 00000 2 Pöördkood kaks nulli: 00…0 ja 11…1 -13 10 + 13 10 = 10010 2 + 01101 2 = 11111 2 © Peeter Ellervee I207 - Digitaalloogika ja süsteemid - L17 3
Negatiivsed arvud
Täiendkood: -A = (~A)+1 -23 10 = -010111 = (~010111)+1 = 101001 teisendamiseks vaja invertoreid ja summaatorit (inkrement) Üks null → pole vaja normaliseerida Probleemid signaalitöötlemisel väikese tugevusega signaal +1: 00000001, 0: 00000000, -1: 11111111 palju lülitusi - suur võimsustarve © Peeter Ellervee I207 - Digitaalloogika ja süsteemid - L17 4
Negatiivsed arvud
Märgiga täisarv: A = ‘1’A -23 10 = -010111 = 110111 liitja/lahutaja vajab korrigeerivat loogikat Kaks nulli → aegajalt vaja normaliseerida Parem signaalitöötlemisel väikese tugevusega signaal +1: 00000001, 0: 00000000/10000000, -1: 10000001 vähe lülitusi – väiksem võimsustarve © Peeter Ellervee I207 - Digitaalloogika ja süsteemid - L17 5
Püsi- ja ujukomaarvud
Täisarvud: -2 n ... 2 n -1 (2 n -2 0 ) Püsikomaarvud: -2 n ... 2 n -2 -f Ujukomaarvud eksponent: täisarv mantiss: normaliseeritud püsikomaarv Põhitehted teostatavad täisarvude vahel koma asukoha korrigeerimine: püsikomaarvud – korrutamisel ja jagamisel ujukomaarvud – normaliseerimine © Peeter Ellervee I207 - Digitaalloogika ja süsteemid - L17 6
Täis- / püsikoma- / ujukomaarv
Täisarv
+ –
lihtsad operatsioonid puudub murdosa Püsikomaarv
+ –
lihtsad liitmine ja lahutamine normaliseerimine vajalik korrutamiseks ja jagamiseks Ujukomaarv
+ –
paindlik vahemik normaliseerimine vajalik © Peeter Ellervee I207 - Digitaalloogika ja süsteemid - L17 7
Täis- / püsikoma- / ujukomaarv
Püsikomaarvud – operatsioonid n bitti, m kohta pärast koma (2 n-m -2 -m ) ≈ N/2 m 0.625 = 1/2 + 1/8 = 0000.10100000 = 160 / 256 Liitmine & lahutamine a+b = (A/2 m )+(B/2 m ) = (A+B)/2 m – OK Korrutamine a*b = (A/2 m )*(B/2 m ) = (A*B)/2 2m – “liiga väike” n & n bitti → 2n bitti → m bitti sabast maha...
Jagamine a*b = (A/2 m )/(B/2 m ) = (A/B)/2 0 – “liiga suur” © Peeter Ellervee I207 - Digitaalloogika ja süsteemid - L17 8
Täis- / püsikoma- / ujukomaarv
Ujukomaarvud – operatsioonid märk
1
; eksponent
k
±(N/2 m )*2 K ; 1 > N ja mantiss
m
bitti 0.5 ja 2 k-1 > K -2 k-1 1.5 = 0.75*2 1 = 0|0001|11000000 Liitmine & lahutamine a+b = (A*2 AE )+(B*2 BE ) = (A*2 AE )+(B*2 AE-x ) = (A+B/2 x )*2 AE • AE > BE (e. AE=BE+x) ja 1 > mantiss > 0 • eel ja järelkorrektsioonid võivad olla vajalikud! Korrutamine & jagamine a*b = (A*2 AE )*(B*2 BE ) = (A*B)*2 AE+BE Normaliseerimine enne/pärast tehteid © Peeter Ellervee I207 - Digitaalloogika ja süsteemid - L17 9
Täis- / püsikoma- / ujukomaarv
Tarkvara: 16 või 32-bitised täisarvud?
protsessori, siinide ja mälude arhitektuurid kompilaatorid (optimeerimised) 16 bitti
+ +
väiksem mäluvajadus kiirem edastus põhimälust vahemälusse
– –
vajalik võib olla pakkimine suhteline liiasus suvapöördustel 32 bitti
+ –
andmed vastavad enamasti protsessori sõnale infomahu raiskamine väikeste väärtuste korral siini koormus!
© Peeter Ellervee I207 - Digitaalloogika ja süsteemid - L17 10
Täis- / püsikoma- / ujukomaarv
Riistvara: täis-, püsikoma- või ujukomaarvud?
täisarv – 1+15 bitti ≈ 32000 kuni +32000, täpsus 1 püsikomaarv – 1+5+10 bitti ≈ 32 kuni +32, täpsus ~0.001 (~0.03%) normaliseerimine == nihutamine ujukomaarv – 1+5+10 bitti ≈ 64000 kuni +64000, täpsus ~0.1% normaliseerimine == analüüs + nihutamine © Peeter Ellervee I207 - Digitaalloogika ja süsteemid - L17 11
Liitmine ja lahutamine
Liitmine
0011000. ülekanne 13 00001101 + 24 + 00011000 37 00100101 tulemus
Lahutamine
1110000. Laenamine 1 13 00001101 00001101 00001101 - 24 - 00011000 11101000 11100111 -11 11110101 tulemus 11110101 11110101 [ A - B ] [ A + -B ] [A+~B+1]
© Peeter Ellervee I207 - Digitaalloogika ja süsteemid - L17 12
Ületäitumine?
Täiendkood 8 bitti: 128…+127 125+5=? [130]
125 01111101 + 5 00000101 [130] 10000010 == -126
Arvude skaala
-1 11111111 ........
-128 10000000 +127 01111111 ........
0 00000000
© Peeter Ellervee Ekstra märgibitt 00 või 11 – OK
75 0 01001011 + 15 0 00001111 [90] 0 01011010 125 0 01111101 + 5 0 00000101 [130] 01 0000010 -75 1 10110101 + -15 1 11110001 [-90] 1 10100110 -125 1 10000011 + -5 1 11111011 [-130] 10 1111110
I207 - Digitaalloogika ja süsteemid - L17 13
Liitmine ja lahutamine
A B O = A B = A + B’ +1 C out + O 1 A B n O = n ? (A - B) : (A + B) C out + O © Peeter Ellervee I207 - Digitaalloogika ja süsteemid - L17 14
Liitmine ja lahutamine
Poolsummaator (c i ,o i ) = a i o i = a i b i + b i ; c i = a i · b i a i b i a i b i c i o i
a + b | c o -------+---- 0 + 0 | 0 0 0 + 1 | 0 1 1 + 0 | 0 1 1 + 1 | 1 0
Konkreetsed elemendid sõltuvad tehnoloogiast © Peeter Ellervee I207 - Digitaalloogika ja süsteemid - L17 15
Liitmine ja lahutamine
Täissummaator (c i ,o i ) = a i o c i i = a = a i i + b i + c i-1 · b i b i + a i c i-1 ; · c i-1 + b i kaks poolsummaatorit · c i-1 a i b i c i-1 © Peeter Ellervee + + c o i i
a + b + c | c o -----------+---- 0 + 0 + 0 | 0 0 0 + 0 + 1 | 0 1 0 + 1 + 0 | 0 1 0 + 1 + 1 | 1 0 1 + 0 + 0 | 0 1 1 + 0 + 1 | 1 0 1 + 1 + 0 | 1 0 1 + 1 + 1 | 1 1
I207 - Digitaalloogika ja süsteemid - L17 16
Summaatorite arhitektuurid
ripple-carry ülekande levimine aeglane A3 B3 A2 B2 A1 B1 A0 B0 © Peeter Ellervee a1 b1 c0 c1 o0 a1 b1 c0 c1 o0 a1 b1 c0 c1 o0 I207 - Digitaalloogika ja süsteemid - L17 a1 b1 c0 c1 o0 C3 O3 O2 O1 O0 17
Summaatorite arhitektuurid
Ülekande kiirendamine?
16 16 16 © Peeter Ellervee I207 - Digitaalloogika ja süsteemid - L17 18
Summaatorite arhitektuurid
carry-lookahead ülekanne genereeritakse, kui mõlemad liidetavad bitid on ühed – g i = a i · b i ülekanne levib, kui vähemalt üks liidetavatest bittidest on üks – p i = a i + b i ülekanne – c i = g i + p i · c i-1 iga järgu jaoks grupis (tavaliselt 4 bitti), leitakse g i , p i ja c i loogikaskeemiga kolmetasemelise ; genereerimine/levitamine ka gruppide vahel © Peeter Ellervee I207 - Digitaalloogika ja süsteemid - L17 19
Summaatorite arhitektuurid
carry-select spekulatiivne arvutamine iga grupi jaoks leitakse tulemus nii ülekandega 0 kui ka 1 tulemus valitakse siis, kui tegelik ülekanne saabub (st. saab valmis) A[4:7] B[4:7] A[4:7] B[4:7] O0[4:7] O1[4:7] C0[7] C1[7] ‘0’ ‘1’ C[3] C0[7] O0[4:7] C1[7] O1[4:7] O[4:7] C[7] C[3] © Peeter Ellervee I207 - Digitaalloogika ja süsteemid - L17 20
Summaatorite arhitektuurid
ripple-carry – väikseim, aeglaseim carry-lookahead & carry-select – suurimad, kiireimad suurus ja kiirus sõltuvad plokkide suurustest ja loomulikult tehnoloogiast Computer Arithmetic Algorithms Simulator http://www.ecs.umass.edu/ece/koren/arith/simulator/ © Peeter Ellervee I207 - Digitaalloogika ja süsteemid - L17 21
© Peeter Ellervee I207 - Digitaalloogika ja süsteemid - L17 22
© Peeter Ellervee I207 - Digitaalloogika ja süsteemid - L17 23
Loendurid
Register + summaator summaator integreeritud registrisse automaat – funktsioonide minimeerimine 1 T C Q 1 T C Q 1 + RG © Peeter Ellervee 1 T C Q I207 - Digitaalloogika ja süsteemid - L17 T C Q 24
Korrutamine
J.F. Wakerly “Digital Design: Principles and Practices” - 2.8-9, 5.11
2-nd arvude korrutamine analoogne 10-nd arvude korrutamisele
13 * 24 00001101 * 00011000 ------ ------------------ 52 00001101...
26 00001101 ------ ------------------ 312 000100111000
Liitmine ja nihutamine Kõik arhitektuurid põhinevad sellel algoritmil © Peeter Ellervee I207 - Digitaalloogika ja süsteemid - L17 25
Korrutite arhitektuurid
Paralleelkorrutid maatrikskorruti AND tehe ja täissummaator konveierkorruti – registrid maatriksis © Peeter Ellervee a 0 ·b 3 a 3 ·b 0 a 0 ·b 2 a 2 ·b 0 a 0 ·b 1 a 1 ·b 0 a 0 ·b 0 a 1 ·b 2 + + a 1 ·b 1 + + o 2 0 + o 1 0 I207 - Digitaalloogika ja süsteemid - L17 o 0 26
© Peeter Ellervee I207 - Digitaalloogika ja süsteemid - L17 27
Korrutite arhitektuurid
Konveierkorruti – registrid maatriksis © Peeter Ellervee I207 - Digitaalloogika ja süsteemid - L17 28
Korrutite arhitektuurid
Järjestikkorrutid ühe või enama biti kaupa juhtprogramm kiirendamine täiendava analüüsi abil aktiivsete bittide arv kahe biti kaupa (radix-4) … + [0,1,2,3]*a – 3*a = 4*a - a 32-bitine korrutamine 16-bitiste korrutitega (a H *2 16 +a L ) * (b H *2 16 +b L ) = a H *b H *2 32 + a H *b L *2 16 + a L *b H *2 16 + a L *b L © Peeter Ellervee I207 - Digitaalloogika ja süsteemid - L17 29
Korrutite arhitektuurid
Ühe biti kaupa
00011000 * 00001101 ------------------ 1. 00000000 2. 00000000.
3. 00000000..
4. 00001101...
5. 00001101....
6. 00000000.....
7. 00000000......
8. 00000000.......
------------------ 000000100111000
© Peeter Ellervee summaator nihutaja register tulemuse nihutamine operandi nihutamine kontroller I207 - Digitaalloogika ja süsteemid - L17 30
Korrutite arhitektuurid
Ühe biti kaupa b>>1 b 0 ==1 ? o H +=a o>>1 … seni kuni b>0 tulemus: o Ka teistsugused arhitektuurid on võimalikud + a o © Peeter Ellervee I207 - Digitaalloogika ja süsteemid - L17 b b 0 FSM load shift 31
Korrutite arhitektuurid
Kahe biti kaupa
00011000 * 00001101 ------------------ 1. 00000000 00011000 == * 0 2. 00011010.. 00011000 == * 2 3. 00001101.... 00011000 == * 1 4. 00000000...... 00011000 == * 0 ------------------ 00000100111000
… + [0,1,2,3]*a – 3*a = 4*a - a “täiendav” 1 ühes teguris © Peeter Ellervee I207 - Digitaalloogika ja süsteemid - L17 32
Korrutite arhitektuurid
Kahe biti kaupa [NB! Nihutamised!] … + [0,1,2,3]*a – 3*b = 4*a - a samm, kui eelmine bitipaar ei olnud ‘11’ b 10 =00 ? → ei midagi b 10 =01 ? → o+=a b 10 =10 ? → o+=2*a b 10 =11 ? → o-=a [ o+=(a<<1) ] [ ja jätame meelde ] samm, kui eelmine bitipaar oli ‘11’ b 10 =00 ? → o+=a b 10 =01 ? → o+=2*a b 10 =10 ? → o-=a b 10 =11 ? → ei midagi [ 4-1==3 ] [ 2==1+1 ] [ 3==2+1, jälle meelde ] [ 4==3+1, jälle meelde ] © Peeter Ellervee I207 - Digitaalloogika ja süsteemid - L17 33
Jagamine
2-nd arvude jagamine analoogne 10-nd arvude jagamisele
312 / 13 = 24 0100111000 / 01101 = 011000 26 01101 -- --------- 52 01101 52 01101 === ==========
Lahutamine, kontroll ja nihutamine Kõik arhitektuurid põhinevad sellel algoritmil © Peeter Ellervee I207 - Digitaalloogika ja süsteemid - L17 34
Jagamine
Sammud normaliseerimine jagaja nihutamine jagatava suhtes lahutamine kontroll kas jääk on ikka veel positiivne salvestamine nihutamine Võimalikud variandid jagatav
vahejääk
jagaja bitt jagatisest
inverteeritud märgibitt [ >= 0 ? ]
mux vahejääk © Peeter Ellervee I207 - Digitaalloogika ja süsteemid - L17 35
Korrutamine / Jagamine
Korrutamine konstandiga 3*x = 2*x + x 2*x – nihutamine ühe järgu võrra vasakule nn. shift-add korrutid Jagamine konstandiga y/2 = 0.5*y 0.5*y – nihutamine ühe järgu võrra paremale ümardamine? – summaator negatiivseid arve peab korrigeerima © Peeter Ellervee I207 - Digitaalloogika ja süsteemid - L17 36