Datorsystemteknik DVGA03 Föreläsning 8 Processorns uppbyggnad Pipelining Större delen av materialet framtaget av :Jan Eric Larsson, Mats Brorsson och Mirec Novak IT-inst LTH
Innehåll Repetition av instruktionsformat Vilka byggblock består processorn av? Hur kopplas dessa byggblock samman? - Datavägar. Vad är pipelining? Hur fungerar pipeling i MIPS? Vilka problem kan man råka ut för med pipelining? Varför finns hoppluckan i MIPS?
Repetition: Olika instruktioner i MIPS Det finns tre huvudsakligen olika typer av instruktioner som representeras med olika bitmönster - I-typ (immediate) instruktioner, tex add t0,t1,k - R-typ (register) instruktioner, tex add t0,t1,t2 - J-typ (jump) instruktioner, tex j label el jr ra Varje instruktion är lång
Instruktioner som bitmönster i minnet Alla instruktioner är ar stora, 4 byte De kodas binärt på något av tre följande sätt: I-typ op (6) rs (5) rt (5) offset (16) R-typ op (6) rs (5) rt (5) rd (5) sa (5) funk (6) J-typ op (6) hoppadress (26)
Exempel på instruktionstyper I-typ: addi, ori, beq, lw, sw R-typ: add, or, sub, and, sll, srl J-typ: j, jal, jr
Instruktionstyper i MIPS Aritmetiska instruktioner med tre operander i register (R-typ) Aritmetiska instruktioner med två operander i register och en konstant operand (I-typ) Load-instruktioner (I-typ) Store-instruktioner (I-typ) PC-relativa hoppinstruktioner (I-typ) Absoluta hoppinstruktioner (J-typ)
Vad händer med instruktionerna i CPUn? I processorn avkodas instruktionernas bitmönster med logik Olika delar av instruktionen utför olika uppgifter
Vad måste processorn göra? Hämta instruktionen Avkoda instruktionen Hämta instruktionens operander: Antingen i register eller direkt ur instruktionen (om I-typ) Utföra instruktionen: Addera, jämföra, hoppa Skriva resultatet till destinationen: - register (add, sub, ) - minne (lw, sw) - programräknaren (hoppinstruktioner)
Byggblock för en processor - Instruktionshämtning +4 Adderare - PC innehåller adressen till nästa instruktion. - PC stegas upp med 4 varje gång (normalt) PC Adress Instruktions- minne Instruktion Klocka
Byggblock för en processor - ALU: Aritmetisk-logisk enhet In 1 In 2 Ut Styrning Med styrsignalerna kan funktionen hos ALU:n påverkas. Exempel: Styrsignal Funktion 000 add 001 sub 010 or 110 slt
Byggblock för en processor - Registren läs reg. 1 nr läs reg. 2 nr skriv reg. nr skriv data läs data 1 läs data 2 Registernummer: 5 bit Registren är organi- serade som 32 parallella D-vippor per register skriv styrn.
Dataminnet adress data in Data- minne data ut skrivstyrning Skrivstyrningen väljer om data läses från eller skrivs till minnet
Datavägar Processorn byggs upp genom att definiera datavägar, dvs hur data transporteras mellan olika enheter Vi ska titta på några olika instruktioner för att se hur datavägarna ser ut
Datavägar - add t0,t1,t2 (R-typ) I N S T R U K T I O N Läs reg 1 Läs reg 2 Skriv reg skriv data skriv styrn. läs data 1 läs data 2 In 1 In 2 ALU Ut Styrning Op & funk Styrlogik
Datavägar - addi t0,t1,k (I-typ) I N S T R U K T I O N Läs reg 1 Skriv reg skriv data K(16bit) skriv styrn. läs data 1 In 1 In 2 teckenförl. ALU Ut Styrning Op Styrlogik
Datavägar - lw t0,k(t1) (I-typ) I N S T R U K T I O N Läs reg 1 Skriv reg skriv data K(16bit) skriv styrn. läs data 1 In 1 In 2 teckenförl. ALU adr Styrning Data- minne data ut Op Styrlogik
Datavägar - sw t0,k(t1) (I-typ) I N S T R U K T I O N Läs reg 1 Läs reg 2 skriv data K(16bit) skriv styrn. läs data 1 In 1 läs data 2 In 2 teckenförl. ALU adr Styrning Data- minne data ut Op Styrlogik
Datavägar - observationer Byggblocken som används är de samma hela tiden De används i princip i samma ordning Byggblocken kopplas ihop på olika sätt för olika instruktioner - detta löser man med multiplexorer som styrs av styrlogiken
RISC-processorer En RISC-arkitektur kännetecknas framför allt av följande egenskaper: Instruktionerna är lätta att avkoda Det finns många register som inte har specialfunktioner Bara speciella load- och store-instruktioner får lov att referera till minnet
Listigare implementering av processorn Strukturen vi beskrivit kan användas för att köra en instruktion i taget Men - byggblocken är ju klart separerade: Vi skulle kunna använda olika byggblock till olika instruktioner samtidigt!
Pipelining i MIPS Hur kan principen utnyttjas för MIPS? Fem olika klara steg i exekveringen: - IF, Instruction fetch - ID, Instruction decode - avkodning och registerläsning - EXE, Beräkning av resultat el adress i ALU - MEM, Minnesaccess - WB, skriv resultatet i register
Pipelining i MIPS Exekveringsstrukturen delas upp enligt dessa delar (IF, ID, EXE, MEM, WB) För att separera mellanresultaten inför vi sk pipelineregister mellan de olika stegen
Hur representeras pipeliningen grafiskt? Klockcykler Instruktionsordning CC1 CC2 CC3 CC4 CC5 CC6 lw $10, 0($1) IF ID EXE MEM WB sub $11, $2, $3 IF ID EXE MEM WB
Problem med pipelining Strukturella konflikter (löses genom att dela upp cacheminnet i två delar, en för instruktioner och en för data). Datakonflikter (löses med hjälp av bubblor och återkoppling).
Load-instruktioner Data som läses in med en load-instruktion finns inte tillgänglig förrän för andra instruktionen efter load-instruktionen.
Hoppinstruktioner Exempel: beq t0,t1,l2 add s0,s1,s2 sub s3,s4,s5 L2: and s6,s7,s8 # i EXE-steget # i ID-steget # i IF-steget
Hoppinstruktioner Om vi gör ett hopp kommer instruktioner i pipelinen efter hoppinstruktionen inte att köras Vi måste då tömma pipelinen (två klockcykler går förlorade). Alternativt: en enkel jämförare direkt på registerbankens utgångar (en klockcykel går förlorad om inte något nyttigt kan göras direkt efter hoppinstruktionen).
Hoppinstruktioner och pipeline Prediktion: hoppet kommer inte att göras. Om hoppet ändå görs, tömmer vi pipelinen. Vi vet om hoppet kommer att göras när hoppinstruktionen når EXE-steget För att inte förlora för mycket, kör vi färdigt nästa instruktion också (den är ju redan i ID-steget). Därför finns HOPPLUCKAN!
Sammanfattning Vad gör egentligen processorn med instruktionerna? Vilka byggblock består processorn av? Hur ser datavägarna ut för de olika instruktionerna? Vilken är idén bakom pipelining? Hur ser pipelining ut i MIPS? Varför finns hoppluckan?