860 likes | 1.01k Views
Föreläsning 7 Exceptions termin 20xx (period X) för alla mögliga. IS1200 Datorteknik. F1. F2. Ö1. Ö2. F3. Ö3. LAB-1. F4. F5. Ö4. Hemlab-1. F6. Ö5. Ö6. LAB-2. F7. Ö7. LAB-3. F8. Ö8. Hemlab-2. F9. Ö9. Hemlab-3. Ö10. Tentamen. F10.
E N D
IS1200 Datorteknik föreläsning 7, (Allan) Föreläsning 7 Exceptions termin 20xx (period X) för alla mögliga IS1200 Datorteknik
IS1200 Datorteknik föreläsning 7, (Allan) F1 F2 Ö1 Ö2 F3 Ö3 LAB-1 F4 F5 Ö4 Hemlab-1 F6 Ö5 Ö6 LAB-2 F7 Ö7 LAB-3 F8 Ö8 Hemlab-2 F9 Ö9 Hemlab-3 Ö10 Tentamen F10 IS1200 Datorteknikhttp://www.ict.kth.se/courses/IS1200 Assemblerkod 4 stegs pipeline Nios2time C-kod Nios2io Nios2int Cache-minnen CPU-scheduling Året 2009 Period X
IS1200 Datorteknik föreläsning 7, (Allan) 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 7, (Allan) Viktiga delar i en dator CPU BUS program I/O MEM data
IS1200 Datorteknik föreläsning 7, (Allan) Programexekveringi två steg, normalfall FETCH (update PC) (decode) EXECUTE
IS1200 Datorteknik föreläsning 7, (Allan) Exceptions”Undantag” 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 2. TRAP-instruktioner 3. Andra undantag, interna
IS1200 Datorteknik föreläsning 7, (Allan) 1. Asynchronous ExceptionsExternal 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 Det måste finnas minst en pinne på CPU-chippet med funktionenIRQ - Interrupt Request,troligen flera pinnar (IRQ31—IRQ00)
IS1200 Datorteknik föreläsning 7, (Allan) Viktiga delar i en datorIRQ-signaler, Interrupt ReQuest IRQ (t.ex.IRQ31—IRQ00) t.ex. Serieport - IRQ4 Timer – IRQ10 CPU BUS program I/O MEM data
IS1200 Datorteknik föreläsning 7, (Allan) Exception Handler Huvudprogram ExceptionHandler ”hopp vid anrop” exception intruction retur-adress returhopp var finns ExceptionHandler ? var lagras adressen till ExceptionHandler ? var sparas returadressen ?
IS1200 Datorteknik föreläsning 7, (Allan) Exceptions in many CPU:sException Vector Table exc00Hand exc01Hand excNNHand 0 1 2 3 NN Mjukvara eller Hårdvara som automatiskt gör hopp till rätt Exception-Handler samt lite till nämligen ... Exception . . . . . . instr null Exception Vector Table
IS1200 Datorteknik föreläsning 7, (Allan) 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 fler men de diskuteras ej här)
IS1200 Datorteknik föreläsning 7, (Allan) Nios-II Statusregister 0status, ctl0 PIE U 31 2 1 0 Endast två bitar används: PIE = Processor Interrupt Enable (1=enable, 0=disable) U = User Mode (1=User Mode, 0=Supervisor Mode) (Hur byter man mellan User och Supervisor mode? Ej implementerat!)
IS1200 Datorteknik föreläsning 7, (Allan) Nios-II control-register 0status, ctl0 • Bit med index 0 i status-register betecknas PIE – Processor Interrupt Enable • PIE = 0 förbjuder interrupt (int. disable) • PIE = 1 tillåter interrupt (int. enable)
IS1200 Datorteknik föreläsning 7, (Allan) Nios-II Statusregister 1 estatus, ctl1 (exception status) • Då en exception accepteras, kopieras status till estatus så att ”gamla” status-värden kan läsas/skrivas av Exception Handler • Vid retur från Exception Handler, med instruktionen eret, kopieras estatus tillbaks till status
IS1200 Datorteknik föreläsning 7, (Allan) Nios-II instruktioner för attläsa och skriva ctl-regs Läsning, kopiera till rj från ctli RDCTL rj, ctli Skrivning, kopiera till ctli från rj WRCTL ctli, rj Kan bara exekveras i supervisor mode. Ger access-violation exception i user mode. Vi använder endast supervisor mode i våra labbar
IS1200 Datorteknik föreläsning 7, (Allan) Ändra i ctl-registerRead – Modify - Write Exempel på användbara instruktioner RDCTL ri, ctlj # kopiera ctlj till ri WRCTL ctlj,ri # kopiera ri till ctlj ANDI ri, rj, ”mask” # ”nollställ”, # ”maska fram” ORI ri, rj, ”mask” # ”ettställ” XORI ri, rj, ”mask” # ”invertera”
IS1200 Datorteknik föreläsning 7, (Allan) Nios-II Statusregister 1estatus, ctl1 EU EPIE 31 2 1 0 Samma bitkonfiguration som ctl0-status Endast två bitar används: EPIE = Processor Interrupt Enable (1=enable, 0=disable) EU = User Mode (1=User Mode, 0=Supervisor Mode)
IS1200 Datorteknik föreläsning 7, (Allan) Nios-II ExceptionsException Processing Sequence 1. Copy status into estatus 2. Set PIE to 0, disabling all interrupts 4. Set U to 0, execute in supervisor mode 5. Save returnadress in ea=r29 6. Set PC to predefined value 0x800020 (Remark: return address must be decremented by 4 before executing eret in interrupt handlerbut not in trap handler)
IS1200 Datorteknik föreläsning 7, (Allan) ERET-instruction eret # return from exception using content of r29 as return address PC ea status estatus
IS1200 Datorteknik föreläsning 7, (Allan) Nios-II Statusregister 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 7, (Allan) ctl3 Flip-Flops ! No Flip-Flops ! ctl4 Signal Levels ! EI / DI
IS1200 Datorteknik föreläsning 7, (Allan) Nios-II Statusregister 4ipending, ctl4 (interrupt pending) ctl3 är 32 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 disable värde 1 avbrott begärs och tillåts Se figur 3-1 i manualen (October 2007)
IS1200 Datorteknik föreläsning 7, (Allan) ExceptionsNiosII: Alltid ”hopp” till 0x800020 huvudprogram Fast adress exception 0x800020: jmp ExcHandler ”hopp vid anrop” instruction returadress
IS1200 Datorteknik föreläsning 7, (Allan) Exception-HandlerNios-II: orsak till exception ? huvudprogram ExcHandler valbar adress fast adress exception 0x800020: valbar adress jmp ExcHandler IntHandler ”hopp vid anrop” ? OPCODE reg returadress valbar adress TrapHandler valbar adress ElseHandler
IS1200 Datorteknik föreläsning 7, (Allan) 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 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 7, (Allan) Interrupt-Handlerletar fram aktuell IRQ-handler valbara adresser irq00-int IntHandler valbar adress retur subi r29, r29, 4 IRQ-00? IRQ-01? IRQ-04? irq04-int retur IRQ-03? IRQ-31? irq31-int retur
IS1200 Datorteknik föreläsning 7, (Allan) Vilken Interrupt ?figur 3-2 i manualen IntHandler:subi r29, r29, 4 # justera ea 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-31
IS1200 Datorteknik föreläsning 7, (Allan) 2. Synchronous ExceptionsTRAP instruction • Exception med hjälp av TRAP-instruktion • Placeras av programmeraren på önskad och känd plats.Används t.ex. för OS System Call • 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 7, (Allan) Exception-HandlerInterrupt eller Trap ? huvudprogram valbar adress ExcHandler fast adress exception 0x800020: valbar adress jmp ExcHandler IntHandler ”hopp vid anrop” ? OPCODE reg returadress valbar adress TrapHandler valbar adress ElseHandler REPRIS
IS1200 Datorteknik föreläsning 7, (Allan) Interrupt or Trap ? (cont.)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 PIE == 0 rdctl r24, ctl4 # copy ctl4/ipendingbeq r24, r0, NoInt # if ctl4 == 0 IntHandler: ... # Interrupt Handler ... NoInt: ... # code see below REPRIS
IS1200 Datorteknik föreläsning 7, (Allan) Interrupt or Trapfigur 3-2 i manualen . . . NoInt: # Alternativ 1 push r8 # skydda/låna r8 ldw r24, -4(r29) # kopiera instruktion movia r8, trapcode # kopiera TRAP code beq r8, r24, TrapHandler # yes, TRAP pop r8 # återställ/återlämna r8 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 7, (Allan) Interrupt or Trapfigur 3-2 i manualen . . . NoInt: # Alternativ 2push r8 ldw r24, -4(r29) # kopiera instruktion movia r8, trapdum # kopiera TRAP code ldw r8, 0(r8) # till r1 beq r8, r24, TrapHandler# yes, TRAP pop r8 NoTrap: . . . . . . .data # eller i .text trapdum: trap # op-code of TRAP
IS1200 Datorteknik föreläsning 7, (Allan) Vilken TRAPSystem Call med TRAP TrapHandler:pop r8 # återställ r8 movia r24, 0 # konstant 0 till r1beq r4, r24, SysCall-0 # javisst movia r24, 1 # konstant 1 till r1beq r4, r24, SysCall-1 # javisst . . .
IS1200 Datorteknik föreläsning 7, (Allan) Exceptions in Nios-IISuggested software structure IntHand: Int ? subi r29, r29, 4 TrapHand: Yes IRQ00 irq00Hand Trap ? No Yes Yes IRQ01 irq01Hand trap0 trap0Hand ElseHand No No Yes Yes IRQ31 irq31Hand trap1 trap1Hand No No Yes error trapn eret trapnHand No error eret ExcHand: Yes No Yes No int instr 0x800020:”jmp ExcHand” trap
IS1200 Datorteknik föreläsning 7, (Allan) Standard methodInterrupt Vector Table irq00Hand irq01Hand irq31Hand REPRIS 0 1 2 3 31 Mjukvara eller Hårdvara som automatiskt gör hopp till rätt avbrottsrutin samt lite till nämligen ... Interrupt instr null Interrupt Vector Table
IS1200 Datorteknik föreläsning 7, (Allan) Registrera en Interrupt Handlervad menas med det ? Koppla ihop en vald Interrupt Handler med en avbrottssignal med ett visst index Skriv in startadress på rätt plats i avbrottsvektortabellen Kallas ibland ”register an interrupt” HAL-function: returvärde = alt_irq_register(parametrar);
IS1200 Datorteknik föreläsning 7, (Allan) Initiera för avbrotti Nios-II Kopiera ”stubbe” till adress 0x800020 Initiera IO-enhet, olika för varje IO-enhet Skriv och registrera en Interrupt Handlerför varje avbrottskälla Initiera bitar i IENABLE / ctl3 Initiera PIE-biten i STATUS / ctl0
IS1200 Datorteknik föreläsning 7, (Allan) 3. Synchronous ExceptionsInternal Exceptions Inre händelser orsaker avbrott (Internal) Orsakas av hårdvara internt i CPU:n Exempel (olika typ av ”error”) Unimplemented instructions Overflow Misaligned Memory Reference Divide by zero Access violation ...
IS1200 Datorteknik föreläsning 7, (Allan) ExceptionsException 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 7, (Allan) 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 intern exception ?
IS1200 Datorteknik föreläsning 7, (Allan) Nios-II Priority Interrupt har en viss prioritet, 31—00 (hur avgörs prioritet ?) TRAP-instruktion, är ohejdbar (varför?) Intern exception, är ohejdbar (varför?)
IS1200 Datorteknik föreläsning 7, (Allan) Nios-II Exceptions Enable/Disable Exception Globally Enable/Disable Interrupt by PIE-bit Selectively Enable/Disable Interrrupt by bits in ienable TRAP instructions can not be disabled Internal exceptions can not be disabled Selectively Enable/Disable each I/O (lab3) Acknowledge interrupt signals from I/O
IS1200 Datorteknik föreläsning 7, (Allan) Laboration 3 tips om I/O-interrupts IS1200 Datorteknik
IS1200 Datorteknik föreläsning 7, (Allan) Nios-2 Interrupt signals CPU I/O I/O I/O I/O MEM IRQ31--00 bus logic BUS TIMER_1IRQ10 KEYS4IRQ2 TOGGLES18IRQ3 Uart_0IRQ4
IS1200 Datorteknik föreläsning 7, (Allan) Nios-2 Interrupt signals 32 separata IRQ som kan aktiveras av extern hårdvara Aktiva IRQ kan pollas av program Figur 3-1 i manualen
IS1200 Datorteknik föreläsning 7, (Allan) Laboration 3Interrupts 1. T-Time (avbrott från timer_1)......T.......T.......T.... 2. Point-And-Tick (utökat med tidsutskrift) ......59:59.......00:00.......00:01.... 3. Trapping the Dash (utökat med trap i main) ------59:59------00:00-----00:01---- 4. Interrupting the Line (trap i intHandler) ------59:59------00:00---
IS1200 Datorteknik föreläsning 7, (Allan) Laboration 3Interrupts (cont.) 5. The Key (interrupts from KEYS4) --59:59--D---U- 6. Toggles (and interrupts from TOGGLES18) __Ss___DdU___Dd__SsU__59:59___ 7. Nested Interrupts (interrupt in interrupthandler) ___SDdUs_____SDdsU__59:59 8. Surprice Assignement (surprice)
IS1200 Datorteknik föreläsning 7, (Allan) Nios pio Hokus PokusKEYS4 and TOGGLES18 • Direction Register: 0=in, 1=out • Bidirectional bits are possible, ”has_tri” • Interrupt Mask: 0=disable, 1=enable (each bit) • Edgecapture: rising, falling, any, none (all bits) • Only input pins can capture edges • Clear Edge Capture Register, Write anything to edge capture register at 0xNNC