22 April 2015IS1200 Datorteknik, föreläsning 11 IS1200 Datorteknik Föreläsning 1 Introduktion
22 April 2015IS1200 Datorteknik, föreläsning 12 Välkommen till IS1200 Datorteknik ”Hur datorer fungerar” Kursens hemsida finns utpekad från: adress till lärare: Kursansvarig: Johan Wennlund
22 April 2015IS1200 Datorteknik, föreläsning 13 IS1200 Datorteknik Föreläsningar, 10 st (2x45min) Övningar, 10 st (2x45min) Laborationer, 6 st 3 st a’ 4 tim i lablokal, 2 elever per grupp 3 st redovisas muntligt ~50 min/2 elever Tentamen, (5 tim) 6 uppgifter a’ 10p, 30p ger G Kurs-anmälan vid Föreläsning 1 (dvs nu!)
22 April 2015IS1200 Datorteknik, föreläsning 14 F1F2F3F4F5F7F8F9F10Ö2Ö1Ö3LAB-1Hemlab-1Ö4Ö7LAB-3Hemlab-2Ö8Hemlab-3Ö9TentamenÖ10 Assemblerkod 4 stegs pipeline Nios2time C-kod Nios2io Nios2int Cache-minnen CPU-scheduling IS1200 Datorteknik F6Ö5Ö6LAB-2
22 April 2015IS1200 Datorteknik, föreläsning 15 Kurslitteratur Mats Brorsson: Datorsystem Program- och maskinvara OH-bilder från föreläsningar 1-10, på hemsida Exempelsamling del 1-10, på hemsida Lab-PM del 1-6, från hemsidan Nios2 – manual, på hemsida Enstaka blad från hemsidan
22 April 2015IS1200 Datorteknik, föreläsning 16 Laborationer Assemblerprogrammering av Nios-processorn Assembler-programmering på Nios-processorn I/O på Nios-processorn Avbrottshantering på Nios-processorn Hemlaborationer Maskinnära programmering med C Minnessystem med cache-minnen Prestanda påverkas av parametervärden Operativsystem, Fördelning av CPU-tid Samverkan mellan processer med semaforer
22 April 2015IS1200 Datorteknik, föreläsning 17 IS1200 Datorteknik Lärare: Johan Wennlund, kursledare, föreläsare, Övn och lab Fredrik Lundevall, biträdande kursledare, Övn och lab Jan Andersson, Övn och lab Olle Bowallius, Övn och lab William Sandqvist, Övn och lab Gunnar Johansson, la
22 April 2015IS1200 Datorteknik, föreläsning 18 Kursen i förhållande till andra kurser Förkunskaper Elektronik/Digitalteknik - NAND-grindar etc Datalogi - programmering C/Java Innehåll i efterföljande kurser inom områden Datorkomm. och Datornät Operativsystem Datorteknik fk, Datorarkitektur Embedded Systems, SystemOnChip Architecture Parallella Datorsystem Concurrent Programming
22 April 2015IS1200 Datorteknik, föreläsning 19 IS1200 Datorteknik Datorns funktion på olika nivåer från JAVA/C-kod till NAND-grind zProgramexempel: sum = 0 ; for (i=1; i<=17; i=i+1) sum = sum + i; zExempel på digitala komponenter:
22 April 2015IS1200 Datorteknik, föreläsning 110 IS1200 Datorteknik Föreläsning 1, innehåll CPU - BUS – MEM – I/O Fetch - Execute Instruktioner och Data Instruktionsformat Adressering - operandutpekning Hoppinstruktioner
22 April 2015IS1200 Datorteknik, föreläsning 111 Litteraturhänvisningar Kursboken, valda delar av kapitel 1,2 och 4 läses kursivt läses Kap 2: principer, ej MIPS-kod principer, ej MIPS-kod 4.4 Kopplingen till C, ej MIPS-kod
22 April 2015IS1200 Datorteknik, föreläsning 112 Programexempel 1 zJava-/C-kod int A, B, C;/* variabler, data */... C = A + B;/* program, code/text */...
22 April 2015IS1200 Datorteknik, föreläsning 113 Program i Java/C-kod kompileras/översätts till ASSEMBLER-kod int A, B, C;/* variabler, data */ zöversätts (kompileras) till assembler-kod.data# nu kommer data.align 2# på adress delbar med 4 A:.word 0# plats för en integer /32 bitar B:.word 0# plats för en integer /32 bitar C :.word 0# plats för en integer /32 bitar
22 April 2015IS1200 Datorteknik, föreläsning 114 C = A + B;/* program, code/text */ zöversätts (kompileras) till assembler-kod.text# nu kommer programkod.align2# på adress delbar med 4 LOADR1 <-- A LOADR2 <-- B ADDR3 <-- R1 + R2 STOREC <-- R3 Program i Java/C-kod kompileras/översätts till ASSEMBLER-kod
22 April 2015IS1200 Datorteknik, föreläsning 115 Program i ASSEMBLER-kod assembleras/översätts till Maskinkod / binärkod # maskinkod/binärkod#kommentarer … #LOAD R1 <-- A … #LOAD R2 <-- B … #ADD R3 <-- R1+R … #STORE C <-- R3 # hur många bitar?
22 April 2015IS1200 Datorteknik, föreläsning 116 Viktiga delar i en dator CPU MEM BUS I/O Jämför med kursbokens Figur 1.5 En maskinvaruorienterad vy av ett datorsystem.
22 April 2015IS1200 Datorteknik, föreläsning 117 Viktiga delar i en dator MEM - Memory/Minne innehåller program och data (Minne = Lagringsplats) CPU - Central Processing Unit; den enhet som ”kör program” dvs hämtar och utför instruktioner IO - Input/Output; enheter för kommunikation med omvärlden BUS; kommunikation mellan CPU/MEM/IO
22 April 2015IS1200 Datorteknik, föreläsning 118 Programexekvering FETCH (update PC) (decode) EXECUTE
22 April 2015IS1200 Datorteknik, föreläsning 119 Programexekvering FETCH PC - Program Counter innehåller en minnesadress som pekar ut aktuell instruktion. Kopiera en instruktion från minne till processorns IR - Instruction Register Uppdatera PC för att peka ut nästa instruktion (öka med 1/2/4...)
22 April 2015IS1200 Datorteknik, föreläsning 120 Programexekvering EXECUTE Decode - Avkoda innehållet i IR – Instruction Register dvs lista ut vilken intruktion som bitkoden i IR motsvarar Execute - Utför denna instruktion
22 April 2015IS1200 Datorteknik, föreläsning 121 Processorn (t.ex Nios eller MIPS eller …) R0 R31 R1 PC Minne Generella registerProgramräknare Jämför med kursbokens Figur 2.3 En enkel modell av MIPS-arkitekturen med minne.
22 April 2015IS1200 Datorteknik, föreläsning 122 A: B: C: LOAD STORE ADD LOAD ADD STORE PROGRAM (.text) DATA (.data) Programexempel 1 PROGRAMRÄKNAREE PROGRAM COUNTER uppdatera öka med vad? 4 eller 2 eller MINNE
22 April 2015IS1200 Datorteknik, föreläsning 123 Assembler-Instruktionen LOADR dst <-- A LOAD: Läs/Kopiera från minne till register Destinationsplats är R dst Källoperanden finns i minnet på adress A Effektivadressen till källoperanden är A En läsning från minnet i Fetch En läsning från minnet i Execute
22 April 2015IS1200 Datorteknik, föreläsning 124 Assembler-Instruktionen STOREC <-- R src STORE: Skriv/Kopiera från register till minne Källoperand finns i R src Destinationsplats i minnet på adress C Effektivadressen till destinationen är C En läsning från minnet i Fetch En skrivning till minnet i Execute
22 April 2015IS1200 Datorteknik, föreläsning 125 Assembler-Instruktionen ADDITION, variant 1 zADD R dst, R src1, R src2 Utför addition av två värden, som vardera upptar 32 bitar, hämtade från register R src1 och R src2 och skriver summan till register R dst zEn läsning från minnet (Fetch) zR dst <-- R src1 + R src2
22 April 2015IS1200 Datorteknik, föreläsning 126 ADD R dst, R srcA, R srcB ADD Hur många bitar behövs ? 3 regadr + opcode ! Hur stor blir varje instruktion ? 21 bitar ! INSTRUKTIONSFORMAT enligt ovan INSTRUKTIONSFORMAT binärkodsformat bitar per fält
22 April 2015IS1200 Datorteknik, föreläsning 127 ADD R dst, R srcA, R srcB 0x31 Hur många bitar behövs ? 15 + op-code Hur stor är varje instruktion ? 32 bitar ! INSTRUKTIONSFORMAT enligt ovan INSTRUKTIONSFORMAT Binärkod i Nios II, 32 bitar bitar per fält 0x3a0x00
22 April 2015IS1200 Datorteknik, föreläsning 128 Assembler-Instruktionen SUBTRAKTION, variant 1 zSUB R dst, R src1, R src2 Utför subtraktion mellan två värden som vardera upptar 32 bitar hämtade från register R src1 och R src2 och skriver skillnaden till register R dst zEn läsning från minnet (Fetch) zR dst <-- R src1 - R src2
22 April 2015IS1200 Datorteknik, föreläsning 129 Programexempel 2 C = A + 17 ; z”kan översättas” till LOADR1 <-- A ADDIR3 <-- R #ny instruktion STOREC <-- R3
22 April 2015IS1200 Datorteknik, föreläsning 130 Assembler-Instruktionen ADDITION, variant 2 zADDI R dst, R src1, data n Utför addition av två värden, som vardera upptar 32 resp. n bitar, hämtade från register R src1 samt ??? och skriver summan till register R dst zEn läsning från minnet (Fetch) ??? zR dst <-- R src1 + data n
22 April 2015IS1200 Datorteknik, föreläsning 131 Assembler-Instruktionen SUBTRAKTION, variant 2 zSUBI R dst, R src1, data n Utför subtraktion mellan två värden som vardera upptar 32 resp. n bitar hämtade från register R src1 samt ??? och skriver skillnaden till register R dst zEn läsning från minnet (Fetch) ??? zR dst <-- R src1 - data n
22 April 2015IS1200 Datorteknik, föreläsning 132 ADDI R dst, R src, data n SUBI R dst, R src, data n ADDI/SUBI Hur många bitar behövs? 16 + n ! Hur stor blir varje instruktion? 16+n! INSTRUKTIONSFORMAT enligt ovan Vilket värde bör man välja för n? 16! n bitar per fält INSTRUKTIONSFORMAT binärkodsformat
22 April 2015IS1200 Datorteknik, föreläsning 133 ADDI R dst, R srcA, Data SUBI rB, rA, IMM16 ADDI rB, rA, -IMM16 IMM16 innehåller ett 2-komplement-tal bitar per fält 0x04 INSTRUKTIONSFORMAT Binärkod i Nios II, 32 bitar
22 April 2015IS1200 Datorteknik, föreläsning 134 Operandutpekning Adressering Exempel på varianter ”Var finns operanden” I register, till exempel i R4 Vilka register finns? t.ex. R0--R31 (”snabbt”) I minnet, på en viss adress t.ex. 0x046C (”långsamt”)
22 April 2015IS1200 Datorteknik, föreläsning 135 Effektivadress vid operand i minnet Vid operandutpekning i minnet gäller den Effektiva Adressen är adressen till den plats i minnet där operanden lagras
22 April 2015IS1200 Datorteknik, föreläsning 136 Operandutpekning med operand i minnet zEffektivadress i instruktionens ”adressfält” zEffektivadress i ett register zOperand i instruktionens ”datafält” zIndexerad adressering zSjälvrelativ adressering, PC-relativ z… det finns fler varianter...
22 April 2015IS1200 Datorteknik, föreläsning 137 Direkt adress Absolut adress zInstruktionens adressfält innehåller effektivadressen (EA) zeffektivadressen är adressen till den plats i minnet där operanden lagras till exempel: LOAD reg <- Addr# reg := mem(Addr)
22 April 2015IS1200 Datorteknik, föreläsning 138 Direkt operand (Immediate addressing) zInstruktionens ”adressfält” innehåller operandvärdet zeffektivadress är inte relevant exempel: MOVI reg <- Data#reg := Data
22 April 2015IS1200 Datorteknik, föreläsning 139 Register operand (Register addressing) zEtt register innehåller operandvärdet zeffektivadress är inte relevant zKan kallas direkt via register exempel: MOVE reg1 <- reg2#reg1 := reg2
22 April 2015IS1200 Datorteknik, föreläsning 140 Register indirect addressing (Indirekt adress via register) zEtt register innehåller effektivadressen zEffektivadressen är adressen till den plats i minnet där operanden lagras exempel: LOAD reg1 <- (reg2) #reg1 := mem(reg2)
22 April 2015IS1200 Datorteknik, föreläsning 141 Indexerad adressering (Displacement addressing) zEffektivadressen är adressen till den plats i minnet där operanden lagras zEffektivadressen är summan av innehåll i instruktionens adressfält och innehåll i angivet indexregister exempel: LOAD reg <- offset(indexreg) #reg := mem (offset+indexreg)
22 April 2015IS1200 Datorteknik, föreläsning 142 Indexerad adressering Exempel på specialfall zOffset = 0 ger ”adress i register” zIndexregister innehåller 0 ger direkt (absolut) adress zIndexregister = PC ger själv-relativ adressering PC-relativ adressering LOAD Offset(Indexregister)
22 April 2015IS1200 Datorteknik, föreläsning 143 Självrelativ adressering PC-relativ adressering (specialfall av Indexerad adressering) zEffektivadressen är adressen till den plats i minnet där operanden lagras zEffektivadressen är summan av innehåll i instruktionens adressfält och (aktuellt) innehåll i Program Counter (PC)
22 April 2015IS1200 Datorteknik, föreläsning 144 init start Java/C-kod: for-loop ger behov av hopp Cond ? Next False True init; for (start; cond; update) body; leder till flödes-schema enligt figur till höger Vi får behov av HOPP OVILLKORLIGT HOPP VILLKORLIGT HOPP Test: Bodyupdate
22 April 2015IS1200 Datorteknik, föreläsning 145 Effektiv adress vid hoppinstruktioner Vid hoppinstruktioner gäller: Den Effektiva Adressen är det värde som skrivs till PC dvs adressen till den plats i minnet där programmet ska fortsätta
22 April 2015IS1200 Datorteknik, föreläsning 146 Ovillkorliga hopp JUMP och BRA JUMP brukar ha direkt adress BRA brukar ha PC-relativ adress JMP 104 # PC := 104”hopp till 104”. BRA 40 # PC := pc + 40”hopp till 268” 32: 104: 224: 268:
22 April 2015IS1200 Datorteknik, föreläsning 147 BRA Label # symbolisk adress översätts till BRA disp# numerisk displacement av översättaren/assemblern RUT:ADD … t.ex :BRA RUT 500:ADD … 520:BRA -24
22 April 2015IS1200 Datorteknik, föreläsning 148 JMP Label # symbolisk adress översätts till JMP addr# numerisk absolutadress av översättaren/assemblern RUT:ADD … t.ex :JMP RUT 500:ADD … 520:JMP 500
22 April 2015IS1200 Datorteknik, föreläsning 149 JMP ger icke relokerbar kod på grund av absolut adressering RUT:ADD … t.ex JMP 500 relokering RUT:ADD … ny plats JMP 500 hopp till fel plats Före relokering Efter relokering
22 April 2015IS1200 Datorteknik, föreläsning 150 BRA ger relokerbar kod tack vare PC-relativ adressering RUT:ADD … t.ex BRA -24 RUT:ADD … ny plats BRA -24 relokering hopp till rätt plats Före relokering Efter relokering
22 April 2015IS1200 Datorteknik, föreläsning 151 Ovillkorligt hopp BRA, Branch Always BRA Label Hoppa (alltid) till Label dvs Kopiera värdet Label till PC Nästa instruktion som hämtas finns vid adressen Label En läsning från minnet (Fetch) ? Hur anges Label? Adressering ! Översättaren räknar fram koden
22 April 2015IS1200 Datorteknik, föreläsning 152 Villkorligt hopp Bcond, Branch on condition Bcond Label zOm villkoret är sant hoppa till Label zOm villkoret är falskt (= ej sant) fortsätt som vanligt utan hopp zVad menas med villkoret ?
22 April 2015IS1200 Datorteknik, föreläsning 153 CC - Condition Code zCondition Code - CC zRegister som innehåller information om utfall av tidigare operationer/instruktioner zZ - Zero zN - Negative zC - Carry zV - oVerflow z… det kan finnas fler typ Odd, Parity...
22 April 2015IS1200 Datorteknik, föreläsning 154 Processorn (t.ex Nios eller MIPS eller …) R0 R31 R1 PC Minne Generella registerProgramräknare Jämför med kursbokens Figur 2.3 En enkel modell av MIPS-arkitekturen med minne.
22 April 2015IS1200 Datorteknik, föreläsning 155 Gäller för MIPS-Processorn (ej Nios-II) R0 R31 R1 PC Minne Generella registerProgramräknare NVZC Status
22 April 2015IS1200 Datorteknik, föreläsning 156 Instruktionen (i repris) ADDITION, variant 1 zADD R dst, R src1, R src2 Utför addition av två värden, som vardera upptar 32 bitar, hämtade från register R src1 och R src2 skriver summan till register R dst zEn läsning från minnet (Fetch) zR dst <-- R src1 + R src2 samt att CC påverkas
22 April 2015IS1200 Datorteknik, föreläsning 157 Instruktionen (i repris) SUBTRAKTION, variant 1 zSUB R dst, R src1, R src2 Utför subtraktion mellan två värden som vardera upptar 32 bitar hämtade från register R src1 och R src2 skriver skillnaden till register R dst zEn läsning från minnet (Fetch) zR dst <-- R src1 - R src2 samt att CC påverkas
22 April 2015IS1200 Datorteknik, föreläsning 158 Nytt: Instruktion COMPARE, variant 1 zCMP R src1, R src2 utför jämförelse (subtraktion) mellan två värden som vardera upptar 32 bitar hämtade från register R src1 och R src2 skriver INTE skillnaden till register R dst men påverkar innehåll i Condition Code - CC zCC <-- f(R src1 - R src2 )
22 April 2015IS1200 Datorteknik, föreläsning 159 Programexempel zJava-/C-kod int op1, op2;/* variabler, data */... /* program, code/text */ if (op1 == op2) goto Label;... zöversätts (kompileras) till assembler-kod (forts.)
22 April 2015IS1200 Datorteknik, föreläsning 160 CMP op1, op2 BEQ Label CMP op1, op2 utförs som SUB op1, op2 resultat = op1 minus op2, resultat = 0 betyder att op1 - op2 = 0 dvs samma som att op1 = op2 CMP op1, op2 BEQLabel Hoppa till Label om op1 lika med op2
22 April 2015IS1200 Datorteknik, föreläsning 161 Nios II – dialekt: BEQ op1, op2, Label CMP op1, op2 BEQLabel Hoppa till Label om op1 lika med op2 Alternativ möjlighet (Nios II) BEQ op1, op2, Label Hoppa till Label om op1 lika med op2
22 April 2015IS1200 Datorteknik, föreläsning 162 CMP op1, op2 Exempel på ”utfall” zEQ: op1 Equal to op2 zNE: op1 Not Equal to op2 zGE: op1 Greater than or Equal to op2 zLT: op1 Less Than op2 zGT: op1 Greater Than op2 zLE: op1 Less than or Equal to op2 z... det finns fler...
22 April 2015IS1200 Datorteknik, föreläsning 163 Bcond Label Exempel på ”cond” och CC zEQ:# Z=1 zNE: # Z=0 zGE: # N=0 zLT:# N=1 zGT: # Z=0 and N=0 zLE: # Z=1 or N=1 z... det finns fler... (CS-Carry Set,...)
22 April 2015IS1200 Datorteknik, föreläsning 164 Bcond Label Bcond op1, op2, Label zMånga CPU:er Nios II m.fl. BNE LabelBNE reg1, reg2, Label BGE Label BGE reg1, reg2, Label BLT Label BLT reg1, reg2, Label BGT Label BGT reg1, reg2, Label BLE Label BLE reg1, reg2, Label z... det finns fler... (CS-Carry Set,...)
22 April 2015IS1200 Datorteknik, föreläsning 165 JUMP brukar ha direkt adress JUMP Label JUMP Hur många bitar behövs? 6+n! Hur stor blir varje instruktion? 6+n! INSTRUKTIONSFORMAT enligt ovan Vilket värde bör man välja för n? 10/26! INSTRUKTIONSFORMAT 6 n bitar per fält
22 April 2015IS1200 Datorteknik, föreläsning 166 JMP rA INSTRUKTIONSFORMAT Nios II 0x0d bitar per fält 0x3a0 00 JMP med register indirekt adress INSTRUKTIONSFORMAT enligt ovan Hur stort hopp har man ? PC := (rA)# 32 bitars adress !
22 April 2015IS1200 Datorteknik, föreläsning 167 BRA brukar ha PC-relativ adress BRA Displacement BRA INSTRUKTIONSFORMAT 6 n bitar per fält Hur många bitar behövs? 6+n! Hur stor blir varje instruktion? 6+n! INSTRUKTIONSFORMAT enligt ovan Vilket värde bör man välja för n? 10/26!
22 April 2015IS1200 Datorteknik, föreläsning 168 BR med PC-relativ adressering Displacement lagras i IMM16 BR Label INSTRUKTIONSFORMAT Nios II bitar per fält 0x06 00 IMM16 PC PC signext(IMM16)
22 April 2015IS1200 Datorteknik, föreläsning 169 IS1200 Datorteknik Föreläsning 1, innehåll CPU - BUS - MEM Fetch - Execute Instruktioner och Data Instruktionsformat Adressering - operandutpekning Hoppinstruktioner
22 April 2015IS1200 Datorteknik, föreläsning 170 Viktiga delar i en dator CPU MEM BUS I/O
22 April 2015IS1200 Datorteknik, föreläsning 171 Programexekvering FETCH (update PC) (decode) EXECUTE
22 April 2015IS1200 Datorteknik, föreläsning 172 Dual-core / Multi-core CPU MEM BUS I/O CPU...