1 June 20152G1502, föreläsning 3, vt20041 2G1502 Datorteknik allmän kurs Föreläsning 3 Metoder och subrutiner Kursboken, valda delar av kapitel 4 version.

Slides:



Advertisements
Liknande presentationer
IT för personligt arbete F5
Advertisements

Visual Basic - Genomgång
Anders Sjögren Lagringsklasser •en variabel i C har två attribut –type( int, float, char..... ) –lagringsklass( auto, extern, register, static ) •lagringsklassens.
EDA Digital och Datorteknik
2D1311 Programmeringsteknik med PBL
EDA Digital och Datorteknik
De fundamentala datatyperna
Persondatorer Datorns internminne (Kapitel 6)
William Sandqvist Datorteknik övning 2 Subrutinanrop William Sandqvist
PC-teknik Repetition enligt önskemål som inkommit via mail. (täcker alltså inte alla moment i kursen)
23 August 2014 IS1200 Datorteknik vt09, föreläsning 10, (E och I mfl)1 IS1200 Datorteknik Föreläsning Processorkonstruktion 2. DMA, Direct Memory.
Denna föreläsning zVad kursen handlar om zKursupplägg, litteratur, bra att veta zPrestanda - ämnet för dagen.
En vanlig femstegspipeline FDEMW FDEMW FDEMW FDEMW tid.
En vanlig femstegspipeline FDEMW FDEMW FDEMW FDEMW tid.
Programmeringsteknik K och Media
Grundläggande programmering
9 September 2014IS1200 Datorteknik, förel 101 IS1200 Datorteknik Föreläsning Processorkonstruktion 2. DMA, Direct Memory Access 3. Byte-code i JAVA.
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition, Kapitel 13: I/O-system.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 6 ( ) INNEHÅLL: -Mera om tabeller.
Pekare och speciell programstruktur i inbyggda system
Pointers. int a=5; int f(int b) { a--; b++; return b; } int main() { int a=3; printf("%d,",f(a)); printf("%d",a); return 0; }
Styrteknik: Programmering med MELSEC IL PLC2A:1
William Sandqvist C:s minnesmodell.
Grundläggande programmering
2G1510 Datorteknik fk Föreläsning 1, hösten 2003.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
William Sandqvist PIC PIC (Peripheral Interface Computer) är en datorkrets med ”allt i ett”. Prog Mem. Programminnet är 2048 instruktioner.
William Sandqvist Melodispelaren Denna demonstrationslaboration visar, steg för steg, hur man skriver ett kort program i programspråket.
INTRODUKTION TILL PROGRAMMERING
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Tabeller -Villkorssatser -Repetitionssatser.
F4 - Funktioner & parametrar 1 Programmeringsteknik, 4p vt-00 Modularisering ”svarta lådor” Väl definierade arbetsuppgifter Enklare validering Enklare.
31 March 2015IS1200 Datorteknik, förel 101 IS1200 Datorteknik Föreläsning Processorkonstruktion 2. DMA, Direct Memory Access 3. Byte-code i JAVA.
31 March 2015 IS1200 Datorteknik ht2009 föreläsning 2, (D2)1 IS1200 Datorteknik Föreläsning 2 Vi bygger en processor Kursboken, valda delar av kapitel.
IS1200 Datorteknik Föreläsning CE F2 Vi bygger en processor Kursboken, delar av kapitel 7 31 March IS1200 Datorteknik föreläsning CE – F2.
1 386 Från s bits adressbuss –=>4GB minne kan adresseras 32 bits databuss max klockfrekvens: 40MHz Protected mode –virtuellt minne –segmentering.
Anders Sjögren Går det att simulera vår värld med 1:or och 0:or ?
Pipelining Föreläsning 4. T exe — CPU-exekveringstid I — Antalet exekverade instruktioner CPI — Genomsnittligt antal klockcykler per instruktion T c —
Emulatorkonstruktion Schema Inledning Andra metoder Mina metoder Demonstration av min C64-emulator Sammanfattning och frågor.
William Sandqvist Melodispelaren Denna demonstrationslaboration visar, steg för steg, hur man skriver ett kort program i programspråket.
2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F31 IS1200 Datorteknik Föreläsning CE F3 Metoder / subrutiner Kursboken, delar av kapitel 4.
ITM1 Kapitel 8 Datastrukturer Grundläggande datavetenskap, 4p Utgående från boken Computer Science av: J. Glenn Brookshear.
1 Ingenjörsmetodik IT & ME 2007 Föreläsare Dr. Gunnar Malm.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 8 ( ) Innehåll: -Exekveringstrådar.
William Sandqvist PWM Sinusoidal Hur tillverkar man en sinusformad spänning? En PWM-signal kan ge en sinusapproximation. Efter filtrering.
Kronljusströmställaren 0, 1, 2, 3
William Sandqvist Datorteknik övning 1 Introduktion till assemblerprogrammering av Nios II William Sandqvist
1 June G1518, Förel 10, ht2005 (D3/CLMDA)1 2G1518 Datorteknik, ht 2005 version för D3 och CLMDA Föreläsning Processorkonstruktion 2. DMA, Direct.
1 June G1502, Föreläsning 9, vt2004 för IT1 2G1502 Datorteknik allmän kurs Föreläsning 9 1. Processorkonstruktion 2. DMA, Direct Memory Access 3.
2 June G1502, Föreläsning 8, vt2004 för E och I1 2G1502 Datorteknik allmän kurs Föreläsning 8 Processorkonstruktion DMA, Direct Memory Access.
Föreläsning 1 Introduktion till kursen. Algoritmer
10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)1 2G1518 Datorteknik Föreläsning 3 Metoder / subrutiner Kursboken, valda delar av kapitel 4 vt 2007.
William Sandqvist Övning 10 Processorkonstruktion med pipe-line.
20 June G1502, Föreläsning 8 vt2004, för IT1 2G1502 Datorteknik allmän kurs Föreläsning 8 1. CPU-scheduling 2. Semaforer (förberedelse till lab 5)
1 2G1502 Datorteknik allmän kurs Föreläsning 3 Programmering med hopp Programmering av Nios.
14 July 2015 IS1200/2G1518 Datorteknik, föreläsning 2, ht2007 (D2)1 IS1200 Datorteknik Föreläsning 2 Vi bygger en processor Kursboken, valda delar av kapitel.
Föreläsning 3 Väsentliga delar i ett Javaprogram Input i paketet extra
30 July 2015 IS1200 Datorteknik föreläsning CE - F11 IS1200 Datorteknik Föreläsning CE F1 Computer Engineering Introduktion.
31 July 2015IS1200 Datorteknik, förel 101 IS1200 Datorteknik Föreläsning Processorkonstruktion 2. DMA, Direct Memory Access 3. Byte-code i JAVA.
William Sandqvist Datorteknik övning 3 stackhantering subrutin som anropar subrutin programutveckling.
4 August 2015 IS1200 Datorteknik föreläsning CE - F91 IS1200 Datorteknik Övning 10.
Anders Sjögren Programmering i ANSI-C Ett första program för att se vart vi ska...
William Sandqvist Övning 10 Processorkonstruktion med pipe-line.
15 August 2015 IS1200 Datorteknik föreläsning CE - F11 IS1200 Datorteknik Föreläsning CE F1 Computer Engineering Introduktion.
William Sandqvist KIA’s fabrik i Slovenien En bil i minuten lämnar bandet – tar det en minut att bygga en bil? Nej för KIA's fabrik utanför.
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)1 IS1200 Datorteknik Föreläsning 3 Metoder / subrutiner Kursboken, valda delar av kapitel 4.
Grundläggande datavetenskap, 4p
Digitalteknik 3p - Kombinatoriska Byggblock
Digitalteknik 3p - Kombinatoriska Byggblock
Digitalteknik 3p - Kombinatoriska Byggblock
Presentationens avskrift:

