TDA143 – Programmerade System
Föreläsning 16 – Datorteknik Del 1 Jonas Duregård
Labbkomplettering
• Om du missat någon deadline kan du redovisa och få koder för tidigare labbar på något av de återstående labbpassen
• Kompletteringar utförs i mån av tid, det vill säga hjälp och redovisning av labb 4 prioriteras
• De flesta labbpass har haft fria handledare vid något tillfälle, men närmare deadline för labb 4 kan det ändras
• Redovisa så snart som möjligt (idag exempelvis)
Datorteknik
• Hur bygger man en dator? Hur kan elektriska signaler utföra beräkningar?
• Låg abstraktion!
• Först lite omkringliggande teori:
• Binära tal
• Boolesk logik
Boolesk logik
Vad är logik?
• Ett sätt att resonera om vad som är sant
• Det finns inte en logik utan flera olika logiska system
• Satslogik (Boolesk logik)
• Predikatlogik
• Första ordningens logik
• …
• De olika logikerna skiljer sig i vad som kan uttryckas och vilka sanningar som kan bevisas
• Notera att när jag kallar modellen i ett program för "logiken" så slarvar jag lite, det har inte direkt med formell logik att göra
Boolesk logik
• Boolesk logik är ett mycket enkelt logiskt system
• Består av två logiska värden: 0 och 1 (falskt och sant)
• Som datatypen boolean (0=false, 1=true)
• Vanliga operatorer är: och, eller, icke (&&, ||, !)
Notation: Kärt barn har (för) många namn
• Och (konjunktion): ∧ , · , && , a AND b
• Eller (disjunktion): ∨ , + , || , a OR b
• Icke (negation, invers): ¬, , ! , NOT
• För att orsaka minimal förvirring använder jag Java-operatorer:
&&, ||, !
Symbol Används av
·, +, Hårdvaruutvecklare
∧, ∨, ¬ De flesta matematiker/logiker
&&, ||, !, AND, OR, NOT Programmerare
Boolesk algebra och booleska funktioner
• Operatorerna och sanningsvärdena i boolesk logik bildar en algebra
• Vi kan skriva funktioner som , = ( && ) (! && ! )
• Oftast skippar vi "f(x,y)="-biten och betraktar varje uttryck med variabler som definition av en funktion
Funktionstabeller
• Varje funktion med N variabler har en egen funktionstabell
• Varje rad beräknas genom en av unik tilldelning av variablerna
• 2N rader
• Exakt som sanningstabeller i satslogik (fast 1/0 istället för sant/falskt)
• Alla operatorer i Boolesk algebra kan definieras genom funktionstabeller
• Alla satser i Boolesk algebra kan bevisas genom att jämföra kolumner i funktionstabeller
• Quiz: Hur många olika funktioner med två variabler finns det?
• Svar: 24 = 16 (Det finns alltså bara sexton olika Booleska operatorer)
0 1 0
1 0 1
‼
!
Bevis att ‼ =
Funktionstabeller för operatorer
• Varje operator kan definieras med en funktionstabell p q
0 0 0 1 1 0 1 1
p && q 0 0 0 1
p q 0 0 0 1 1 0 1 1
p || q 0 1 1 1
p 0 1
!p 1 0
Exakt som multiplikation Nästan som addition
Exempeluppgift: Bevisa De Morgans första lag
• Lagen säger att !(p && q) = !p || !q
("inte p och q" är detsamma som "inte p eller inte q"
p q 0 0 0 1 1 0 1 1
p && q 0 0 0 1
!(p && q) 1
1 1 0
!p 1 1 0 0
!q 1 0 1 0
!p || !q 1 1 1 0
Uteslutande eller (Exclusive or XOR)
• Logiskt eller är inkluderande, det innefattar fallet när båda operanderna är sanna
• XOR är som OR, fast exkluderande
• Mer som vi använder "antingen eller" i svenska p q
0 0 0 1 1 0 1 1
p || q 0 1 1 1
p q 0 0 0 1 1 0 1 1
p XOR q 0 1 1 0
I Java kan man få XOR genom p^q eller p!=q
Talsystem
Talsystem: Binära och decimala tal
• Vanligtvis räknar vi i det decimala talsystemet
• Har tio siffror (0-9)
• Datorer räknar binärt, två siffror: 0 och 1
• Varför tror ni vi människor gillar det decimala talsystemet?
• Förmodligen för att vi har tio fingrar
• Det finns ingen naturlig fördel med att ha just tio siffror
• Hade vi haft tolv fingrar hade alla räknat i ett duodecimalt talsystem och det skulle fungera precis lika bra (femmans gångertabell skulle vara lite svårare, sexans lite enklare)
Decimala talsystemet – bas tio
• Siffror: 0,1,2,3,4,5,6,7,8,9
• Från höger till vänster anges ental, tiotal, hundratal …
• Siffra N från höger (börjar på N=0) anger 10N.
• Exempel:
• I allmänhet har siffran s på position p (från 0 till höger) värdet s×10p
• Vi säger att det decimala talsystemet har basen 10
• Vi skriver 23410 för att visa att talet är decimalt (när det behöver förtydligas) 234 = 2×102 + 3×101 + 4×100
9601 = 9×103 + 6×102 + 3×101 + 4×100
Binära talsystemet – bas två
• Binära talsystemet har basen två, och siffrorna 0 och 1
• Från höger till vänster anges ental, tvåtal, fyrtal, åttatal, sextontal …
• Exempel
• I allmänhet har siffran s på position p (från 0 till höger) värdet s×2p
• Vad är det högsta talet som kan skrivas med 8 bitar?
• 28-1 = 255 (så det finns 256 olika 8-bitars tal, 0-255) 1012 = 1×22 + 0×21 + 1×20=510
11112 = 1×23 + 1×22 + 1×21 + 1×20=1510
Hexadecimala talsystemet
• Bas sexton, siffrorna 0-9,A,B,C,D,E,F
• Höger till vänster: ental, sextontal, 256-tal …
• Exempel
• Lätt att räkna om binärt-hexadecimalt, 4 binära siffror blir alltid en hexadecimal
• Exempel: E316 = 1110 00112
• Alla 8-bitars tal kan skrivas med 2 hex-siffror
10 0
1 2
16
10 0
1 16
316 0
160 256
16 0
16 10
16 1 0
A 1
47 15
32 16
15 16
2 F
2
= + +
=
× +
× +
×
=
= +
=
× +
×
=
bas 10 bas 2 bas 16
0 0000 0
1 0001 1
2 0010 2
3 0011 3
4 0100 4
5 0101 5
6 0110 6
7 0111 7
8 1000 8
9 1001 9
10 1010 A
11 1011 B
12 1100 C
13 1101 D
14 1110 E
15 1111 F
Bråktal i olika talsystem
• Bråktalsdelen efter decimalkomma är tiondel, hundradel, tusendel…
• Passar vår tidigare formel med potenser:
• Så vad är 0.0112 decimalt?
• Svar: 2-2+2-3 = 1/4 + 1/8 = 3/8
• I allmänhet (binära tal): Första siffran efter komma är halvtal, sedan fjärdedelstal, åttondel, sextondel …
100 / 5 10 / 4 3 20 10
5 10
4 10
3 10
2 45
,
23 = × 1 + × 0 + × −1 + × −2 = + + +
Addition i andra talbaser
• Fungerar precis som i decimal bas, med anpassning för fler/färre siffror
1 1 1
5 6 7 8
+ 7 5 3
6 4 3 1
1 1 1 1
1 0 1 1
+ 1 1 1
1 0 0 1 0
Humor!
Digitala system
Digitala system
• Digitala system opererar på digitala signaler
• Varje digital signal har ett logiskt värde 1 eller 0
• Hur man fysiskt representerar signalerna varierar. Exempel:
• 1 och 0 motsvarar +5V eller 0V spänning i en ledare
• 1 och 0 motsvarar positiv eller negativ magnetisk pol
• Systemets beteende kan beskrivas med boolesk logik
• Flera signaler sammantaget bildar binära tal
Digitala system
• Enkla digitala system realiserar boolska funktioner
• Nästa vecka ska vi kika närmare på hur det går till
• Konkret är det en elektronisk krets, med ett antal kontakter
• Varje 0 och 1 är spänning i en kontakt (till exempel 0V/5V)
u=x && y || !Z
x y z
u=x && y || !Z
1 0 1
0
u=x && y || !Z
1 1 1
1 u
Den enklaste riktigt användbara kretsen
U = X + Y
• Insignaler: Två N-bitars binära tal (2xN digitala signaler)
• Utsignaler: Ett N-bitars tal, summan av de två in-talen
• Tänk er 2x32 strömbrytare (för N=32) för att ställa in insignalerna och lysdioder för att visa resultatet
• Omedelbart när en strömbrytare slås om visas den nya summan
• Som addition av int i Java (0 till 232-1)
… X (xN-1…x1x0)
… Y (yN-1…y1y0)
… U (uN-1…u0)
Addition, exempel
U = X + Y
X (x3x2x1x0) Y (y3y2y1y0)
U (u3u2u1u0)
U = X + Y
0 1 0 1 1 0 0 1
1 1 1 0
X=0101=510
Y=1001=910 U=1110=1410
ALU (Aritmetisk logisk enhet)
• En ALU (Aritmetisk-logisk enhet) är en komponent som kan utföra många aritmetiska operationer (+-*/%…)
• Funktionen väljs genom att ställa in en väljarsignal (F)
• Här har F fyra bitar så ALUn har 24 = 16 möjliga operationer
• Exempel kan man ställa in den så
U=D+E eller U=D-E, genom att ändra F
• Nästan omedelbart när någon insignal ändras
ändras också utsignalerna U(8)
ALU F(4)
D(8) E(8)
Carry
Digitala system med minnen
• En minneskomponent
• Strömbrytare för att ställa in ett tal
• Ett minneselement som lagrar ett tal
• En adderar-krets beräknar ständigt summan av det inställda och lagrade talet
• När man trycker på en knapp skrivs det gamla minnesvärdet över med det uträknade
• Som en enkel miniräknare!
Minne
U = X + Y
Strömbrytare
Knapp Nuvarande minnesvärde
Uträknat nytt minnesvärde
(minnet ändras när knappen trycks ner)
En dator som ett digitalt system
• En dator är ett invecklat digitialt system
• Beräkningar utförs av ALU och resultat skrivs till minne
• En styrenhet läser in program från minnet och översätter till insignaler för de olika komponenterna i systemet
• En modern PC kan utföra flera miljarder beräkningar i sekunden
Förenklad bild av en processor (CPU) med
minne, ALU och styrenhet
Maskinkod
• Maskinkod är det mest primitiva programmeringsspråket
• Ett program är en följd av tal, som representerar olika operationer
• Av typen "addera två tal och skriv till minnet" eller "kontrollera om värdet på minnesadress A är är 0, fortsätt i så fall körningen från den här minnesadressen"
• När programmet körs finns en särskilt pekare som håller reda på vilken instruktion som ska köras härnäst
• Hela datorns funktion kan beskrivas som "läs in en instruktion, utför den, börja om" (Maskincykeln: fetch-decode-execute)
• Olika processorer har olika maskinkodsspråk
• Exekverbara filer (.exe på Windows) består av maskinkod
Kompilering
• Att skriva maskinkod direkt är extremt långsamt och svårt
• Koden fungerar bara för just den typ av processor den är skriven för
• Därför uppfanns högnivåspråk (som Java!)
• Att kompilera ett program innebär att man översätter till ett språk på lägre nivå, och oftast i slutändan ner till maskinkod
• Javas byte-kod är lite av ett specialfall...
Mikrokontroller
• En mikrokontroller är en liten dator
• Har inget operativsystem
• I/O Portar för att läsa av sensorer eller tända lysdioder eller slå på/av anslutana maskiner
• Finns överallt
• Programmeras oftast i programspråket C (som påminner en hel del om Java)
Portar för att läsa/skriva digitala signaler
void main() { while(true){
if (digitalRead(7))
digitalWrite(8,HIGH);
else
digitalWrite(8,LOW);
} }
C-kod (notera likheten med Java)
Arduino, en mikrokontroller avsedd för hobbyprojekt
Tentafrågor, datorteknik (del 1)
Datorteknik ingår i Del A (alternativfrågor), ni förväntas kunna:
• Omvandla mellan binärt, decimalt och hexadecimalt
• Vilka formler är ekvivalenta (samma funktion)
• Vilken formel hör till sanningstabellen (eller tvärt om)
• Vad innebär: Maskinkod, mikrokontroller, ALU, CPU ...
...
Formeln är en konjunktion (&&) Tänk "när är den 0 på grund av första/andra operanden"
Mind blowing
Två tänkvärdheter:
• 10*10=100 är sant i alla talsystem
• En enda operator NAND, negationen av och (p NAND q = !(p && q)) kan användas för att definiera ALLA andra booleska operationer
• !p = p NAND p
• p && q = (p NAND q) NAND (p NAND q)
• p || q = !(!p && !q) = (p NAND p) NAND (q NAND q)
Framöver
• Måndagens föreläsning är 15-17
• Onsdag nästa vecka är sista labbpasset
• Planera för att ha redovisat alla labbar innan det passet
• Fredag nästa vecka är en repetionsföreläsning
• Jag kommer gå igenom ett par tentauppgifter och sådant