אוניברסיטת בר-אילןwimers/files/courses/logic_design_and_comp… · web...

17
BAR-ILAN UNIVERSITY Engineering Faculty ןןןן- ןןןןןןןןןן ןן ההההההה הההההה ןןן ןןןן ןןןןן ןןןןןןן ןןן"ן ןןן' ן' ןןןן ן'83-253 הההה : הההה' ההההה הההה ההההההה : הה הההה הההההה, הה ההההה ההה ןןןן ןןן ןןןן: הההה ההההההה הההה ההההה ההההההה הההההה ההההה ההההההה ה ההה ההההה. ההה ההההה: הההה הההה. הה"ה הההההה ההההה הההה ההההה הה הה הההההה.110 , ההההה ההההה הה הההה ההה הההה הה100 . ןן ןןןן ןן ןן ןןןןןןןןן . ההה הההה הההה הההה הההההה הההההה ההההה, ההה הה הה הההה ההההההה ההההה הה. הה ההההה ההההההההה ההההה הההה ! הההההה ההה הההה. ההההה הההההה הה ההההה.1

Upload: others

Post on 01-Sep-2019

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: אוניברסיטת בר-אילןwimers/files/courses/Logic_Design_and_Comp… · Web viewבכיתה תרגלנו את הפקודה lwr אשר מקבלת שלושה רגיסטרים

BAR-ILAN UNIVERSITY

Engineering Faculty

אוניברסיטת בר-אילן

הפקולטה להנדסה

תכן לוגי ומבוא למחשביםתשע"ו סמס' א' מועד ב'

83-253

מרצה : פרופ' שמואל וימר

מתרגלים : מר יוסף לונדון, מר איתמר לוי

:מותר עזר במהלךחומר שנרשמו והסברים הערות כולל ההרצאות שקפי ספר הקורס. ההרצאות ו

:משך המבחן

שלוש שעות.

הציון הסופי לא יעלה בכל110חובה לענות על כל השאלון. סה"כ נקודות אפשרי , .100מקרה על

אין צורך לפתח מחדש תוצאות שהוכחו בכיתה,יש לנמק את כל תשובותיכם . אלא אם כן נאמר מפורשות לעשות כן.

! יש לשרטט דיאגראמות באופן ברור

.הכתיבה בעט בלבד. כתיבה בעפרון לא תיבדק

בהצלחה!

1

Page 2: אוניברסיטת בר-אילןwimers/files/courses/Logic_Design_and_Comp… · Web viewבכיתה תרגלנו את הפקודה lwr אשר מקבלת שלושה רגיסטרים

נקודות(40) 1 שאלה single cycle אשר מקבלת שלושה רגיסטרים כאופרנדים למערכת lwrבכיתה תרגלנו את הפקודה

mips.וניגשת לזיכרון ומוציאה מילה מכתובת הסכום . הפקודה סוכמת את אשר בשניים מהם Lwr $R1 , $R2, $R3המילה המוצאת נכתבת לתוך הרגיסטר השלישי.

.multi cycle mipsממשו את הפקודה במלואה למערכת א. במידת הצורך ועדכון הבקר.DATA PATHהכוונה במלואה היא שינוי ה

הצהירו על מבנה פקודה מתאים, תאמו את כל הפרטים הנצרכים לפתרון. עדכנו את כל קוי הבקרה שצריכים עדכון בכל שלב. מלאו מחדש את דיאגרמת המצבים לפי הצורך.

במידה וצריך ואת מערכת השליטה של הבקר.ROMעדכנו את טבלאות הבמידת האפשר השתמשו במצבים קיימים מראש.

לפקודה שאיננה רגיסטר שני אשר מבצע סכימה של מבחינת הRTPYPEאין מצב OPCODE .שלה RTYPEרגיל לא יכול לגשת לזכרון או ליתר דיוק, המערכת לא תדע לזהות

. לכן היה צורך במצב נוסף. השלמת000000 יהיה OPCODE במידה והRTYPEאם זה לא ניתן היה לקפוץ יותר מבחינת מערכת שליטת המצבים. שאר המצבים היתה פשוטה

.REGDST ומשם להתפצל לחדש שכן צריך לשנות את הקו בקרה של 3למצב

2

Page 3: אוניברסיטת בר-אילןwimers/files/courses/Logic_Design_and_Comp… · Web viewבכיתה תרגלנו את הפקודה lwr אשר מקבלת שלושה רגיסטרים

