1 / 24

מבנה מחשבים ספרתיים 234267

מבנה מחשבים ספרתיים 234267. תרגול מס' 2 : חזרה על ארכיטקטורת ה- MIPS. 32. R0 = 0. R1. R30. R31. 32. 32. F0. F1. F0. F2. F3. F2. F28. F29. F28. F30. F31. F30. רגיסטרים (אוגרים). ישנם 32 רגיסטרים לשימוש כללי. רגיסטר R0 ערכו קבוע ושווה 0.

nigel-white
Download Presentation

מבנה מחשבים ספרתיים 234267

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. מבנה מחשבים ספרתיים234267 תרגול מס' 2: חזרה על ארכיטקטורת ה- MIPS 234267

  2. 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 סיביות.

  3. אופני מיעון ב-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

  4. פקודות 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

  5. קידוד הפקודות • כל הפקודות בנות 32 סיביות – כלומר 4 בתים • כל סוג מגדיר את החלוקה הפנימית בתוך אותן 32 סיביות: • ישנם שלושה סוגי פקודות: • R-type - register instructions • I-type - immediate • J-type - jumps (unconditional) • שדה ה-op (opcode) קבוע בגודלו ונמצא תמיד. הוא חיוני כדי לדעת מהו סוג הפקודה וכיצד לבצע את החלוקה הפנימית השונה בין פורמט לפורמט

  6. קידוד הפקודות • בפקודות מסוג R • שדה ה-op תמיד שווה 0 ואילו שדה ה-func אומר מהי הפקודה • שדות ה-rs וה-rt עבור רגיסטר המקור, ושדה ה-rd עבור רגיסטר המטרה. • שדה ה-shamt (shift amount) מיועד לפקודה הזזת סיביות (SLL,SRL,SRA) בלבד

  7. קידוד הפקודות • בפקודות מסוג I • בפקודות loadופקודות עם שדה imm שדה ה-rs עבור רגיסטר הבסיס ושדה ה-rt עבור רגיסטר המטרה • בפקודות storeשדה ה- rs עבור רגיסטר הבסיס ושדה ה-rt מכיל את הערך לאחסון בזיכרון • בפקודות branch, rs ו-rt עבור רגיסטרי המקור והקבוע מקודד את כתובת הקפיצה ביחס ל-PC

  8. קידוד הפקודות • בפקודות מסוג 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

  9. קונפיגורציות של ה-MIPS • Single Cycle • כל פקודה מבוצעת במחזור שעון יחיד בעל זמן מחזור ארוך מאוד • Multicycle • חלוקת הפקודות למספר שלבים ועבור כל פקודה לבצע בכל שלב חלק מהפעולות. רוב הפקודות עדיין משתמשות ב-4 מחזורי שעון לפחות (קצרים יותר). אין שיפור משמעותי • Pipeline • מחלקים את ה- datapathהסדרתי לשלבים • כאשר פקודה מסוימת מסיימת את השלב הראשון ועוברת לשלב השני, פקודה חדשה נכנסת לשלב הראשון וכן הלאה • מתקבל מצב בו בכל מחזור שעון כל פקודה מתקדמת בשלב אחד. כלומר, בכל מחזור מסתיימת פקודה אחת ופקודה חדשה נכנסת לביצוע.

  10. השלבים הבסיסיים בביצוע פקודות • כל פקודה (למעט נקודה צפה) ניתנת לחלוקה ל-5 שלבים בסיסיים: • 1. Fetch • שליפת הפקודה לביצוע מהזיכרון • קידום מונה התוכנית לפקודה הבאה לביצוע. • אכסון הפקודה ברגיסטר זמני (IR)

  11. 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

  12. השלבים הבסיסיים בביצוע פקודות • 2. Decode • פענוח הפקודה ויצירת את אותות הבקרה שילוו את הפקודה בהמשך • שליפת ערכי הרגיסטרים המתאימים מתוך Register File • Sign Extension: הרחבה של האופרנד המקודד מ-16 סיביות ל-32 סיביות

  13. 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

  14. השלבים הבסיסיים בביצוע פקודות • 3. Execute • ביצוע הפעולה הנדרשת על בסיס הערכים בערוצי המידע: • עבור פעולת ALU– ביצוע הפעולה הנדרשת • עבור גישה לזיכרון – חישוב הכתובת האפקטיבי • עבור הסתעפות (branch) – חישוב כתובת היעד וחישוב תנאי הקפיצה • מבצעים את החישוב על 2 האופרנדים מהרגיסטרים הנכנסים ל-ALU הראשי אשר מבצע פעולת חיסור • אם התוצאה היא 0 נדלק דגל ZERO וכך ידוע האם יש לקפוץ (BEQ) • חישוב כתובת היעד של הקפיצה

  15. 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

  16. השלבים הבסיסיים בביצוע פקודות • 4. Memory • קריאה / כתיבה לזיכרון בפקודות Store / Load • החלטה האם לקפוץ בפקודות branch (עדכון PC) • שימו לב - Control Hazard • בכל שלב נכנסות פקודות חדשות ל- pipeline. עד שהבנו שצריך לקפוץ, אולי נכנסו פקודות שכלל אינן צריכות להתבצע • 5. Write back: • אכסון התוצאה (מ-ALU או מהזיכרון) לרגיסטר היעד.

  17. 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

  18. אותות הבקרה

  19. 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

  20. ALU control, ALUop func

  21. דוגמאות לערכי control lines עבור פקודות שונות: • דוגמא לקידוד offset של פקודת branch • שאלה: אנו נמצאים בכתובת 700 (כתובת פקודת ה-branch) ורוצים לקפוץ לכתובת 800. מה עלינו לקודד? • Displacement = 800 – 704 = 96 bytes • 96 / 4 = 24 instructions •  24

  22. שאלה: • ברצוננו להוסיף פקודה בשם addconstלסט הפקודות של ה- MIPS. הפקודה תבצע חיבור של רגיסטר לקבוע חסר סימן (unsigned) • תחביר הפקודה addconst R1,R2,const והפעולה המתבצעת היא R1=R2+const • הקבוע const הינו מספר חיובי בטווח (216-1) - [0 • קידוד הפקודה החדשה הוא מסוג: • R • I • J • לא ניתן לממש פקודה כזאת במעבד מסוג RISC • אף תשובה אינה נכונה • במידה וניתן לממש את הפקודה, מה השינוי שנדרש במבנה ה- MIPS ?

  23. 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

  24. אתר הקורס: • 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

More Related