330 likes | 448 Views
32-bitni mikrokontroleri i primena - MS1BMP 2. deo. 2013 Nenad Jovičić. 3-stepena protočna obrada. Registraska banka 2 porta za čitanje, 1 za upis. D odatni portovi za čitanje i upis PC-a. Barell pomerač ALU Adresni registar sa podrškom za inkrementiranje
E N D
32-bitni mikrokontroleri i primena - MS1BMP2. deo 2013 Nenad Jovičić
3-stepena protočna obrada • Registraska banka • 2 porta za čitanje, 1 za upis. • Dodatni portovi za čitanje i upis PC-a. • Barell pomerač • ALU • Adresni registar sa podrškom za inkrementiranje • Dekoder instrukcija i kontrlna jedinica
Pipeline • Pipeline u tri nivoa – tako zvana trostepena protočna obrada. • Pretetch jedinica može da unapred učita do tri 32-bitne instrukcije. 2nd Stage - Decode 3rd Stage - Execute 1st Stage - Fetch Address Phase & Write Back Data Phase Load/Store & Branch Write AGU Instruction Decode & Register Read Fetch(Prefetch) Multiply & Divide Branch Shift ALU & Branch Branch forwarding & speculation Execute stage branch (ALU branch & Load Store Branch)
Pipeline • Fetch – učitavanje instrukcije iz memorije i smeštanje u prefetch buffer • Decode – dekodiranje instrukcije i pripremanje kontrolnih signala koij regulišu protok podataka • Execute – Očitavanje registara, pomeranje operanda, generisanje rezultata operacije (ALU) i upisivanje rezultata odredišni registar.
Optimalni pipeline • Sve instrukcije su nad registrima • Efektivno dobijamo instrukciju po ciklusu
Pipeline sa instrukcijom skoka • 3 ciklusa su potrebna da se završi skok
Arhitektura instrukcijskog setaISA Instruction set architecture “Instruction set architecture (ISA) is the structure of a computer that a machine language programmer (or a compiler) must understand to write a correct (timing independent) program for that machine” IBM introducing 360 in 1964
Razvoj instrukcijskog seta 32-bitni instrukcijski set Pomešan 16-bitni i 32-bitni instrukcijski set 16-bitni instrukcijski set
ARM/Thumb instrukcijski set • Tradicionalni ARM set: • fiksna dužina od 32 bita • Dva ili tri operanda • Radi se sa podacima u registrima • Memorijske transferi se obavljaju samo kroz Load/Store instrukcije • Uslovno izvršavanje instrukcija • Originalni Thumb instrukcijski set: • Implemenaticija određenih instrukcija iz ARM seta, ali sa 16 bita • Većina Thumb instrukcija ima dva operanda, tj. Jedan od izvorišnih je i odredišni operand • Nisu dostupni registri r8 do r15 • Nema uslovnog izvršavanja ARM coding
ARM/Thumb instrukcijski set • Primer implementacije instrukcije sabiranja na ARM i Thumb formatu: -nema uslovnog izvršavanja -nema rotacije neposrednog operanda -statusni flagovi se uvek postavljaju (nema S)
Prelaz sa ARM na Thumb i obrnuto • Kod ranijih ARM arhitektura prebacivanje sa jednog na drugi instrukcijski set je posedovalo značajan overhead.
Thumb-2 • Thumb-2 obuhvata i 16-bitne i 32-bitne instrukcije. • Napravljen je sa osnovnom idejom da se izbegne potreba za izmenom režima rada procesora. • Thumb-2 je zadržao skoro sve insturkcije starijeg Thumb seta i implementirao većinu instrukcija iz ARM seta. • Veći deo instrukcija može da se prevede i u 16-bitni i u 32-bitni format u zavisnosti od parametara konkretne instrukcije. • Odluku o implementaciji donosi kompajler osim u slučaju kada se implicitno traži jedna ili druga implementacija.
32-bitne Thumb-2 instrukcije • Ako učitana reč (16 bita) sadrži najviših 5 bitova sledećeg sadržaja: • 0b11101 • 0b11110 • 0b11111 instrukcija je 32-bitna, tj. Dekodira se i sledeća reč.
16 ili 32 bita? • Primer instrukcije ADD (sabiranje) kada se radi nad registrima. • U zavisnosti od upotrbeljenih registara ili opcionih polaj u instrukciji moguće su različite vrste kodiranja instrukcije. • To se u krajnjoj liniji reflektuje na gustinu koda.
Poređenje performansi instrukcijskih setova • Instrukcijski set promenljive dužine • ARM instrukcije su bile isključivo 32-bitne • Thumb instrukcije su bile isključivo 16-bitne • Thumb-2 instrukcije mogu da budu i 16-bitne i 32-bitne, • Thumb-2 daje za oko 26% veću gustinu koda odARM • Thumb-2 daje za oko 25% veće performanse u odnosu naThumb
Glavni elementi arhitekture instrukcijskog seta 32-bits movr0, #1 ld r1, [r0,#5] mem((r0)+5) bneloop subs r2, #1
Tipovi podataka • ARM podržava tri tipa podataka: • Byte – 8-bitni podatak • Halfword – 16-bitni podatak • Word – 32-bitni podatak • Pristup memoriji kod Cortex-M3 omogućava takozvani neporavnat (unaligned) pristup. • Ali to ne važi kod nekih instrukcija. Na primer PUSH i POP rade samo aligned acces. Takođe i specijalne instrukcije za prenos blokova podataka.
Modovi adresiranja • Neposredno adresiranje – sastavni deo instrukcije je podatak, tj. konstanta. • Registarsko adresiranje – podatak je u nekom od registara opšte namene. • Indirektno registarsko adresiranje – podatak je u memoriji a adresa se nalazi ili proračunava iz odgovarajućeg registra opšte namene.
Load /store arhitektura • Cortex-M3 je Load/Store arhitektura, što znači da se memoriji pristupa samo preko Load/Store instrukcija, a sve druge operacije se obavljaju samo nad registrima. • Nema neposrednog adresiranja memorijske lokacije.
LDRx/STRx instrukcije • Pristup memoriji je moguć praktično jedino preko ovih instrukcija. • Sve kasnije instrukcije za obradu podataka rade sa podacima koji su sastavni deo instrukcije (konstante) i podacima koji su već u registrima. Primeri:
LDRx/STRx instrukcije • Adresa podatka u memoriji se dobija kao kombinacija sadržaja baznog registra i odgovarajućeg offset-a • Vrednost offset-a se određuje na sledeće načine: • Neposredno: • Offset je zapisan neposredno u samoj instrukciji. • Rigaistarsko: • Offset se nalazi u offset registru • Skalirano registarsko: • Offset se dobija tako što se sadržaj offset registra šiftuje za vrednost konstante zapisane u insturkciji • Izračunati offset i bazni registar mogu na sledeće načine da formiraju konačnu adresu: • Offset (klasični offset): • Prosto dodavanje sadržaja offsetnog na bazni registar • Pre-indexno: • Adresa se dobija sabiranjem sadržaja baznog registra i offset-a, ali se nakon izvršene operacije sadržaj baznog registra ažurira na novu vrednost • Post-indexno: • Adresa se dobija samo na osnovu baznog registra, ali se nakon instrukcije na sadržaj baznog registra dodaje sadržaj izračunatog offset-a.
Još bolji metod! • Još bolji način je aseblerska sintaksa: LDR r0,=0x55555555 • koja generiše: LDR r0,[pc, offsetto lit pool] • A negde u code memoriji se nalazi oblast lit pool u kojoj se nalazi flashovana konstanta: DCD 0x55555555
Instrukcije za prenos blokova podataka • Instrukcije traju više ciklusa, ali zahvaljujući ICI polju u ESPR statusnom registru mogu da budu prekinute izuzeetkom ili prekidom.
Uslovno izvršavanje • Većini instrukcija može da se postavi dodatni uslov za izvršavanje koji zavisi od Z,N,V,C flag-ova • Ova mogućnost je ograničena samo na instrukcije koje se nalaze u okviru takozvanih IT (If-Then blokova) • Uslovna izvršavanja blokova su prekidiva što se obezbeđuje korišćenjem IT polja u statusnom registru EPSR.
Uslovno izvršavanje - primeri Sintaksa ITx instrukcije