.1 ממצב ROMעדכון טבלת ה אין עדכון בבקר שינוי המצבים.

ועדכון מערך השליטה.

3

Page 4: אוניברסיטת בר-אילןwimers/files/courses/Logic_Design_and_Comp… · Web viewבכיתה תרגלנו את הפקודה lwr אשר מקבלת שלושה רגיסטרים

Swr $R1 , $R2, $R3

Swrהינה פקודה חדשה אשר מבצעת חיבור בין שני רגיסטרים ומכניסה מילה מתוכן רגיסטר (.LWRשלישי לזיכרון בכתובת של החיבור. )כיוון הפוך ל

ניתנת למימוש במערכת ב. singleהאם הפקודה cycle mipsשינויים ב ללא DATAPATH? הסברו פרטו ונמקו.

עם אותם דגשים מסעיף א על המערכתmulti cycle mipsממשו את הפקודה במערכת ג. ? במידת האפשר מזערו את השינוייםDATAPATHמסעיף א. האם היה צורך בעדכון ה

)כגון הזיכרון או קבוץ הרגיסטרים( על חשבון שינוייםDATAPATHביחידות מובנות של האחרים וקוי בקרה נוספים. עדיף להוסיף בוררים מאשר שינויים משמעותיים.

כמעט אותו דבר, צריך להוסיף מצב כדי שיקרא מקובץ הרגיסטרים את הרגיסטר לכתיבה . לצורך הקריאה מאופרנד שלישי נצטרך קוALUלזכרון בנוסף לחיבור שנעשה באותו זמן ב

.FILE של הרגיסטר 2 בכניסה לפורט הmuxבקרה נוסף ו

4

Page 5: אוניברסיטת בר-אילןwimers/files/courses/Logic_Design_and_Comp… · Web viewבכיתה תרגלנו את הפקודה lwr אשר מקבלת שלושה רגיסטרים

5

Page 6: אוניברסיטת בר-אילןwimers/files/courses/Logic_Design_and_Comp… · Web viewבכיתה תרגלנו את הפקודה lwr אשר מקבלת שלושה רגיסטרים

6

Page 7: אוניברסיטת בר-אילןwimers/files/courses/Logic_Design_and_Comp… · Web viewבכיתה תרגלנו את הפקודה lwr אשר מקבלת שלושה רגיסטרים

נקודות(40 ) 2 שאלה Aנדרש לחשב סכום של שני ווקטורים [0 :15 ו [ B [0 :15 ולרשום את התוצאה לווקטור[

C [0 :15 ] .C [ i ]=A [ i ]+B [i שהווקטור. [ בכתובת Aנתון בזיכרון נמצא 0x40000040 הווקטור נמצא מיד לאחרBולאחריו מיד בכתובת בזיכרון לרשום יש התוצאה . את

. שימו לב שפקודתhalt. בסיום החישוב יש להפסיק את התכנית ע"י פקודת Bהווקטור halt מתרחשת בשלה הID.

7

Page 8: אוניברסיטת בר-אילןwimers/files/courses/Logic_Design_and_Comp… · Web viewבכיתה תרגלנו את הפקודה lwr אשר מקבלת שלושה רגיסטרים

קוד א. לרשום בטבלה המצורפת בתרשים assemblyיש המתאים למעבד המתואר המצורף. הקפידו לרשום את הקוד היעיל ביותר.

0ראשית, יש להניח שהכתובות x נמצאות בתוך רגיסטר )לא נאמר מפורשות 40000040 ,addi בשאלה(. שימו לב שאין דרך להכנסת כתובת זאת ישירות לתוך רגיסטר ע"י פקודת

סיביות! כמו כן, אי אפשר להשתמש בה16וזאת משום שהכתובות המדוברות הינן יותר מ סיביות. בכל מקרה,16שוב מאותה סיבה שמדובר ביותר מ , sw או lw לפקודת offset כ

.לא הורדו נקודותגם אם הכתובות חושבו כמתואר, )כלומרload hazard, ניתן למנוע add ולאחריהן פקודת lwלמרות שנדרשות שתי פקודות

ביניהן.( ע"י הכנסת פקודה אחרתhazard detection unitאת בזבוז המחזור הנגרם ע"י .1:1, אבל ניתן למיפוי assemblyהקוד הרשום להלן איננו

$t0 = 0x40000040 // A [0 ] base address$t1 = 16 // initialize loop index i

$t1 = $t1 – 1 // update loop indexloop:load 0)$t0( from mem into $t2 // A [ i ]→$t 2load 64)$t0( from mem into $t3 // B [i ]→$t 3

$t0 = $t0 + 4 // update base address$t4 = $t3 + $t2 // C [ i ]=A [ i ]+B [i ]

store $t4 in mem at 128)$t0( // $ t 4→C [i ]bne $t1 $zero loophalt

כמה מחזורי שעון ידרשו לביצוע התכנית שרשמתם?ב.לכן ה load hazardבממוש הנ"ל איננו קורה, hazard detection unitנכנס איננו

פקודות בתוך7 פקודות לפני הלולאה, 2לפעולה ואין אבוד מחזורי שעון. בסה"כ ישנן הלולאה ופקודת העצירה שנקראת גם היא בכל חזרה של הלולאה )אבל מבוטלת ע"י

IF.Flush 110(=7+1)2+16(. סה"כ.

הנראה בשרטוט. IF.Flushמהנדס צעיר ונמרץ בוגר בר-אילן, החליט לבטל את הקו ג.האם הקוד שרשמתם בסעיף א' יפעל באופן תקין? נמקו היטב את תשובתכם.

הקוד אינו תקין. התכנית תפסיק לפעול מיד בתום הלולאה הראשונה משום שהפקודהhalt.שנכנסה לצינור תפעל מיד

ועלכן במדה ובקודhazard detection unit, אינו משפיע על IF.Flushיש לשים לב שביטול , הללו ממשיכים להיות מטופלים.load hazardהיו מצבי

במדה ותשובתכם הייתה שלילית, שנו את הקוד שרשמתם בסעיף א' כך שהתכניתד.תפעל נכון, ובנוסף גם באופן היעיל ביותר. הסבירו היטב את השינויים שנעשו.

8

Page 9: אוניברסיטת בר-אילןwimers/files/courses/Logic_Design_and_Comp… · Web viewבכיתה תרגלנו את הפקודה lwr אשר מקבלת שלושה רגיסטרים

,nopמיד לאחר פקודת הקפיצה המותנית. אפשר כמובן להכניס delay slotיש להכניס וניתן להעביר את הפקודהnopאולם על מנת להימנע מאבדן מחזור שעון, אין צורך ב

store $t4 אחרי הקפיצה המותנית. לשים לב שפקודת הhaltמתבצעת כאשר ה store .nop, ועלכן נדרשת הפרדה ע"י EXEהאחרון נמצא בשלב ה

$t0 = 0x40000040 // A [0 ] base address$t1 = 16 // initialize loop index i

$t1 = $t1 – 1 // update loop indexloop:load 0)$t0( from mem into $t2 // A [ i ]→$t 2load 64)$t0( from mem into $t3 // B [i ]→$t 3

$t0 = $t0 + 4 // update base address$t4 = $t3 + $t2 // C [ i ]=A [ i ]+B [i ]

bne $t1 $zero loopstore $t4 in mem at 128)$t0( // $ t 4→C [i ]

nophalt

יותר, והחליט בנוסף לבטל גם את מנגנוןה. המהנדס בוגר בר-אילן הגדיל ראש עוד hazard detection unitהאם הקוד שנרשם בסעיף א' )במדה ולא נדרש שינוי( או .

הקוד שנרשם ב ד' )במדה ונדרש שינוי( יפעלו באופן תקין? נמקו היטב את תשובתכם.במדה ונדרש שינוי רשמו קוד מתוקן.

load הינו לטפל ב hazard detection unitהקוד הרשום לעי"ל עבוד באופן תקין. תפקיד hazardsבאופן בו רשום הקוד המרחק בין פקודות ה . load לבין הפקודהaddמספיק

עוקבת מייד היתה t4 = $t3 + $t2$גדול, כך שלא תיוצר כל בעיה. במדה והפקודה לחבור .nop יש להפרידן ע"י, )load 64)$t0 אחרי

9

Page 10: אוניברסיטת בר-אילןwimers/files/courses/Logic_Design_and_Comp… · Web viewבכיתה תרגלנו את הפקודה lwr אשר מקבלת שלושה רגיסטרים

D=16∗Cעבור המעבד מסעיף ה' נדרש לחשב את הפעולה ו. [15 ישDאת הערך. [הווקטור לאחר מיד בכתובת בזיכרון אתCלרשום להפסיק יש החישוב בסיום .

איננו תומך בפעולת כפל. יש לרשוםALU. שימו לב שה haltהתכנית ע"י פקודת מתאים. הקפידו לרשום את הקוד היעיל ביותר. assemblyבטבלה המצורפת קוד

.t1$ המוחזק באוגר D למשתנה Cשימו לב לטעינת האיבר באחרון של הווקטור hazardאת פקודת הכפל ניתן לממש ע"י הזזה שמאלה של ארבע סיביות. מאחר והמנגנון

detection unit איננו קיים, הטיפול ב load hazard חייב להיעשות ע"י הכנסת nopאחרי load ה .nop השני תפקידו לדאוג שפקודת ה store תסיים את שלב ה MEMולא תסתיים

.haltקודם לכן כתוצאה מ

C פעמים שבה מוסיפים את 15קוד פחות יעיל יכול להפעיל לולאה [15 לעצמו. [

בכל סבוב שבו מוסיפים את הצבירה עד עכשיו לעצמה. זה2אפשרי גם ע"י הכפלה ב חזרות של הלולאה.4דורש

,IF.Flushבמקרה של שני הפתרונות האחרונים יש לשים לב שמדובר במעבד שבו בוטל halt, אחרת delay slot מבדיקת תנאי סיום הלולאה ע"י haltולכן יש להרחיק את פקודת

יבוצע מייד בתום הסבוב הראשון.

load 188)$t0( to $t1 // C [15 ]→$t 1nop

$t1 = $t1 << 4 // X16 multiply by left shiftstore $t1 in 192)$t0( // $ t 1→D

nophalt

10

Page 11: אוניברסיטת בר-אילןwimers/files/courses/Logic_Design_and_Comp… · Web viewבכיתה תרגלנו את הפקודה lwr אשר מקבלת שלושה רגיסטרים

נקודות(30 ) 3 שאלה ומודגש בסכמה הבאה.2 שנידון בשאלה IF.Flushשאלה זו עוסקת בייצור הסיגנל

)בתוך מודול הVerilogרשום תכן בשפת א. זה שמייצר סיגנל MIPSולא כמודול ורשום הקוד באזורים המוקצים לכך עצמאי(. השתמש בתבנית הניתנת למטה

שלVerilog( בשפת headerבאפור. שים לב שאתה מקבל מבנה הצהרות כללי )את לייצר הדרושים לסיגנלים המתאימות והצהרות ועליךIF.Flushהמעבד

(. ניתן להשתמש אךIFIDregלהשתלב בהצהרות אלו )כולל הצהרה של רגיסטר ורק בשמות שניתנו על הסכימה )שמוצהרים, או סיגנלים שתצהירו עליהם ותייצרובהסבר\הערות וחוסר סדר חוסר על ירד ניקוד הקיימים(. מהסיגנלים אותם

\\ Verilogבמבנה

11

Page 12: אוניברסיטת בר-אילןwimers/files/courses/Logic_Design_and_Comp… · Web viewבכיתה תרגלנו את הפקודה lwr אשר מקבלת שלושה רגיסטרים

module IDIFreg (input reset, clk input [31:0] in_word, output reg [31:0] out_word);always @(posedge clk)

if (reset(out_word <= 0;

else if (clk == 1)out_word <= in_word;

endmodule

12

Page 13: אוניברסיטת בר-אילןwimers/files/courses/Logic_Design_and_Comp… · Web viewבכיתה תרגלנו את הפקודה lwr אשר מקבלת שלושה רגיסטרים

module MIPS (input clk);

wire clk;

reg[31:0] PC, RegFile[0:31], IMemory[0:1023], DMemory[0:1023], //memories

IDEXA, IDEXB, IDEXIR, EXMEMB, EXMEMALUout, EXMEMIR, MEMWBIR;

wire [31:0] IFID, IMEM;

wire [4:0] IFIDrt, IFIDrs, IFIDrd, IFIDop, IFIDfun;

//Definitions

______________________________________________________________________________________________________________________________________________________________________ _____________________________________________________________________________________________________________________________________________________________________________________________________________________

assign IFIDrt=IFID[15:11]; assign IFIDrd=IFID[20:16]; assign IFIDrs=IFID[25:21]; assign IFIDop=IFID[31:26];

__________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

endmodule;

13