Ladda ner presentationen
Presentation laddar. Vänta.
Publicerades avAlexandra Abrahamsson
1
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)1 2G1518 Datorteknik Föreläsning 7 Exceptions ht 2006 - vt 2006 (period 2-3) för D2
2
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)2 F1F2F3F4F5F6F7F8F9F10Ö2Ö1Ö3Ö4Ö5LAB-1LAB-2Hemlab-1Ö6Ö7LAB-3Hemlab-2Ö8Hemlab-3Ö9TentamenÖ10 Assemblerkod 4 stegs pipeline Nios2time Nios2io C-kod Nios2int Cache-minnen CPU-scheduling 2G1518 Datorteknik http://www.imit.kth.se/courses/2G1518 http://www.imit.kth.se/courses/2G1518
3
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)3 Litteraturhänvisningar +Kursboken, valda delar av kapitel 5 5.2 … Avbrott, principer (ej MIPS) +Nios-2-manualen, chap 3 (May 2005) +Exempelsamling del 7 med lösningar +Lab-PM för laboration 3
4
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)4 Viktiga delar i en dator CPU MEM BUS I/O program data
5
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)5 Programexekvering i två steg, normalfall (decode) EXECUTE FETCH (update PC)
6
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)6 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
7
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)7 1. Asynchronous Exceptions External 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 funktionen IRQ - Interrupt Request, troligen flera pinnar (IRQ31—IRQ00)
8
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)8 Viktiga delar i en dator IRQ-signaler, Interrupt ReQuest CPU MEM BUS I/O program data IRQ (t.ex.IRQ31—IRQ00)
9
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)9 Exception Handler huvudprogram returhopp retur-adress ”hopp vid anrop” exception ExceptionHandler var finns ExceptionHandler ? var lagras adressen till ExceptionHandler ? var sparas returadressen ? intruction
10
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)10 Nios-2. Exceptions Control Registers Det finns ”fem” Control Registers 0.status - ctl0, read / write zestatus - ctl1, read / write zbstatus - ctl2, read / write zienable - ctl3, read / write zipending - ctl4, read / write (det finns fler men de diskuteras ej här)
11
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)11 Nios-2 instruktioner för att läsa och skriva ctl-regs Läsning, kopiera till rj från ctli RDCTLrj, 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
12
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)12 Nios-2 Statusregister 0 status, ctl0 31 2 1 0 U PIE PIE = Processor Interrupt Enable (1=enable, 0=disable) U = User Mode (1=User Mode, 0=Supervisor Mode)
13
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)13 Nios-2 control-register 0 status, 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)
14
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)14 Nios-2 Statusregister 1 estatus, ctl1 Då en exception accepteras, kopieras status till estatus så att ”gamla” status- värden kan användas av Exception Handler Vid retur från Exception Handler, med instruktionen eret, kopieras estatus tillbaks till status
15
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)15 Nios-2 Statusregister 3 ienable, ctl3 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-2 i manualen
16
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)16 Nios-2 Statusregister 4 ipending, ctl4 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 eller disable värde 1 avbrott begärs och tillåts Se figur 3-2 i manualen
17
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)17 Exceptions Nios2: Alltid ”hopp” till 0x20020 huvudprogram returadress ”hopp vid anrop” exception instruction jmp ExcHandler 0x20020: Fast adress
18
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)18 Exception-Handler Nios-2: orsak till exception huvudprogram returadress ”hopp vid anrop” exception ExcHandler OPCODE reg jmp ExcHandler 0x20020: fast adress valbar adress ? IntHandler valbar adress TrapHandler valbar adress ElseHandler valbar adress
19
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)19 Interrupt or Trap ? figur 3-3 i manualen ExcHandler: rdctlr24, ctl1# read estatus andir24, r24, 0b1# PIE was 1 ? beqr24, r0, NoInt# No Interrupt rdctlr24, ctl4# read ipending beqr24, r0, NoInt# No Interrupt IntHandler:...# Interrupt Handler... NoInt:...# code later
20
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)20 Interrupt-Handler letar fram aktuell IRQ-handler IntHandler valbar adress irq00-int valbara adresser IRQ-00? IRQ-01? IRQ-02?. IRQ-04?. IRQ-31? ??? irq04-int irq31-int retur
21
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)21 Vilken Interrupt ? figur 3-3 i manualen IntHandler: rdctlr24, ctl4# läs ipending andir24, r24, 0b1# IRQ-00? bner24, r0, irq00-int# int on IRQ-00 rdctlr24, ctl4# läs ipending andir24, r24, 0b10# IRQ-01? bner24, r0, irq01-int# int on IRQ-01...
22
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)22 2. Synchronous Exceptions TRAP instruction zException med hjälp av TRAP-instruktion zPlaceras av programmeraren på önskad och känd plats. Används t.ex. för OS System Call zNios-2: TRAP erbjuder en enda TRAP till den enda fasta adressen = 0x20020 zParameter (i r4) möjliggör olika SysCall
23
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)23 Exception-Handler Interrupt eller Trap ? huvudprogram returadress ”hopp vid anrop” exception OPCODE reg jmp ExcHandler 0x20020: fast adress valbar adress ExcHandler ? IntHandler valbar adress TrapHandler valbar adress ElseHandler valbar adress
24
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)24 Interrupt or Trap ? (cont.) figur 3-3 i manualen ExcHandler: rdctlr24, ctl1# read estatus andir24, r24, 0b1# PIE was 1 ? beqr24, r0, NoInt# No Interrupt rdctlr24, ctl4# read ipending beqr24, r0, NoInt# No Interrupt IntHandler:...# Interrupt Handler... NoInt:...# code coming
25
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)25 Interrupt or Trap figur 3-3 i manualen... NoInt: ldwr24, -4(r29)# kopiera instruktion moviar1, trapcode# kopiera TRAP code beqr1, r24, TrapHandler# yes, TRAP NoTrap:.......equ trapcode, 0x003B683A# op-code of TRAP
26
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)26 Interrupt or Trap figur 3-3 i manualen... NoInt: ldwr24, -4(r29)# kopiera instruktion moviar1, trapdum# kopiera TRAP code ldwr1, 0(r1)# till r1 beqr1, r24, TrapHandler# yes, TRAP NoTrap:.......data trapdum:trap# op-code of TRAP
27
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)27 Vilken TRAP System Call med TRAP TrapHandler: moviar1, 0# konstant 0 till r1 beqr4, r1, SysCall-0# javisst moviar1, 1# konstant 1 till r1 beqr4, r1, SysCall-1# javisst...
28
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)28 3. Synchronous Exceptions Internal Exceptions 1.Inre händelser orsaker avbrott (Internal) 2.Orsakas av hårdvara internt i CPU:n 3.Exempel (olika typ av ”error”) Unimplemented instructions Overflow Misaligned Memory Reference Divide by zero Access violation...
29
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)29 Exceptions Exception Vector Table Programräknaren får ett nytt värde som anges av hårdvaran till 0x20020 Avbrottsvektortabell används ej av hårdvaran i Nios-2 Returadress sparas på lämplig plats (ea/r29) Mjukvaran kan administreras i tabell-form som liknar en avbrottsvektortabell
30
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)30 Priority - prioritet Viktiga 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 ?
31
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)31 Nios Priority Interrupt har en viss prioritet, 31—00 (hur avgörs prioritet ?) TRAP-instruktion, är ohejdbar (varför?) Intern exception, är ohejdbar (varför?)
32
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)32 Nios-2 Exceptions Enable/Disable Exception 1.Globally Enable/Disable Interrupt by PIE-bit 2.Selectively Enable/Disable Interrrupt by bits in ienable 3.TRAP instructions can not be disabled 4.Internal exceptions can not be disabled 5.Selectively Enable/Disable each I/O (lab3) 6.Acknowledge interrupt signals from I/O
33
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)33 Nios-2 Exceptions Exception 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 0x20020 (Remark: return address must be decremented by 4 before executing eret in interrupt handler but not in trap handler)
34
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)34 ERET-instruction eret # return from exception using content of r29 as return address PC ea status estatus
35
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)35 Ändra i ctl-register Read – Modify - Write Exempel på användbara instruktioner rRDCTL ri, ctlj# kopiera ctlj till ri rWRCTL ctlj,ri # kopiera ri till ctlj rANDri, rj, ”mask”# ”nollställ”, # ”maska fram” rORri, rj, ”mask”# ”ettställ” rXORri, rj, ”mask”# ”invertera”
36
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)36 2G1518 Datorteknik Laboration 3 tips om I/O-interrupts
37
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)37 Nios-2 Interrupt signals CPU MEM BUS I/O Timer IRQ1 Uart_0 IRQ4 PIO IRQ2 IRQ31--00 bus logic I/O Uart_1 IRQ5
38
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)38 Nios-2 Interrupt signals z32 separata IRQ som kan aktiveras av extern hårdvara zAktiva IRQ kan pollas av program zFigur 3-2 i manualen
39
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)39 Laboration 3 Interrupts zUtskrift av punkter, en per sekund ………………………. zDirekt avbrott från en knapp, SW4 ….4*…4*4*…. zDirekt avbrott från en till knapp, SW7 …7*7*…..7*….7* zVälj Prioritet så att SW4 får avbryta SW7 …4*…7*…74**…4*7*….
40
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)40 Nios button_pio Memory Mapped Addresses 0x840 0x844 0x848 0x84C 31 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 SW7 SW6 SW5 SW4 SW5 SW4 SW6SW7 1 2 3 4 GLOBAL RESET Delar av Lab-kortet
41
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)41 Nios button_pio Memory Mapped Addresses 0x840 0x844 0x848 0x84C 31 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 SW7 SW6 SW5 SW4 Read only släppt knapp ger värdet 1 direction register interrupt mask (varje bit för sig) edge capture register (varje bit för sig) data register IRQ at index 2
42
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)42 Nios button_pio Hokus Pokus zDirection Register: 0=in, 1=out zBidirectional bits are possible, ”has_tri” zInterrupt Mask: 0=disable, 1=enable (each bit) zEdgecapture: rising, falling, any, none (all bits) zOnly input pins can capture edges zClear Edge Capture Register, Write anything to edge capture register at 0x84C
43
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)43 Laboration 3 Interrupts (forts.) Skriv ut punkter....... Och ”samtidigt” avbrott från Timer som varje sekund skriver ut 00:00 00:01... etc med tick, puttime (och hexasc) från lab 1 och 2
44
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)44 Nios Timer Hårdvaru-figur counter clock period copy write from program using store run start time-out Q Q’ D cl set clear stop zero snap-shot read from program using load copy store Q Q’ D cl load
45
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)45 0x820 status 0x824 control 0x828 periodl 0x82C periodh 0x820 snapl 0x824 snaph Nios Timer Status / Control etc Run T0 - Time-Out ITO cont start stop 15 0 IRQ at index 1
46
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)46 Nios Timer Hokus Pokus zTO - Time Out, bit 0 at address 0x820 zRun, bit 1 på adress 0x820 zClear Time Out, Write anything to 0x820 zContinous Counting, ”set” bit 1 at 0x824 zStart Run, ”set” bit 2 at 0x824 zStop Counting, ”set” bit 3 at 0x824 zWR anything to snapshot, copy Counter to SnapShot zEnable interupt, set bit 0 at 0x824
47
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)47 Laboration 3 Interrupts (forts.) zAvbrott från serieportar RxRdy vid korsvis kommunikation med paritetskontroll zAvbrott då RxRdy blir 1 (i uart_0) zAvbrott då RxRdy blir 1 (i uart_1) Det finns: Separata ”Enable/Disable Interrupt” för IBF/RxRdy och OBE/TxRdy
48
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)48 Nios uart_0 Memory Mapped Addresses 0x860 0x864 0x868 RxRdy (IBF) TxRdy (OBE) RxDATA (RD) uart_10x880-88F 31 16 15 8 7 6 0 TxDATA (WR) uart_0
49
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)49 Nios uart_0 Memory Mapped Addresses 0x860 0x864 0x868 0x86C RxDATA (RD) uart_00x860-86F (IRQ at index 4) uart_1 0x880-88F (IRQ at index 5) 31 16 15 8 7 6 0 TxDATA (WR) Uart_0: IRQ at index 4 Enable interrupt for RxRdy - IRxRdy Enable interrupt for TxRdy - ITxRdy
50
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)50 IRQ-Handler (för button_pio) letar fram aktuell avbrottskälla irq02-int valbar adress sw4int valbara adresser SW4 ? SW5 ? SW6 ? SW7 ? ??? sw7int retur
51
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)51 Int from IRQ-02 button_pio irq02-int: moviar24, button_pio# adress till button ldwr1, 12(r24)# läs ECR stwr0, 12(r24)# clear ECR andir24, r1, 0b0001# SW4 ? bner24, r0, sw4int# yes, int from SW4 andir24, r1, 0b0010# SW5 ? bner24, r0, sw5int# yes, int from SW5...
52
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)52 Int from IRQ-2 button_pio SW4 sw4-int: push...# vid behov # skriv ut ’4’ paus ’*’ om ”down” pop...# vid behov subir29, r29, 4# justera returadress eret# returhopp
53
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)53 IRQ-Handler (för uart_0) letar fram aktuell avbrottskälla irq04-int valbar adress Rx-int valbara adresser RxRdy ?. TxRdy ? ??? Tx-int retur
54
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)54 Int from IRQ-04 uart_0 irq04-int: moviar24, uart_0# adress till uart0 ldwr1, 12(r24)# läs status andir24, r1, 0x80# RxRdy ? bner24, r0, Rx0-int# yes, int from RxRdy andir24, r1, 0x40# TxRdy ? bner24, r0, Tx0-int# yes, int from TxRdy...
55
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)55 IRQ-Handler (för Timer) letar fram aktuell avbrottskälla irq01-int valbar adress timer-int valbara adresser TO-Int ?. ??? retur
56
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)56 Int from IRQ-01 timer irq01-int: moviar24, timer# adress till timer ldwr1, 0(r24)# läs status andir1, r1, 0b1# TO=1 ? beqr1, r0, NoTimeInt# no, int from timer TimerInt: stwr0, (r24)# clear Time-Out...
57
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)57 lab 2: EKO-program zSkriv ett progam som ekar tecken från tangentbord till terminalfönster main:callinit# vid behov loop:callgetchar callputchar brloop
58
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)58 Lab 2: Flödesschema för korsvis kommunikation START getcharx ?senchar JA NEJ reccharx ?putchar NEJ JA
59
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)59 Lab 2: Flödesschema för korsvis kommunikation med paritetskontroll START getcharx ?parmake JA NEJ reccharx ?partest NEJ JA errmakesencharputchar
60
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)60 Lab 3: Flödesschema för korsvis kommunikation avbrottstyrd med paritetskontroll getcharparmakereccharpartest eret errmakesencharputchar eret required RxRdy-INT
61
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)61 Laboration 3 Blandad kod Byt ut en av subrutinerna mot funktion (metod) skriven i C-kod (Java) (t.ex. tick) Återanvänd rutin från hemlab-1. Kräver kännedom om kompilatorns praxis för parameteröverföring !
62
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)62 Några användbara makro:n ska anpassas till Nios-2.macroEI# Enable Interrupt rdctl r24, ctl0 orir24, r24, 0b01# testad OK wrctl ctl0, r24.endm.macroDI# Disable Interrupt rdctlr24, ctl0 andir24, r24, 0xFE# wrctl ctl0, r24.endm
63
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)63 Några användbara makro:n för Nios-2.macroPUSH reg# lägg reg på stack subisp, sp, 4 stw\reg, 0(sp).endm.macroPOP reg# från stack till reg ldw\reg, 0(sp) addisp, sp, 4.endm; OBS ej reg=sp OBS
64
2 June 2015 2G1518, Föreäsning 7, vt 2007 (D2)64 Bra lyx: Makro för Store-operation.macro STOREI addr, data# data till mem(addr) PUSHr8# macro PUSHr9# macro moviar8, \addr moviar9, \data stwr9, 0(r8) POPr9# macro POPr8# macro.endm
Liknande presentationer
© 2024 SlidePlayer.se Inc.
All rights reserved.