Datorarkitektur Datapath & Control December 28 karl.marklund@it.uu.se Foto: Rona Proudfoot (some rights reserved)
Vi skall nu kolla närmare på hur det går till när en instruktion utförs. Fetch PC = PC+4 Execute Decode
Vi börjar med Fetch. MEMORY Address Content xffffffff xfffffffe xfffffffd xfffffffc... Kan inneålla både data och instruktioner (stored program concept). Execute Fetch PC = PC+4 Decode x3 x2 x x
I detta fall har jag valt 3 bitars adress 8 adresserbara minnes-celler...... som innehåller 8 bitar vardera. Vi har tidigare sett hur vi kan konstruera minnes-celler och större minnen med hjälp av grundläggande grindar. Det finns färdiga RAM-moduler i Logisim
Anger adress 2 Raising Edge Triggad...... Dvs för att skriva data måste klockan gå från låg till hög. Klockan == Låg () x97 För att skriva data måste out sättas till.
... och nu skrivs data till minnet. x97 Ändrar Klockan till hög ()...
Läser data från adress och får output x9 Värdet på klockan spelar ingen roll vid läsning. För att läsa data måste out sättas till.
Prövar med både output (read) och input (write) data.
Ändrar till adress
... och nu blir går det galet! Försöker läsa från minnet och write data input samtidigt!!! Dvs, Read Data blir en blandning av Ändrar till (read)... 2 (x7) och 2 (x9)
Three State Buffer A B E A (low ) E (low) B High Z When not Enabled (E = ) the three state buffer acts lika a huge resistance, kind of cutting of the wire. (high) (low) High Z (low) (high) (high) (high) (low) (high) When Enabled (E = ) the three state buffer lets the input signal A through. Output B can be in three states, (low), (high) and high resistance (Z).
... Nu går det bra. Three State Buffer Öppnas endast vid skrivning (out == )
Om vi vill skriva till address Inversen av out three state buffer Öppnas Nu skrivs data till minnet. Raising edge
A RAM with 8 bit address and 32 bit data cells.
Kan beskriva inehållet i minnet i en vanlig textfil. Anger innehållet på varje adress som ett hexadecimalt tal. En rad för varje adress. v2. raw 28 8482
En adress Ett ord Men i MIPS är varje adress på 32 bitar......och varje address anger en byte. Ett ord börjar alltid på en adress som är jämnt delbar med fyra.
Kan enkelt kolla om en address inte anger ett alignat ord. 2 minst signifikanta bitarna Nästföljande 6 bitar 32 bitars byte-adress. Konverterar 32 bitars byte adress till 8 bitars ord-adress.
Nästa instruktion ligger 4 byte l ngre fram. Byte adress 4 konverterat till ord-adress. Maskininstruktion: x8482 32 bitars byte-adress.
PC 4 Add Instruction Memory Read Instruction Address Vi börjar bygga en datapath. 32 bit instruction A datapath is a collection of functional units, such as ALUs or multipliers, that perform data processing operations. Most processors consist of a datapath and a control unit, with a large part of the control unit dedicated to regulating the interaction between the datapath and memory. Fetch PC = PC+4 För att hämta en instruktion från minnet läser vi helt enkelt på den plats som PC anger. Execute Decode För att hämta nästa instruktion flyttar vi fram PC 32 bitar, dvs fyra bytes.
Fetch PC = PC+4 Vi har kollat på Fetch och det är nu dags att studera avkodningsfasen (decode) Execute Decode
Nästa instruktion ligger 4 byte l ngre fram. Byte adress 4 konverterat till ordadress. Maskininstruktion: x8482 32 bitars byte-adress. Op Code == R-Format op rs rt rd shamt funct 8 8 9 32
Maskininstruktion: x8482 Op Code == R-Format Func == 32 add op rs rt rd shamt funct 8 8 9 32
Maskininstruktion: x8482 add $t, $t, $t Op Code == R-format Func == 32 add op rs rt rd shamt funct 8 8 9 32
6 bits Write result 5 bits to this register 5 bits for 5 add, bitssub, and, 5 bitsslt, etc 6 bits op rs rt rd shamt funct R-type Operand-2 register allways here for add, sub, and slt, etc but also for sw (value to store) 6 bits 5 bits 5 bits 6 bits op rs rt address/constant I-type Operand- register always here even for lw/sw (base register) 6 bits 26 bits Write result to this register for lw and addi op Target address J-type 32 bits OP always here
Op Code = I-format Avkodning av instruktion $zero $to 7 addi $t, $zero, 7
Slutligen skall vi i detalj se hur det går till när en instruktion utörs (execute). Fetch PC = PC+4 Execute Decode
We have already seen how we can build a complete register file. register a 3 bit 8 bit register b 3 bit Registers 8 bit ALU OP Kant-triggad D-Latch. register c 3 bit 8 bit
Sätter ihop fetch... Med R-type (add, sub, and, or, slt...) och med I-type lw/sw PC 4 Add Instruction Memory Read Instruction Address RegWrite Read Addr Register Read Read Addr 2 Data File Write Addr Read Data 2 Write Data ALU control ovf zero ALU MemWrite Address Data Memory Write Data Read Data MemRead Skall resultatet tolkas som en address (lw/sw) eller som ett resultatet av till exempel en addition?
Sätter ihop fetch... Med R-type (add, sub, and, or, slt...) och med I-type lw/sw PC 4 Add Instruction Memory Read Instruction Address RegWrite Read Addr Register Read Read Addr 2 Data File Write Addr Read Data 2 Write Data ALU control ovf zero ALU MemWrite Address Data Memory Write Data Read Data MemtoReg Sign 6 Extend 32 MemRead Vid lw och sw har vi 6 bitars konstant (offset) som måste bli til 32 bitar.
Sätter ihop fetch... Med R-type (add, sub, and, or, slt...) och med I-type lw/sw PC 4 Add Instruction Memory Read Instruction Address RegWrite Read Addr Register Read Read Addr 2 Data File Write Addr Read Data 2 Write Data ALUSrc ALU control ovf zero ALU MemWrite Address Data Memory Write Data Read Data MemtoReg Sign 6 Extend 32 MemRead A simple datapath
ovf ALU Control lines Function zero ALU 32 bit AND OR add 4 bit sub slt NOR ALU control This is a sub set of all the possible four bit bit patterns
5 ovf zero ALU 3 ALU control
5 3 5+3 = 8 Op Code ADD
NOT B = -4 (two s complement) ( (NOT B) + ) + A = A - B 5 3 5-3 = 2 Get sign negative The third bit from the left in the OP code selects B inverse and also function as carry in.
5 3 5 AND 3 = Op Code of all zeroes
A B A OR B A AND B!A!B NOT (A OR B)!A AND!B
A B A OR B A AND B!A!B NOT (A OR B)!A AND!B NOT (A AND B)!A OR!B De Morgan's laws not (A and B) = (not A) or (not B) not (A or B) = (not A) and (not B) Augustus De Morgan (86-87)
5 A NOR B 3 (NOT 5) AND (NOT 3) = NOT (A OR B) Two most significant bits select!a and!b Two least significant bits selects the the upper most input to the result MUX.
ovf ALU Control lines Function zero ALU 32 bit AND OR add 4 bit Vilken input påverkar kontrollenheten? sub slt NOR ALU control? This is a sub set of all the possible four bit bit patterns
Op code Alu Op Instruction op Funct field ALU action ALU control input LW Load Word xxxxxx Add SW Store Word xxxxxx Add Branch equal Branch equal xxxxxx Subtract R-type Add Add R-type Subtract Subtract R-type AND And R-type OR Or R-type Set less than Set on less than ALU Op: 2 bit output from the control unit Sannings-tabell Karnough-diagram Funct: 6 bits from the instruction Hårdvara
Single Cycle Datapath with Control Unit 4 Add ALUOp Instr[3-26] Control Unit Branch ALUSrc Shift left 2 Add PCSrc MemRead MemtoReg MemWrite PC Read Address Instruction Memory Instr[3-] RegDst Instr[25-2] Instr[2-6] Instr[5 -] RegWrite Read Addr Register Read Read Addr 2 Data File Write Addr Read Data 2 Write Data ovf zero ALU Address Data Memory Write Data Read Data Multiplexer Instr[5-] Sign 6 Extend 32 Instr[5-] ALU control
Hur ser det ut för en instruktion av R-typ? 4 Add ALUOp Instr[3-26] Control Unit Branch ALUSrc Shift left 2 Add PCSrc MemRead MemtoReg MemWrite PC Read Address Instruction Memory Instr[3-] RegDst Instr[25-2] Instr[2-6] Instr[5 -] RegWrite Read Addr Register Read Read Addr 2 Data File Write Addr Read Data 2 Write Data ovf zero ALU Address Data Memory Write Data Read Data Instr[5-] Sign 6 Extend 32 ALU control Instr[5-]
R type 4 Add ALUOp Instr[3-26] Control Unit Branch ALUSrc Shift left 2 Add PCSrc MemRead MemtoReg MemWrite PC Read Address Instruction Memory Instr[3-] RegDst RegWrite Instr[25-2]` Read Addr Register Read Instr[2-6] Read Addr 2 Data File Write Addr Read Instr[5 Data 2 Write Data -] ovf zero ALU Address Data Memory Write Data Read Data Instr[5-] Sign 6 Extend 32 Instr[5-] ALU control
Hur ser det ut för Load Word (I-typ)? 4 Add ALUOp Instr[3-26] Control Unit Branch ALUSrc Shift left 2 Add PCSrc MemRead MemtoReg MemWrite PC Read Address Instruction Memory Instr[3-] RegDst Instr[25-2] Instr[2-6] Instr[5 -] RegWrite Read Addr Register Read Read Addr 2 Data File Write Addr Read Data 2 Write Data ovf zero ALU Address Data Memory Write Data Read Data Instr[5-] Sign 6 Extend 32 ALU control Instr[5-]
Load Word 4 Add ALUOp Instr[3-26] Control Unit Branch ALUSrc Shift left 2 Add PCSrc MemRead MemtoReg MemWrite PC Read Address Instruction Memory Instr[3-] RegDst RegWrite Instr[25-2]` Read Addr Register Read Instr[2-6] Read Addr 2 Data File Write Addr Read Instr[5 Data 2 Write Data -] ovf zero ALU Address Data Memory Write Data Read Data Instr[5-] 6 Sign Extend 32 Instr[5-] ALU control
Kodas som 6 bitars jump offset för att ange hur många instruktioner vi skall hoppa (framåt eller bakåt) beq $t, $t2 my_label Hur funkar branchinstruktioner...
Branch on Equal (beq) 4 Add ALUOp Instr[3-26] Control Unit Branch ALUSrc Shift left 2 Add PCSrc MemRead MemtoReg MemWrite PC Read Address Instruction Memory Instr[3-] RegDst RegWrite Instr[25-2]` Read Addr Register Read Instr[2-6] Read Addr 2 Data File Write Addr Read Data 2 Instr[5 Write Data -] ovf zero ALU Address Data Memory Write Data Read Data Instr[5-] Sign 6 Extend 32 Instr[5-] ALU control
Nu tar vi och bygger en datapath som endast klarar av add instruktionen, ett första försök med en instruktion av R-typ.
För add behöver vi kunna läsa operander från register och skriva resultatet tillbaka till något register. Vi vill kunna skriva program som detta. add $t2, $t, $t add $t3, $t2, $t2
Och registren
Härhittarvi register 8, dvs $t - $t3. Men hur för vi in data I registren om vi inte har addi?
För att vi skall kunna testa vår datapath fuskar vi lite Sätter $t konstant till 5 Sätter $t konstant till 3
add $t2, $t, $t add $t3, $t2, $t2 You can use SPIM to translate the assembly code to MIPS machine instructions. v2. raw 952 8482 The hexadecimal machine instructions can be saved to a file and loaded into the RAM component in Logisim.
Innehållet I $t Här avkodas instruktionen. rs = 8 ($t) Innehållet I $t rt = 9 ($t) rd = ($t2) OP Code för add add $t2, $t, $t add $t3, $t2, $t2 Resultatet skrivs tillbaka till $t2
Lägger till fler prober så att det blir lättare att följa vad som händer. rs Varför är klocksignalen till registerfilen inverterad?
add $t2, $t, $t add $t3, $t2, $t2 rs
Nu lägger vi till stöd för addi addi $t, $zero, 27 add $t2, $t, $t add $t3, $t2, $t2 6 bits 5 bits 5 bits 6 bits op rs rt address/constant Resultat till detta register Op Code 2 = 8
ALUs andra input kan nu komma från ett register eller från immediate-fältet. Men vi kan inte addera ett 32 bitars tal med ett 6 bitars tal (two s complement). I detta fall skall resultatet skrivas till rt och inte som tidigare till rd. 6 bit Immediate
Sign Extension
Resultatet skrivs till rt ($t) ALU controll samma som för add addi $t, $zero, 27 add $t2, $t, $t add $t3, $t2, $t2
Vi kan automatisera styrsignalerna till MUXarna genom att titta på bit tre från vänster I OP-koden. addi $t, $zero, 27 addi $t, $zero, 3 add $t2, $t, $t add $t3, $t2, $t2
addi $t, $zero, 27 addi $t, $zero, 3 add $t2, $t, $t add $t3, $t2, $t2
addi $t, $zero, 27 addi $t, $zero, 3 add $t2, $t, $t add $t3, $t2, $t2
Nu lägger vi till stöd för sub addi $t, $zero, 27 addi $t, $zero, 3 add $t2, $t, $t add $t3, $t2, $t2 sub $t4, $t3, $t OP Code Funct ALU Control addi xxx xxx add sub Hur kan vi beräkna den näst mest signifikanta biten i ALU Control? I vår förenklade variant av MIPS är alla bitar utom en konstant.
addi $t, $zero, 27 addi $t, $zero, 3 add $t2, $t, $t add $t3, $t2, $t2 sub $t4, $t3, $t För vår enkla MIPS med endast add, addi och sub kan vi enkelt härleda ALU Control från en bit ur OP-koden och en bit ur funct-fältet..
addi $t, $zero, 27 addi $t, $zero, 3 add $t2, $t, $t add $t3, $t2, $t2 sub $t4, $t3, $t Samma som för addi
addi $t, $zero, 27 addi $t, $zero, 3 add $t2, $t, $t add $t3, $t2, $t2 sub $t4, $t3, $t Nu ändras ALU Control från till.
Det var allt för idag.