הטכניון מכון טכנולוגי לישראל סמסטר חורף 8-9 3.3.9 מרצים: פרופ' אלכס ברונשטיין )אחראי(, חיים בסקין מתרגלים: נועם יפת )אחראי(, אבירם אימבר, משה ליכטנשטיין, אלון גואטה, בהגת קעואר, טומי בוג'ן. תכן לוגי 346 בחינה סופית, מועד ב' הבחינה כוללת מחברת זו המכילה שאלון, חוברת עזר המכילה תרשימים ומחברת בחינה טכניונית משובצת לצרכי טיוטה. השימוש בכל חומר עזר פרט לאלו - אסור. הבחינה אנונימית, יש לרשום מס' ת"ז על כל חומר שקיבלת במהלכה )כולל מחברות טיוטה וחוברות עזר(. אין לתלוש דפים מאף מחברת שקיבלת במהלך הבחינה ויש להחזיר אותן בשלמותן למשגיחים עם תום הבחינה )כולל מחברות טיוטה וחוברות עזר(. מחברת זו מכילה שאלות. את כל התשובות יש לכתוב במחברת זאת בלבד. תיבדקנה ותיסרקנה רק תשובות המופיעות במקומות המיועדים לכך במחברת זו, או שיש הפניה ברורה למקום בו נכתבו מהמקום המיועד לתשובה במחברת זו. האורך המצופה של כל תשובה הוא לכל היותר כגודל המקום המיועד לה בטופס, אין לחרוג משמעותית מאורך זה. אין לנמק או לפרט את התשובות לשאלות סגורות או מרובות ברירה, אלא אם נתבקשת במפורש. לאורך כל הבחינה, אא"כ נאמר במפורש אחרת יש להקיף בעיגול את התשובה הנכונה ביותר לשאלות מרובות ברירה. ניקוד כל שאלה מצויין בכותרתה, חלוקת הנקודות הפנימית מצויינת לייד כל סעיף. כעיקרון רק תשובה מלאה ומדוייקת תזכה בניקוד, עם זאת - סגל הקורס שומר לעצמו את הזכות להעניק לעתים ניקוד חלקי גם לתשובות שאינן מלאות ומדוייקות ע"פ שיקול דעתו ולפי מפתח בדיקה אחיד לכל הסטודנטים. משך הבחינה: 8 דקות. יש לתכנן את הזמן בהתאם. מומלץ מאוד לקרוא את כל שאלות הבחינה כבר בתחילת המבחן. לתשומת לבך: בעשרים הדקות האחרונות סגל הקורס לא יענה על שאלות. בהצלחה!
םי-. תזמונים בדלגלגים ) נק'(: במערכת הסינכרונית הבאה שלושה FF זהים, המקבלים אותו אות שעון, ולוגיקה צירופית: הרכיבים,A B דוגמים בעליית שעון, והרכיב C דוגם בירידת שעון. אות השעון מקיים:.T high = 35ns, T low = 5ns בנוסף, נתונים הזמנים הבאים: TpCQ(FF) TcCQ(FF) Tsetup(FF) Thold(FF) Tpd(And), Tpd(Nand) Tcd(And), Tcd(Nand) 7ns ns 6ns 6ns ns 3ns האם תנאי ה- setup מתקיים בכל הרכיבים במערכת? האם תנאי ה- hold מתקיים בכל הרכיבים במערכת? כן / לא כן / לא.. כעת נניח שקיים skew אי-שלילי בין הרכיבים: כל שינוי באות השעון שמתרחש בזמן T מגיע לרכיבים,A B בזמן T, אבל מגיע לרכיב C בזמן T. + Tskew עבור אילו ערכים של Tskew כל הרכיבים במעגל מקיימים את תנאי ה- setup? סמנו את התחום הגדול ביותר שכל ערכיו מקיימים את התנאי. 8ns Tskew ns א. ns Tskew ns ב. ns Tskew 4ns ג. אין ערכים של Tskew שעבורם כל הרכיבים מקיימים את תנאי ה- setup. ד..3
שאלה פתרון. כן, כל תנאי ה- setup מתקיימים. עבור המסלול :A,B <- C TpCQ(FF) + Tpd(Nand) + Tpd(And) + Tsetup = 7 + + 6 = 33 < 35 = Thigh עבור המסלול :C -> A,B TpCQ(FF) + Tpd(Nand) + Tsetup = 7 + + 6 = 3 < 5 = Tlow. כן, כל תנאי ה- hold מתקיימים. התנאי עבור הרגיסטר C: Tlow + TcCQ(FF) + Tcd(Nand) + Tcd(And) = 5 + + 3 = 33 > 6 = Thold התנאי עבור הרגיסטרים :A,B Thigh + TcCQ(FF) + Tcd(Nand) = 35 + + 3 = 4 > 6 = Thold.3 עבור המסלול :A,B -> C TpCQ(FF) + Tpd(Nand) + Tpd(And) + Tsetup Thigh + Tskew 7 + + 6 35 + Tskew Tskew עבור המסלול :C -> A,B TpCQ(FF) + Tpd(Nand) + Tsetup Tlow Tskew 7 + + 6 5 Tskew Tskew נתון שה- skew אי-שלילי לכן סה"כ.ns Tskew ns
( DMA נק'(:. בשאלה זו נעסוק בפרוטוקול DMA שפועל ב- mode.burst במהלך העברת הנתונים בפרוטוקול,DMA עוברים האותות הבאים בין היחידות השונות )לא בהכרח בסדר הזה(: DMA Request, DMA Acknowledge Hold Request asserted, Hold Acknowledge asserted Hold Request deasserted, Hold Acknowledge deasserted burst mode הוא אחד מאופני הפעולה של פרוטוקול.DMA ב- mode זה נקבע שמרגע שה-( Controller DMAC (DMA מתחיל להעביר נתונים על ה- bus, ה- cpu לא יכול להפריע להעברה עד לסיומה. כמו כן, ידוע שכאשר ה- DMAC מסיים את ההעברה, הוא מיד מפנה את הbus. נרצה לקרוא מידע מה- DISK לזיכרון הראשי בעזרת.DMA עבור כל אחד מהאותות הבאים, הקיפו את התשובה הנכונה: א. האות Hold Request asserted עובר בין ה- CPU / DMAC / DISK אל ה- CPU / DMAC / DISK ב. האות Hold Request deasserted עובר בין ה- CPU / DMAC / DISK אל ה- CPU / DMAC / DISK ג. האות Hold Acknowledge asserted עובר בין ה- CPU / DMAC / DISK אל ה- CPU / DMAC / DISK ד. האות DMA Acknowledge עובר בין ה- CPU / DMAC / DISK אל ה- CPU / DMAC / DISK. בשימוש בפרוטוקול,DMA נפלה שגיאה באות Hold Request deasserted )ולא ניתן לתקנה( כך שאות זה לא מגיע ליעדו. הקיפו את התשובה הנכונה: א. לא תתבצע כלל העברה של המידע לזיכרון הראשי. ב. תתבצע העברה של המידע לזיכרון הראשי, אך ה- CPU לא יוכל להשתמש במידע. ג. תתבצע העברה של המידע לזיכרון הראשי וה- CPU יוכל ישתמש בה. בשימוש בפרוטוקול,DMA נפלה שגיאה באות DMA Request )ולא ניתן לתקנה( כך שאות זה לא מגיע ליעדו. הקיפו את התשובה הנכונה: א. לא תתבצע כלל העברה של המידע לזיכרון הראשי. ב. תתבצע העברה של המידע לזיכרון הראשי, אך ה- CPU לא יוכל להשתמש במידע. ג. תתבצע העברה של המידע לזיכרון הראשי וה- CPU יוכל ישתמש בה. בשימוש בפרוטוקול,DMA נפלה שגיאה באות Hold Acknowledge deasserted )ולא ניתן לתקנה( כך שאות זה לא מגיע ליעדו. הקיפו את התשובה הנכונה: א. לא תתבצע כלל העברה של המידע לזיכרון הראשי. ב. תתבצע העברה של המידע לזיכרון הראשי, אך ה- CPU לא יוכל להשתמש במידע. ג. תתבצע העברה של המידע לזיכרון הראשי וה- CPU יוכל ישתמש בה...3.4
3. בקר ומסלול נתונים ) נק'(: נתון מסלול הנתונים הבא:,X,Y Z הינם רגיסטרים מותנים שערכם ההתחלתי הוא,x,y z בהתאמה. נתונים שלושה רכיבים צירופים: ADD מחבר, SUB מחסר, MUL מכפל. ההשהיה של כל אחד מהרכיבים היא כמעט מחזור שעון. השהית הבקר, הבוררים והרגיסטרים זניחה. מלא בטבלה הבאה את ערך קווי הבקרה הנדרשים בכל מחזור על מנת שערכו של הרגיסטר X בסוף הריצה יהיה: x + y + z הערות: יש לבצע את הפעולה במספר מינימלי של מחזורי שעון. כתבו את הערכים בטבלה בבסיס עשרוני. סמנו don t care כ- לפי הצורך )נדרש להשתמש ב- care don t כשאפשר(. ייתכנו שורות ריקות בטבלה, אך אין צורך להוסיף שורות. ניתן להניח שלא תתרחש גלישה )overflow( באף שלב....3.4 Cycle sel sel sel sel3 sel4 sel5 sel6 sel7 sel8 ldx ldy ldz 3 / / 4 / / 5 6
הערה: יש כמה פתרונות אפשריים נוספים בארבעה מחזורי שעון הסבר: Z z z = z במחזור הראשון נבצע: פעולת כפל בין z ל- z ונשמור את התוצאה ב- Z במחזור השני נבצע: Y Y Y = y y = y Z Z + Z = z + z = z פעולת כפל בין y לבין y ונשמור את התוצאה ב- Y פעולת חיבור בין Z החדש לעצמו ונשמור את התוצאה ב- Z X X X = x x = x Y Y + Z = y + z - במחזור השלישי נבצע: פעולת כפל בין x לבין x ונשמור את התוצאה ב- X פעולת חיבור Y ו- Z ושמירתם ב- Y במחזור הרביעי נבצע: X X + Y = x + y + z פעולת חיבור בין X ל- Y ונשמור ב- X
.4 Verilog ( נק'(: בשקף המצורף )מהתרגול( מתוארת סכמת הForwarding המתאימה לMIPS,Pipelined כתבו קוד Verilog המממש את המודול Forwarding_unit כפי שנלמד בהרצאות ובתרגולים )ולא בש.ב(. module forwarding_unit (RS, RT, MEM_Rd, WB_Rd, MEM_RegWrite, WB_RegWrite, ForwardA, ForwardB); input [4:] RS, RT; input [4:] MEM_Rd, WB_Rd; input MEM_RegWrite, WB_RegWrite; output reg [:] ForwardA, ForwardB; always @ ( * ) begin // Init all signals to (no forwarding) {ForwardA, ForwardB} <= ; // Forwarding for RS if (MEM_RegWrite && RS == MEM_Rd && MEM_Rd) ForwardA <= 'd; else if (WB_RegWrite && RS == WB_Rd && WB_Rd) ForwardA <= 'd; // Forwarding for RT if (MEM_RegWrite && RT == MEM_Rd && MEM_Rd) ForwardB <= 'd; else if (WB_RegWrite && RT == WB_Rd && WB_Rd) ForwardB <= 'd; end endmodule // forwarding
5. פייפליין )7 נק'(: נתונות מערכות ה- pipeline הבאות, שכל אחת מהן מממשת פונקציה: מערכת A, המחשבת את הפונקציה (x,y) f: A מערכת B, המחשבת את הפונקציה (x,y) f: B מערכת C, המחשבת את הפונקציה (x,y) f: C כל מלבן מייצג רגיסטר אידיאלי, וכל עיגול מייצג רכיב לוגיקה צירופית )לא בהכרח אותה לוגיקה(. כל החוטים והרגיסטרים הם ברוחב n ביטים. נתון כי ההשהיה של כל הרכיבים הצירופיים באותה מערכת זהים, אך לאו דווקא בין המערכות. לדוגמא: מתקיים Tpd(A4) Tpd(A) == אך יתכן Tpd(A).Tpd(B)!= זמן המחזור של כל מערכת הוא המינימלי האפשרי. נתונים לכם הרכיבים הצירופיים הבאים: A, A, A3, A4, B, B, C, C, C3, C4, C5 )אותם רכיבים המשמשים למימוש המערכות הנתונות( וגם כן מספר בלתי מוגבל של רגיסטרים אידיאליים. עליכם לממש מערכות k-pipeline הנקראות D, שE מממשות את הפונקציות הבאות בהתאמה: f D (x,y,z) = f A (x,f B (y,z)) f E (x,y,z,w) = f C (f D (x,y,z),w) רונאלדו ומסי, זוג סטודנטים בקורס תכן לוגי, דנים ביניהם על אפשרויות מימוש. רונאלדו: "אפשר לממש את D במערכת 4-pipeline כך ש- Throughput(A)."Throughput(D) = מסי: "אפשר לממש את E במערכת 6-pipeline כך ש- Throughput(A)."Throughput(E) = סמנו את הטענה הנכונה: רונאלדו בהכרח צודק. אם רונאלדו צודק, אז מסי בהכרח טועה. רונאלדו בהכרח טועה. אם רונאלדו טועה, אז מסי בהכרח טועה. מסי בהכרח טועה....3.4.5
>= Cycle(E) > Cycle(A) רונאלדו טועה >= Tpd(A) >= Cycle(D) > Cycle(A) >= Tpd(B) > Throughput(A) >= Throughput(E) < מסי טועה
( Procedures calls נק'(:.6 נתון קטע הקוד הבא בשפת C: int f(int x, int y, int z){ if(x <= ) { return ;} int arr[3]; arr[] = f(x-, y,z) + ; return arr[]; } ידוע שלאחר הקימפול ל- Assembly,MIPS הפונקציה f משתמשת בערכים של,s$.,s$,s$ s3$ א. מהו גודל ה- frame )בבתים( של הפונקציה? f 96 bytes תשובה: ב. ידוע כי הפונקציה g קוראת לפונקציה f באופן הבא: (6,,)f. הקף בעיגול את מספר הערכים השונים שיחזיק רגיסטר $ra החל מהקריאה של g ל- f )כולל, כלומר החל מהרגע שבו $ra מכיל את כתובת החזרה ל- g (. 5 6 7 8 א. ב. ג. ד. ה. הסבר: ערך אחד יהיה כתובת חזרה ל- g וערך שני יהיה תמיד אותה כתובת שהיא החזרה לפונקציה f מהקריאה הרקורסיבית.
.7 זמני 3( MIPS נק'(: מריצים את התוכנית הבאה על המעבדים שנלמדו בקורס: loop: addi $t, $zero, addi $t, $zero, 5 sw $t, ($t) addi $t, $t, addi $t, $t, 4 bne $t, $t, loop מהו זמן ריצת התוכנית, הנמדד במספר מחזורי שעון, על כל אחד מהמעבדים? שימו לב: זמן ריצת התוכנית נמדד החל ממחזור השעון שבו מתחיל ביצוע הפקודה הראשונה )למשל, ב- מחזור השעון שבו מסתיים ביצוע הפקודה האחרונה )למשל, ב- Pipeline ועד זהו מחזור ה- Fetch ( Pipline זהו מחזור ה- WB (, כולל. Single-Cycle Mips. 83 Multi-Cycle Mips. 5 Register File Split ללא,Forwarding ללא Pipelined Mips וללא Fast single-cycle branch )וללא )delay slot.3 38 Register File Split ועם Forwarding עם Pipelined Mips וללא Fast single-cycle branch )וללא )delay slot.4 תזכורת: ב- Mips Pipelined הרגיל )ללא )Fast single-cycle branch מניחים branch not taken ולכן אם הפקודה בפועל taken נצטרך לבצע flush לפקודות העוקבות שכבר נכנסו ל- pipeline. נגדיר מנגנון שיקרא,Branch Prediction שמטפל בפקודות.branch המנגנון שומר דגל "תחזית" בודד, שערכו taken או.not-taken המנגנון קורא בשלב ה- Fetch את הפקודה ואם היא branch וגם ערך הדגל הוא taken הפקודה שתיכנס ל- pipeline במחזור הבא היא יעד הקפיצה )אחרת היא הפקודה שאחרי ה-,branch כרגיל(. כשה- branch מגיע לשלב ה- MEM, בודקים האם צדקנו בתחזית. אם שגינו - הופכים את הדגל )מ- taken ל- not-taken או להיפך( ועושים.flush 3 מהו זמן הריצה של התוכנית )הנמדד במספר מחזורי שעון( במעבד Pipeline,Forwarding עם Mips עם Register File Split ועם מנגנון ה- Prediction?Branch הניחו שבתחילת הריצה דגל התחזית מאותחל ל- not-taken..5
פתרון:. עבור,Single זמן הריצה הוא מספר הפקודות. לכן = 4 5. +. עבור Multi נזכור כי פקודת addi, sw לוקחת 4 מחזורים ופקודת bne לוקחת 3 מחזורים. לכן: ( + 5 ) T addi + 5 T sw + 5 T bne = ( + 5 ) 4 + 5 4 + 5 3 = 83 3. יש data hazard בין הפקודה הראשונה לשלישית שגורם ל- nops, ויש data hazard בין הפקודה הרביעית והשישית שגורם ל- nop בכל איטרציה. בנוסף יש control hazard בפקודת ה- bne : במשך 4 פעמים, כל פעם גורם ל- nops 3. לסיום נוסיף 4 מחזורים לריקון הצינור. לכן: #commands + #datanops + #controlnops + #empty = + ( + 5 ) + (4 3) + 4 = 5 4. המעקפים ופיצול הרגיסטרים פותרים את כל ה- hazard,data עבורם כבר לא צריך nops )נשתמש במעקף.)EXE/WB ה- hazards control לא השתנו. לכן: #commands + #datanops + #controlnops + #empty = + + 4 3 + 4 = 38 5. במשך 4 פעמים הראשונות ה- bne הוא,taken ובפעם האחרונה הוא.not taken בפעם הראשונה התחזית היא,not taken לכן נעשה "נבזבז" 3 מחזורים על תחזית שגויה. ב- 3 הפעמים הבאות התחזית תהיה taken והפקודה אכן קופצת, לכן לא נבזבז אף מחזור. באיטרציה האחרונה של הלולאה התחזית היא taken והפקודה היא,not taken לכן שוב נבזבז 3 מחזורים על תחזית שגויה. סה"כ: #commands + #datanops + #controlnops + #empty = + + 3 + 4 = 3
( MIPS נק'(:.8 בשאלה זו נדון בגרסאות שונות של.Multi-Cycle Mips בגרסאות אלו, מסלול הנתונים זהה ל Multi-Cycle Mips המוכר, אולם המעבדים תומכים רק בחלק מפקודות המכונה שמופיעות ב- ISA. מהו סוג הבקר של Multi-Cycle Mips )הקיפו בעיגול(?.Mealy / Moore בטבלה הבאה מופיעות גרסאות שונות של.Multi-Cycle Mips כל גרסא נבדלת בפקודות הנתמכות ובסוג הבקר של המעבד. עבור כל גרסא, רשמו את מספר המצבים הכולל שיהיה לבקר המתאים. ניתן להוסיף הסבר קצר במידת הצורך )לא חובה, ההסבר ייבדק במקרה של טעות במספר המצבים(. הערה: בכל אחד מהסעיפים עליכם להניח שהבקר הוא מכונת מצבים מצומצמת, אך אין צורך לאחד מצבים בהם כותבים ל- File.Register.. פקודות נתמכות סוג בקר מספר מצבים בבקר הסבר קצר )לא חובה( Mealy add, sub, addi, ori, sw, lw, beq, j Mealy add, sub, addi, sw, lw, bne, j Moore add, addi, sw, lw, beq 3 או 4 Moore add, sub, addi, sw, lw, beq 3 או 4 Moore add, sub, addi, sw, lw, beq, bne
)8 נק'(: MIPS.9 סטיבן, סטודנט בקורס, החליט להשוות בין Multi-cycle MIPS ובין Single-cycle MIPS הבנויים מרכיבים. זהים. כל הרגיסטרים בעלי השהייה זהה, בפרט זמני ההשהיה של הרכיבים: Memory, Register File, ALU הם: בהתאמה. זמני ההשהיה זהים בין קריאה וכתיבה וכן בין זיכרון הנתונים וזיכרון הפקודות. יתר הזמנים מלבד החמישה שהוזכרו זניחים. כדי להשוות בין המעבדים כתב סטיבן תכנית ללא קפיצות המורכבת מפקודות.R-type, I-type, SW, LW מספר הפקודות מכל סוג הוא )בהתאמה(. כתבו תנאי הכרחי ומספיק לכך שהתכנית תרוץ מהר יותר על Single-cycle MIPS כתלות בפרמטרי השאלה. (N R + N I + N SW + N LW ) (Tpcq + T MEM + T RF + T ALU + T setup ) < (4N R + 4N I + 4N SW + 5N LW ) (Tpcq + max (T MEM, T RF, T ALU ) + T setup )
MIPS. ( נק'(: נגדיר את הפקודה החדשה הבאה: sif Ri, Rj, Rk הפקודה טוענת את ערך Rk לכתובת Rj+Rk בזיכרון, וגם טוענת את תוצאת החיבור Rj+Rk לרגיסטר.Ri ובסימונים: MEM[Rj+Rk] Rk Ri Rj+Rk א. מהו הקידוד הבינארי של הפקודה? כתבו את שמות השדות, את התוכן של כל שדה, ורוחב כל שדה בביטים. ניתן להניח כי 35 opcode פנוי. אם יש שדה שלא חשוב מה התוכן שלו, ציינו זאת. Opcode (6-bit) = 35, Rs (5-bit) = j, Rt (5-bit) = k, Rd (5-bit) = i, shamt (5-bit) =, funct (6-bit) = don t care ב. מהם השינויים המינימליים הנדרשים במימוש של Pipelined MIPS כדי שיתמוך בביצוע הפקודה החדשה sif )כפקודת מכונה יחידה, ולא כפסאודו-פקודה(? שינויים בבקר בלבד. a. הוספת או הרחבת בורר אחד, ושינויים בבקר. b. הוספת או הרחבת או 3 בוררים, ושינויים בבקר. c. הוספת Adder לתחנת,MEM ובנוסף הוספת או הרחבת עד 3 בוררים ושינויים בבקר. d. הוספת Adder לתחנת,WB ובנוסף הוספת או הרחבת עד 3 בוררים ושינויים בבקר. e. שינוי במבנה קובץ הרגיסטרים, ובנוסף הוספת או הרחבת עד 3 בוררים ושינויים בבקר. f. לא ניתן לממש את sif כפקודת מכונה יחידה. g. שימו לב: אסור לגרום לכך שפקודות אחרות לא יעבדו. אסור להאריך את זמן מחזור השעון. הניחו שהמעבד אינו כולל Hazard Detection Unit, RF Split, Forwarding או יחידת.Fast Single-Cycle Branch הניחו שאין צורך בלטפל ב- hazards data או ב- hazards.control