1 June 20152G1502, föreläsning 3, vt G1502 Datorteknik allmän kurs Föreläsning 3 Metoder och subrutiner Kursboken, valda delar av kapitel 4 version vt 2004 för E och I

1 June 20152G1502, föreläsning 3, vt20042 Innehåll z4-stegs PIPE-LINE zLoad och Store mot Minne z5-stegs PIPE-LINE zNios hårdvara för hopp zSubrutiner, anrop, retur, stack zRegister Window zParameteröverföring

1 June 20152G1502, föreläsning 3, vt20043 Programexekvering i två steg (decode) EXECUTE FETCH (update PC)

1 June 20152G1502, föreläsning 3, vt20044 Hårdvara i processorn Execute Fetch Operand Write Back Fetch Instruction Program Memory m x 8 ALU IR PC +n Register File 32 x 32 Register File 32 x 32 32

1 June 20152G1502, föreläsning 3, vt20045 PIPE - LINE införs nu ! Flera register IR Execute Fetch Operand Write Back Fetch Instruction Program Memory m x 8 ALU IR0 IR1 IR2 NYTT PC +n Register File 32 x 32 Register File 32 x 32

1 June 20152G1502, föreläsning 3, vt20046 Fenomen pga PIPE-LINE Data Dependencies zProgramexempel 44:ADD R1 <- R2 + R3 48:ADD R4 <- R5 + R6 52:ADD R7 <- R1 + R4 z”nya” R1 och R4 finns inte i REG-FILE

