Zadatak 2.1 1. T=5: Jedinica WBSD propušta vred 0000 0003 Potiče iz polja Rwb.LMD Signal Rwb.WRLMD izaziva propuštanje ove vrednosti 2. Vrednost 0000 0003 koja je pročitana u taktu 5 (prethodno pitanje) predstavlja sadržaj memorijske lokacije ( R0+0 ) = 0000 h i ujedno vrednost kojom se puni reg R1. Adresa memorijske lokacije sa koje se čita (za instrukciju lw R1,R0+0) Vrednost memorijske lokacije 0000 (za instrukciju lw R1,R0+0) 3. T=7 U taktu 7 događa se prva vanredna situacija-prosleđivanje iz stepena MEM->EX, vrši ga jedinica EXP1, iz polja Rmem.ALUOUT na ulaz A jedinice ALU. 4. T=8 Bezuslovni skok na potprogram! Registri Rid,Rex i Rmem de biti obrisani na slededem taktu. 5. T=8 Na izlazu multiplexera MPNewPC je 0000 e000.potiče iz polja Rmem.ALUOUT, a propuštanje izaziva signal Rmem.JUMP
6. Vrednost 0000 e000 predstavlja adresu prve instrukcije prekidne rutine, a to je instrukcija sw R29,R1,1 7. Potiče iz polja Rmem.PC, a signal Rmem.WRPC izaziva propuštanje. 8. T=9: Vrednost Rmem.PC koja predstavlja staru vrednost PC-a upisujemo u registar R30, koji se kasnije koristi u instrukciji jr R30, 1 za povratak iz potprograma u glavni program nastavljajudi od naredne instrukcije posle instrukcije jsr R30,R17,0- znači da se jr R30, 1 instrukcija koristi kao INSTRUKCIJA POVRATKA IZ PREKIDNE RUTINE-RTS jsr R30,R17,0 instrukcija u stepenu WB vrši upis u reg fajl novu vred reg R30 (vrednost 0000 0004-stara vr PC-a), a u PC upisuje novu vred R17+0 adresa prve instrukcije potprograma
9. Nakon poziva potprograma izvršen je upis u keš za predikciju (pcache) zato što je ispunjen uslov za skok instrukcije bnez R1,-2 iako je predikcija bila Not taken 10. T= 11. T=14: U taktu 14 bnez ulazi u pipe po prvi put. Predikcija je NOT TAKEN, zato što se instrukcija bnez R1,-2 ne nalazi u kešu za predikciju (pcache) pa je to analogno predviđanju NOT TAKEN 12. T=17 Predikcija je POGREŠNA u prvom prolasku kroz petlju. 13. Na izlazu MPNewPC je 0000 e003. Potiče iz polja Rmem.ALUOUT.Ta vrednost predstavlja adresu instrukcije add R3,R3,R2 potprograma 14. T=17 U jedinici NewPC je aktivan NTT signal. On je aktivan pod uslovom da je Rmem.COND=1( signal USLOVA za instrukcije uslovnog skoka: 1-ispunjen uslov, a 0-nije ispunjen uslov ) i Rmem.HIT=0 ( signal saglasnosti za keš pcache : HIT=1 ako je instrukcija uslovnog skoka u pcache-u, u suprotnom je HIT=0 ) 15. T=17 Address & Data ulazi pcache-a: Ain=Rmem.PC - adresa skoka instrukcije uslovnog skoka bnez R1,-2 Din=Rmem.ALUOUT - odredišna adresa instrukcije skoka bnez R1,-2
Rmem.PC & Rmem.ALUOUT polja su dovedena na address & data ulaze pcache-a, respektivno zato što je predikcija NOT TAKEN a skok se ipak dogodio,pa je NTN=1, što znači da se kreira novi ulaz u pcache-u tako što se u odgovarajudi ulaz pcache-a upisuje redom adresa instrukcije skoka, odredišna adresa instrukcije, vrednost tag polja 16. T=20: U taktu 20 instrukcija bnez R1,-2 po drugi put ulazi u pipeline i sada je predikcija TAKEN zato što smo u IF stepenu pipeline procesora u bloku pcache(keš za predikciju instrukcije uslovnog skoka) poređenjem vrednosti reg PC, sa ulazima pcache utvrdili saglasnost(hit=1) sa odgovarajudim ulazom za instrukciju (bnez R1,-2) što znači da je instrukcija bnez R1,-2 ved jednom ulazila u pipe i da je za nju stvarni ishod skoka bio TAKEN 17. T=20 Na izlazu multiplexera MP NewPC je vrednost 0000 e003, a signal HIT=1 izaziva propuštanje ove vrednosti. 18. T=20: Vrednost na izalzu multiplexera MP NewPC 0000 e003, predstavlja polje PPC iz bloka pcache i predstavlja predikciju vrednosti registra PC (PPC-Predicted PC), tj. prognozirano odredište skoka (bnez R1,-2) 19. T=21: Pošto je trenutna vrednost reg PC=e003 znači da se sa adrese e003 učitava instrukcija add R3,R3,R2 koja je u taktu 21 ušla u pipe. Odstupili smo od sekvencijalnog izvršavanja instrukcija zbog predikcije TAKEN (bide skoka) instrukcije uslovnog skoka pa se u PC upisuje odredišna adresa skoka bnez R1,-2. 20. Predikcija je TAČNA. Sadržaj keša za predikciju(pcache)ostaje isti NE MENJA SE! 21. T=22: U taktu 22 pcache NIJE PRAZAN: na adresi 0000 nalazi se zapis 0000e005(adresa instrukcije uslovnog skoka), 0000 e003(odredišna adresa instrukcije uslovnog skoka) i 17(tag polje) 22. T=23: Predikcija instrukcije uslovnog skoka bnez R1,-2 je TAKEN (bide skoka)- zato što imamo HIT=1 u pcache-u 23. T=26: U taktu 26 događa se promašaj predikcije instrukcije uslovnog skoka, pa se na slededi takt radi FLUSH-ovanje pipe registra Rid,Rex & Rmem tj. brišu se stepeni ID, EX & MEM.
24. T=26: Na izlazu MP NewPC je e006, a dobija se na izlazu bloka ADD koji sabira Rmem.PC=e005 i 1 i predstavlja vrednost koja de se na slededem taktu upisati u PC i to de biti adresa instrukcije lw R1, R29, 0, koja ulazi u pipe 25. T=26: to je signal TNT- on je uključen pod uslovom da je Rmem.HIT=1 & Rmem.COND=0 26. T=26: Kontrolni ulaz INVALIDATE je uključen! INVALIDATE se uključuje kako bi poništili odgovarajudi ulaz u pcache-u (briše se) za instrukciju uslovnog skoka za koju je predikcija bila TAKEN a stvarni ishod NOT TAKEN.
27. T=30: Sa adrese 0000 f801. Pročitana vrednost je 0000 0003. Svrha instrukcije lw je da napuni R1 reg vrednošdu 3 DEC. 28. Odredišna adresa instrukcije jr R30,1 je 0000 0005. Ova instrukcija predstavlja instrukciju povratka iz potprograma Instrukcija jr R30,1 čita sadržaj reg R30, sabira tu vrednost sa 1-com i na kraju upisuje rezultat (R30+1) u PC to je adresa instrukcija koja se ubacuje u pipeline 29. Potprogram počinje sa adrese e000: (1) sw čita R1 i tu vred(3 DEC ) upisuje u MemLok[R29+1]=MemLok[f801] =3 (2) addui - upisuje u R29=R29+1 tj R29=f8001 (takt 14) (3) add R3=R0+R0 = 0 (takt 15) (4) add R3=R3+R2 = 0+2 = 2 (takt 16) (5) subi R1=R1-1 = 3-1=2 (6) bnez (R1!= 0)? true => PC=PC-2=e005-2=e003; false => PC=PC+1= e006 (7) add R3=R3+R2=2+2=4 (8) subi R1=R1-1=2-1=1 (9) bnez - (R1!= 0)? True =>PC=PC-2=e003 I put se izvršava II put se izvršava Petlja počinje od adrese e003 do e005 : loop add R3,R3,R2 subi R1,R1,1 bnez R1,-2 end_loop (10) add R3=R3+R2=4+2=6 (11) subi R1=R1-1=1-1=0 (12) bnez - (R1!= 0)?false => PC=e006 (13) lw čita R29 = f801, sabira sa 0 i upisuje u R1=3 - vred MemLok[f801] (14) subui R29=R29-1=f801-1=f800 (15) jr čita R30 (R30=4), sabira tu vred sa 1 (R30+1) i upisuje rezultat u PC (PC=R30+1=0005 adresa sledeće instr u glavnom programu, posle jsr R30,R17,0 instrukcije) III put se izvršava
Na kraju potprograma imamo sadržaj reg u register fajlu: R29 se koristi kao STEK POINTER R30 se koristi da pamti adresu povratka iz potprograma (!!! ne iz prekidne rutine: za adresu povratka iz prekidne rutine se koristi R31 koji se ne može menjati) Iz priloženog sledi : Kada se ulazi u potprogram jsr računa adresu skoka i pamti u R17(početna adresa potprograma e000) i upisuje u R30 povratnu adresu iz potprograma. u potprogramu se na Mem Lok[f801] upisuje vred reg R1 a to je vred 3. Menja se sadržaj reg R29 (stek pointer)sa F800 na F801 sada SP pokazuje na slededu slobodnu lok u memoriji a to je f801.menja sadržaj reg R3 (upisuje 0),a onda ulazi u petlju (e003-e005) u kojoj se R3 puni vred 2, dec se R1i proverava R1 da li je!=0 (loop se izvršava 3 puta. Kada R1=0 čita se sa vrha steak(r29=f800) vrednost 3 i upisuje u R1, ažurira R29(stek pointer sada pokazuje na f800) i izvršava instrukcija povratka iz potprograma tako što čita R30 i u PC upisuje R30+1 Zaključak : Potprogram vrti ovu petlju tri puta - to je glavni deo operacije 30. T=40 Nema zapisa u pcache-u zato što je poslednji put jedan jedini ulaz INVALIDOVAN u p Cache-u zbog promašene predikcije TNT