1 / 94

2G1502 Datorteknik allmän kurs

Föreläsning 3 Programmering med hopp Programmering av Nios. 2G1502 Datorteknik allmän kurs. Innehåll. Repetition av pipelining Load/Store Hopp Villkorliga hoppinstruktioner Metodanrop Stack Registerfönster. R. FETCH (update PC). (decode) EXECUTE. Programexekvering i två steg. R.

janae
Download Presentation

2G1502 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. Föreläsning 3 Programmering med hopp Programmering av Nios 2G1502 Datorteknik allmän kurs

  2. Innehåll • Repetition av pipelining • Load/Store • Hopp • Villkorliga hoppinstruktioner • Metodanrop • Stack • Registerfönster

  3. R FETCH (update PC) (decode) EXECUTE Programexekveringi två steg

  4. R Hårdvara i processorn Fetch Instruction Fetch Operand Execute Write Back Program Memory n x 16 Register File 32 x 32 IR PC ALU Register File 32 x 32

  5. R Fetch Instruction Fetch Operand Execute Write Back PIPE - LINE införs nuFlera Instruktions-Register IR Program Memory n x 16 Register File 32 x 32 IR0 IR1 PC ALU IR2 NYTT Register File 32 x 32

  6. R Pipelining ger problem vid Data Dependencies • Programexempel44: ADD R4 <- R5 + R6 46: ADD R1 <- R2 + R3 48: ADD R7 <- R1 + R4 • ”nya” R1 och R4 finns inte i REG-FILE

  7. R Data Dependencies –inför nya data-vägar Program Memory n x 16 Fetch Instruction IR0 Fetch Operand IR1 Execute IR2 Write Back Register File 32 x 32 48: R7 <- R1+R4 PC 50 46: R1 <- R2+R3 +2 ALU 44: R4 <- R5+R6 Register File 32 x 32

  8. R Nios INSTRUKTIONSFORMAT med immediate data ADD Rdst, datan ADD Hur många bitar behövs ? Hur stor blir varje instruktion ? INSTRUKTIONSFORMAT

  9. R Fetch Instruction Fetch Operand Execute Write Back Immediate datainför ny dataväg Program Memory n x 16 Register File 32 x 32 IR0 IR1 PC +2 ALU IR2 Register File 32 x 32

  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

  11. R Fetch Instruction Fetch Operand Execute Write Back Inför ny hårdvaraK - register Program Memory n x 16 Register File 32 x 32 IR0 IR1 PC +2 ALU IR2 Register File 32 x 32

  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 )

  13. R FI PFX - - FI FO EXE WB PFX Imm11 PFX IMM11 MOVI Rdst, Imm5

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

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

  16. R MakrotMOVIA reg, Addr ; Ladda ett 32 bitars värde till ett register ; Värdet kan vara negativt .macro MOVIA reg, Addr PFX %hi(\Addr)MOVI \reg, %lo(\Addr)PFX %xhi(\Addr)MOVHI \reg, %xlo(\Addr) .endm

  17. R JUMP (Raddr)inför ny dataväg Program Memory n x 16 Fetch Instruction IR0 Fetch Operand IR1 Execute IR2 Write Back Register File 32 x 32 PC +2 ALU Register File 32 x 32

  18. BRA Imminför adder och datavägar R Program Memory n x 16 Fetch Instruction IR0 Fetch Operand IR1 Execute IR2 Write Back Register File 32 x 32 ADD PC +2 ALU Register File 32 x 32

  19. R Pipelining ger möjlighet till Branch Delay Slot • Instruktionen i minnespositionennärmast efter en hoppinstruktionhämtas och körs medan hoppet verkställs Programexempel 18: BRA 74 20: ADD … 22: … … 94: SUB ...

  20. R Slut på repetitionen • Load/Store • Nios • Hoppinstruktioner • Villkorliga hopp • Metodanrop • Stack • Registerfönster

  21. LOAD och STORE • Vi vill kunna utföra instruktionerna LOAD Rdst, [ Raddr ] STORE [ Raddr ], Rsrc

  22. Program Memory n x 16 Fetch Instruction IR0 Fetch Operand IR1 Execute IR2 Write Back LOAD och STOREmed 4 stegs PIPE-LINE Register File 32 x 32 ADD PC +2 RWM ALU Register File 32 x 32

  23. FI FO WB MEM FI FO EXE WB LOAD och STOREmed 4 stegs PIPE-LINE Data från MEM finns tillgängligt LOAD to Rd USE Rd Data från MEM finns tillgängligt för FO tack vare Data Forward

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

  25. Programvariabler samlade i minnet • Variabler • int i; • int j; • int k; • läggs efter varanni minnet av kompilatorn minne i j k

  26. minne Ett register pekar ut variabelarean • Vid programstart tilldelas registret adressen till variabelarean i minnet i j register k r28

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

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

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

  30. LOAD och STORE • Vi vill alltså kunna utföra instruktionerna LOAD Rdst, Offset[ Raddr ] STORE Offset[ Raddr ], Rsrc

  31. LOAD Rdst <- Offset[Raddr] • Vi kan utföra instruktionen/operationen LOAD Rdst, Offset[ Raddr ] • med koden (tar 2 klockcykler eller hur) ADDI Radr, Offset LOAD Rdst, [ Raddr ]

  32. STORE Offset[Raddr] <- Rsrc • Vi kan utföra instruktionen/operationen STORE Offset[ Raddr ], Rsrc • med koden (tar 2 klockcykler eller hur) ADDI Radr, Offset ST [ Raddr ], Rsrc

  33. 5 stegs PIPE-LINE Program Memory n x 16 Fetch Instruction Fetch Operand ALU MEM Write Back Register File 32 x 32 IR0 ADD IR1 PC +2 ALU IR2 RWM IR3 Register File 32 x 32

  34. Programexekveringi fem steg • FI - Fetch Instruction • FO - Fetch Operand • ALU - Calculation • MEM - Memory Reference • WB - Write Back

  35. FI FO ALU WB MEM FI FO ALU WB MEM 5 stegs PIPE-LINE LOAD ADD Hur lång tid tar varje instruktion ? Antal cykler per instruktion, CPI ? Antal instruktioner per cykel ?

  36. FI FO ALU WB MEM FI FO ALU WB MEM Pipelining – problem med Data Dependency vid Load Rd tillgängligt från minne LOAD to Rd USE Rd Rd önskas till ALU-reg men finns inte tillgängligt

  37. FI FO ALU WB MEM FI FO stall ALU WB MEM Data Dependency vid Load – Load Delay Slot Rd tillgängligt från minne LOAD to Rd USE Rd Rd önskas till ALU-reg men finns inte tillgängligt Rd levereras till ALU-reg en klockcykel senare

  38. Load DELAYäven vid Data Forward FI FO ALU WB MEM FI FO ALU WB MEM FI FO ALU WB MEM Tillgängligt från minne LOAD NOP? ADD Skriv till ALU-reg Data Forward fungerar

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

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

  41. JUMP och BRA • JUMP brukar ha direkt adress • BRA brukar ha PC-relativ adress 08: JMP 18 ;PC := 18 ”hopp till 18” . . 18: 46: BRA 18 ;PC := pc + 18 ”hopp till 66” 66:

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

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

  44. Typisk hopp-instruktionJUMP (Raddr) • Kopiera registerinnehåll till PC • Register med 32 bitar betyder att32-bits adress kan användas • Hur får man in 32-bits adress i registret? • MOVIA Raddr, Imm32 eller motsvarande

  45. Nios hopp-instruktionJMP %rA • Skifta innehåll i register %rA ett steg åt vänster och kopiera till PC

  46. Nios JMP %rAinför nya datavägar Program Memory n x 16 Fetch Instruction IR0 Fetch Operand IR1 Execute IR2 Write Back PC +2 ALU

  47. Nios hårdvara förJMP %rA 32 bitar från ”A-busen” 0 ignoreras Program Counter

  48. Typisk hopp-instruktionBR Immn • PC sätts till PC + Immn • Hur stor är Immn ? • Hur stor vill vi att Immn ska vara helst ?

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

  50. BRA Immninför ADDitionsenhet och datavägar Program Memory n x 16 Fetch Instruction IR0 Fetch Operand IR1 Execute IR2 Write Back Register File 32 x 32 ADD PC +2 ALU Register File 32 x 32

More Related