1 June 20152G1502, föreläsning 3, vt20047 Data Forward inför nya data-vägar Execute Fetch Operand Write Back Fetch Instruction Program Memory m x 8 ALU IR0 IR1 IR2 Register File 32 x 32 Register File 32 x 32 52: R7 <- R1+R4 44: R4 <- R5+R6 48: R1 <- R2+R3 NYTT

1 June 20152G1502, föreläsning 3, vt20048 ADDI R A, data n ADDI Hur många bitar behövs? ~6+5+5! Hur stor blir varje instruktion? 16! Nios INSTRUKTIONSFORMAT med immediate data Exempelvis: 6 5 5

1 June 20152G1502, föreläsning 3, vt20049 Immediate data inför nya datavägar Execute Fetch Operand Write Back Fetch Instruction Program Memory m x 8 ALU PC IR0 IR1 IR2 +n Ny dataväg Register File 32 x 32 Register File 32 x 32

1 June 20152G1502, föreläsning 3, vt Immediate data är bara 5 bitar zEn PreFiX-instruktion PFX införs zPFX modifierar efterföljande instruktion och ger den ett längre immediate-värde zPFX använder ett specialregister K zPrincipen med prefixinstruktioner finns även i Pentium-serien R

1 June 20152G1502, föreläsning 3, vt Inför ny hårdvara K - register Execute Fetch Operand Write Back Fetch Instruction Program Memory m x 8 ALU ADD IR0 IR1 IR2 Register File 32 x 32 Register File 32 x 32 PC+2 PC+Imm PC

1 June 20152G1502, föreläsning 3, vt Hur används register K ? zPreFiX-instruktionen PFX Imm 11 skriver ett 11 bitars värde till register K zInstruktionen direkt efter PFX Imm 11 använder innehåll i K – sedan nollställs register K zImm 5 ökar till (Imm 11 cat Imm 5 ) R

1 June 20152G1502, föreläsning 3, vt PFX Imm 11 FIPFX - - PFX IMM 11 MOVI R dst, Imm 5 FIFOEXEWB

1 June 20152G1502, föreläsning 3, vt Mall för makro – en syntetisk instruktion.macroCLR reg MOVI\reg, 0x0.endm Effekt: man kan använda en ny instruktion clr %ri för att nollställa register %ri R

1 June 20152G1502, föreläsning 3, vt ADD Rdest, regA, regB Skriv makro för add-instruktion med 3 register.macroADD reg1, reg2, reg3 MOV\reg1, \reg2 ADD\reg1, \reg3.endm R

1 June 20152G1502, föreläsning 3, vt Makrot MOVIA reg, Addr ;Ladda ett 32 bitars värde till ett register ;Värdet kan vara negativt.macroMOVIA reg, Addr PFX%hi(\Addr) MOVI\reg, %lo(\Addr) PFX%xhi(\Addr) MOVHI\reg, %xlo(\Addr).endm R

1 June 20152G1502, föreläsning 3, vt JUMP (R addr ) inför nya datavägar Execute Fetch Operand Write Back Fetch Instruction Program Memory m x 8 ALU PC IR0 IR1 IR2 +n Ny dataväg Register File 32 x 32 Register File 32 x 32

1 June 20152G1502, föreläsning 3, vt BRA Imm n inför ADDitionsenhet och datavägar Execute Fetch Operand Write Back Fetch Instruction Program Memory m x 8 ALU ADD IR0 IR1 IR2 Register File 32 x 32 Register File 32 x 32 PC PC+4 PC+Imm

