570 likes | 725 Views
Riistvarapõhine programmeerimine. Loeng 12 ARM protsessori andmemudel ARM käsustik. ARM protsessori andmemudel. Registrid Jooksva programmi staatus Konveier Katkestused Protsessori tuuma laiendid. ARM: Programmeerija vaade. ALU Barrel shifter MAC Register file Instruction decoder
E N D
Riistvarapõhine programmeerimine Loeng 12 ARM protsessori andmemudel ARM käsustik
ARM protsessori andmemudel • Registrid • Jooksva programmi staatus • Konveier • Katkestused • Protsessori tuuma laiendid ID218 Riistvaralähedane programmeerimine
ARM: Programmeerija vaade • ALU • Barrel shifter • MAC • Register file • Instruction decoder • Address register • Incrementer • Sign extender ID218 Riistvaralähedane programmeerimine
Registrid I • Kokku 37 • 32 bit • Kuus rühma • Üldregistrid • Prefix r • Data regisrid • r0 – r15 ID218 Riistvaralähedane programmeerimine
Registrid II • Eriregistrid • Sp (r13) - Pinuviit • Lr (r14) - alamprogrammist naasmise aadress • Pc (r15) - käsuloendur ID218 Riistvaralähedane programmeerimine
Jooksva programmi staatus ID218 Riistvaralähedane programmeerimine
Protsesori olekud (mode) I • Kokku 7 olekut • Abort • Fast interrupt request • Interrupt request • Supervisor • System • Undefined • User ID218 Riistvaralähedane programmeerimine
Protsessori olekud (mode) II • Abort - privilegeeritud • Eebaõnnestunud mäluoperatsioon • Fast interrupt request - privilegeeritud • Kõrgema taseme katkestuse töötlemine • Interrupt request - privilegeeritud • Madalama taseme katkestuse töötlemine ID218 Riistvaralähedane programmeerimine
Protsessori olekud (mode) III • Supervisor - privilegeeritud • Reset (sisselülitamine) • Operatsioonisüsteem • System – privilegeeritud • Eri-User, rw ligipääs cpsr • Undefined – privilegeeritud • Tundmatu käsk • User – mitte privilegeeritud • Programmid ja rakendused ID218 Riistvaralähedane programmeerimine
Protsessori olekud (mode) IV ID218 Riistvaralähedane programmeerimine
Protsessori olekud (mode) V Oleku muutmine: • Programmi poolt • registri cpsr otsekirjutamime • ei kopeeri cpsr - spsr • Riistvara poolt • Katkestus • Reset • viga ID218 Riistvaralähedane programmeerimine
Registrirühmad ID218 Riistvaralähedane programmeerimine
Registrirühma vahetamine • User olek • r13_sp • r14_lr • r15_pc • cpsr • Interrupt olek • r13_irq • r14_irq • spsr_irq ID218 Riistvaralähedane programmeerimine
Käsustiku olekud I • ARM - 32 bit käsk • Thumb - 16 bit käsk • Jazelle - 8-bit Java kood, ei ole avalik ID218 Riistvaralähedane programmeerimine
Käsustiku olekud II ID218 Riistvaralähedane programmeerimine
Katkestuse maskid • Interrupt, bit 7 • I=0, lubatud • I=1, keelatud • Fast interrupt, bit 6 • F=0, lubatud • F=1, keelatud ID218 Riistvaralähedane programmeerimine
Tingimuse lipud ID218 Riistvaralähedane programmeerimine
Programmi staatuse näide • Carry=1, ülejäänud lipud = 0 • IRQ lubatud, FIR keelatud • ATM käsustiku olek • Protsessori olek supervisor (svc) ID218 Riistvaralähedane programmeerimine
Konveier I • ARM7 - 3 sammuga konveier • Käsu võtmine • Käsu dekodeerimine • Käsu täitmine ID218 Riistvaralähedane programmeerimine
Konveier II MSR – lubab IRQ, I=0 ID218 Riistvaralähedane programmeerimine
Konveier III LDR PC 0x8000 NOP PC+4 0x8004 DCD PC+8 0x8008 ID218 Riistvaralähedane programmeerimine
Konveier IV • Harukäsk tühjendab konveierit • Võib olla kasutusel harude ennustamine • Katsestus • Täitmise etapi käsk täidetakse lõpuni • Võtmise ja dekodeerimise etapi käsud täidetakse peale katsestust ID218 Riistvaralähedane programmeerimine
Katkestused I • Reset • Tundmatu käsk • Tarkvara katkestus • Mälutõrge käsutoomisel • Mälutõrge andmeoperatsioonil • IRQ taotlus • FIR taotlus ID218 Riistvaralähedane programmeerimine
Katkestused II ID218 Riistvaralähedane programmeerimine
Tuuma laiendid • Cache • Jäigalt seotud mälu • Mäluhaldurid • Abiprotsessorid ID218 Riistvaralähedane programmeerimine
Cache I vonNeumanni arhitektuur ID218 Riistvaralähedane programmeerimine
Jäigalt seotud mälu Harvardii arhitektuur ID218 Riistvaralähedane programmeerimine
Cache ja jäigalt seotud mälu Harvardi arhitektuur ID218 Riistvaralähedane programmeerimine
Mäluhaldurid • Nonprotected memory • MPU • Piirkonnapõhine ligipääs • MMU • Piirkonnapõhine ligipääs • mälujaotus ID218 Riistvaralähedane programmeerimine
Abiprotsessorid • Abiprotsessor (coprocessor) • Laiendab käsustiku, näiteks vektor-ujuva komaga operatsioonid • Lisab konfiguratsiooniregistrid, näiteks MPU mäluhalduri jäoks ID218 Riistvaralähedane programmeerimine
ARM-i käsustik • Andmetöötlemise käsud • Hargnemise käsud • Laadimise-salvestamise käsud • Tarkvara katkestuse käsud • Programmi staatuse käsud • Konstantide laadimine • Tingimustäitmine ID218 Riistvaralähedane programmeerimine
ARM käsk <käsk> <Op3> <Op1> <Op2> <instruction> {<cond>} {S} Rd, Rn, Rm Op1 Operand 1 Rn Op2 Operand 2 Rm Op3 Sihtkoht Rd ID218 Riistvaralähedane programmeerimine
Andmetöötluse käsud • Teisaldamise käsud • Aritmeetilised käsud • Loogilised käsud • Võrdluse käsud • Korrutamise käsud ID218 Riistvaralähedane programmeerimine
Teisaldamise käsud I <instruction> {<cond>} {S} Rd, N MOV Move a 32-bit valie into register, Rd = N MVN Move the NOT of the 32-bit value into register, Rd = -N ID218 Riistvaralähedane programmeerimine
Teisaldamise käsud II R5 = 5 R7 = 8 MOV r7, r5; R5 = 5 R7 = 5 ID218 Riistvaralähedane programmeerimine
Nihketoru I • Võimaldab muuta operand Rm • Ei nõua eraldi protsessoriaega ID218 Riistvaralähedane programmeerimine
Nihketoru II ID218 Riistvaralähedane programmeerimine
Nihketoru III R5 = 5 R7 = 8 MOV r7, r5, LSL #2; r7=r5*4=20 R5 = 5 R7 = 20 ID218 Riistvaralähedane programmeerimine
Nihketoru IV SHL #1 ID218 Riistvaralähedane programmeerimine
Nihketoru V Cpsr = nzcvqiFt_USER R0 = 0x00000000 R1 = 0x80000004 MOVS r0, r1, LSL #1; Cpsr = nzCvqiFt_USER R0 = 0x00000008 R1 = 0x80000004 ID218 Riistvaralähedane programmeerimine
Aritmeetilised käsud I <instruction> {<cond>} {S} Rd, Rn, N ID218 Riistvaralähedane programmeerimine
Aritmeetilised käsud II R0 = 0x00000000 R1 = 0x00000002 R2 = 0x00000001 SUB r0, r1, r2; R0 = 0x00000001 ID218 Riistvaralähedane programmeerimine
Aritmeetilised käsud III R0 = 0x00000000 R1 = 0x00000077 RSB r0, r1, #0; rd=0x0-r1 R0 = 0xFFFFFF89 (-R1) ID218 Riistvaralähedane programmeerimine
Aritmeetilised käsud IV Cpsr = nzcvqiFt_USER R1 = 0x00000001 SUBS r1, r1, #1; Cpsr = nZCvqiFt_USER R1 = 0x00000000 ID218 Riistvaralähedane programmeerimine
Aritmeetilised käsud V R0 = 0x00000000 R1 = 0x00000005 ADD r0, r1, r1, LSL #1; R0 = 0x0000000F R1 = 0x00000005 ID218 Riistvaralähedane programmeerimine
Loogilised käsud I <instruction> {<cond>} {S} Rd, Rn, N ID218 Riistvaralähedane programmeerimine
Loogilised käsud II R0 = 0x00000000 R1 = 0x02040608 R3 = 0x10305070 ORR r0, r1, r2 R0 = 0x12345678 ID218 Riistvaralähedane programmeerimine
Loogilised käsud III R1 = 0…b1111 R2 = 0…b0101 BIC r0, r1, r2; Rd=Rn AND NOT (N) R0 = 0…b1010 ID218 Riistvaralähedane programmeerimine
Võrdluse käsud I <instruction>{<condition>} Rn, N ID218 Riistvaralähedane programmeerimine
Võrdluse käsud II Cpsr = nzcvqiFt_USER R0 = 0x00000004 R9 = 0x00000004 CMP r0, r9; Cpsr = nZcvqiFt_USER ID218 Riistvaralähedane programmeerimine