240 likes | 386 Views
מבנה מחשבים ספרתיים 234267. תרגול מס' 1 : מנהלות חזרה על ארכיטקטורת ה- MIPS. 32. R0 = 0. R1. R30. R31. 32. 32. F0. F1. F0. F2. F3. F2. F28. F29. F28. F30. F31. F30. רגיסטרים (אוגרים). ישנם 32 רגיסטרים לשימוש כללי. רגיסטר R0 ערכו קבוע ושווה 0.
E N D
מבנה מחשבים ספרתיים234267 תרגול מס' 1: מנהלות חזרה על ארכיטקטורת ה- MIPS 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 סיביות.
אופני מיעון ב-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
פקודות 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
קידוד הפקודות • כל הפקודות בנות 32 סיביות – כלומר 4 בתים • כל סוג מגדיר את החלוקה הפנימית בתוך אותן 32 סיביות: • ישנם שלושה סוגי פקודות: • R-type - register instructions • I-type - immediate • J-type - jumps (unconditional) • שדה ה-op (opcode) קבוע בגודלו ונמצא תמיד. הוא חיוני כדי לדעת מהו סוג הפקודה וכיצד לבצע את החלוקה הפנימית השונה בין פורמט לפורמט
קידוד הפקודות • בפקודות מסוג R • שדה ה-op תמיד שווה 0 ואילו שדה ה-func אומר מהי הפקודה • שדות ה-rs וה-rt עבור רגיסטר המקור, ושדה ה-rd עבור רגיסטר המטרה. • שדה ה-shamt (shift amount) מיועד לפקודה הזזת סיביות (SLL,SRL,SRA) בלבד
קידוד הפקודות • בפקודות מסוג I • בפקודות loadופקודות עם שדה imm שדה ה-rs עבור רגיסטר הבסיס ושדה ה-rt עבור רגיסטר המטרה • בפקודות storeשדה ה- rs עבור רגיסטר הבסיס ושדה ה-rt מכיל את הערך לאחסון בזיכרון • בפקודות branch, rs ו-rt עבור רגיסטרי המקור והקבוע מקודד את כתובת הקפיצה ביחס ל-PC
קידוד הפקודות • בפקודות מסוג J • קופצים אל הכתובת המתחילה משמאל ב-4 סיביות מה-PC (ה-segment בזיכרון)שלאחריהן 26 הסיביות שבשדה ה-address ו-2 סיביות אחרונות מימין שהן תמיד 00מאחר וכל הפקודות נמצאות בכתובות המתחלקות ב-4. Current PC 00 + 0000 Target (26 bits) 00 28 31 27 2 1 0 Target address 00
קונפיגורציות של ה-MIPS • Single Cycle • כל פקודה מבוצעת במחזור שעון יחיד בעל זמן מחזור ארוך מאוד • Multicycle • חלוקת הפקודות למספר שלבים ועבור כל פקודה לבצע בכל שלב חלק מהפעולות. רוב הפקודות עדיין משתמשות ב-4 מחזורי שעון לפחות (קצרים יותר). אין שיפור משמעותי • Pipeline • מחלקים את ה- datapathהסדרתי לשלבים • כאשר פקודה מסוימת מסיימת את השלב הראשון ועוברת לשלב השני, פקודה חדשה נכנסת לשלב הראשון וכן הלאה • מתקבל מצב בו בכל מחזור שעון כל פקודה מתקדמת בשלב אחד. כלומר, בכל מחזור מסתיימת פקודה אחת ופקודה חדשה נכנסת לביצוע.
השלבים הבסיסיים בביצוע פקודות • כל פקודה (למעט נקודה צפה) ניתנת לחלוקה ל-5 שלבים בסיסיים: • 1. Fetch • שליפת הפקודה לביצוע מהזיכרון • קידום מונה התוכנית לפקודה הבאה לביצוע. • אכסון הפקודה ברגיסטר זמני (IR)
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 סיביות
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) • חישוב כתובת היעד של הקפיצה
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 או מהזיכרון) לרגיסטר היעד.
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
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
דוגמאות לערכי control lines עבור פקודות שונות: • דוגמא לקידוד offset של פקודת branch • שאלה: אנו נמצאים בכתובת 700 (כתובת פקודת ה-branch) ורוצים לקפוץ לכתובת 800. מה עלינו לקודד? • Displacement = 800 – 704 = 96 bytes • 96 / 4 = 24 instructions • 24
שאלה: • ברצוננו להוסיף פקודה בשם addconstלסט הפקודות של ה- MIPS. הפקודה תבצע חיבור של רגיסטר לקבוע חסר סימן (unsigned) • תחביר הפקודה addconst R1,R2,const והפעולה המתבצעת היא R1=R2+const • הקבוע const הינו מספר חיובי בטווח (216-1) - [0 • קידוד הפקודה החדשה הוא מסוג: • R • I • J • לא ניתן לממש פקודה כזאת במעבד מסוג RISC • אף תשובה אינה נכונה • במידה וניתן לממש את הפקודה, מה השינוי שנדרש במבנה ה- MIPS ?
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
אתר הקורס: • http://webcourse.cs.technion.ac.il/234267 • תרגילי בית: יינתנו 5תרגילי בית במהלך הסמסטר 25%תקף (75% בחינה סופית) הגשה בזוגות 5 נקודות יורדו על כל יום איחור • ספרי קורס: • Hennessy & Patterson - Computer Architecture: A Quantitative Approach. • Hennessy & Patterson - Computer Organization and Design: The Hardware/ Software Interface