1 June 20152G1502, föreläsning 3, vt Fenomen pga PIPE-LINE Branch Delay Slot Instruktionen i minnespositionen närmast efter en hoppinstruktion kommer utföras innan hoppet verkställs Programexempel 16: BRA 64 20: ADD … 24: … … 84: SUB...

1 June 20152G1502, föreläsning 3, vt LOAD och STORE zVi vill kunna utföra instruktionerna LOADR dst, [ R addr ] STORE [ R addr ], R src

1 June 20152G1502, föreläsning 3, vt Execute Fetch Operand Write Back Fetch Instruction Program Memory m x 8 ALU ADD IR0 IR1 IR2 RWM LOAD och STORE med 4 stegs PIPE-LINE Register File 32 x 32 Register File 32 x 32 PC+4 PC+Imm PC

1 June 20152G1502, föreläsning 3, vt LOAD och STORE med 4 stegs PIPE-LINE LOAD to Rd USE Rd FIFO MEM WBFIFOEXEWB Data från MEM finns tillgängligt Data från MEM finns tillgängligt för FO tack vare Data Forward

1 June 20152G1502, föreläsning 3, vt Behov av indexerad adress zProgramvariabler ligger samlade zEtt register pekar ut variabelarean zVarje LOAD/STORE behöver först en adressberäkning med ADD zIndexerad adress LOAD R2 ← 8(R28); R2 ← hm(r28 + 8) zSparar en klockcykel vid varje LOAD

1 June 20152G1502, föreläsning 3, vt Programvariabler samlade i minnet zVariabler yint i; yint j; yint k; zläggs efter varann i minnet av kompilatorn minne i j k

1 June 20152G1502, föreläsning 3, vt Ett register pekar ut variabelarean zVid programstart tilldelas registret adressen till variabelarean i minnet minne i j k register r28

1 June 20152G1502, föreläsning 3, vt Varje LOAD/STORE behöver adressberäkning med ADD zk ska hämtas till R2 zR17 är ledigt  ADDI R17 <- R  LOAD R2 <- (R17) zEn extra instruktion zEn extra klockcykel zExtra krångel i programkoden minne i j k register r28

1 June 20152G1502, föreläsning 3, vt Indexerad adress zAddition i LOAD- instruktionen zLOAD R2 ← 8(R28) zinnebär R2 ← hm(r28+8) zInnehåll i R28, plus talet 8, blir minnesadress minne i j k register r28

1 June 20152G1502, föreläsning 3, vt Sparar en klockcykel vid varje LOAD zadd följt av load byts mot zload med "inbyggd" addition addi r17←r28+8 load r2←(r17) FIFO EXE WB FIFO MEM WB load r2←8(r17) FIFOALUWB MEM

1 June 20152G1502, föreläsning 3, vt LOAD och STORE zVi vill alltså kunna utföra instruktionerna LOADR dst, Offset[ R addr ] STOREOffset[ R addr ], R src

1 June 20152G1502, föreläsning 3, vt LOAD Rdst <- Offset[Raddr] zVi kan utföra instruktionen LOADR dst, Offset[ R addr ] zmed koden (tar 2 klockcykler eller hur) ADDIR adr, Offset LOADR dst, [ R addr ]

1 June 20152G1502, föreläsning 3, vt STORE Offset[Raddr] <- Rsrc zVi kan utföra instruktionen STOREOffset[ R addr ], R src zmed koden (tar 2 klockcykler eller hur) ADDIR adr, Offset ST[ R addr ], R src

1 June 20152G1502, föreläsning 3, vt stegs PIPE-LINE ALUFetch OperandMEMFetch Instruction Register File 32 x 32 Register File 32 x 32 Program Memory m x 8 ALU Register File 32 x 32 Register File 32 x 32 PC ADD IR0 IR1 IR2 RWM IR3 Write Back +n

1 June 20152G1502, föreläsning 3, vt Programexekvering i fem steg zFI- Fetch Instruction zFO - Fetch Operand zALU - Calculation zMEM - Memory Reference zWB - Write Back

1 June 20152G1502, föreläsning 3, vt stegs PIPE-LINE LOAD FIFOALUWB MEM FIFOALUWB MEM ADD Hur lång tid tar en instruktion ? 5 cykler Antal cykler per instruktion, CPI ? 1 cykel! Antal instruktioner per cykel ? 1 instruktion !

