.. (לתיקייה המכילה) | ||
האם אנחנו אמורים לבנות גם את הhazard detection unite כחלק מהיחידה | |
לא |
לאחר שכותבים קוד MIPS ל- inst.txt ולא מוסיפים ENTER אחרי הפקודה האחרונה הקובץ שנוצר מהסקריפט פייטון טועה בפקודה האחרונה. אם יש ENTER הכל תקין. האם זו בעיה בסקריפט פייטון ולא בעיה אצלנו | |
שימו לב שהקובץ יסתיים בשורה ריקה (או שתשנו את שורה 35 בסקריפט) |
בתרגיל מצוין " register_file (שימו לב ל-RF split)" אך כתוב לא לשנות את המודול של ה- Register File. רק רצינו לוודא שה- split כבר ממומש | |
אכן |
רצינו לדעת איך לקרוא בשרטוטים שלנו לרגיסטר שאותו בודקים עבור כתיבה בforwarding unit. | |
dest הוא הרגיסטר שכותבים אליו המודול שמייצר את dest הוא המודול המתאים לבקר |
שלום, | |
אמור להיווצר קובץ בשם inst_mem.v ובו מודול של זיכרון פקודות, הפקודות הטעונות בו הן אלו שכתבתם. |
בקובץ piplined_mips ישנם שלושה מוקסים אליהם ענו אמורים להתייחס sel_alu1, sel_alu2, sel_store_val. | |
בשרטוטים מההרצאות והתרגולים לא מתואר מעקף עבור הערך שיעבור לכתיבה לזיכרון בעקבות פקודת SW. כדי להשתכנע שדרושים 3 בוררים, חישבו איך ניתן באמצעות 2 בוררים להעביר 2 ארגומנטים לALU וארגומנט נוסף לכתיבה לזיכרון (הרי בפקודת SW צריכים את שלושתם בו זמנית). במימוש שקיבלתם 2 בוררים שולטים על הארגומנטים לALU והשלישי שולט על הערך שיעבור לכתיבה לזיכרון. |
כתבנו מודל וניסינו להריץ אותו(מבלי להתייחס למוקס השלישי) הרצנו את הפייתון, קיבלנו קובץ, קימפלנו אותו בורילוג והרצנו אותו, | |
אתם יכולים לבצע הדפסה כשנכתב ערך לזיכרון או רגיסטר ובנוסף להדפיס אותות הוראה שנראים לכם חשובים כל מחזור שעון. |
ראיתי בשאלות שלא צריך לבנות את ה hazard detection unit, אם הבנתי נכון זה אומר שלא צריך לבצע מימוש מיוחד למקרים הבאים: | |
בארכיטקטורה של pipelined-MIPS שנלמדה בתרגול יש מודול בשם Hazard detection unit ותפקידו לבצע את הפעולה השניה שכתבת. אין צורך לממש מודול כלשהו שלא מופיע בהוראות התרגיל |
Except for writing our forwarding_unit.v, are we supposed to change stuff other than what is in the file pipelined_MIPS.v inside the TODO? | |
No |
What is the meaning that ID does not include RF? | |
It means nothing but implementation considerations. |
Why MEM module receives clock as a parameter, while EXE does not? Is there some purpose to it? | |
Because MEM contains a synchronous module (the data memory) whereas EXE does not. |
האם צריך לשנות את קובץ הרגיסטרים | |
לא |
האם צריך לשנות עוד קובץ מלבד הקבצים שבהוראות התרגיל מופיע בצורה מפורשת שצריך לשנות אותם | |
לא |
האם צריך לשנות עוד שורות קוד מלבד השורות שבהוראות התרגיל מופיע בצורה מפורשת שצריך לשנות אותם | |
לא |
ראינו בטסטים שעשינו שהמערכת לא מטפלת במקרים של פקודת R שבאה אחרי lw (כלומר צריכים לטעון מהזכרון את הארגומנט של פעולת R), ואנו יודעים כי הדרך לטפל במצב הזה היא stall. לא ראינו כניסה ברגיסטרים שנותנת לנו אפשרות לשלוט על פעולה זו. האם נדרש דרך אחרת לממש stall? (בנוסף ראינו בהרצאות שhazard detection unit אחראית על מימוש זה, והבנו שאיננו נדרשים לממש אותה) | |
הקבצים שקיבלתם מכילים אך ורק מודולים שמופיעים בהוראות התרגיל. אין בהם מימוש של: יחידה שמכניסה nop בין פקודת lw לפקודה שתלויה בה יחידה שמכניסה nop בין פקודת R-type לפקודת br שתלויה בה יחידה שמכניסה nop בין פקודת lw לפקודת br שתלויה בה (כמה nops צריך?) יחידה שדואגת למעקף משלב MEM לשלב ID ועוד ועוד... גם אתם לא נדרשתם בתרגיל זה לממש יחידה כלשהיא מאלו, תפקיד היחידה אותה נדרשתם לממש מופיע בהוראות התרגיל באותיות מודגשות ונטויות. אתם לא נדרשים לפתור כל בעיה אפשרית שעלולה לקרות בpipelined-MIPS אלא אך ורק מה שנדרש במפורש בהוראות התרגיל. |
נתקלנו בבעיה שבדקנו מקרה שבו פקודה מסוג R מופיעה לפני פקודה מסוג I, למשל: | |
במקרה המתואר לא נדרש מעקף. אני מניח שכוונת השאלה היתה שבמקרה המתואר יכול להתבצע מעקף למרות שאינו נדרש. עליכם לתכנן את המודול forwarding_unit כך שלא יפגע בנכונות התכנית ובפרט שיבצע את המעקפים לשלב הEXE בצורה נכונה. הפקודה addi היא אכן פקודת I-type. הלוגיקה של מודול כלשהו מתוארת בקובץ הverilog המתאים לאותו המודול. אם אתם לא בטוחים איך מודול מסוים ממומש, קראו את הקובץ המתאים. |
עברנו על ההרצאות והתרגולים ולא ראינו שום התייחסות לאיך צריך לפעול במצב הבא ב forwarding unit: | |
בכל מקרה של ספק הנוגע להתנהגות הרצויה של pipelined-MIPS שאלו את עצמכם מה תהיה התוצאה שתתקבל בSingle-cycle MIPS ככלל, אם נריץ את אותה התכנית על מעבדים שונים עדיין נצפה לתוצאה זהה. |
לא מצאתי בהנחיות התרגיל אזכור למקום שבו יש לכתוב את תעודות הזהות או את שמות המגישים. | |
אין חובה, אפשר בPDF |
שמתי לב שנפלה טעות בקובץ st_EX: על-פי ההרצאה, הערך ששולחים ל-mux-ים בכניסה ל-ALU צריך להיות 10 אם עושים MEM to EX forward ו-01 אם משלב ה-WB. | |
תודה על ההערה |
אני נתקלת בבעיה, אני מריצה את הפקודה של פייתון אבל הוא לא מייצר לי קובץ חדש של inst_mem | |
אני מנחש שזה קשור https://stackoverflow.com/questions/431684/how-do-i-change-directory-cd-in-python לשאלה השניה - נכון |
האם מרחב הפקודות החוקיות , הפקודות שאם נריץ אותם בתוכניות מסוימות על המעבד piplelined mips שסופק בתרגיל בתוספת הרכיב forwarding unit שבנינו הם : | |
רשימת הפקודות הנתמכות מופיעה בהוראות התרגיל (בעמוד 3) |
רציתי לשאול בקשר ל sel_store_val, אני כרגע רואה את זה ככה: | |
שימי לב שאם המימוש שלך מחייב שינוי של קבצים שאת לא מגישה המימוש שלך לא יוכל להבדק |
ממה שאני רואה בטסטים שלי יש לי בעיה בפקודה מסוג i | |
אכן תקין, אין הגבלה בהוראות התרגיל על אלו אותות יכנסו ליחידה שאתם מממשים |
האם צריכים לטפל במקרה ש... | |
כל תפקיד היחידה שאתם כותבים הוא להוציא יציאות ל3 בוררים. אם אתם יכולים להוציא ערכים מסוימים שיגרמו לרצף הפקודות שתיארתם להתבצע בצורה נכונה אז מעולה. |
מה הסינטקס לכתיבת פקודות beq /bne | |
rs, rt, imm bne r5, r4, -7 |
רצינו לשאול האם יש העדפה למימוש מסויים של הforwarding_unit. | |
אין העדפה, להסבר על ההבדל בין reg לwire חזרו בבקשה על החומר מהתרגול המתאים (שקף 13). להרחבה: https://stackoverflow.com/questions/5360508/using-wire-or-reg-with-input-or-output-in-verilog |
איך ניתן לראות את ערכי הרגיסטרים אחרי הרצת טסטים? | |
You can add inside the tb initial block the following lines: $display("---RF content---"); for (i = 0; i < 32; i = i + 1) begin $display("$%2d = %2d", i, pipelined_MIPS.register_file.regMem[i]); end |
יש לי שאלה בנוגע לתרגיל הרטוב בתכן לוגי, | |
לא מומלץ https://electronics.stackexchange.com/questions/226959/is-it-right-to-initialize-a-reg-in-verilog-and-apply-condition-with-initial-valu |