840 likes | 1.04k Views
2G1518 Datorteknik allmän kurs. Föreläsning 3 Metoder och subrutiner Kursboken, valda delar av kapitel 4 version ht 2004 för D m.fl. Innehåll. 4-stegs PIPE-LINE, repetition MACRO, syntetisk instruktion Load och Store med indexerad adress 5-stegs PIPE-LINE hårdvara för hopp, Nios
E N D
2G1518 Datorteknik allmän kurs Föreläsning 3 Metoder och subrutiner Kursboken, valda delar av kapitel 4 version ht 2004 för D m.fl. 2G1518, föreläsning 3, ht2004
Innehåll • 4-stegs PIPE-LINE, repetition • MACRO, syntetisk instruktion • Load och Store med indexerad adress • 5-stegs PIPE-LINE • hårdvara för hopp, Nios • Subrutiner, anrop, retur, parametrar, • Stack och Register Window 2G1518, föreläsning 3, ht2004
Viktiga delar i en dator CPU BUS I/O MEM 2G1518, föreläsning 3, ht2004
FETCH (update PC) (decode) EXECUTE Programexekveringi två steg 2G1518, föreläsning 3, ht2004
Fetch Operand Write Back Fetch Instruction Register File 32 x 32 IR0 IR1 Execute PC+2 PC+Imm IR2 Program Memory m x 8 Register File 32 x 32 Programexekveringi fyra steg ADD PC ALU 2G1518, föreläsning 3, ht2004
R Mall för makro– en syntetisk instruktion .macro CLR reg MOVI \reg, 0x0 .endm Effekt: man kan använda en ny instruktion clr %ri för att nollställa register %ri 2G1518, föreläsning 3, ht2004
R ADD Rdest, regA, regB Skriv makro för add-instruktion med 3 register .macro ADD reg1, reg2, reg3 MOV \reg1, \reg2ADD \reg1, \reg3 .endm 2G1518, föreläsning 3, ht2004
Nios INSTRUKTIONSFORMAT med immediate data MOVI RA, datan MOVI Exempelvis: 6 5 5 Hur många bitar behövs? ~6+5+5! Hur stor blir varje instruktion? 16! 2G1518, föreläsning 3, ht2004
Fetch Operand Write Back Fetch Instruction Register File 32 x 32 IR0 IR1 Execute PC+2 PC+Imm IR2 Program Memory m x 8 Register File 32 x 32 Immediate dataNios dataväg finns ADD PC ALU 2G1518, föreläsning 3, ht2004
R Immediate dataär bara 5 bitar • En PreFiX-instruktion PFX införs • PFX modifierar efterföljande instruktion och ger den ett längre immediate-värde • PFX använder ett specialregister K • Principen med prefixinstruktioner finns även i Pentium-serien 2G1518, föreläsning 3, ht2004
Fetch Operand Write Back Fetch Instruction Register File 32 x 32 IR0 IR1 Execute PC+2 PC+Imm IR2 Program Memory m x 8 Register File 32 x 32 Inför ny hårdvaraK - register ADD PC ALU 2G1518, föreläsning 3, ht2004
R Hur används register K ? • PreFiX-instruktionen PFX Imm11skriver ett 11 bitars värde till register K • Instruktionen direkt efter PFX Imm11använder innehåll i K– sedan nollställs register K • Imm5 ökar till (Imm11 cat Imm5 ) 2G1518, föreläsning 3, ht2004
FI PFX - EXE FI - WB FO PFX Imm11 PFX Imm11 MOVI Rdst, Imm5 2G1518, föreläsning 3, ht2004
Nios: MOVIA Rdst, Imm32(MACRO) 32 bitar till Rdst alla bitar 31-00 påverkas • PFX Imm111;11 bitar till K-reg • MOVI Rdst, Imm15;16 bitar i Rdstfyller ut med nollor i bit 31-16 • PFX Imm211;11 bitar till K-reg • MOVHI Rdst, Imm25;32 bitar i Rdstbit 15-0 påverkas ej av MOVHI Resultat: Imm211Imm25 Imm111Imm15 2G1518, föreläsning 3, ht2004
Hjälp från översättaren %xhi %xlo %hi %lo = value Imm211Imm25 Imm111Imm15 @h = 31 MSBits 2G1518, föreläsning 3, ht2004
R MakrotMOVIA reg, Addr ; Ladda ett 32 bitars värde till ett register ; Värdet kan vara negativt .macro MOVIA reg, value PFX %hi(\value)MOVI \reg, %lo(\value)PFX %xhi(\value)MOVHI \reg, %xlo(\value) .endm 2G1518, föreläsning 3, ht2004
LOAD och STORE • Vi kan utföra instruktionerna LD Rdst, [ Raddr ] ST [ Raddr ], Rsrc 2G1518, föreläsning 3, ht2004
Fetch Operand Write Back Fetch Instruction Register File 32 x 32 IR0 IR1 Execute PC+4 PC+Imm IR2 Program Memory m x 8 Register File 32 x 32 LOAD och STOREmed 4 stegs PIPE-LINE ADD PC RWM ALU 2G1518, föreläsning 3, ht2004
R LOADA Rdest, Addr Skriv makro för load med direkt adressering .macro LOADA reg, addr MOVIA \reg, \addrLD \reg, [\reg] .endm 2G1518, föreläsning 3, ht2004
Behov av indexerad adress • Programvariabler ligger samlade • Ett register pekar ut variabelarean • Varje LOAD/STORE behöver först en adressberäkning med ADD • Indexerad adress LOAD R2 ← 8(R28) ; R2 ← hm(r28 + 8) • Sparar en klockcykel vid varje LOAD 2G1518, föreläsning 3, ht2004
Programvariabler samlade i minnet • Variabler • int i; • int j; • int k; • läggs efter varanni minnet av kompilatorn minne i j k 2G1518, föreläsning 3, ht2004
minne Ett register pekar ut variabelarean • Vid programstart tilldelas registret adressen till variabelarean i minnet i j register k r28 2G1518, föreläsning 3, ht2004
minne Varje LOAD/STORE behöver adressberäkning med ADD • k ska hämtas till R2 • R17 är ledigt • ADDI R17 <- R28 + 8 • LOAD R2 <- (R17) • En extra instruktion • En extra klockcykel • Extra krångel i programkoden i j register k r28 2G1518, föreläsning 3, ht2004
minne Indexerad adress • Addition i LOAD-instruktionen • LOAD R2 ← 8(R28) • innebärR2 ← hm(r28+8) • Innehåll i R28, plus talet 8, blir minnesadress i j register k r28 2G1518, föreläsning 3, ht2004
FI FO WB addi r17←r28+8 EXE FI FO MEM WB load r2←(r17) FI FO ALU WB MEM Sparar en klockcykel vid varje LOAD • add följt av load byts mot • load med "inbyggd" addition load r2←8(r17) 2G1518, föreläsning 3, ht2004
LOAD och STORE • Vi vill alltså kunna utföra instruktionerna LOAD Rdst, Offset[ Raddr ] STORE Offset[ Raddr ], Rsrc 2G1518, föreläsning 3, ht2004
LOAD Rdst <- Offset[Raddr] • Vi kan utföra instruktionen LOAD Rdst, Offset[ Raddr ] • med koden (tar 2 klockcykler eller hur) ADDI Radr, Offset LD Rdst, [ Raddr ] 2G1518, föreläsning 3, ht2004
STORE Offset[Raddr] <- Rsrc • Vi kan utföra instruktionen STORE Offset[ Raddr ], Rsrc • med koden (tar 2 klockcykler eller hur) ADDI Radr, Offset ST [ Raddr ], Rsrc 2G1518, föreläsning 3, ht2004
Fetch Operand MEM Fetch Instruction Register File 32 x 32 Register File 32 x 32 Register File 32 x 32 Register File 32 x 32 ALU Write Back Program Memory m x 8 5 stegs PIPE-LINE IR0 ADD IR1 PC +n ALU IR2 RWM IR3 2G1518, föreläsning 3, ht2004
Programexekveringi fem steg • FI - Fetch Instruction • FO - Fetch Operand • ALU - Calculation • MEM - Memory Reference • WB - Write Back 2G1518, föreläsning 3, ht2004
Programmering med hopp • Hopp = ett värde skrivs till PC • Effektivadress skrivs till PC • Olika adresseringsmetoder finns • JUMP Label brukar använda absolut adress • BRA Label brukar använda PC-relativ adress 2G1518, föreläsning 3, ht2004
Fetch Operand Write Back Fetch Instruction Register File 32 x 32 IR0 IR1 Execute IR2 Program Memory m x 8 Register File 32 x 32 JUMP (Raddr)inför nya datavägar Ny dataväg PC +n ALU 2G1518, föreläsning 3, ht2004
Fetch Operand Write Back Fetch Instruction Register File 32 x 32 IR0 IR1 Execute PC+4 PC+Imm IR2 Program Memory m x 8 PC Register File 32 x 32 BRA Immninför ADDitionsenhet och datavägar ADD ALU 2G1518, föreläsning 3, ht2004
Ovillkorligt hoppVillkorligt hopp • Ovillkorligt hopp utförs alltidExempel: JMP och BRA • Villkorligt hopp utförs endast om ett angivet villkor är santExempel Bcc där cc är villkoret • Exempel på villkorEQZ = EQual to ZeroNEZ = Not Equal to Zero 2G1518, föreläsning 3, ht2004
JUMP och BRAOvillkorliga hopp • JUMP brukar ha direkt adress • BRA brukar ha PC-relativ adress 32: JMP 104 ;PC := 104 ”hopp till 104” . . 104: 224: BRA 40 ;PC := pc + 40 ”hopp till 268” 268: 2G1518, föreläsning 3, ht2004
Typisk hopp-instruktionJUMP Label • Absolut adressering • Läget Label motsvarar en binär adress • Kopiera Label till PC • Om PC har 32 bitar bör Label vara 32 bitar • Adressen Label lagras i instruktionen 2G1518, föreläsning 3, ht2004
Typisk hopp-instruktionBRA Label • PC-relativ adressering • Läget Label motsvarar en binär adress • Före körning beräknar assemblern hur långt från instruktionen Label finns • Avståndet lagras i instruktionen som displacement eller offset • Vid körning adderas offset till PC • offset kan vara positivt eller negativt 2G1518, föreläsning 3, ht2004
Typisk hopp-instruktionJUMP (Raddr) • Kopiera registerinnehåll till PC • Register med 32 bitar betyder att32 bits adress kan användas • Hur får man 32 bits adress till registret ? • MOVIA Raddr , Imm32 eller motsvarande 2G1518, föreläsning 3, ht2004
Nios hopp-instruktionJMP %rA • Skifta innehåll i register %rA ett steg åt vänster och kopiera till PC 2G1518, föreläsning 3, ht2004
Typisk hopp-instruktionBR Immn • PC sätts till PC + Immn • Hur stor är Immn ? • Hur stor vill vi att Immn ska vara helst ? 2G1518, föreläsning 3, ht2004
Nios hopp-instruktionBR IMM11 • Skifta IMM11 ett steg vänster • gör Sign Extension • addera till aktuellt värde i PC • PC <- PC + 2 + (sext (IMM11) <<1) 2G1518, föreläsning 3, ht2004
Typisk instruktionSUB RsrcA, RsrcB • Subtrahera innehåll i RsrcB från RsrcA • och skriv till RsrcA • Förutom resultatet / skillnaden • så lagras ytterligare information • i STATUS-flaggor 2G1518, föreläsning 3, ht2004
Typisk instruktionCMP RsrcA, RsrcB • Jämför innehåll i RsrcA och RsrcB genom att • Subtrahera innehåll i RsrcB från RsrcA • men skriv ej resultat till något register • Information om resultatet / skillnadenlagras som informationi STATUS-flaggor 2G1518, föreläsning 3, ht2004
STATUS-flaggor • Z - Zero; ”utfall lika med noll” • N - Negativ; ”utfall med negativt tecken” • V - oVerflow; ”utfall med overflow” • C - Carry; Carry-ut från ALU • Påverkas av ADD, SUB, CMP ... 2G1518, föreläsning 3, ht2004
STATUS -flaggor Program Memory m x 8 Fetch Instruction IR0 Fetch Operand IR1 Execute IR2 Write Back Register File 32 x 32 ADD PC +n ALU NVZC Register File 32 x 32 2G1518, föreläsning 3, ht2004
Villkorlig hopp-instruktionBcond Immn • PC sätts till PC + Immn om cond är sant • PC sätts till PC + nom cond är falskt(n är antal bytes per instruktion) • Nios har ingen instruktion Bcond Imm • Det måste finnas minst en villkorlig instruktion för att klara en IF-sats 2G1518, föreläsning 3, ht2004
Nios har villkorlig instruktion IFS cc_IMM4 • IFS - Conditionally execute next instruction • Om villkoret är sant utförs nästa instr. • Om villkoret är falskt skippas nästa instruktion • (Om nästa är en PFX så skippas 2 instr.) 2G1518, föreläsning 3, ht2004
Nios har villkorlig instruktion SKPS cc_IMM4 • SKPS - Skip On Condition Code • Om villkoret är sant skippas nästa instr. • (Om nästa är en PFX så skippas 2 instr.) • Om villkoret är falskt utförs nästa instruktion 2G1518, föreläsning 3, ht2004
IFS cc_IMM4 SKPS cc_IMM4 • cc_IMM4 kan väljas bland 14 olika • cc_eq, cc_ne, cc_lt osv. enligt tabell Program-exempel: if (reg1==0) goto Label CMPI reg1, 0 ;jämför reg1 med noll IFS cc_eq ;om Z=1 BR Label ;hoppa till Label 2G1518, föreläsning 3, ht2004
R BEQ Label Skriv makro för villkorligt hopp BEQ .macro BEQ label IFS cc_eqBR \labelNOP .endm 2G1518, föreläsning 3, ht2004