1 June 20152G1502, föreläsning 3, vt Fenomen pga PIPE-LINE 3. Load Delay LOAD to Rd FIFOALUWB MEM FIFOALUWB MEM Rd tillgängligt från minne Rd önskas till ALU-reg men finns inte tillgängligt USE Rd

1 June 20152G1502, föreläsning 3, vt Load DELAY även vid Data Forward LOAD FIFOALUWB MEM ADD Tillgängligt från minne FIFOALUWB MEM Skriv till ALU-reg Data Forward fungerar FIFOALUWB MEM NOP?

1 June 20152G1502, föreläsning 3, vt Slut på ”repetitionen” Nu kommer en hel del om hopp med mera Speciellt för Nios-processorn

1 June 20152G1502, föreläsning 3, vt Programmering med hopp zHopp = ett värde skrivs till PC zEffektivadress skrivs till PC zOlika adresseringsmetoder finns zJUMP Label brukar använda absolut adress zBRA Label brukar använda PC-relativ adress

1 June 20152G1502, föreläsning 3, vt Ovillkorligt hopp Villkorligt hopp zOvillkorligt hopp utförs alltid Exempel: JMP och BRA zVillkorligt hopp utförs endast om ett angivet villkor är sant Exempel Bcc där cc är villkoret zExempel på villkor EQZ = EQual to Zero NEZ = Not Equal to Zero

1 June 20152G1502, föreläsning 3, vt JUMP och BRA Ovillkorliga hopp z JUMP brukar ha direkt adress z BRA brukar ha PC-relativ adress JMP 104 ;PC := 104”hopp till 104”. BRA 40 ;PC := pc + 40”hopp till 268” 32: 104: 224: 268:

1 June 20152G1502, föreläsning 3, vt Typisk hopp-instruktion JUMP 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

1 June 20152G1502, föreläsning 3, vt Typisk hopp-instruktion BRA 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

1 June 20152G1502, föreläsning 3, vt Typisk hopp-instruktion JUMP (R addr ) zKopiera registerinnehåll till PC zRegister med 32 bitar betyder att 32 bits adress kan användas zHur får man 32 bits adress till registret ? zMOVIA R addr, Imm 32 eller motsvarande

1 June 20152G1502, föreläsning 3, vt Nios hopp-instruktion JMP %rA zSkifta innehåll i register %rA ett steg åt vänster och kopiera till PC

1 June 20152G1502, föreläsning 3, vt Nios JMP %rA inför nya datavägar Execute Fetch Operand Write Back Fetch Instruction Register File 32 x 32 Register File 32 x 32 Program Memory n x 16 ALU Register File 32 x 32 Register File 32 x 32 PC IR0 IR1 IR2 +2

1 June 20152G1502, föreläsning 3, vt Nios hårdvara för JMP %rA 32 bitar från ”A-busen” Program Counter 0 ignoreras

1 June 20152G1502, föreläsning 3, vt Typisk hopp-instruktion BR Imm n zPC sätts till PC + Imm n zHur stor är Imm n ? zHur stor vill vi att Imm n ska vara helst ?

1 June 20152G1502, föreläsning 3, vt Nios hopp-instruktion BR IMM11 zSkifta IMM11 ett steg vänster zgör Sign Extension zaddera till aktuellt värde i PC zPC <- PC (sext (IMM11) <<1)

1 June 20152G1502, föreläsning 3, vt BRA Imm n inför ADDitionsenhet och datavägar Execute Fetch Operand Write Back Fetch Instruction Register File 32 x 32 Register File 32 x 32 Program Memory n x 16 ALU Register File 32 x 32 Register File 32 x 32 PC ADD IR0 IR1 IR2 +2

1 June 20152G1502, föreläsning 3, vt Nios hårdvara för BR IMM IR0 PC ADD IMM11: 11 bitar från IR0 Sign Extension

1 June 20152G1502, föreläsning 3, vt Typisk instruktion SUBR dst, R srcA, R srcB zSubtrahera innehåll i R srcA från R srcB zoch skriv till R dst zFörutom resultatet / skillnaden zså lagras ytterligare information zi STATUS-flaggor

1 June 20152G1502, föreläsning 3, vt Typisk instruktion CMPR srcA, R srcB zJämför innehåll i R srcA och R srcB genom att zSubtrahera innehåll i R srcA från R srcB zmen skriv ej resultat till något register zInformation om resultatet / skillnaden lagras som information i STATUS-flaggor

