240 likes | 507 Views
מבנה מחשבים ספרתיים 234267. תרגול מס' 1 : מנהלות חזרה על ארכיטקטורת ה- MIPS. אתר הקורס: http://webcourse.cs.technion.ac.il/234267 תרגילי בית: יינתנו 4 תרגילי בית במהלך הסמסטר 20% תקף (80% בחינה סופית) הגשה בזוגות 5 נקודות יורדו על כל יום איחור ספרי קורס:
E N D
מבנה מחשבים ספרתיים234267 תרגול מס' 1: מנהלות חזרה על ארכיטקטורת ה- MIPS 234267 - October 2005
אתר הקורס: • http://webcourse.cs.technion.ac.il/234267 • תרגילי בית: יינתנו 4 תרגילי בית במהלך הסמסטר 20% תקף (80% בחינה סופית) הגשה בזוגות 5 נקודות יורדו על כל יום איחור • ספרי קורס: • Hennessy & Patterson - Computer Architecture: A Quantitative Approach. • Hennessy & Patterson - Computer Organization and Design: The Hardware/ Software Interface 234267 - October 2005
32 R0 = 0 R1 R30 R31 32 32 F0 F1 F0 F2 F3 F2 F28 F29 F28 F30 F31 F30 רגיסטרים (אוגרים) • ישנם 32 רגיסטרים לשימוש כללי. רגיסטר R0 ערכו קבוע ושווה 0. • כמו כן ישנם 16 רגיסטרים של 64 סיביות עבור פעולות float (0Fשמיש) • ניתן להשתמש בכל אחד מהם כשני רגיסטרים float של 32 סיביות. 234267 - October 2005
אופני מיעון ב-MIPS • רגיסטר (register): • האופרנד מאוחסן ברגיסטר • ADD $2,$3,$4; reg 2 reg3 + reg4 • מיידי (Immediate): • האופרנד הוא קבוע (מקודד בפקודה) בגודל 16 סיביות עם סימן • ADDI $2,$3,15; reg 2 reg3 + 15 • בסיס + היסט (Base + Displacement): • האופרנד נמצא בזיכרון. • הכתובת בזיכרון = ערך שדה ההיסט + הערך שברגיסטר הבסיס • LW $2,105($3); reg 2 mem(Reg3 + 105) • יחסי למונה התוכנית (PC-relative): הערך מחושב ע"י חיבור הערך שב-PC לערך שדה ה-immediate (16 סיביות). מיועד אך ורק עבור קפיצות מותנות (branches) • BEQ $3,$4,15000; if reg3 == reg4 then PC PC + 4 + 4*15000 234267 - October 2005
פקודות MIPS נוספות • גישה לזיכרון, אכסן (Store) מילה (32 סיביות) לכתובת קבועה) שימו לב ש- reg0 = 0) • SW $3,100($0); mem(100+reg0) reg3 • טעינת / העתקת ערך אוגר (אין פקודת MOV מיוחדת) • ADDI $4,$0,15; reg4 15 (שימו לב להרחבת הסימן) • ADD $4,$8,$0; reg4 reg8 • Branch מותנה • BEQ $0,$1,Label1; if reg1 == 0 then jump to Label1 • השוואת "קטן-מ" (פסאודו פקודה 2L,3$,2$ BLT) • SLT $1,$2,$3 if reg2 < reg3 then reg1 1 else reg1 0 • BNE $0,$1,L2 if reg0 != reg1 then jump to L2 • (מאחר ו-reg0=0 צמד הפקודות יגרום לקפיצה אם reg2<reg3 אחרת המשך כרגיל) • קפיצה בלתי מותנית (מיעון מוחלט) J 10000 • קפיצה עקיפה (מיעון לפי ערך האוגר)JR $31 234267 - October 2005
קידוד הפקודות • כל הפקודות בנות 32 סיביות – כלומר 4 בתים. • כל סוג מגדיר את החלוקה הפנימית בתוך אותן 32 סיביות: • ישנם שלושה סוגי פקודות: • R-type - register instructions • I-type - immediate • J-type - jumps (unconditional) • שדה ה-op (opcode) קבוע בגודלו ונמצא תמיד. הוא חיוני כדי לדעת מהו סוג הפקודה וכיצד לבצע את החלוקה הפנימית השונה בין פורמט לפורמט. 234267 - October 2005
קידוד הפקודות • בפקודות מסוג R • שדה ה-op תמיד שווה 0 ואילו שדה ה-func אומר מהי הפקודה. • שדות ה-rs וה-rt עבור רגיסטר המקור, ושדה ה-rd עבור רגיסטר המטרה. • שדה ה-shamt (shift amount) מיועד לפקודה הזזת סיביות (SLL,SRL,SRA) בלבד 234267 - October 2005
קידוד הפקודות • בפקודות מסוג I • בפקודות load ופקודות עם שדה imm שדה ה-rs עבור רגיסטר הבסיס ושדה ה-rt עבור רגיסטר המטרה. • בפקודות store שדה ה- rs עבור רגיסטר הבסיס ושדה ה-rt מכיל את הערך לאחסון בזיכרון. • בפקודות branch, rs ו-rt עבור רגיסטרי המקור והקבוע מקודד את כתובת הקפיצה ביחס ל-PC 234267 - October 2005
קידוד הפקודות • בפקודות מסוג J • קופצים אל הכתובת המתחילה משמאל ב-4 סיביות מה-PC (ה-segment בזיכרון)שלאחריהן 26 הסיביות שבשדה ה-address ו-2 סיביות אחרונות מימין שהן תמיד 00מאחר וכל הפקודות נמצאות בכתובות המתחלקות ב-4. 234267 - October 2005
קונפיגורציות של ה-MIPS • single cycle - כל פקודה מבוצעת במחזור שעון יחיד בעל זמן מחזור ארוך מאוד. • multicycle - חלוקת הפקודות למספר שלבים ועבור כל פקודה לבצע בכל שלב חלק מהפעולות. רוב הפקודות עדיין משתמשות ב-4 מחזורי שעון לפחות (קצרים יותר). אין שיפור משמעותי. • Pipeline – מחלקים את ה- datapath הסדרתי לשלבים. כאשר פקודה מסוימת מסיימת את השלב הראשון ועוברת לשלב השני, פקודה חדשה נכנסת לשלב הראשון וכן הלאה. מתקבל מצב בו בכל מחזור שעון כל פקודה מתקדמת בשלב אחד. כלומר, בכל מחזור מסתיימת פקודה אחת ופקודה חדשה נכנסת לביצוע. 234267 - October 2005
השלבים הבסיסיים בביצוע פקודות • כל פקודה (למעט נקודה צפה) ניתנת לחלוקה ל-5 שלבים בסיסיים: • 1. Fetch : • שליפת הפקודה לביצוע מהזיכרון • קידום מונה התוכנית לפקודה הבאה לביצוע. • אכסון הפקודה ברגיסטר זמני (IR) 234267 - October 2005
0 0 0 m u x m u x m u x 1 1 1 + WB Control + M Shift left 2 EX ALU Zero Instruction Memory result 0 m u x Read Address PC 1 6 Sign extend ALU Control 32 32 16 Imm Rt Rd Instruction Fetch PCSrc ID/EX MEM/WB IF/ID EX/MEM RegWrite WB WB M MemWrite MemRead Branch RegWrite NewPC NewPC 4 RegDst ALUSrc ALUop Data Memory Read reg 1 MemtoReg Read data 1 Read reg 2 Write Address Register File Read data 2 Read Data Write reg Read Address Instruction Write data Write Data [15-0] ALUresult [20-16] Rd\Rt Rd\Rt [15-11] RegDst
השלבים הבסיסיים בביצוע פקודות • 2. decode: • שליפת ערכי הרגיסטרים המתאימים מתוך Register File. • פענוח הפקודה ויצירת את אותות הבקרה שילוו את הפקודה בהמשך. • sign extension: הרחבה של האופרנד המקודד מ-16 סיביות ל-32 סיביות. 234267 - October 2005
0 0 0 m u x m u x m u x ID/EX 1 1 1 IF/ID WB M + EX Control + Shift left 2 4 ALU Zero Instruction Memory result 0 m u x Read Address PC 1 6 Sign extend ALU Control 16 32 Instruction Decode PCSrc MEM/WB EX/MEM RegWrite WB WB M MemWrite MemRead Branch RegWrite NewPC NewPC RegDst ALUSrc ALUop Data Memory Read reg 1 MemtoReg Read data 1 Read reg 2 Write Address Register File Read data 2 Read Data Write reg Read Address Instruction Write data Write Data 32 [15-0] Imm ALUresult Rt [20-16] Rd\Rt Rd\Rt Rd [15-11] RegDst
השלבים הבסיסיים בביצוע פקודות • 3. execute: • ביצוע הפעולה הנדרשת על בסיס הערכים בערוצי המידע: • עבור פעולת ALU – ביצוע הפעולה הנדרשת • עבור גישה לזיכרון – חישוב הכתובת האפקטיבית • עבור הסתעפות (branch) – חישוב כתובת היעד וחישוב תנאי הקפיצה – מבצעים את החישוב על 2 האופרנדים מהרגיסטרים הנכנסים ל-ALU הראשי אשר מבצע פעולת חיסור.אם התוצאה היא 0 נדלק דגל ZERO וכך ידוע האם יש לקפוץ (BEQ). • חישוב כתובת היעד של הקפיצה. 234267 - October 2005
0 0 0 m u x m u x m u x ID/EX 1 1 1 IF/ID WB M + EX Control + Shift left 2 4 ALU Zero Instruction Memory result 0 m u x Read Address PC 1 6 Sign extend ALU Control 16 32 EXecute PCSrc MEM/WB EX/MEM RegWrite WB WB M MemWrite MemRead Branch RegWrite NewPC NewPC RegDst ALUSrc ALUop Data Memory Read reg 1 MemtoReg Read data 1 Read reg 2 Write Address Register File Read data 2 Read Data Write reg Read Address Instruction Write data Write Data 32 [15-0] Imm ALUresult Rt [20-16] Rd\Rt Rd\Rt Rd [15-11] RegDst
השלבים הבסיסיים בביצוע פקודות • 3. memory: • קריאה / כתיבה לזיכרון בפקודות Store / Load. • החלטה האם לקפוץ בפקודות branch (עדכון PC). • שימו לב - Control Hazard: בכל שלב נכנסות פקודות חדשות ל- pipeline. עד שהבנו שצריך לקפוץ, אולי נכנסו פקודות שכלל אינן צריכות להתבצע. • 4. Write back: • אכסון התוצאה (מ-ALU או מהזיכרון) לרגיסטר היעד. 234267 - October 2005
0 0 0 m u x m u x m u x ID/EX 1 1 1 IF/ID WB M + EX Control + Shift left 2 4 ALU Zero Instruction Memory result 0 m u x Read Address PC 1 6 Sign extend ALU Control 16 32 MEMory \ WriteBack PCSrc MEM/WB EX/MEM RegWrite WB WB M MemWrite MemRead Branch RegWrite NewPC NewPC RegDst ALUSrc ALUop Data Memory Read reg 1 MemtoReg Read data 1 Read reg 2 Write Address Register File Read data 2 Read Data Write reg Read Address Instruction Write data Write Data 32 [15-0] Imm ALUresult Rt [20-16] Rd\Rt Rd\Rt Rd [15-11] RegDst
אותות הבקרה 234267 - October 2005
0 0 0 m u x m u x m u x ID/EX 1 1 1 IF/ID WB M + EX Control + 4 Shift left 2 ALU Zero Instruction Memory result 0 m u x Read Address PC 1 6 Sign extend ALU Control 16 32 אותות הבקרה PCSrc MEM/WB RegWrite EX/MEM WB WB M Branch MemWrite MemRead RegWrite NewPC NewPC RegDst ALUSrc ALUop Data Memory MemtoReg Read reg 1 Read data 1 Read reg 2 Write Address Register File Read data 2 Read Data Write reg Read Address Instruction Write data Write Data 32 [15-0] ALUresult Imm [20-16] Rt Rd\Rt Rd\Rt Rd [15-11] RegDst
ALU control, ALUop func 234267 - October 2005
דוגמאות לערכי control lines עבור פקודות שונות: • דוגמא לקידוד offset של פקודת branch: • שאלה: אנו נמצאים בכתובת 700 (כתובת פקודת ה-branch) ורוצים לקפוץ לכתובת 800. מה עלינו לקודד? 234267 - October 2005
שאלה: • ברצוננו להוסיף פקודה בשם addconst לסט הפקודות של ה- MIPS. הפקודה תבצע חיבור של רגיסטר לקבוע חסר סימן (unsigned). • תחביר הפקודה addconst R1,R2,const והפעולה המתבצעת היא R1=R2+const. הקבוע const הינו מספר חיובי בטווח (216-1) - 0. • קידוד הפקודה החדשה הוא מסוג: • R • I • J • לא ניתן לממש פקודה כזאת במעבד מסוג RISC • אף תשובה אינה נכונה • במידה וניתן לממש את הפקודה, מה השינוי שנדרש במבנה ה- MIPS ? 234267 - October 2005
0 0 m u x m u x ID/EX 1 1 IF/ID WB M + EX + 4 Shift left 2 ALU Zero Instruction Memory result 0 m u x Read Address PC 1 6 ALU Control 16 16 PCSrc EX/MEM MEM/WB RegWrite WB WB Control M MemWrite Branch MemRead RegWrite RegDst ALUSrc ALUop Data Memory Read reg 1 MemtoReg Read data 1 Read reg 2 Write Address 0 Register File Read data 2 Instruction m u x Read Data Write reg 1 Read Address 2 Write data Write Data Sign extend 32 32 [15-0] zero extend 32 [20-16] Rd\Rt Rd\Rt [15-11] RegDst