1 / 84

2G1518 Datorteknik allmän kurs

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

Télécharger la présentation

2G1518 Datorteknik allmän kurs

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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

  2. 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

  3. Viktiga delar i en dator CPU BUS I/O MEM 2G1518, föreläsning 3, ht2004

  4. FETCH (update PC) (decode) EXECUTE Programexekveringi två steg 2G1518, föreläsning 3, ht2004

  5. 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

  6. 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

  7. 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

  8. 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

  9. 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

  10. 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

  11. 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

  12. 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

  13. FI PFX - EXE FI - WB FO PFX Imm11 PFX Imm11 MOVI Rdst, Imm5 2G1518, föreläsning 3, ht2004

  14. 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

  15. Hjälp från översättaren %xhi %xlo %hi %lo = value Imm211Imm25 Imm111Imm15 @h = 31 MSBits 2G1518, föreläsning 3, ht2004

  16. 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

  17. LOAD och STORE • Vi kan utföra instruktionerna LD Rdst, [ Raddr ] ST [ Raddr ], Rsrc 2G1518, föreläsning 3, ht2004

  18. 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

  19. 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

  20. 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

  21. 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

  22. 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

  23. 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

  24. 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

  25. 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

  26. LOAD och STORE • Vi vill alltså kunna utföra instruktionerna LOAD Rdst, Offset[ Raddr ] STORE Offset[ Raddr ], Rsrc 2G1518, föreläsning 3, ht2004

  27. 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

  28. 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

  29. 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

  30. Programexekveringi fem steg • FI - Fetch Instruction • FO - Fetch Operand • ALU - Calculation • MEM - Memory Reference • WB - Write Back 2G1518, föreläsning 3, ht2004

  31. 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

  32. 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

  33. 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

  34. 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

  35. 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

  36. 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

  37. 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

  38. 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

  39. 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

  40. 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

  41. 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

  42. 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

  43. 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

  44. 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

  45. 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

  46. 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

  47. 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

  48. 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

  49. 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

  50. R BEQ Label Skriv makro för villkorligt hopp BEQ .macro BEQ label IFS cc_eqBR \labelNOP .endm 2G1518, föreläsning 3, ht2004

More Related