1 June 20152G1502, föreläsning 3, vt STATUS-flaggor zZ - Zero; ”utfall lika med noll” zN - Negativ; ”utfall med negativt tecken” zV - oVerflow; ”utfall med overflow” zC - Carry; Carry-ut från ALU zPåverkas av ADD, SUB, CMP...

1 June 20152G1502, föreläsning 3, vt STATUS -flaggor Execute Fetch Operand Write Back Fetch Instruction Program Memory m x 8 ALU PC ADD IR0 IR1 IR2 +n NVZC Register File 32 x 32 Register File 32 x 32

1 June 20152G1502, föreläsning 3, vt Gäller detta för Nios-Processorn ? R0 R31 R1 PC Minne Generella registerProgramräknare NVZC Status

1 June 20152G1502, föreläsning 3, vt Villkorlig hopp-instruktion Bcond Imm n  PC sätts till PC + Imm n om cond är sant  PC sätts till PC + n om 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

1 June 20152G1502, föreläsning 3, vt 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.)

1 June 20152G1502, föreläsning 3, vt 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

1 June 20152G1502, föreläsning 3, vt 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 CMPIreg1, 0;jämför reg1 med noll IFScc_eq;om Z=1 BRLabel;hoppa till Label

1 June 20152G1502, föreläsning 3, vt olika villkor finns i Nios zcc_ncC = 0 zcc_cC = 1 zcc_nzZ = 0 zcc_zZ = 1 zcc_plN = 0 zcc_miN = 1 zcc_ltN xor V zcc_ge not(N xor V) z cc_gt not(Zor(NxorV)) z cc_le Zor(NxorV) z cc_nvV = 0 z cc_vV = 1 z cc_hinot (C or Z) z cc-laC or Z

1 June 20152G1502, föreläsning 3, vt Alias för villkor i Nios zcc_cs = cc_cCarry Set = Carry zcc_n = cc_miNegative = MInus zcc_cc = cc_ncCarry Clear = No Carry zcc_vc = cc_nvoVerflow Clear = No oVe... zcc_eq = cc_zEqual = Zero zcc_ne = cc_nzNot Equal = Not Zero zcc_vs = cc_voVerflow Set = oVerflow zcc_p = cc_plPlus = PLus

1 June 20152G1502, föreläsning 3, vt Nios instruktion IFRZ reg zExecute next instruction if register is Zero zExempel: if (reg1==0) goto Label IFRZreg1;om reg1 = 0 BRLabel;hoppa till Label zSKPRNZ är ekvivalent med IFRZ zOm nästa är en PFX så görs två nästa

1 June 20152G1502, föreläsning 3, vt Nios instruktion IFRNZ reg zExecute next instruction if register is Not Zero zExempel: if (reg1 != 0) goto Label IFRNZreg1;om reg1 ej är 0 BRLabel;hoppa till Label zSKPRZ är ekvivalent med IFRNZ zOm nästa är en PFX så görs två nästa

1 June 20152G1502, föreläsning 3, vt Nios instruktion NOP = No OPeration Binärkod för NOP = Det är samma binärkod som för MOV %r0, %r0 Vad gör MOV %r0,%r0 ? (tar tid)

1 June 20152G1502, föreläsning 3, vt funktioner, subrutiner, metoder zHur sker anrop ? zMed hoppinstruktion ! zHur sker återhopp ? zMed hoppinstruktion ! zReturadress måste lagras !

1 June 20152G1502, föreläsning 3, vt Subrutinanrop CALL RUT RET1:ADD … CALL RUT RET2:SUB... RUT:ADD … RETURN

1 June 20152G1502, föreläsning 3, vt Subrutinanrop CALL RUT RET1:ADD … CALL RUT RET2:SUB... RUT:ADD … CALL FKN RETURN FKN:MUL … CALL NEW RETURN

1 June 20152G1502, föreläsning 3, vt funktioner, subrutiner, metoder Hur sker parameteröverföring Var lagras parametrar zfrån anropare till rutinen, inparametrar zfrån rutinen till anroparen, returvärden Olika typ av parameter zvärde zpekare

1 June 20152G1502, föreläsning 3, vt Nios hopp-instruktion BSR IMM11 zLiknar BR IMM11 med tilläggg att zReturadress sparas i register %R15 zReturadressen är adressen till zinstruktionen närmast efter hoppluckan zdvs adress till BSR ökat med 4 zReturadressen sparas skiftad ett steg höger för att passa ihop med JMP %R15

