Processoren: Enkelt-cyklus implementation Martin Zachariasen, DIKU Litteratur: Patterson & Hennessy, afsnit 5.1 5.3 Historisk tilbageblik MIPS-arkitekturen/delmængde Klokning og byggeklodser Opbygning af datavej Fastlæggelse af kontrol 1
Historisk tilbageblik Den første stored-program maskine udførte sit første program 21. juni 1948 ( Small Scale Experimental Machine bygget i Manchester). Specifikation: 32-bit ordlængde Seriel aritmetik med 2-komplement heltal Alle ordrer indkodet i et ord RAM på 32 ord Klokcyklustid på 1.2 millisekunder (arbejdsfrekvens 800 Hz) 2
Det første program... Find den højeste faktor af et tal: Givet et tal prøv at dividere med alle tal fra ned til indtil går op i. Division udført ved gentagen subtraktion af. Programmet blev indkodet v.hj.a. 19 maskinordrer. Det lykkedes f.eks. at finde den højeste faktor af, som er ; omkring 2.1 millioner ordrer blev udført og det tog ialt 52 minutter at finde denne faktor. 3
Delmængde af MIPS-arkitekturen R-type add, sub, and, or, slt Eksempel: sub $s0,$t0,$t1 Opererer på tre registre. Data læses fra to registre (kilder), resultatet udregnes og placeres i et tredie register (destination). Dataoverførsel lw, sw Eksempel: sw $t0,48($s3) Opererer på to registre og en konstant. Adressen udregnes som værdien af det ene register med den angivne konstant som offset. Data der overføres hentes fra/skrives til det andet register. Betinget hop beq Eksempel: beq $s3,$s4,l1 Sammenligner to registres værdier. Hvis de er ens hoppes til addressen givet ved en konstant; denne adresse er et offset, dvs. relativ til adressen af den aktuelle ordre. 4
MIPS-arkitekturen (på højt niveau) Funktionelle enheder: Tilstandselementer: husker tilstand programtælleren (PC), registerbank, ordre- og datalager Kombinatoriske enheder: ingen hukommelse aritmetisk-logisk enhed (ALU), kontrol, etc. Data Register # PC Address Instruction Registers ALU Instruction memory Register # Register # Address Data memory Data (fig. 5.1) 5
Klokningsmetoder Kombinatorisk logik, tilstandselementer og klokning hænger sammen. State element 1 Combinational logic State element 2 Clock cycle (fig. 5.2) Der skrives i tilstandselementer på nedadgående flanke af klokpulsen, når skrivesignalet er sat (asserted). 6
Det basale tilstandselement: Flip-flop En flip-flop trigget på nedadgående kant (flanke) To inputs: dataværdi (D) og kloksignalet (C) To outputs: værdien (Q) og dens komplement D s værdi skal være stabil når kloksignalet skifter fra sand til falsk. D D D latch C Q D D latch C Q _ Q Q _ Q C (fig. B.15) D C Q (fig. B.16) 7
Kritisk vej og cyklustid Kritisk vej: den langsomste ( længste ) vej mellem to tilstandselementer Cyklustiden afhænger af den kritiske vejs længde, som er summen af: 1. Propageringstid i første tilstandselement 2. Propageringstid igennem kombinatoriske elementer 3. Setup-tid i andet tilstandselement D Q Flip-flop C Combinational logic block D Q Flip-flop C t prop t combinational t setup (fig. B.30) 8
Ordrelæsning Programtæller (PC), ordrelager og en adder. Add 4 PC address Instruction Instruction memory (fig. 5.5) Ordrerne læses sekventielt fra ordrelageret (hop endnu ikke tilføjet). 9
R-type ordrer Eksempel: sub $s0,$t0,$t1 op 31-26 rs 25-21 rt 20-16 rd 15-11 shamt 10-6 funct 5-0 Benytter kun registerbanken og en ALU. Instruction register 1 register 2 Registers register data data 1 data 2 Reg 3 ALU operation Zero ALU ALU result (fig. 5.7) Data læses fra to registre (kilder) og resultatet skrives til et tredie register (destination). 10
Læsning fra registerbank Opbygges af flip-flops; har to læseporte: register number 1 register number 2 Register 0 Register 1 Register n 2 Register n - 1 M u x data 1 M u x data 2 (fig. B.19) 11
Skrivning til registerbank Klokpulsens flanke og signal styrer skrivning til registre: 0 1 C D Register 0 Register number Decoder n 2 n - 1 C D Register 1 Register data C Register n 2 D C Register n - 1 D (fig. B.20) 12
Dataoverførsel Eksempel: sw $t0,48($s3) op 31-26 rs 25-21 rt 20-16 address 15-0 Benytter ALU en (dens adder-funktion) til at beregne adressen hvorfra data skal hentes/gemmes. Adresseforskydningen (offset) fortegnsforlænges fra 16 til 32 bit. Instruction register 1 register 2 Registers register data Reg data 1 data 2 3 ALU operation Zero ALU ALU result Address data Mem Data memory data 16 Sign 32 extend Mem (fig. 5.9) 13
Eksempel: beq $s3,$s4,l1 op 31-26 rs 25-21 Betinget hop rt 20-16 address 15-0 Hopadressen findes som sum af forskydning og PC+4. Forskydningen fortegnsforlænges og rykkes to bit til venstre (f.eks. ); vi udnytter at den altid er en ord-adresse. PC + 4 from instruction datapath Add Sum Branch target Shift left 2 Instruction register 1 register 2 Registers register data Reg data 1 data 2 16 Sign 32 extend 3 ALU ALU operation Zero To branch control logic (fig. 5.10) 14
Opbygning af datavejen Multiplexere benyttes til at sammensætte de funktionelle enheder. PCSrc 4 Add Shift left 2 Add ALU result M u x PC address Instruction Instruction memory register 1 register 2 register data Registers data 1 data 2 Reg 16 Sign 32 extend ALUSrc M u x 3 ALU operation Zero ALU ALU result Address data Mem Mem data Data memory MemtoReg M u x (fig. 5.13) 15
Kontrolenheder Kontrolenhederne fastlægger datavejen for de forskellige ordretyper. ALU kontrolenhed Styring af ALU baseret på ALUOp og ordrens funct felt. Hoved-kontrolenhed Styring af alle andre enheder og ALU kontrolenheden baseret på ordrens opkode. Man kunne godt lave én kontrolenhed, men den ville have været unødvendig stor og (måske) langsommere. 16
ALU kontrolenhed ALU operationer og styrekoder 000 and 001 or 010 add 110 subtract 111 set on less than ALU kontrolenheden benytter ALUOp som input: Ordre ALUOp Funktionskode ALU operation A F Op 10 543210 210 lw/sw 00 xxxxxx 010 beq 01 xxxxxx 110 add 10 100000 010 sub 10 100010 110 and 10 100100 000 or 10 100101 001 slt 10 101010 111 17
Implementation af ALU kontrolenhed Forkortet logisk udtryk: Konvertering til gates: ALUOp ALUOp0 ALUOp1 ALU control block F3 Operation2 F (5 0) F2 F1 F0 Operation1 Operation0 Operation (fig. C.3) Bemærk at nogle af styreledningerne slet ikke benyttes (er don t cares). 18
Hoved-kontrolenhed Skal fastlægge værdien af alle styrelinier ud fra ordrens opkode. Der er ialt 9 styrelinier: RegDst: Skriv register svarende til bit 20-16 (0) eller bit 15-11 (1) ALUSrc: Den anden ALU operand er det andet register (0) eller den fortegnsforlængede konstant (1) MemtoReg: Skriv register med data fra ALU (0) eller fra datalageret (1) Reg: Skriv register Mem: Læs fra datalageret Mem: Skriv til datalageret Branch: Sekventiel læsning af ordrer (0) eller betinget hop (1) ALUOp1/ALUOp2: Styring af ALU kontrolenhed 19
0 4 Add Instruction [31 26] Control RegDst Branch Mem MemtoReg ALUOp Mem ALUSrc Reg Shift left 2 Add ALU result M u x 1 PCSrc PC address Instruction memory Instruction [31 0] Instruction [25 21] Instruction [20 16] Instruction [15 11] 0 M u x 1 register 1 data 1 register 2 Registers data 2 register data 0 M u x 1 Zero ALU ALU result Address data Data memory data 1 M u x 0 Instruction [15 0] 16 Sign 32 extend ALU control Instruction [5 0] (fig. 5.19)
Hoved-kontrolenhed Forenklet afkodning Ordre Opkode o Styrelinier c 543 210 123 456 789 R 000 000 100 100 010 lw 100 011 011 110 000 sw 101 011 x1x 001 000 beq 000 100 x0x 000 101 RegDst: ALUSrc: MemtoReg: Reg: Mem: Mem: Branch: ALUOp1: ALUOp2: 21
PLA implementation PLA-implementation Ordre Opkode o Mintermer 543 210 (produktled) R 000 000 lw 100 011 sw 101 011 beq 000 100 RegDst: ALUSrc: MemtoReg: Reg: Mem: Mem: Branch: ALUOp1: ALUOp2: 22
PLA implementation (forts.) Inputs Op5 Op4 Op3 Op2 Op1 Op0 R-format Iw sw beq Outputs RegDst ALUSrc MemtoReg Reg Mem Mem Branch ALUOp1 ALUOpO (fig. C.5) 23
Implementation af ubetingede hop Eksempel: j Loop op 31-26 address 25-0 Ny adresse sammensat af: bit 31-28 af bit 25-0 af ordre bits 00 24
Instruction [25 0] Shift Jump address [31 0] left 2 26 28 0 1 4 Add PC+4 [31 28] Instruction [31 26] RegDst Jump Branch Mem Control MemtoReg ALUOp Mem ALUSrc Reg Shift left 2 Add result ALU M u x 1 0 M u x PC address Instruction memory Instruction [31 0] Instruction [25 21] Instruction [20 16] Instruction [15 11] 0 M u x 1 register 1 data 1 register 2 Registers data 2 register data 0 M u x 1 Zero ALU ALU result Address data Data memory data 1 M u x 0 Instruction [15 0] 16 Sign 32 extend ALU control Instruction [5 0] (fig. 5.29)
Hvorfor er enkelt-cyklus processoren ikke effektiv? Hver ordre kræver én klokcyklus, der har samme længde for alle ordrer. Eksempel: Antag følgende operationstider for funktionelle enheder Lagerenheder: 2 ns (meget optimistisk) ALU og addere: 2 ns Registerbank (læsning og skrivning): 1 ns Antag ingen forsinkelse i multiplexere, styreenhed, PC tilgang, fortegnsudvidelsesenhed og i ledninger. 26
Enkelt-cyklus processorens effektivitet Ordretype R lw sw beq j Ordrelager 2 2 2 2 2 Reg.læs 1 1 1 1 ALU-op. 2 2 2 2 Datalager 2 2 Reg.skriv 1 1 Total 6 8 7 5 2 % af mix 44 24 12 18 2 CPU klokcyklus (fast) max: 8 ns CPU klokcyklus (variabel) 6,3 ns Forhold: 8/6,3=1,27 27
Enkelt-cyklus processor med fp-enhed Instr.klasse R lw sw beq j add.d mul.d Instr.lager 2 2 2 2 2 2 2 Reg.læs 1 1 1 1 1 1 ALU-op. 2 2 2 2 8 16 Datalager 2 2 Reg.skriv 1 1 1 1 Total 6 8 7 5 2 12 20 % af mix 27 31 21 5 2 7 7 CPU klokcyklus (fast) max: 20 ns CPU klokcyklus (variabel) 8,1 ns Ydelsesforbedring: 20/8,1 = 2,5 Konklusion: En enkelt-cyklus implementation med fast klokcyklustid er ikke effektiv. Løsning: Bryd udførelsen af en ordre op i mindre dele ved at anvende en fler-cyklus implementation eller pipelining. 28
OPGAVE Der er givet følgende maskinordre: 000000 00001 00011 00010 00000 100100 31-26 25-21 20-16 15-11 10-6 5-0 Før udførelsen af denne ordre har registrene følgende (decimal)værdier: $1 = 4 $2 = 3 $3 = 1 Alle andre registre har værdien 0. Hvad er (decimal)værdien af ALU-resultatet i forbindelse med udførelse af maskinordren? a. 0 b. 2 c. 3 d. 5 29