Professional Documents
Culture Documents
שאלה 1
8פעימות שעון .במצב של עבודה בצנרת הכתיבה של פקודת ה swלכתובת 0x00400004מתבצעת ו.
בפעימת השעון הרביעית בביצוע הקוד ,כבר בפעימה השניה מתבצעת הבאה ) (fetchשל פקודת ה bne
מכתובת זו ,כך שלמעשה השינוי בקוד לא ישפיע על ביצועו .פקודת ה bneתקיים ) ($2≠$6והקפיצה תלקח
) .(branch takenתתבצע קפיצה לתווית Exitשם נמצאת הפקודה האחרונה בקוד .כך שיש 3פקודות
לביצוע +פעימת שעון לסיכון הבקרה של ה ( branchנדרש flushאחד) 4 +פעימות למילוי הצנרת ,סה"כ
8פעימות שעון.
כן ,סעיפים ב ו ג ישתנו כעת $1=1 $2=0x00421020בסוף הקוד .כמו שמוסבר בסעיף ו היות וה ז.
branchנלקח הקוד יורץ באופן המתואר בסעיף ד ולכן החישובים הם כמתואר בסעיף ד.
ט .בפעימת השעון החמישית בביצוע הקוד ) sw $2,4($6נמצאת בשלב WB 5בשלב 4נמצאת הפקודה bne
$2,$6,Exitובשלב 3נמצאת הבועה (הפקודה add $2,$2,$2שעברה (flush
במצב זה בכל מקרה RegWriteבפקודות אלו הוא 0ואין סיכון נתונים .לכן שאר הבדיקות אינן
רלוונטיות.
(לא ניתן לדעת במדויק אלו ערכים יכנסו לבדיקה ליחידת העברה קדימה ,מאחר ו regdstבפקודות
בשלב sw 5ושלב bne 4לא מוגדר ולכן לא ניתן לדעת את ערכי EX/MEM.RegisterRDו
MEM/WB.RegisterRDכמובן שהבדיקה מול ערכי הבועה בשלב ID/EX.RegisterRs 3
ID/EX.RegisterRtהיא חסרת משמעות )
שאלה :2
בשלב הראשון : Fetch-
ע"פ ערך הקידוד 0x8ca4fff8=10001100101001001111111111111000היוצא מזיכרון הפקודות ניתן לראות
שהפקודה היא:
)lw $4,-8($5) lw $a0,-8($a1
הפקודה מחשבת כתובת בזיכרון הנתונים באמצעות חיבור תוכן אוגר $5והיסט -8ומאחסנת את המילה מכתובת
זו באוגר .$4
תוכן האוגרים $4או $5לא ידוע ע"פ נתוני השאלה וע"פ הערכים הנמצאים בפקודות בשלב מתקדם יותר בצנרת.
כתובת הפקודה ידועה ע"ס הפקודה שבשלב ( EXE-3ראו חישוב שם)וערכה (0x3034בהנחה סבירה שאין
פסיקות והפקודות רציפות בזיכרון)
שלב השני:Decode-
הפקודה בשלב זה ) sub $v1,$t0,$s2) sub $3,$8,$18קידוד ב 8ספרות הקסא0x01121822 :
ל control-מועבר 0זה ה opcode-ולכן מדובר ב. R-Fromat-
משדה ה (0x1822=0001100000100010) imeediate-ניתן לגלות את אוגר $rdואת functionשהוא 0x22
שזוהי פעולת subלכן זוהי הפקודה.
מהערך Read register 1בכניסה למקבץ האוגרים ניתן לראות $rs=8ומהערך של סיביות 16-20ניתן לראות
ש $rt=0x12=18dec
מהיציאות ממקבץ האוגרים ניתן לראות כי תוכן אוגר ) 0x12(18decהוא 0x100ותוכן אוגר 8הוא .0x200
כלומר הפקודה תבצע:
$3=$8-$18=0x200-0x100=0x100 → $3=0x100
כתובת הפקודה ידוע ע"ס הפקודה שבשלב EXE-3וערכו ( 0x3030בהנחה סבירה שאין פסיקות והפקודות
רציפות בזיכרון)
שלב השלישי:Exe-
הפקודה המבוצעת בשלב זה היא )?(sw $8,-4
לא ניתן לדעת מהו האוגר rsאבל תוכנו ע"ס הכניסה הראשונה ל ALUהוא .0x1004=4100dec
לכן הקידוד בבינארי הידוע לנו1010 ?????010001111111111111100 :נוד2נוד
11ולא ניתן לתרגם ל 8ספרות הקסא.
היות וקווי הבקרה של שלב ה MEMהם 001binע"ס טבלה 4.49הפקודה היא ( . swניתן גם לראות
שהבקרות של שלב WBהן ) 00
ע"ס הכניסות ל ALUכניסה 0x1004 :1כניסה ( aluctrl=0010bin -4 : 2ניתן לראות שגם ) aluop=00
כלומר ה ALUמבצע פעולת חיבור בין )0x1004+(-4)=0x1000(4096dec
לכתובת זו נכתב התוכן של אוגר ( $8ניתן לדעת ע"ס כניסה 0למרבב של .) regdst
התוכן עצמו מוזכר בשלב השני ( )IDוהוא . 0x200
כלומר:
Mem(0x1000)=0x200
את כתובת הפקודה ניתן לחלץ ע"ס הערך שב branch targetכאשר הערך שנציב עבור PCבמשוואה זה
למעשה הכתובת בזיכרון של הפקודה SWהנמצאת כעת בשלב 3בצנרת.
(+4+ (-4)*4=0x3020כתובת הפקודה)PC
כלומר 0x302Cהיא כתובת הפקודה שבשלב 3והיות ואין פקודות קפיצה במעבד (בתוך 5הפקודות הנמצאות
בזמן זה בצנרת) ובהנחה שאין פסיקות ניתן ע"ס ערך זה לדעת את רצף הכתובות של כל הפקודות
הנמצאות בנקודת זמן זו בצנרת)
שלב ה:Mem-
הפקודה היא )?(?( lw $12,לא ניתן לדעת קידוד מלא)
ניתן לדעת שזו ( lwבמימוש המצומצם ע"פ פרק ) 4על סמך קו הבקרה MemReadהוא .1
ערך EX/MEM.RD=12כלומר הפקודה תכתוב בשלב 5לאוגר מספר .12
הערך של ה ALUResultשחושב בשלב הקודם (שלב ) 3הוא 0x7000כלומר הפקודה תיקח את התוכן של מה
שנימצא בכתובת זו בזיכרון הנתונים .כלומר הפקודה תבצע:
)$12= Mem(0x7000
שלב ה:WB-
הפקודה היא )?(?( lw $31,לא ניתן לדעת קידוד מלא)
ניתן לדעת שזו ( lwבמימוש המצומצם ע"פ פרק ) 4על סמך קווי הבקרה Rewrite=1 MemtoReg=1
ערך MEM/WB.RD=31כלומר הפקודה כותבת בשלב זה לאוגר מספר ($ra) 31
הערך שייכתב לאוגר 31הוא הערך 6היושב ב MEM/WB.readData
כלומר הפקודה תבצע $31=6 :
כתובת הפקודה ידועה ע"ס הפקודה שבשלב EXE-3וערכה 0x3024
שאלה 3
א.
EX MEM WB
Mem- Mem- Reg- Memto-
Instruction RegDst ALUOp1 ALUOp0 ALUSrc Branch Read Write Write Reg
addi 0 0 0 1 0 0 0 1 0
ב.
ד.
W1=0x1
קו PC Writeמקבל (Disable) 0רק בזיהוי של load useבכל שאר המצבים ערכו (Enable) 1
W2= 0x0
קו ID/EX.NemReadמקבל 1רק בפקודה lw
W3=0x00000040
ערך אוגר 8המקורי כפי שנקרא ממקבץ האוגרים
W4=0x000000A9
ערך אוגר 13המקורי כפי שנקרא ממקבץ האוגרים
W5=0x0000002E
ערך אוגר 8שהועבר קדימה מהפקודה addiכמפורט בסיכון נתונים 2בסעיף ב
W6=0x2
ניתוב המרבב כמפורט בסיכון נתונים 2סעיף ב
W7=0x1
ניתוב המרבב כמפורט בסיכון נתונים 1סעיף ב
)W8=0x0b (RD
)W9= 0x08 (ID/EX.rs
)W10=0x0D (ID/EX.rt
W11=W5=0x2E
)W12= 0x08 (EX/MEM.RD
)W13=0x0D (MEM/WB.RD
(לפי נתוני השאלה) W14=0x0c0c0c0c
))W16=0x1 (MEM/WB.RegWriteהכתובת אליה ניגשנו בפקודה ( W15= 0x00000008
ה .לפי תרשים ,4.65פעולת חישוב branch targetמבוצעת בשלב ה IDבו נמצאת הפקודה swולכן יחבר
ביחס לנתוני (pc=0x100c imm=12=0xc) swיתבצע:
)Branch target=PC + 4 + 4*imm = 0x100c + 4 + 4*0xc = 0x1040 (=4160dec
לעומת זאת ,לפי תרשים ,4.51פעולת חישוב branch targetמבוצעת בשלב ה EXבו נמצאת הפקודה sub
ולכן יחבר ביחס לנתוני pc=0x1008 . sub
שדה ה immיתקבל כצירוף שלrd+shamt+func=0101100000100010=0x5822 :
Branch target=PC + 4 + 4*imm = 0x1008 + 4 + 4*0x5822 = 0x17094
)(=94356dec
ו .בתרשים beq 4.65מבוצעת בשלב ,IDולכן אפשר להוריד מטבלה 4.49את קו הבקרה branchשאמור
לפעול בשלב ה .MEMכמו כן אפשר להוריד את כל השורה המתייחסת לפקודה ,beqמאחר שגם שם
ההתייחסות הינה לשלבים מתקדמים בביצוע הפקודה ( EXו .)MEM