1 June 20152G1502, föreläsning 3, vt Nios hopp-instruktion CALL %rA zLiknar JMP %rA med tillägg att zReturadress sparas i register %R15=%o7 zReturadressen är adressen till instruktionen närmast efter hoppluckan dvs adress till CALL ökat med 4 ! zReturadressen sparas skiftad ett steg höger för att passa ihop med JMP %R15

1 June 20152G1502, föreläsning 3, vt Nios hårdvara för BSR och CALL 0 PC A-bus till ALU-A register 32 bitar från PC ignoreras... A-bus till ALU-A register

1 June 20152G1502, föreläsning 3, vt Stackhantering zStack är speciell reserverad plats i minnet zStack Pekare pekar på plats i stacken zPUSH-operation, lägg på stack zPOP-operation, hämta från stack

1 June 20152G1502, föreläsning 3, vt STACK operationer PUSH och POP Stack Pointer SP PUSH op: SP <- sp - n mem(sp) <- op POPdst: dst <- mem(sp) SP <- sp + n n = antal bytes + -

1 June 20152G1502, föreläsning 3, vt Nios: PUSH reg ;Pusha ett register på stacken.macroPUSH reg SUBI%sp, 4;%sp = %o6 ST[%sp], \reg.endm ;PUSH %o6 är inte bra

1 June 20152G1502, föreläsning 3, vt Nios: POP reg ;Poppa ett register från stacken.macroPOP reg LD \reg, [%sp] ADDI%sp, 4;%sp = %o6.endm ;POP %o6 är förödande

1 June 20152G1502, föreläsning 3, vt Nios: Stack Reservera plats, initiera SP Stack Pointer SP.equ size, 256.data.align4 stack:.fill size, 4, 0....text … movia %sp, stack+size*4 + - stack:

1 June 20152G1502, föreläsning 3, vt Nios stöd för stack zStack Pointer = %r14 = %sp (alias %o6) zFinns det Stack-operationer ? zLDS är LOAD R dst <- [%sp, IMM8] zSTS är STORE [%sp,IMM8] <- R src med flera variationer zIngen PUSH- eller POP-instruktion zIngen JSR/RTS med returadress på stack

1 June 20152G1502, föreläsning 3, vt Nios stöd för subrutiner  Anrop med CALL reg, returadress i register %r15 = %o7 innehållet i reg multipliceras med 2 innan det skrivs till PC, jämför med JMP reg  Anrop med BSR Label  Retur med RET (JMP %r31 alias %i7)  Retur med LRET (JMP %r15 alias %o7)

1 June 20152G1502, föreläsning 3, vt Returadress vid subrutinanrop zI ett speciellt register (fördel/nackdel) zI valfritt register (fördel/nackdel) zI minnet på speciell plats (fördel/nackdel) zI minnet på valfri plats (fördel/nackdel) zI minnet på en stack med PUSH (fördel/nackdel) zI första ordet i subrutinen (fördel/nackdel)

1 June 20152G1502, föreläsning 3, vt Register Window Vad? Hur? Varför?

1 June 20152G1502, föreläsning 3, vt Register Window z32 registers are direct available z%g0-%g7 = %r0 -%r7; Global regs z%o0-%o7 = %r8 -%r15; Out regs z%L0-%L7 = %r16-%r23; Local regs z%i0-%i7 = %r24-%r31; In regs

1 June 20152G1502, föreläsning 3, vt Register Window z32 registers are direct available z128 or 256 or 512 possible registers zCWP - Current Window Pointer anger vilka register som just nu är direkt åtkomliga zCWP finns i statusregister %ctl0 !

1 June 20152G1502, föreläsning 3, vt Register Window zCWP = Current Window Pointer zSAVE ”öppna nytt fönster” minska CWP med 1 zRESTORE ”byt till gammalt fönster” öka CWP med 1

