Hur implementera algoritmerna på maskinnivå - datorns byggstenar Binära tal Boolesk logik grindar och kretsar A A extern representation intern representation minnet i datorn extern representation 1000001 Binärt talsystem är ett talsystem som har talbasen 2 och siffrorna 0 och 1. Det binära talsystemet är i princip lika lätt att använda som det decimala; grundidén är detsamma, men basen är 2 i stället för 10: Introduktion till Datateknik/cs5, A. Soini 1
binärt decimalt 0 0 1 1 10 2 11 3 100 4 101 5 110 6 111 7 1000 8 1001 9 1010 10 1011 11 1100 12 1101 13 1110 14 1111 15 Konstruktion: 31 10 = 3 * 10 1 + 1 * 10 0 11111 2 = 1 * 2 4 + 1 * 2 3 + 1 * 2 2 + 1 * 2 1 + 1 * 2 0 = 16 + 8 + 4 + 2 + 1 = 31 10 Konvertering: 31 10 = x 2? Dividera med 2, notera resten! Introduktion till Datateknik/cs5, A. Soini 2
division kvoten resten 31 div 2 15 1 15 div 2 7 1 7 div 2 3 1 3 div 2 1 1 1 div 2 0 1 Ex. 2.: 42 10 = x 2? division kvoten resten 42 div 2 21 0 21 div 2 10 1 10 div 2 5 0 5 div 2 2 1 2 div 2 1 0 1 div 2 0 1 Resultatet blir 101010 Kontroll: 1 * 2 5 + 0 * 2 4 + 1 * 2 3 + 0 * 2 2 + 1 * 2 1 + 0 * 2 0 = 32 + 0 + 8 + 0 + 2 + 0 = 42 10 Algoritmen för att konvertera en decimaldel är likadan, men nu multiplicerar man med två i stället för att dividera med två och noterar heltalsdelen. Positionerna efter s.k. radixpunkten motsvarar 2-1, 2-2, 2-3,... dvs. 1/2, 1/4, 1/8.... Vikten på positionen halveras i stället för att dubbleras. Att dividera med 1/2 är ju samma som att multiplicera med 2, därav ändringen i algoritmen. Ex. 5.25 10 = 101.01 2. 5 blir 101. 0.25 konverterar vi så här: 2 * 0.25 = 0.5. Skriv 0. 2 * 0.5 = 1.0. Skriv 1. Resultatet blev.01 (här skrivs bitarna efter radixpunkten i den ordning vi räknar ut dem - alla tal ger ju inte ens jämna resultat). Slutresultatet är alltså 101.01. Introduktion till Datateknik/cs5, A. Soini 3
Aritmetik med binära tal (operationerna utförs helt normalt): 1 11 + 1 10 -------- 1001 3 + 6 = 9 1 10 100 /////1-11 --------- 110 9-3 = 6 110 11 --------- 1110 110 ---------- 10010 3 6 = 18 10 11 110 6 / 3 = 2 11 ----- 0 0 0 ------- 0 Introduktion till Datateknik/cs5, A. Soini 4
För att kunna representera dessa ettor och nollor behöver vi binära lagringsmedier. Dylika bör uppfylla följande villkor: Ha två stabila energitillstånd som ska vara separerade av en kraftig energibarriär Tillståndet skall kunna avläsas utan att rubbas, och tillståndet skall kunna ändras. Ex. magnetiska kärnor, transistorer in (collector) bas (kontroll) vippan transistor ut (emitter) power supply (+5 v) 1 vippan stängs ON-tillstånd, binärt 1 0 5 mätinstrument Introduktion till Datateknik/cs5, A. Soini 5
power supply (+5 v) 0 vippan öppen OFF-tillstånd, binärt 0 0 5 mätinstrument Viktig terminologi: 0 eller 1 kallar vi för en bit. 8 bittar = 1 byte. enhet Hur många byte? Motsvarande mängd text Byte 2 0 byte = 1 byte ett tecken Kilobyte (KB) 2 10 byte = 1.024 byte en sida text Megabyte (MB) 2 20 byte = 1.048.578 byte två tre romaner Gigabyte (GB) 2 30 byte = 1.073.741.824 byte privatbibliotek Terabyte (TB) 2 40 byte = 1.099.511.627.776 byte universitetsbibliotek Petabyte (PB) 2 50 byte = 1.125.899.906.842.624 byte alla bibliotek i USA (Källa: Schneider & Gersting) Introduktion till Datateknik/cs5, A. Soini 6
Boolesk logik - tvåvärdeslogik med 0/1, false/true I boolesk logik arbetar vi enbart med två värden, true (T) och false (F), sant och falskt, 1 och 0. Ett booleskt uttryck är ett uttryck som endast kan anta någotdera av värdena T eller F. Booleska uttryck kan kombineras till större uttryck med de booleska operatorerna NOT, AND, OR. Resultatet av en boolesk operation kan uttryckas med en sanningstabell. Introduktion till Datateknik/cs5, A. Soini 7
NOT A (negation) (-A, A, ~A, A) A -A 0 1 1 0 Som du ser, kastar negationen om sanningsvärdet på inputen/påståendet A. A AND B (konjunktion) (A & B, A B, A B, AB) A B A & B 0 0 0 0 1 0 1 0 0 1 1 1 A och B blir sant endast när både A är sant och B är sant. A OR B (inklusiv disjunktion) (A B, A + B) A B A V B 0 0 0 0 1 1 1 0 1 1 1 1 A eller B blir falskt endast när både A är falskt och B är falskt. Introduktion till Datateknik/cs5, A. Soini 8
Grindar (gates) En grind är en elektronisk entitet som transformerar ett antal binära inputvärden till ett outputvärde. De tre grundläggande grindarna motsvarar de tre booleska operatorerna. AND-grind: A B A & B A B A & B 0 0 0 0 1 0 1 0 0 1 1 1 OR-grind: A B A V B A B A V B 0 0 0 0 1 1 1 0 1 1 1 1 Introduktion till Datateknik/cs5, A. Soini 9
NOT-grind: A -A (Egentligen ska bollen efter triangeln vara ofärgad, men det lyckas inte med detta ritprogram...) A -A 0 1 1 0 NOT - gränd: power supply (+5 v) resistor output input roskis Här har vi output bakom en resistor. Om input är 0 (som i bilden ovan), övervinns resistorn och den registrerade outputen blir 1. Om input är 1, stängs vippan, och basströmmen far direkt till roskisen. Den registrerade inputen bakom resistorn blir 0. Introduktion till Datateknik/cs5, A. Soini 10
AND-grind: A B A & B A B A & B 0 0 0 0 1 0 1 0 0 1 1 1 power supply input-1 input-2 output Här är båda inputs 0, så vipporna är öppna och outputen blir 0. Bara i det fallet att båda inputs blir 1, stängs båda vipporna, strömmen flyter genom och den registrerade outputen blir 1. Introduktion till Datateknik/cs5, A. Soini 11
OR-grind: A B A V B A B A V B 0 0 0 0 1 1 1 0 1 1 1 1 power supply input-1 input-2 output I bilden är båda inputs 0, så vipporna är öppna och den registrerade outputen blir 0. Så fort en av de parallella inputs blir 1, strängs vippan ifråga, och strömmen kommer genom, outputen registreras som 1. Introduktion till Datateknik/cs5, A. Soini 12
Kretskonstruktion En krets är en samling grindar, som transformerar en mängd av binära inputvärden till en annan mängd av outputvärden, och där outputvärdena entydigt bestäms av den aktuella kombinationen av inputvärden. input-1 input-2 input-3... input-m m inputs Krets C output-1 output-2 output-3... output-n n outputs Exempel: Tänk på hur kretsen fungerar (vad outputs c och d blir) för olika inputs a och b! a c d b Introduktion till Datateknik/cs5, A. Soini 13
a 1 1 1 c b 0 1 1 1 0 d En algoritm för konstruktion av kretsar: Det finns ett helt automatiskt sätt att, givet det önskade beteendet för en krets, konstruera den. (Kretsen blir sällan optimal, så rekommenderas det att använda lite logik och matematik i stället för eller efter automatiken...) Summan av produkterna -algoritmen: 1. Konstruera en sanningstabell för kretsens önskade beteende (sätt med alla kombinationerna för inputs, 2 n för n inputs, och en separat kolumn för varje output. Varje output betraktas sedan separat. 2. Betrakta de kombinationer som ger en 1 i den aktuella output-kolumnen (resultatkolumnen), dvs. varje rad som gör uttrycket sant. Konstruera ett deluttryck för varje sådan rad med AND- och NOTgrindar. 3. Kombinera dessa deluttryck med OR-grindar. 4. Rita upp det motsvarande kretsdiagrammet (gärna optimera, om det går!). Introduktion till Datateknik/cs5, A. Soini 14
Inputs Outputs a b c output-1 output-2 0 0 0 0 1 0 0 1 0 0 0 1 0 1 1 0 1 1 0 1 1 0 0 0 0 1 0 1 0 0 1 1 0 1 1 1 1 1 0 0 För 3 st. inputs får vi 2 3 rader i tabellen, dvs. 8 olika kombinationer av sanningsvärden. Logikerna kallar dessa för möjliga världar. Det lönar sig att ordna dessa som binära tal, dvs. 000, 001, 010, 011,..., även om ordningen ur logisk synpunkt inte spelar någon roll. Med tanke på samarbete och korrigering rekommenderas dock detta förfarande!!! De önskade output-kolumnerna ges då av uppdragsgivaren - vår uppgift är att se när den önskade outputen ska vara sann (1), och konstruera ett logiskt uttryck som beskriver just denna situation. Ex. output-1 ovan: Vi har en 1 på tredje och sjunde raden, dvs. kombinationerna 010 och 110. Detta ger oss uttrycken -a & b & -c respektive a & b & -c. Nu ska dessa kombineras med OR emellan: -a & b & -c V a & b & -c Man får använda parenteser för att klargöra uttrycket: (-a & b & -c) V (a & b & -c). Detta är dock frivilligt; operatorprioriteten (först NOT, sedan AND, sist OR) tar hand om den rätta tolkningen. Jämför med unärt - som negation, multiplikation, addition. Om vi nu ritar en bild för denna formel, får vi följande krets: Introduktion till Datateknik/cs5, A. Soini 15
Exempelkrets för output-1 (direkt enligt algoritmen): a -a -a & b -a & b & -c b c -c b -c out-1 a a & b -c a & b & -c b Som du ser, finns det en hel del att rita här. Och detta var bara output-1 - output-2 kan du rita som egen övning. Men - om vi lite vidare analyserar resultatformeln -a & b & -c V a & b & -c... så ser vi att b och -c krävs i båda alternativen. a:s värde däremot spelar ingen roll. Vi kan alltså reducera formeln till b & -c. Att detta är korrekt går enkelt att visa med en sanningstabell - om resultatkolumnen för båda uttrycken blir identiska, så är uttrycken ekvivalenta. (Detta går också att bevisa rent matematiskt, men det tas upp på andra kurser. Idén är följande: (-a & b) V (a & b) = b & (-a V a) = b & T = b.) Inputs Outputs a b c (-a & b & -c) V (a & b & -c) b & -c 0 0 0 0 0 0 0 1 0 0 0 1 0 1 1 0 1 1 0 0 1 0 0 0 0 1 0 1 0 0 1 1 0 1 1 1 1 1 0 0 Introduktion till Datateknik/cs5, A. Soini 16
Den motsvarande kretsen blir också MYCKET enklare att rita: a oanvänt b output-1 c En annan vink: om du har ex. 6 rader med 1 och bara 2 som ger 0, lönar det sig att konstruera ett uttryck för den situationen som producerar dessa 0:or - och sedan negera det! Resultatet blir då det uttryck som gör formeln sann (om du har räknat rätt...) EN CE-krets (Compare for Equality) - är bitarna a och b lika eller olika? a b output med kommentarer 0 0 1 fall 1 - samma bitar (0) 0 1 0 1 0 0 1 1 1 fall 2 - samma bitar (1) 1-CE krets a b Output Introduktion till Datateknik/cs5, A. Soini 17
För att jämföra två strängar bestående av n st bitar, har vi följande krets: a1 b1 1-CE a2 b2 1-CE a3 b3 1-CE a4 b4 1-CE...... an bn 1-CE output Introduktion till Datateknik/cs5, A. Soini 18
1-ADD - en krets för addition (av två binära bitar) inputs: outputs: a[i] b[i] c[i] 1-ADD s[i] (summasiffran) c[i-1] (nästa carry - minnessiffran) inputs outputs a[i] b[i] c[i] s[i] c[i-1] 0 0 0 0 0 0 0 1 1 0 0 1 0 1 0 0 1 1 0 1 1 0 0 1 0 1 0 1 0 1 1 1 0 0 1 1 1 1 1 1 Vi betraktar först bara den första outputen, s[i]: inputs outputs a[i] b[i] c[i] s[i] c[i-1] 0 0 0 0 0 0 0 1 1 0 0 1 0 1 0 0 1 1 0 1 1 0 0 1 0 1 0 1 0 1 1 1 0 0 1 1 1 1 1 1 Introduktion till Datateknik/cs5, A. Soini 19
Raderna 2, 3, 5 och 8 ger en 1 i dess resultatkolumn. Vi ska alltså konstruera ett uttryck för alla dessa fyra rader (med NOT och AND), och sedan kombinera dessa fyra uttryck med OR: -a & -b & c V -a & b & -c V a & -b & -c V a & b & c dvs. NOT a AND NOT b AND c OR NOT a AND b AND NOT c OR a AND NOT b AND NOT c OR a AND b AND c... vilket ger oss följande krets: a[i] fall 1: -a & -b & c b[i] c[i] -a -c fall 2: -a & b & -c b s[i] a fall 3: a & -b & -c b a c fall 4: a & b & c Introduktion till Datateknik/cs5, A. Soini 20
a -a b -b c -c 1-ADD summa s[i] carry c[i-1] inputs: a[i] b[i] c[i] Introduktion till Datateknik/cs5, A. Soini 21
Hur ska dessa 1-ADD-kretsarna kombineras för att addera n-bitar långa binära heltal (med samma princip som i algoritmen i början av kursen)? a[1]a[2]a[3]... a[n] + b[1]b[2]b[3]... b[n] s[0]s[1]s[2]s[3]... s[n] n-bit inputvärde b n-bit inputvärde a b 1 b 2 b 3... b n-1 b n a 1 a 2 a 3... a n-1 a n c 0 1-ADD 1-ADD 1-ADD c 1-ADD 1 c c 2...... c n-2 n-1 0 (init. carry) s 0 s 1 s 2... s n-1 s n (n+1)-bit outputvärde s Introduktion till Datateknik/cs5, A. Soini 22
Kontrollkretsar: multiplexor (MUX) och avkodare (decoder) 0 1 2 n inputlinjer 2 MUX 1 (en enda!) outputlinje 2 n -1 n selektorlinjer Exempel: är det värde a eller b som kopieras till outputen? inputlinje 0 a output inputlinje 1 b AND nr 1 selektorlinje AND nr 2 Introduktion till Datateknik/cs5, A. Soini 23
inputlinje-0 a a AND 1 = a inputlinje-1 b 0 1 AND nr 1 a OR 0 = a 0 selektorlinje : 0 AND nr 2 b AND 0 = 0 Väljer vi selektorvärde 0, så blir resultatet efter AND-nr-2 lika med 0. Denna 0 går som input till OR, vars output då enbart bestäms av resultatet från AND-nr-1, dvs. resultatet beror på inputlinje-0. Om a = 1, får vi 1 som output. Om a = 0, får vi 0 som output. Värdet på inputlinje-0 kopieras alltså som output. inputlinje-0 a a AND 0 = 0 inputlinje-1 b 1 0 AND nr 1 0 OR b = b AND nr 2 b AND 1 = b selektorlinje: 1 Väljer vi selektorvärde 1, så omvandlar NOT-grinden vid inputlinje-0 detta till 0. Denna 0 går till AND-nr-1, vars resultat således blir 0. Nu är det inputlinje 1 vars värde blir avgörande; det kopieras som output. Introduktion till Datateknik/cs5, A. Soini 24
Avkodare (decoder): n inputlinjer 0 1 2 avkodarkrets 0 1 2 2 n outputlinjer n-1 2 n -1 Introduktion till Datateknik/cs5, A. Soini 25