870 likes | 1.08k Views
IS1200 Datorteknik och komponenter. Föreläsning 7 Exceptions Interrupts - Traps. IS1200 Datorteknik http://www.ict.kth.se/courses/IS1200. CE F1. CE F2. CE Ö1. CE F3. CE Ö2. Assemblerprogram. CE F4. CE Ö3. lab nios2time. C. CE F5. CE Ö4. hemlab C. In- och utmatning. CE F6.
E N D
IS1200 Datorteknik och komponenter Föreläsning 7 Exceptions Interrupts - Traps IS1200 Datorteknik föreläsning CE - F7
IS1200 Datorteknikhttp://www.ict.kth.se/courses/IS1200 CE F1 CE F2 CE Ö1 CE F3 CE Ö2 Assemblerprogram CE F4 CE Ö3 lab nios2time C CE F5 CE Ö4 hemlab C In- och utmatning CE F6 CE Ö5 CE Ö6 lab nios2io Avbrott och "trap" CE F7 CE Ö7 lab nios2int Cacheminnen CE F8 CE Ö8 hemlab cache Trådar, synkronisering CE F9 CE Ö9 hemlab trådar CE F10 CE Ö10 tentamen IS1200 Datorteknik föreläsning CE - F7
Litteraturhänvisningar • Kursboken, kapitel 5.2 Avbrott, principer (ej MIPS) • Nios-2-manualen, chap 3 (October 2007) • Exempelsamling del 7 med lösningar • Lab-PM för laboration 3, nios2int IS1200 Datorteknik föreläsning CE - F7
Viktiga delar i en dator CPU BUS program I/O MEM data IS1200 Datorteknik föreläsning CE - F7
FETCH (update PC) (decode) EXECUTE Programexekveringi två steg, normalfall IS1200 Datorteknik föreläsning CE - F7
Exceptions”Undantag” / ”Särfall” Under den normala programexekveringen kan det inträffa ”speciella händelser” av olika slag som hanteras på likartat sätt 1. Interrupts, externa ”händelser”, avbrottssignaler (hardware interrupt) 2. TRAP-instruktioner (software exception) 3. Andra undantag, interna IS1200 Datorteknik föreläsning CE - F7
Hantering av Exception Då ett exception inträffar avbryts pågående program och exekvering ”hoppar” till en annan programdel som kallas Exception Handler Programkoden i Exception Handler åtgärdar undantaget och därefter sker ”returhopp” till det avbrutna programmet IS1200 Datorteknik föreläsning CE - F7
Exception Handler Huvudprogram ExceptionHandler exception ”hopp vid exception” intruction retur-adress ”hopp vid retur” returhopp Var placeras koden för ExceptionHandler ? Hur utförs hopp till ExceptionHandler ? Hur utförs hopp till returadressen ? IS1200 Datorteknik föreläsning CE - F7
Några svar för Nios (och MIPS) Returadress sparas av Nios HW i register r29= ea = exception return address Återhopp görs med RTE-instruktionen Koden för exception Handler placeras av översättarprogrammet på ledig plats i programminnet Hårdvara möjliggör för hårdvara eller programvara att ”avkoda” orsak till exception och genomföra hopp till rätt Exception Handler beroende på orsaken IS1200 Datorteknik föreläsning CE - F7
Exception Handler Huvudprogram ExceptionHandler exception ”hopp vid exception” intruction retur-adress ”hopp vid retur” returhopp Var placeras koden för ExceptionHandler ? ”var som helst” Hur utförs hopp till ExceptionHandler ? hårdvara Hur utförs hopp till returadressen ? Med RTE -instruktion IS1200 Datorteknik föreläsning CE - F7
1. Asynchronous ExceptionsExternal Hardware Interrupts • Yttre händelser orsaker avbrott (External)Elektrisk signal till CPU-chippet. • Avbrott kan komma när som helst i förhållande till det program som körs (Asynchronous) • Det måste finnas minst en insignal/pinne (Hardware) på CPU-chippet med funktionenIRQ - Interrupt ReQuest,troligen flera insignaler/pinnar • Nios II har 32, IRQ31—IRQ00 IS1200 Datorteknik föreläsning CE - F7
Viktiga delar i en datorIRQ-signaler, Interrupt ReQuest CPU IRQ (t.ex.IRQ31—IRQ00) BUS program I/O MEM data IS1200 Datorteknik föreläsning CE - F7
exc00Hand exc01Hand excNNHand Exceptions in many CPU:sException Vector Table 0 1 2 3 NN Mjukvara eller Hårdvara som automatiskt gör hopp till rätt Exception-Handler samt lite till ... Exception . . . . . . instr null Exception Vector Table IS1200 Datorteknik föreläsning CE - F7
Nios-II Exceptions Control Registers Det finns ”fem” Control Registers 0. status - ctl0, read/write (status) • estatus - ctl1, read/write (exception status) • bstatus - ctl2, read/write (break status) • ienable - ctl3, read/write (interrrupt enable) • ipending - ctl4, read (interrupt pending) • . . . (det finns ev. fler men de diskuteras ej här) IS1200 Datorteknik föreläsning CE - F7
Nios-II control register 0status, ctl0 PIE U 31 2 1 0 Endast en (två) bit(ar) används: PIE = Processor Interrupt Enable (1=enable, 0=disable) (U = User Mode, 1=User Mode, 0=Supervisor Mode) (User och Supervisor mode är INTE implementerat i vår utrustning!) IS1200 Datorteknik föreläsning CE - F7
Grindar att öppna före avbrott & & & BIT in IPENDING ctl4 IRQ-bit Interrupt from I/O Interrupt to CPU BIT in I/O maskreg BIT in IENABLE ctl3 PIE-bit in STATUS ctl0 IS1200 Datorteknik föreläsning CE - F7
Nios-II control-register 0status, ctl0 • Bit med index 0 i status-register betecknas PIE – Processor Interrupt Enable • PIE = 0 förbjuder interrupt (disable interrupts) • PIE = 1 tillåter interrupt (enable interrupts) IS1200 Datorteknik föreläsning CE - F7
Nios-II instruktioner för attläsa och skriva ctl-regs • Läsning, kopiera från ctli till rj RDCTL rj, ctli • Skrivning, kopiera till ctli från rj WRCTL ctli, rj (RDCTL och WRCTL kan bara exekveras i supervisor mode. Ger access-violation exception i user mode. Vi använder alltid supervisor mode i våra labbar) IS1200 Datorteknik föreläsning CE - F7
Nios-II control register 1 estatus, ctl1 (exception status) • Då en exception accepteras, kopieras status till estatus så att ”gamla” status-värden kan läsas/skrivas av koden i Exception Handler • Vid retur från Exception Handler, med instruktionen eret, kopieras estatus tillbaks till status IS1200 Datorteknik föreläsning CE - F7
Nios-II control register 3ienable, ctl3 (interrupt enable) ctl3 är ett 32 bitars register (32 vippor) För var och en av de 32 IRQ-signalerna finns en maskbit vars • värde 0 förbjuder avbrott (disable) • värde 1 tillåter avbrott (enable) • Se figur 3-1 i manualen (October 2007) IS1200 Datorteknik föreläsning CE - F7
ctl3 Flip-Flops ! No Flip-Flops ! ctl4 Signal Levels ! ctl0 bit 0 EI / DI IS1200 Datorteknik föreläsning CE - F7
Grindar att öppna före avbrott & & & BIT in IPENDING ctl4 IRQ-bit Interrupt from I/O Interrupt to CPU BIT in I/O maskreg BIT in IENABLE ctl3 PIE-bit in STATUS ctl0 IS1200 Datorteknik föreläsning CE - F7
Nios-II control register 4ipending, ctl4 (interrupt pending) ctl4 är 32 avläsbara signaler (inga vippor) För var och en av de 32 IRQ-signalerna finns en bit som programvaran kan läsa och som anger • värde 0 inget avbrott begärs eller är förbjudet • värde 1 avbrott begärs och är tillåtet • Se figur 3-1 i manualen (October 2007) IS1200 Datorteknik föreläsning CE - F7
ExceptionsNios-II: Alltid ”hopp” till 0x800020 huvudprogram Fast adress exception 0x800020: jmp ExcHandler ”hopp vid anrop” instruction returadress IS1200 Datorteknik föreläsning CE - F7
Exception-HandlerNios-II: orsak till exception ? Symbolisk adress Vi väljer namn huvudprogram Symboliska adresser Vi väljer namn ExcHandler Fast adress exception ? 0x800020: jmp ExcHandler IntHandler ”hopp vid anrop” OPCODE reg ? returadress TrapHandler ? ElseHandler IS1200 Datorteknik föreläsning CE - F7
IntHandler: NoInt: TrapHandler: NoTrap: IS1200 Datorteknik föreläsning CE - F7
Interrupt or Trap ?figur 3-2 i manualen ExcHandler: # r24/et = exception temporary rdctl r24, ctl1 # copy ctl1/estatusandi r24, r24, 0b1 # select index 0beq r24, r0, NoInt # if EPIE == 0 rdctl r24, ctl4 # copy ctl4/ipendingbeq r24, r0, NoInt # if ctl4 == 0 IntHandler: ... # Interrupt Handler ... NoInt: ... # code see below IS1200 Datorteknik föreläsning CE - F7
Interrupt-Handlerletar fram aktuell IRQ-handler irq00-int IntHandler retur subi r29, r29, 4 IRQ-00? irq01-int retur IRQ-01? irq02-int IRQ-02? retur IRQ-31? irq31-int retur IS1200 Datorteknik föreläsning CE - F7
Vilken Interrupt ?figur 3-2 i manualen IntHandler:subi r29, r29, 4 # justera ea/returadress rdctl r24, ctl4 # läs ipendingandi r24, r24, 0b1 # IRQ-00?bne r24, r0, irq00-int # int on IRQ-00 rdctl r24, ctl4 # läs ipendingandi r24, r24, 0b10 # IRQ-01?bne r24, r0, irq01-int # int on IRQ-01 . . . # ytterligare upp till IRQ-15 och sedan 16-31rdctl r24, ctl4 # läs ipendingandhi r24, r24, 0x0001 # IRQ-16? !!!bne r24, r0, irq16-int # int on IRQ-16. . . IS1200 Datorteknik föreläsning CE - F7
2. Synchronous ExceptionsTRAP instruction • Exception med hjälp av TRAP-instruktion • Placeras av programmeraren på önskad och känd plats (Synchronous)Används t.ex. för OS System Call (SysCall) • Nios-2: TRAP erbjuder en enda TRAP till den enda fasta adressen = 0x800020 • Parameter (i r4) möjliggör olika SysCall IS1200 Datorteknik föreläsning CE - F7
Exception-HandlerNios-II: orsak till exception ? Symbolisk adress Vi väljer namn huvudprogram Symboliska adresser Vi väljer namn ExcHandler Fast adress exception ? 0x800020: jmp ExcHandler IntHandler ”hopp vid anrop” OPCODE reg ? returadress TrapHandler ? ElseHandler REPRIS IS1200 Datorteknik föreläsning CE - F7
Interrupt or Trap ? (cont.)figur 3-2 i manualen REPRIS ExcHandler: # r24/et = exception temporary rdctl r24, ctl1 # copy ctl1/estatusandi r24, r24, 0b1 # select index 0beq r24, r0, NoInt # if PIE == 0 rdctl r24, ctl4 # copy ctl4/ipendingbeq r24, r0, NoInt # if ctl4 == 0 IntHandler: ... # Interrupt Handler ... NoInt: ... # code see below IS1200 Datorteknik föreläsning CE - F7
IntHandler: NoInt: TrapHandler: NoTrap: IS1200 Datorteknik föreläsning CE - F7
Interrupt or Trap(alternativ 1) . . . NoInt: # Alternativ 1 push r8 # skydda/låna r8 ldw r24, -4(r29) # kopiera instruktion movia r8, trapcode # kopiera TRAP code cmpeq r24, r8, r24 # yes, TRAP pop r8 # återställ/återlämna r8 bne r24, r0, TrapHandler # yes, TRAP NoTrap: . . . .equ trapcode, 0x003B683A # op-code of TRAP OBS r1 kan inte användas! (kan ju innehålla värdefull information) Lösning: Använd stacken för att skydda t.ex. r8 IS1200 Datorteknik föreläsning CE - F7
Interrupt or Trap(alternativ 2) . . . NoInt: # Alternativ 2push r8 # skydda/låna r8 ldw r24, -4(r29) # kopiera instruktion movia r8, trapdum # kopiera TRAP code ldw r8, 0(r8) # till r1 cmpeq r24, r8, r24 # yes, TRAP pop r8 # återställ/återlämna r8 bne r24, r0, TrapHandler # yes, TRAP NoTrap: . . . .data # eller i .text .align 2 # på adress delbar med 4 trapdum: trap # op-code of TRAP IS1200 Datorteknik föreläsning CE - F7
Vilken TRAP”System Call med TRAP” TrapHandler: movi r24, 0 # konstant 0 till r1 beq r4, r24, SysCall-0 # javisst movi r24, 1 # konstant 1 till r1 beq r4, r24, SysCall-1 # javisst . . . # och så vidare IS1200 Datorteknik föreläsning CE - F7
TrapHand: IntHand: subi r29, r29, 4 Yes Yes No No Yes Yes No No Yes Yes IRQ00 IRQ31 IRQ01 Trap ? trap0 trapn trap1 Int ? No No trap1Hand irq01Hand trap0Hand irq31Hand irq00Hand ElseHand trapnHand error error eret eret Exceptions in Nios-IISuggested software structure ExcHand: Yes No Yes No main: ”init” loop: int instr 0x800020:”jmp ExcHand” trap br loop IS1200 Datorteknik föreläsning CE - F7
irq00Hand irq01Hand irq31Hand Interrupts in many CPU:sInterrupt Vector Table NästanREPRIS 0 1 2 3 31 Mjukvara eller Hårdvara som automatiskt gör hopp till rätt Interrupt Handler Interrupt instr null Interrupt Vector Table IS1200 Datorteknik föreläsning CE - F7
trap0Hand trap1Hand trapnHand Traps in many CPU:sTrap Vector Table 0 1 2 3 n Mjukvara eller Hårdvara som automatiskt gör hopp till rätt TrapHandler Exception TRAP null Trap Vector Table IS1200 Datorteknik föreläsning CE - F7
Registrera en Interrupt Handlervad menas med det ? Koppla ihop en Interrupt Handler kodmed en avbrottssignal med ett visst index dvs Skriv in startadress på rätt plats i avbrottsvektortabellen Kallas ibland ”register an interrupt” Nios-II: Det finns en C-function för detta: retval = alt_irq_register(3 parameters); IS1200 Datorteknik föreläsning CE - F7
Initiera för avbrottflera steg i Nios-II • Kopiera ”stubbe” till adress 0x800020 • För varje avbrottskällaSkriv kod för en Interrupt Handler och ”registrera i avbrottsvektortabellen” samt dessutom • Initiera IO-enhet, olika för varje IO-enhet • Initiera bitar i IENABLE / ctl3 • Initiera PIE-biten i STATUS / ctl0 IS1200 Datorteknik föreläsning CE - F7
Grindar att öppna före avbrott & & & BIT in IPENDING ctl4 IRQ-bit Interrupt from I/O Interrupt to CPU BIT in I/O maskreg BIT in IENABLE ctl3 PIE-bit in STATUS ctl0 1. 2. 3. IS1200 Datorteknik föreläsning CE - F7
3. Synchronous ExceptionsInternal Exceptions ”Inre” händelser kan orsaka exception (Internal Synchronous Exception) ”Upptäcks” av hårdvara internt i CPU:n Exempel (olika typ av ”error”) Unimplemented/Illegal instructions Overflow (arithmetic/logic operation) Misaligned Memory Reference Divide by zero Access violation (in User Mode ...) ... IS1200 Datorteknik föreläsning CE - F7
Exceptions i Nios-IIInterrupt Vector Table ? • Programräknaren får ett nytt värde som anges av hårdvaran till 0x800020 • Avbrottsvektortabell används EJ av hårdvaran i Nios-II • Returadress sparas på lämplig plats (ea/r29) • Mjukvaran kan administreras i tabell-form som liknar en avbrottsvektortabell IS1200 Datorteknik föreläsning CE - F7
Priority - prioritetViktiga frågor • Exekverar processorn på en viss prioritet ?Var finns information om CPU-priority ? • Har varje exception olika prioritet ? • Prioritet för en external interrupt ? • Prioritet för en TRAP-instruktion ? • Prioritet för en internal exception ? IS1200 Datorteknik föreläsning CE - F7
Nios-II Priority • Interrupt har en viss prioritet, 31—00 (hur avgörs prioritet ?) • TRAP-instruktion, är ohejdbar (non-maskable) varför? • Internal exception, är ohejdbar (non-maskable) varför? IS1200 Datorteknik föreläsning CE - F7
Nios-II Exceptions Enable/Disable Exception • Globally Enable/Disable Interrupt by PIE-bit in ctl0 / status control register • Selectively Enable/Disable Interrrupt by bits in ctl3 / ienable control register • TRAP instructions can not be disabled (non-maskable) • Internal exceptions can not be disabled (non-maskable) • Selectively Enable/Disable each I/O (lab3) • Acknowledge interrupt signals from I/O”clear/reset” interrupt hardware signal IS1200 Datorteknik föreläsning CE - F7
Nios-II ExceptionsException Processing Sequenceperformed by hardware 1. Copy status into estatus (ctl0 into ctl1) 2. Set PIE to 0, disabling all interrupts (in ctl0) (3. Set U to 0, execute in supervisor mode, in ctl0) 4. Save returnaddress in ea=r29 5. Set PC to predefined value (0x800020) 6. Continue fetch-execute (Remark: return address must be decremented by 4 before executing eret in interrupt handlerbut not in trap handler, why?) IS1200 Datorteknik föreläsning CE - F7
Nios II: eretexception return-instruction performed by hardware eret #return from exception using #content of r29 as return address 1. status estatus copy ctl1 back to ctl0 2. PC ea / r29 3. Continue fetch-execute IS1200 Datorteknik föreläsning CE - F7
Bitar i ctl-registerRead – Modify - Write Exempel på användbara instruktioner • RDCTL ri, ctlj # läs/kopiera ctlj till ri • WRCTL ctlj,ri # skriv/kopiera ri till ctlj • ANDI ri, rj, ”mask” # ”nollställ” bitvis # ”maska fram” • ORI ri, rj, ”mask” # ”ettställ” bitvis • XORI ri, rj, ”mask” # ”invertera” bitvis IS1200 Datorteknik föreläsning CE - F7