1 June 20152G1502, föreläsning 3, vt Table 20. Smallest Nios Register File Reg[.. Reg[24..31] Reg[16..23] Reg[8..15] Reg[ ] Reg[ ] Reg[ ] Reg[0..7] %o0..%o7 %L0..%L7 %i0..%i7 %g0..%g7 %o0..%o7 %L0..%L7 %i0..%i7 %g0..%g7 %o0..%o7 %L0..%L7 %i0..%i7 %g0..%g7 %o0..%o7 %L0..%L7 %i0..%i7 %o0..%o7 %L0..%L7 %i0..%i7%g0..%g7 %o0..%o7 %L0..%L7 %i0..%i7%g0..%g7 SAVE RESTORE CWP = 0 CWP = 1 CWP = 5 CWP = 6 CWP = 4 CWP = 2

1 June 20152G1502, föreläsning 3, vt Exempel på subrutinkod utan SAVE och RESTORE nästlat subrutinanrop går ej RUT:kod kod ;BSR RUT2;subrutinanrop nix … LRET;JMP %07

1 June 20152G1502, föreläsning 3, vt RUT:SAVE %sp,0;ändra inte %sp kod BSR RUT2;fungerar … RET;JMP %i7 RESTORE;i hopplucka Exempel på subrutinkod med SAVE och RESTORE nästlat subrutinanrop går bra

1 June 20152G1502, föreläsning 3, vt Parameterplats till och från subrutin zI register (fördel/nackdel) zI minnet på fast adress (fördel/nackdel) zI minnet på en stack (fördel/nackdel)

1 June 20152G1502, föreläsning 3, vt Exempel på parameteröverföring med SAVE och RESTORE zAnroparen lagrar parametrar i %o-register (utom %o7) zAnroparen gör BSR eller CALL varvid returadress sparas i %o7 zSubrutinen gör SAVE varvid alla %oreg hamnar på platser %ireg zReturadress finns nu i %i7 zParametrar finns nu i %i-register zDet finns 16 ”nya” register, 8 st %Local och 8 st %Out zSubrutinen gör RESTORE zReturadress finns nu i %o7 varvid retur ska göras med JMP %o7 (samma som LRET)

1 June 20152G1502, föreläsning 3, vt Programexempel - subrutin ta fram max av val1 och val2 zExempel på C-kod torde kunna vara... int val1, val2, result; /* variabler */... int max (int val1, int val2); /* prototyp */... result = max ( val1, val2); /* anrop */

1 June 20152G1502, föreläsning 3, vt Programexempel - subrutin ta fram max av val1 och val2 zint val1, val2, result; kan översättas till (av kompilator).data val1:.word0 val2:.word0 result:.word0...

1 June 20152G1502, föreläsning 3, vt anrop av max (val1, val2) inparametrar i register ;result = max ( val1, val2) kan översättas till.text movia%L0, val1 ld%o0, [%L0];parameter val1 i %o0 movia%L0, val2 ld%o1, [%L0] ;parameter val2 i %o1 movia %L0, till ett register call%L0;ea i register nop movia%L0, result st[%L0], %o0;returvärde i %o0

1 June 20152G1502, föreläsning 3, vt anrop av max (val1, val2) inparametrar på stack ;result = max ( val1, val2);.text movia%L0, val2 ld%L1, [%L0] push%L1;inparameter val2 till stack movia%L0, val1 ld%L1, [%L0] push%L1;inparameter val1 till stack bsrmax;PC-relativ adress nop addi%sp, 8;rensa stacken från parametrar movia%L0, result st[%L0], %o0;kopiera returvärde i %o0 till minnet

1 June 20152G1502, föreläsning 3, vt Programexempel - subrutin ta fram max av val1 och val2 int max (int val1, int val2); { int tmp; tmp = val1; if (val2 > val1 ) tmp = val2; return (tmp); } kan översättas till (kompileras till)

1 June 20152G1502, föreläsning 3, vt int max (int val1, int val2) inparametrar i register max:cmp%o0, %01 ifscc_lt mov%o0, %o1 lret;jmp %o7

1 June 20152G1502, föreläsning 3, vt int max (int val1, int val2) inparametrar på stack max:save %sp, 0;nytt reg-window lds%i0, [%sp, 1 ];val2 till %i0 lds%L0, [%sp, 0];val1 till %L0 cmp%i0, %L0 ifscc_lt;om val2 < val1 mov%i0, %L0;val1 till %i0 ret;jmp %i7 restore;”stäng fönster”

1 June 20152G1502, föreläsning 3, vt Föreläsning 3 Sammanfattning z4-stegs PIPE-LINE zLoad och Store mot Minne z5-stegs PIPE-LINE zNios hårdvara för hopp zSubrutiner, anrop, retur, stack zRegister Window zParameteröverföring