Procesor DLX
Arhitektura procesora
Arhitektura procesora je load/store tipa. Operandi se iz memorije dovlače u registre opšte namene procesora instrukcijom
load. Operacije se specificiraju instrukcijama troadresnog formata pri čemu su dva izvorišna operanda ili dva registra opšte namene ili registar opšte namene i neposredna veličina, a odredište registar opšte namene procesora. Rezultati se vraćaju u memoriju instrukcijom store.Registri
Postoje 32 32-bitna registra opšte namene za rad sa celobrojnim veličinama (GPR) označena sa
R0 do R31. Postoje i 32 32-bitna registra opšte namene za rad sa veličinama u pokretnom zarezu jednostruke preciznosti na dužini 32 bita i dvostruke preciznosti na dužini 64 bita (FPR). Ukoliko se koriste za rad sa veličinama u pokretnom zarezu jednostruke preciznosti na dužini 32 bita na raspolaganju su sva 32 registra koji se tada označavaju se sa F0, F1, … , F31. Ukoliko se koriste za rad sa veličinama u pokretnom zarezu dvostruke preciznosti na dužini 64 bita na raspolaganju je 16 parova formiranih od parnih i neparnih 32 bitnih registara koji se tada označavaju sa F0, F2, … , F15. Postoje posebne load i store i aritmetičke instrukcije za rad sa registrima GPR i FPR. Takođe, postoje i instrukcije za transfer između registara GPR i FPR.Vrednost registra R0 je uvek nula što omogućava ostvarivanje više korisnih efekata korišćenjem registra R0 u nekim instrukcijama i načinima adresiranja.
Tipovi podataka
Tipovi podataka su celobrojne veličine sa i bez znaka na dužini 8-bitnog bajta, 16-bitne polureči i 32-bitne reči i veličine u pokretnom zarezu jednostruke preciznosti na dužini 32 bita i dvostruke preciznosti na dužini 64 bita. Interno u procesoru sve operacije sa celobrojnim veličinama se izvršavaju nad 32-bitnim celobrojnim veličinama. Zbog toga se 8-bitni bajtovi i 16-bitne polureči prilikom dovlačenja u registre procesora instrukcijom
load proširuju ili nulama u slučaju celobrojnih veličina bez znaka ili znakom u slučaju celobrojnih veličina sa znakom do dućine registra od 32 bita. Posle punjenja registara, sve operacije se izvršavaju samo nad 32-bitnim celobrojnim veličinama.Formati instrukcija
Sve instrukcije su fiksne dužine 32 bita, pa se zbog bajtovskog adresiranja sadržaj registra
PC pri očitavanju instrukcije uvećeva za 4. Instrukcije koje se koriste u razmatranjima pipeline organizacije procesora imaju dva formata instrukcija i to Tip I i Tip R (slika 2-21).Format instrukcija: Tip I
0 |
|
|
|
|
5 |
6 |
|
|
|
10 |
11 |
|
|
|
15 |
16 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
31 |
Opcode |
rs1 |
Rd |
Immediate |
Format instrukcija: Tip R
0 |
|
|
|
|
5 |
6 |
|
|
|
10 |
11 |
|
|
|
15 |
16 |
|
|
|
20 |
21 |
|
|
|
|
|
|
|
|
|
31 |
Opcode |
rs1 |
rs2 |
rd |
func |
Slika 2-21 Formati instrukcija
Format instrukcije Tip I koriste load i store instrukcije, aritmetičke, logičke, relacione i pomeračke instrukcije i branch instrukcije.
U slučaju
load i store instrukcija sabira se sadržaj registra specificiranog poljem rs1 i neposredna veličina specificirana poljem immediate da bi se dobila adresa memorijske lokacije. U slučaju instrukcije load sa te adrese se čita podatak i upisuje u registar opšte namene procesora specificiran poljem rd. U slučaju instrukcije store na toj adresi se upisuje podatak iz registra opšte namene procesora specificiranog poljem rd. Operacije load i store se specificiraju odgovarajućim vrednostima polja opcode.U slučaju aritmetičke
i logičke instrukcije odgovarajuća operacija se realizuje nad sadržajem registra specificiranim poljem rs1 i neposrednom veličinom specificiranom poljem immediate, a dobijeni rezultat se upisuje u registar opšte namene procesora specificiran poljem rd. U slučaju relacione instrukcije operacijom se specifira relacija prema kojoj se vrši provera nad sadržajima registra specificiranim poljima rs1 i neposrednom veličinom specificiranom poljem immediate, a u registar opšte namene procesora specificiran poljem rd upisuje vrednost l ukoliko relacija važi i vrednost 0 ukoliko relacija ne važi. U slučaju pomeračke instrukcije odgovarajuća operacija se realizuje nad sadržajem registra specificiranim poljem rs1, dok se dobijeni rezultat upisuje u registar opšte namene procesora specificiran poljem rd. Polje immediate se ne koristi. Operacije se specificiraju odgovarajućim vrednostima polja opcode.U slučaju
branch instrukcije poljem rs1 se specificira registar čiji se sadržaj proverava da li je jednak nuli (instrukcija beqz) ili je različit od nule (instrukcija bneq). Neposredna veličina specificirana poljem immediate se koristi kao pomeraj. Polje rd se ne koristi. Operacije beqz i bneq se specificiraju odgovarajućim vrednostima polja opcode.Format instrukcije Tip R koriste aritmetičke, logičke i relacione instrukcije. U slučaju aritmetičke i logičke instrukcije odgovarajuća operacija se realizuje nad sadržajima registara specificiranim poljima rs1 i rs2, a dobijeni rezultat se upisuje u registar opšte namene procesora specificiran poljem rd. U slučaju relacione instrukcije operacijom se specifira relacija prema kojoj se vrši provera nad sadržajima registara specificiranim poljima rs1 i rs2, i u registar opšte namene procesora specificiran poljem rd upisuje vrednost l ukoliko relacija važi i vrednost 0 ukoliko relacija ne važi. Operacije se specificiraju odgovarajućim vrednostima polja func, pri čemu sve aritmetičke, logičke i relacione instrukcije ovog tipa imaju istu vrednost polja opcode.
Adresiranje
Memorijskim lokacijama se jedino pristupa pomoću
load i store instrukcija. U slučaju obe instrukcije adresa memorijske lokacije se uvek dobija sabiranjem sadržaja jednog od registara GPR i 16-bitnog pomeraja pri čemu se adresa registra i pomeraj specificirani instrukcijom. Ovim je podržano registarsko indirektno adresiranje sa pomerajem. Kombinovanjem vrednosti registra i pomeraja mogu se realizovati i drugi načini adresiranja. Ukoliko se specificira da je pomeraj nula, dobija se registarsko indirektno adresiranje. U slučaju da je sadržaj specificiranog registra nula, a u tu svrhu se koristi registar R0, dobija se memorijsko direktno adresiranje.U slučaju preostalih instrukcija odgovarajuće operacije se realizuju nad sadržajima dva registra ili nad sadržajem registra i neposrednom veličinom, a rezultat ide u registar. Različitim vrednostima polja koda operacije za istu operaciju se specificira da li je drugi operand registar ili neposredna veličina. Time su i
mplicitno specificirani direktno registarsko i neposredno adresiranje.Adresiranje je bajtovsko, jer postoje instrukcije load i store za rad sa 8-bitnim bajtom, 16-bitnom polureči i 32-bitnom reči. Adresa je dužine 32 bita. U slučaju 16-bitne, 32-bitne i 64-bitne veličine, generisana adresa je adresa najstarijeg bajta veličine, a sama veličina se nalazi u odgovarajućem broju sukcesivnih memorijskih lokacija
Skup instrukcija
Razmatrani procesor ima jednostavne instrukcije. Kod razmatranja karakterističnih sit
uacija pipeline organizacije procesora pažnja će, najpre, biti usredsređena na instrukcije za rad sa celobrojnim veličinama koje se mogu grupisati u sledeće grupe:Neke od instrukcija za svaku od ovih grupa su date na slici x-1.
Značenja oznaka sa slike 9 su:
Kao ilustracija ovih oznaka, pretpostavljajući da su R8 i R10 32-bitni registri, izraz
Regs[R10]16…31 ¬ 16 (Mem[Regs[R8]]0)8 ## Mem[Regs[R8]]
označava da je bajt podatka očitan iz memorije sa adrese određene sadržajem registra R8 proširen znakom (sign extended) na 16-bitnu veličinu i potom je ta veličina upisana u donjih 16 razreda registra R10, dok je 16 gornjih razreda ostalo nepromenjeno.
1. load i store instrukcije:
lw R1, displ(R2) load word R1¬ 32M[displ + R2]
sw displ(R4), R3 store word M[displ + R4]¬ 32R3
2. ALU instrukcije:
2.1 aritmetičke
instrukcije:add
addi R1, R2, immed add immediate R1¬ R2 + immed
2.2 logičke
instrukcije:and
andi R1, R2, immed and immediate R1¬ R2 & immed
2.3 relacione instrukcije:
slt R1, R2, R3 set less than if (R2 < R3) then R1¬ 1
else R1¬ 0
slti R1, R2, immed set less than immediate if (R2 < immed) then R1¬ 1
else R1¬ 0
2.4 pomeračke
instrukcije:sll R1, R2 shift left logical R1¬ shift R2
3. branch instrukcije:
beqz R4, displ branch equal zero if (R4 = 0) then PC¬ PC + displ
bneq R4, displ branch not equal zero if (R4 ą 0) then PC¬ PC + displ
Slika x-1. Skup instrukcija
U okviru grupe load/store instrukcija postoje posebne instrukcije za rad sa 8-bitnim, 16-bitnim i 32-bitnim veličinama sa znakom i bez znaka. Ove instrukcije koriste registre R0, R1, …, R31. U ovoj grupi su posebne load/store instrukcije za rad sa 32-bitnim i 64-bitnim veličinama u pokretnom zarezu. Ove instrukcije koriste registre F0, F1, …, F31.
U okviru grupe ALU instrukcija postoje artimetičke, logičke, relacione i pomeračke instrukcije. Aritmetičke, logičke i relacione instrukcije koriste oba formata instrukcija, dok pomeračke koriste samo format Tip I. Od aritmetičkih operacija postoje operacije sabiranja i oduzimanja. Operacija sabiranja u formatu Tip I gde je jedan izvorišni operand registar R0 a drugi neposredna veličina, moće se koristiti za punjenje registra konstantom. Takođe, operacija sabiranja u formatu Tip R, gde je jedan izvorišni operand registar R0, može se koristiti za prenos sadržaja iz jednog registra u drugi. Od logičkih operacija postoje operacije logičko I, logičko ILI i logičko ekskluzivno ILI. Od relacionih operacija postoji 6 operacija za 6 relacija, i to: jednako, nije jednako, veće, veće ili jednako, manje i manje ili jednako. Od pomeračkih operacija postoje aritmetičko pomeranje, logičko pomeranje i rotiranje za jedno mesto ulevo ili udesno.
U okviru grupe branch instrukcija postoje samo dve instrukcije koje realizuju relativni skok ako je u jednom slučaju sadržaj specificiranog registra nula, a u drugom ukoliko nije nula.
Organizacija procesora bez pipeline-a
Da bi se došlo do pipeline organizacije procesora, najpre se razmatra organizacija procesora bez pipeline-a. Između više mogućih organizacija procesora namerno je odabrana ona organizacija iz koje prirodno proizlazi pipeline organizacija. Zbog toga odabrana organizacija nije ni najekonomičnija ni sa najboljim performansama, među mogućim organizacijama bez pipeline-a. Usvojeno je da se izvršavanje instrukcija podeli na najviše pet faza i da izvršavanje jedne faze traje jednu periodu signala takta (slika 3-1). Tih pet faza su: IF (instruction fetch), ID (instruction decode and register fetch), EX (execute and effective address calculation), MEM (memory access and branch completion) i WB (write back). Sa slike 3-1 se vidi kako teče izvršavanje instrukcija. Na kraju svake periode signala takta, vrednost sračunata za vreme date periode signala takta, a potrebna za vreme neke kasnije periode signala takta bilo te ili neke sledeće instrukcije, se upisuje u memoriju, neki od registara opšte namene, programski brojač PC ili u neki od pomoćnih registara, kao na primer LMD, Imm, A, B, IR, NPC, ALUOUT ili cond. Pomoćni registri drže vrednosti između perioda signala takta iste instrukcije, dok memorijske lokacije, registri opšte namene i programski brojač PC, kao programski vidljivi registri, drže vrednosti između instrukcija. Stoga izvršavanje jedne instrukcije može da traje najviše pet perioda signala takta.
Slika 3-1 Organizacija procesora bez pipeline-a
U svakoj od pet faza za svaku grupu instrukcija realizuju se operacije date u daljem tekstu. U datim operacijama Instruction memory i Data memory se označavaju sa Mem, a registarski fajl Registers sa Regs.
1) IF—instruction fetch
IR¬ Mem[PC];
NPC¬ PC + 4;
Operacija: U ovoj fazi registar PC se koristi za čitanje instrukcije iz memorije Instruction Memory i očitana instrukcija se smešta u prihvatni registar instrukcije IR. Pored toga, programski brojač PC se uvećava za 4 u jedinici Add i upisuje u registar NPC. Prihvatni registar instrukcije IR se koristi za čuvanje očitane instrukcije u narednih nekoliko perioda signala takta u kojima se izvršavaju preostale faze instrukcije. Registar NPC sadrži adresu prve sledeće sekvencijalne instrukcije.
2) ID—instruction decode and register fetch
A¬ Regs[IR6..10];
B¬ Regs[IR11..15];
Imm¬ ((IR16)16##IR16..31);
Operacija: U ovoj fazi se dekoduje instrukcija i pristupa registarskom fajlu Registers radi čitanja dva izvorišna registra koji se, potom, upisuju u pomoćne registre A i B. Paralelno sa tim nižih 16 razreda registra IR, koji sadrže 16 nižih bitova neposredne veličine, se u jedinici Sign extend proširuju znakom na 32-bitnu veličinu i smeštaju pomoćni registar Imm. Pomoćni registri A, B i Imm se koriste u sledećim fazama. Dekodovanje instrukcije, čitanje registara i formiranje 32-bitne neposredne veličine se realiziju paralelno. To je moguće da se realizuje zbog toga što su odgovarajuća polja na fiksnim mestima u formatu instrukcije. Treba uočiti da se u nekim instrukcijama u kasnijim fazama neki od registara A, B i Imm neće koristiti. Međutim, to što se u sva tri registra uvek upisuju neke vrednosti ne nanosi nikakvu štetu onda kada to nije potrebno.
3) EX—execution and effective address calculation
U ovoj fazi jedinica ALU izvršava u zavisnosti od instrukcije u registru IR jednu od pet funkcija za pet tipova instrukcija nad operandima pripremljenim u prethodnoj fazi i koji se nalaze u registrima A, B i Imm. Rezultat jedinice ALU se upisuje u registar ALUOUT. Paralelno sa tim jedinica Zero? vrši proveru da li je sadržaj registra A nula. Rezultat jedinice Zero? se upisuje u jednorazredni pomoćni registar cond samo u slučaju branch instrukcija, dok se za preostale instrukcije u registar cond uvek upisuje nula.
3.1) load i store instrukcije
ALUOUT ¬ A + Imm;
cond¬ 0;
Operacija: U jedinici ALU se sabira sadržaj registra i pomeraj iz instrukcije koji se nalaze u registrima A i Imm, respektivno, da bi se formirala efektivna adresa koja se upisuje u registar ALUOUT.
3.2) Aritmetičke, logičke i relacione
instrukcije Tipa RALUOUT¬ A func B;
cond¬ 0;
Operacija: U jedinici ALU se izvršava operaciju specificirana kodom operacije func nad sadržajima dva registra koji se nalaze u registrima A i B i upisuje rezultat u registar ALUOUT.
3.3) Aritmetičke, logičke i relacione
instrukcije Tipa IALUOUT¬ A op Imm;
cond¬ 0;
Operacija: U jedinici ALU se izvršava operaciju specificirana kodom operacije opcode nad sadržajem registra i neposrednom veličinim koji se nalaze u registrima A i Imm, respektivno, i upisuje rezultat u registar ALUOUT.
3.4) Pomeračke instrukcije
ALUOUT¬ op A;
cond¬ (A op 0);
Operacija: U jedinici ALU se izvršava operacija specificirana kodom operacije opcode nad sadržajem registra koji se nalazi u registru A i upisuje rezultat u registar ALUOUT.
3.5) branch instrukcije
ALUOUT¬ NPC + Imm;
cond¬ (A op 0);
Operacija: U jedinici ALU se sabira sadržaj PC-ja date instrukcije uvećan za 4 i pomeraj iz instrukcije, koji se nalaze u registrima NPC i Imm, respektivno, da bi se sračunala adresa skoka. Paralelno sa tim jedinica Zero? proverava da li je sadržaj registra A nula ili ne i na osnovu toga upisuje u jednorazredni registar cond vrednost 1 ili 0. Operator op je određen na osnovu toga da li je kod operacije za beqz ili bneq. U slučaju beqz upisuje se 1 u cond, ako je sadržaj nula, a u slučaju bneq upisuje se 1 u cond, ako sadržaj nije nula.
4) MEM—memory access and branch completion
U ovoj fazi se izvršavaju dve vrste operacija u zavisnosti od instrukcije u registru IR, i to prva vrsta samo za load i store instrukcije i druga vrsta za sve instrukcije.
4.1) load/store instrukcije
LMD¬ Mem[ALUOUT]; za load
Mem[ALUOUT]¬ B; za store
Operacija: U ovoj fazi se pristupa Data memoriji pa se za instrukciju load čita iz memorije i upisuje u registar LMD, a za instrukciju store sadržaj iz registra LMD se upisuje u memoriju. U oba slučaja koristi se adresa sračunata u prethodnoj fazi koja se nalazi u registru ALUOUT.
4.2) Sve instrukcije
if (cond) then PC¬ ALUOUT else PC¬ NPC
Operacija: U slučaju svih instrukcija sem branch instrukcija je u prethodnoj fazi u registar cond upisana vrednost nula, pa se u registar PC iz registra NPC kao adresa sledeće instrukcije upisuje adresa tekuće instrukcije uvećana za 4 i time produžava sa sekvencijalnim izvršavanjem programa. U slučaju branch instrukcija u prethodnoj fazi je u registar cond upisana ili vrednost nula ili jedan. Ako je u registru cond vrednost nula onda se u registar PC iz registra NPC kao adresa sledeće instrukcije upisuje adresa tekuće instrukcije uvećana za 4 i time produžava sa sekvencijalnim izvršavanjem programa. Ako je u registru cond vrednost jedan onda se u registar PC iz registra ALUOUT kao adresa sledeće instrukcije upisuje sračunata adresa skoka.
5) WB—write back
5.1) ALU instrukcije Tipa R
Regs[IR6..10] ¬ ALUOUT;
5.2) ALU instrukcije Tipa I
B¬ Regs[IR11..15] ¬ ALUOUT;
5.3) load instrukcija
Regs[IR11..15] ¬ LMD;
Operacija: U ovoj fazi se vrši upis u registarski fajl Registers i to očitana vrednost iz memorije Data Memory koja se nalazi u registru LMD za instrukciju load i rezultat jedinice ALU koji se nalazi u registru ALUOUT za ALU instrukcije.
Uz ovako usvojenu organizaciju procesora, jedan pristup bi bio da se svaka instrukcija izvršava u pet taktova pri čemu bi perioda signala takta odgovarala trajanju najsporije faze. U tom slučaju u fazi WB ne bu bilo nikakvih aktivnosti za
branch i store instrukcije, a u fazi MEM za ALU operacije. Upravljačka jedinica bi mogla da se realizuje korišćenjem standardnih tehnika kao što su, na primer, ožičena ili neka od mikroprogramskih realizacija. Tada bi gore pomenute grupe instrukcija mogle da se realizuju u četiri takta. Pored toga određene uštede bi i u organizaciji procesora mogle da se naprave. Tako, na primer, umesto posebnih Instruction Memory i Data Memory, kojima se pristupa u različitim taktovima, mogla bi da se koristi samo jedna memorija. Takođe, uvećavanje vrednosti registra PC u jedinici Add i izvršavanje neke od ALU operacija ili sračunavanje adrese memorijske lokacije ili adrese instrukcije na koju se skače u jedinici ALU se realizuju u različitim taktovima. Stoga bi jedinica Add mogla da se izbaci i da se uvećavanje vrednosti registra PC realizuje u jedinici ALU. Međutim, usvojena organizacija procesora sa slike 3-1 je dobra osnova za prelazak na pipeline organizaciju procesora, pa pomenute izmene neće biti uvedene.Kao alternativa ovom rešenju sa pet taktova po instrukciji, moguće je i rešenje kod koga bi bio jedan takt po instrukciji pet puta dužeg trajanja od trajanja takta u prethodno razmatranoj realizaciji. U tom slučaju pomoćni registri IR, NPC, A, B, Imm, ALUOUT, Cond i LMD bi bili izbačeni, jer nema potrebe za pamćenjem rezultata izvršavanja jedne faze instrukcije i njihovim prenošenjem u deo procesora u kome se realizuje sledeća faza. Sada
se cela instrukcija izvršava u jednom pet puta dužem taktu, pri čemu se dobijeni rezultati upisuju na kraju tog takta u Data Memory, Registers i registar PC.Sva dalja razmatranja biće usmerena na potrebnu nadgradnju procesora sa slike 3-1, da bi se dobila
organizacija procesora sa pipeline-om.Organizacija procesora sa pipeline-om
U slučaju organizacije procesora sa
pipeline-om svakoj od pet faza kroz koje prolazi instrukcija tokom izvršavanja odgovara poseban stepen u sinhronom statičkom pipeline-u. Na svaki signal takta ubacuje se nova instrukcija u pipeline. Posle pet signala takta u pet stepeni pipeline-a izvršava se pet različitih faza za instrukcije i do i + 4 (slika 3-2). Tih pet stepeni pipeline-a imaju iste nazive kai I odgovarajuće faze koje se u njima izvršavaju.Za izvršavanje svake instrukcije sada je potrebno pet perioda signala takta, ali za vreme svake periode signala takta pet stepeni pipeline-a izvršava pet različitih faza pet različitih instrukcija. Tako, na primer, u periodi 5 signala takta, instrukcija i izvršava fazu WB, instrukcija i + 1 fazu MEM, itd. Program se kod ovakvog načina izvršavanja instrukcija izvršava pet puta brže nego kada bi instrukcija i + 1 počela sa svojom fazom IF tek u periodi 6 signala takta i to tek pošto u periodi 5 signala takta instrukcija i izvrši svoju fazu WB.
instrukcija |
signal takta |
||||||||
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
i |
IF |
ID |
EX |
MEM |
WB |
|
|
|
|
i + 1 |
|
IF |
ID |
EX |
MEM |
WB |
|
|
|
i + 2 |
|
|
IF |
ID |
EX |
MEM |
WB |
|
|
i + 3 |
|
|
|
IF |
ID |
EX |
MEM |
WB |
|
i + 4 |
|
|
|
|
IF |
ID |
EX |
MEM |
WB |
Slika 3-2. Preklapanjem izvršavanja pet faza, pet instrukcija u pet stepeni pipeline-a
Izvršavanje jedne instrukcije kod organizacije procesora sa pipeline-om se sada čak i produžava u odnosu na organizaciju procesora bez pipeline-a. Kod procesora bez pipeline-a vreme izvršavanja jedne instrukcije je suma pojedinačnih trajanja pet faza instrukcije. Kod procesora sa pipeline-om vreme izvršavanja jedne instrukcije je proizvod 5 puta trajanje najsporije faze. Situacija je još nepovoljnija posmatrano sa aspekta samo jedne instrukcije, jer trajanje najsporije faze treba produžiti za set-up vreme prihvatnih registara i clock skew vreme koje se javlja pri razvođenju centralizovanog signala takta na prihvatne registre stepeni pipeline-a. Međutim, iako se pojedinačno instrukcije sporije izvršavaju, program kao celina se izvršava brže.
Problemi koji mogu da nastanu u pipeline-u i rešenja koja treba preduzeti se razmatraju u daljem tekstu.
Prvi mogući problem se odnosi na organizaciju memorije. U organizaciji procesora sa slike 3-1 već postoje posebne Instruction Memory i Data Memory. One se obično realizuju kao posebne keš memorije za instrukcije i podatke. Korišćenjem posebnih keš memorija eliminiše se konflikt koji bi nastajao u slučaju post
ojanja samo jedne kad god bi se u stepenu MEM našla load ili store instrukcija. Tada bi iz stepena MEM bilo obraćanje radi čitanja ili upisa podatka, a iz stepena IF radi čitanja instrukcije.Drugi problem se odnosi na pristup registar fajlu Registers. Sa slike 3-1 se vidi da se iz stepena ID čitaju dva registra, a iz stepena WB vrši upis. Ove operacije su skoro stalno prisutne, pa se za realizaciju registarskog fajla obično koriste takvi memorijski elementi koji omogućavaju istovremeno čitanje dva registra i upis trećeg.
Slika 3.3 Pipeline se može predstaviti kao niz tokova podataka, pomerenih u vremenu
Treći problem se odnosi na ažuriranje vrednosti registra PC. Da bi se startovala nova instrukcija na svaki takt, vrednost registra PC mora da se uveća za 4 i ta vrednost upiše u registar PC na svaki takt. Formiranje vrednosti PC uvećane za 4 na izlazu jedinice Add se realizuje paralelno sa čitanjem instrukcije prema vrednosti registra PC. Na signal takta se istovremeno upisuju u registar PC uvećana vrednost PC-ja i u registar IR očitana instrukcija. Problem nastaje zbog branch instrukcija koje takođe menjaju vrednost registra PC, ali tek u stepenu MEM. Kada branch instrukcija dođe u stepen MEM u kome eventualno skok treba da se realizuje u slučaju da je uslov za skok ispunjen javljaju se dva problema. Prvi je da skok treba napraviti relativno u odnosu na vrednost registra PC branch instrukcije uvećan za 4, a tada je u registru NPC vrednost PC-ja branch instrukcije uvećan za 12. Drugi je da se u stepenima IF, ID i EX nalaze pogrešne instrukcije. Ovi problemi koji nastaju kod branch instrukcija posebno se kasnije razmatraju.
U slučaju preklapanja izvršavanja različitih faza više instrukcija u stepenima
pipeline-a, svaki stepen pipeline-a je aktivan na svaku periodu signala takta. Zbog toga sve operacije u svim stepenima pipeline-a moraju da se kompletiraju u toku trajanja jedne periode signala takta. Pored toga svaki stepen pipeline-a mora da ima svoj registar u kome će biti sve ono što je neophodno za izvršavanje odgovarajuće faze u njemu, kao i za izvršavanje preostalih faza date instrukcije u sledećim stepenima pipeline-a. Uvođenjem tih registara, koji će se nazivati pipeline registri, u procesor sa slike 3-1, dolazi se do organizacije procesora sa slike 3-4. Ovi registri su označeni imenima stepena koje povezuju, pa je sa IF/ID označen registar između stepena IF i stepena ID, koji drži sve informacije neophodne za realizaciju faze ID. Isto važi i za registre ID/EX, EX/MEM iMEM/WB i faze i stepene EX, MEM i WB, respektivno. Registar PC se, takođe, može tretirati kao pipeline registar jer on drži informacije potrebne za fazu i stepen IF. Treba imati u vidu i činjenicu da se u nekom pipeline registru ne nalaze samo informacije potrebne za stepen kome on pripada, već i za preostale stepene. Stoga će po isteku perioda takta ne samo rezultat faze ID biti upisan u registar ID/EX, već i neke informacije iz registra IF/ID. Kao primer ovoda se može uzeti polje koje specificira odredišni registar za ALU instrukciju. Ovo polje mora da se prenosi zajedno sa instrukcijom do stepena WB u kome se vrši upis u registar. Kao adresa odredišnog registra koristi se vrednost ovog polja iz MEM/WB registra. Slična situacija je i sa vrednošću registra PC uvećanom za 4 koja se prenosi sa svojom instrukcijom sve do stepena EX u kome se koristi za sračunavanje adrese skoka, ako je ta instrukcija neka od branch instrukcija.
Slika 3-4 Pipeline organizacija procesora
Procesor sa slike 3-4 se razlikuje od procesora sa slike 3-1 i po tome što je multiplekser za selekciju vrednosti za upis u registar PC prebačen iz stepena MEM u stepen IF. Time je osigurano da se u registar PC upisuje samo iz jednog stepena i to stepena IF. Da nije bilo ovog prebacivanja javljale bi se situacije kada bi se iz stepena IF u stepen MEM istovremeno upisivale dve različite vrednosti. Zbog
pipeline organizacije i potrebe da se u ritmu takta ubacuju nove instrukcije u pipeline, stepen IF mora na svaki takt da u registar PC upiše novu vrednost PC-ja uvećanu za 4. Mećutim, kada se u stepenu MEM nađe branch instrukcija za koju je uslov za skok ispunjen, onda bi iz stepena MEM trebalo u registar PC da se upiše sračunata adresa skoka. Tada stepeni IF i ID pokušavaju da na isti takt u registar PC upišu dve različite vrednosti.Treba uočiti da je najčešći tok informacija kroz stepene
pipeline-a sleva udesno od OF preko ID, EX i MEM do WB. Pored njega, međutim, postoji i tok informacija sdesna ulevo. To je u slučaju kada iz stepena WB informacija ide u stepen ID radi upisa u neki registar registar fajla, ili iz stepena MEM u stepen IF radi upisa adrese skoka u registar PC u slučaju branch instrukcije. Tok informacija sdesna ulevo u pipeline-u stvara određene konfliktne situacije zbog kojih se usporava kretanje instrukcija kroz stepene pipeline-a. Zbog toga će kasnije biti razmatrane tehnike za eliminisanje tih konfliktnih situacija ili bar ublažavanje negativnih efekata koji nastaju zbog njih.Operacije koje se izvršavaju u stepenima pipeline-a date su na slici 3-5. U stepenu IF se na osnovu sadržaja registra PC čita instrukcija i sračunava vrednost PC-ja uvećana za 4. Ukoliko je vrednost jednorazrednog registra cond koja dolazi iz stepena MEM nula, to znači ili da se u stepenu MEM nalazi instrukcija koja nija branch instrukcija, ili da je branch instrukcija, ali da uslov za skok nije ispunjen i da treba produžiti sa sekvencijalnim očitavanjem instrukcija. Stoga se kroz multiplekser u stepenu IF propušta uvećana vrednost PC-ja a ne vrednost koja dolazi iz stepena MEM. Na signal takta uvećana vrednost PC-ja se upisuje u registar PC. Na isti signal takta uvećana vrednost PC-ja i očitana instrukcija se upisuju u registre IR i NPCC, respektivno, pipeline registra IF/ID. Time se očitana instrukcija prebacije iz stepena IF u stepen ID. Sa instrukcijom ide i uvećana vrednost PC-ja, da bi se eventualno u stepenu EX, ukoliko se utvrdi da je to branch instrukcija, koristila za sračunavanje adrese skoka. Ukoliko je vrednost jednorazrednog registra cond, koja dolazi iz stepena MEM jedinica, to znači da se u stepenu MEM nalazi branch instrukcija i da je uslov za skok ispunjen, pa se u stepenima pipeline-a EX, ID i IF nalaze instrukcije koje su čitane sekvencijalno iza instrukcije branch i koje su nekorektne. Tada se kroz multiplekser u stepenu IF propušta vrednost koja dolazi iz stepena MEM i koja predstavlja adresu instrukcije koju treba izvršiti posle branch instrukcije i instrukcije u stepenima EX, ID i IF pretvaraju u instrukcije bez dejstva. Na signal takta se u registar PC upisuje adresa instrukcije na koju se skače, pa se sada u stepenu IF vrši njeno očitavanje, dok se u pipeline registre IF/ID, ID/EX i EX/MEM stepeni ID, EX i MEM, respektivno, ubacuju instrukcije bez dejstva.
U stepenu ID se čitaju iz registarskog fajla Registers sadržaji dva registra i u jedinici Sign extend formira 32-bitna neposredna veličina, pa se na
signal takta upisuju u registre A i B i Imm pipeline registra ID/EX. Pored toga registri IR i NPC se samo prenose kroz stepen ID iz pipeline registra IF/ID u pipeline registar ID/EX.U stepenu EX jedinica ALU formira adresu memorijske lokacije sabiranjem sadržaja registara A i Imm za instrukcije load i store, i izvršava odgovarajuću operaciju nad sadržajima ili registara A i B ili A i Imm za ALU operacije il formira adresu instrukcije skoka sabiranjem sadržaja registara NPC i Imm za slučaj branch instrukcije. Paralelno sa ovim jedinica Zero? za branch instrukcije vrši proveru sadržaja registra A i formira vrednost jedan ako je uslov za skok ispunjen, odnosno formira vrednost nula za sve ostale instrukcije. Na signal takta sadržaj sa izlaza jedinice ALU i jedinice Zero se upisuje u registre ALUOUT i cond pipeline registra EX/MEM. Pored toga registri IR i B se samo prenose kroz stepen EX iz pipeline registra ID/EX u pipeline registar EX/MEM. Registar B se prenosi u stepen MEM za slučaj da je to store instrukcija koja u ovom stepenu treba da upiše u Data memory sadržaj ovog registra.
U stepenu MEM se u slučaju load ili store instrukcija vrši čitanje iz ili upis u Data Memory. U oba slučaja adresa je u registru ALUOUT pipeline registra EX/MEM. U slučaju instrukcije store upisuje se sadržaj registra EX/MEM, a u slučaju load instrukcije očitana vrednost se upisuje u registar LMD pipeline registra EX/MEM. Pored toga registri IR i ALUOUT se samo kroz stepen MEM iz pipeline registra EX/MEM upisuju u pipeline registar MEM/WB. Registar ALUOUT se prenosi iz stepena WB za slučaj da je to ALU operacija koja u ovom stepenu treba da upiše u registarski fajl Registers sadrćaj ovog registra. U toku MEM faze signal cond iz pipeline registra EX/MEM će kroz multiplekser stepena IF propustiti ili vrednost PC-ja uvećanu za 4 sa izlaza jedinice Add ili adresu instrukcije na koju treba da se skoči iz registra ALUOUT pipeline registra EX/MEM. Selektovana vrednost se na signal takta upisuje u registar PC. Time se obezbeđuje da se produži sa sekvencijalnim očitavanjem instrukcija, ukoliko je registar cond pipeline registra EX/MEM bio nula, odnosno realizuje skok ukoliko je njihova vrednost jedan.
stepen |
Instrukcija |
IF |
sve instrukcije IF/ID.IR ¬ Mem[PC]; IF/ID.NPC, PC ¬ (if EX/MEM.cond {EX/MEM.ALUOUT} else {PC + 4}); |
ID |
sve instrukcije ID/EX.A ¬ Regs[IF/ID.IR6…10]; ID/EX.B ¬ Regs[IF/ID.IR11…15]; ID/EX.NPC ¬ IF/ID.NPC; ID/EX.IR ¬ IF/ID.IR; ID/EX.Imm ¬ (IF/ID.IR16)16 ## IF/ID.IR16…31; |
EX |
ALU instrukcije EX/MEM.IR ¬ ID/EX.IR; EX/MEM.ALUOUT ¬ ID/EX.A func ID/EX.B; ili EX/MEM.ALUOUT ¬ ID/EX.A func ID/EX.Imm; EX/MEM.cond ¬ 0; |
load/store instrukcije EX/MEM.IR ¬ ID/EX.IR; EX/MEM.ALUOUT ¬ ID/EX.A + ID/EX.Imm; EX/MEM.cond ¬ 0; EX/MEM.B ¬ ID/EX.B; |
|
branch instrukcije EX/MEM.NPC ¬ ID/EX.A + ID/EX.Imm; EX/MEM.cond ¬ (ID/EX.A func 0); |
|
MEM |
ALU instrukcije MEM/WB.IR ¬ EX/MEM.IR; MEM/WB.ALUOUT ¬ EX/MEM.ALUOUT; |
load/store instrukcije MEM/WB.IR ¬ EX/MEM.IR; MEM/WB.LMD ¬ Mem[EX/MEM.ALUOUT] ili Mem[EX/MEM.ALUOUT] ¬ EX/MEM.B; |
|
WB |
ALU instrukcije Regs[MEM/WB.IR16…20] ¬ MEM/WB.ALUOUT; ili Regs[MEM/WB.IR11…15] ¬ MEM/WB.ALUOUT; |
store instrukcije Regs[MEM/WB.IR11…15] ¬ MEM/WB.LMD; |
Slika 3-5 Operacije koje se izvršavaju u stepenima pipeline-a
U stepenu WB se vrši upis u registar registarskog fajla Registers ukoliko je reč o instrukciji load ili nekoj od ALU instrukcija. U slučaju instrukcije load upisuje se sadržaj registra LMD iz pipeline registra MEM/WB, a u slučaju ALU instrukcija sadržaj registra ALUOUT iz pipeline registra MEM/WB. Adresa registra registarskog fajla Registers je specificirana bitovima 16 do 20 registra IR pipeline registra MEM/WB za slučaj ALU operacija tipa R, odnosno bitovima 11 do 15 istog registra za slučaj ALU operacija tipa I i load instrukcije.
Treba zapaziti da se vrednost registra IR prenosi kroz sve stepene pipeline-a pri čemu je taj registar u stepenu ID označen sa IF/ID.IR, u stepenu EX sa ID/EX.IR itd. To se čini zbog toga što su informacije iz ovog registra potrebne u svim stepenima pipeline-a. Zbog jednostavnosti je uzeto da se od stepena IF do stepena WB prenosi ceo registar, mada sa napredovanjem instrukcije kroz stepene pipeline-a sve manje i manje informacija iz registra IR je potrebno.
Za korektan to podataka kroz stepene pipeline-a treba generisati odgovarajuće vrednosti upravljačkih signala za četiri multipleksera sa slike 3-4. Dva multipleksera u stepenu EX kontrolišu vrednosti koje se pripuštaju na dva ulaza jedince ALU u zavisnosti od registra IR u pipeline registru ID/EX. Gornji multiplekser propušta registar NPC iz pipeline registra ID/EX ako je branch instrukcija, a u ostalim situacijama registar A iz pipeline registra ID/EX. Donji multiplekser propušta registar B iz pipeline registra ID/EX ako je ALU instrukcija tipa R, a u ostalim situacijama registar Imm iz pipeline registra ID/EX. Multiplekser u stepenu IF propušta ili vrednost registra PC iz stepena IF uvećanu za 4 ili sračunaru adresu skoka koja dolazi iz stepena MEM i to registra ALUOUT pipeline registra EX/MEM. Ovim multiplekserom upravlja jednorazredni registar cond iz pipeline registra EX/MEM. Multiplekser u stepenu WB propušta ili registar LMD iz pipeline registra MEM/WB, ako je u WB stepenu load instrukcija, ili ALUOUT registar iz pipeline registra MEM/WB, ako je u WB stepenu neka od ALU instrukcija. Vrsta isntrukcije u stepenu WB je određena sadržajem registra IR pipeline registra MEM/WB.
U stepenu WB se nalazi još jedan multiplekser koji nika prikazan na slici 3-4. Taj multiplekser kao adresu odredišnog registra registarskog fajla Registers propušta ili rezrede 16 do 20 registra IR pipeline registra MEM/WB za slučaj ALU instrukcija tipa R ili razrede 11 do 15 registra IR pipeline registra MEM/WB za slučaj ALU instrukcija tipa I ili load instrukcije.