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