מרצה :דר משה שוורץ מתרגל :חורש בן שטרית תרגול : Iייצוג מספרים נושאי התרגול .1הגדרות כלליות והנחיות לתרגילי הבית .2ייצוג מספרים הנחיות אתר הקורס www.ee.bgu.ac.il/~compintr : דוא"ל אלקטורני למתרגלhoreshb@gmail.com : בכל פנייה דרך האמייל יש לכתוב compintrבתחילת כותרת האמייל. תרגילי בית -עשרה תרגילים ,חובת הגשה ,ניתן להגיש בזוגות. התרגילים מהוים 10%מן הציון הסופי התרגילים יופיעו באתר קורס ,עם תאריך הגשה )בד"כ שבוע וחצי(. שעות קבלה :יום שלישי 12:00 -11:00בחדר ) 515/ 3 3קומה חמישית( ייצוג מספרים ישנם שתי שיטות עקריות לייצוג מספרים Unsigned ,signed , unsigned : נראה שלוש שיטות לייצוג מספרים : signed שיטת גודל וסימן בשיטה זו ביט ה msbמייצג את הסימן וכל שאר הביטים את גודל המספר , לדוגמא : 1 יתרונות :ניתן בקלות לדעת את ערך המספר ואת כיוונו. חסרונות :שני ייצוגים לאיבר אפס: לא ניתן לבצע חיסור בצורה פשוטה : 1 − 5 = 1 + (− 5) = −4 ⎧0001 ⎨+ ⎩1101 = 1110 = −6 ≠ −4 שיטת המשלים ל 1 שיטת המשלים ל – 1הינה שיטה סימטרית בה כל מספר שלילי הוא היפוך הביטים של המקביל החיובי ,גם כאן הביט הגדול ביותר msbמתאר את הסימן : 0111 = 7 0110 = 6 0101 = 5 M 0001 = 1 0000 = 0 1111 = 0 1110 = −1 M 1001 = −6 1000 = −7 גם בשיטה זו ישנם שני סימונים לאיבר האפס. לצורך חישוב המשלים ל 1עבור מספר xיש להשתמש בנוסחא : 1' comp = 2 n − 1 − x כאשר nזהו מספר הביטים בייצוג שלנו לדוגמא המשלים ל 1של המספר 7עבור n = 4הינו : − 7 = 2 − 1 − 7 = 8 = (1000 )2 ואילו עבור n = 8נקבל: − 7 = 2 8 − 1 − 7 = 248 = (11111000 )2 4 2 שיטת המשלים ל 2 שיטת המשלים ל 2שונה מהשיטות הקודמות במובן זה שלאפס ישנו ייצוג אחד בלבד , "חוק ההתמרה" הינו n 2' comp = 2 − x if x ≠ 0 2' comp = 0 if x = 0 בפועל אנו הופכים את הביטים ומוסיפים 1לתוצאה . 0111 = 7 0110 = 6 0101 = 5 M 0001 = 1 0000 = 0 1111 = −1 1110 = −2 M 1001 = −7 1000 = −8 לדוגמא נמצא את המשלים של : x = 3 2 − 3 = 16 − 3 = 13 = (1101)2 4 0011 ↓ ⎧1100 ⎨+ ⎩0001 = 1101 דוגמא חיסור מספרים ? = 2 − 3בשיטת משלים ל:2 = )2 − 3 = 2 + (− 3 ⎧0010 ⎨+ ⎩1101 )= 1111 = (− 1 3 קיבלנו מספר שלילי -כיצד נדע מה ערכו? דוגמא מציאת ערך מספר שלילי ? = (1100010101)2עבור n = 10 )(1100010101 ↓ ⎧0011101010 ⎨+ ⎩ 0000000001 = 0011101011 = − 2 7 + 2 6 + 2 5 + 2 3 + 21 + 2 0 = −235 ( ) בעיות בחיבור מספרים מכוונים : ישנן שתי בעיות העלולות להווצר בזמן חיבור מספרים : , CARRYנשא :בזמן חיבור מספר חיובי עם מספר שלילי כך שיש נשא - ⎧0 xxx ⎨+ ⎩1yyy = (1)0 zzz , CARRYבזמן חיבור מספר שלילי עם מספר שלילי כך שיש נשא - ⎧1xxx ⎨+ ⎩1 yyy = (1)1zzz הפתרון במקרה כזה : בשיטת המשלים ל 1נוסיף את ה carryל LSBשל התוצאה – כלומר נוסיף 1לתוצאה . בשיטת המשלים ל 2נתעלם מה . carry , Overflowגלישה :בזמן חיבור שני מספרים חיוביים כך שה msbמתקבל אחד: ⎧0 xxx ⎨+ ⎩0 yyy = 1zzz גלישה בזמן חיבור שני מספרים שליליים כך שה lsbמתקבל אפס: ⎧1xxx ⎨+ ⎩1yyy = 0 zzz במצב של גלישה לא נוכל לתת פתרון נכון ,יש לעצור ולהתריע למשתמש . דוגמאות : חיסור מספרים ? = − 1 − 2בשיטת משלים ל:2 ⎧1111 ⎨+ ⎩1110 = (1)1101 = 1101 = −3 במקרה זה התעלמנו מהנשא. 4 חיסור מספרים ? = − 1 − 2בשיטת משלים ל:1 ⎧1110 ⎨+ ⎩1101 = = (1)1011 ⎧1011 = 1100 = −(0011) = −3 ⎨+ ⎩0001 במקרה זה הוספנו את הנשא לתוצאה. טבלה מסכמת n = 3 : משלים ל 1 0 משלים ל 2 0 1 2 3 −3 −2 −1 0 לא מסומן 0 1 2 1 2 3 010 011 3 4 −4 −3 100 101 5 6 7 −2 −1 000 001 110 111 תכונות: .1ניתן לקבל את המשלים ל 2ע"י שימוש במשלים לאחד שלו בתוספת . 1 שיטה טכנית נוספת הינה למצוא את ה 1הימיני ביותר ,ולהפוך את כל הביטים שמשמאלו: 1100 = −4 ↓ 0100 = 4 .2במשלים ל 2מתקיים הקשר : n−2 נתון המספר x = ( x n −1 , x n − 2 , L , x1 , x 0 )2 = ∑ xi ⋅ 2 i − x n −1 ⋅ 2 n −1 i =0 לדוגמא: x = (1011)2 = 2 + 2 − 2 = 1 + 2 − 8 = −5 .3הגדלת הייצוג נעשית ע"י שיכפול ביט הסימן } :הרחבת סימן{ לדוגמא עבור : n = 4 x = −5 = (1011)2 עבור : n = 8 x = −5 = (11111011)2 3 1 0 5 ייצוג שברים : שיטת משלים ל:1 בשיטת משלים ל 1עבור nביטים משמאל לנקודה ו mמימין לנקודה ,נקבל את הנוסחא: 1' comp = 2 n − 2 − m − x נשים לב שבמקרה של המספרים השלמים 2 m = 1 ⇔ m = 0 עדיין בכדי למצוא את המשלים של מספר מסויים אנו הופכים את הביטים דוגמא : המספר (010.0111)2עבור n = 3, m = 4מייצג (010.0111)2 = 21 + 2 −2 + 2 −3 + 2 −4 = 2 + 1 + 1 + 1 = 2 7 4 8 16 16 נמצא את המשלים ל 1שלו : 1 7 8 ⇒ 2 n − 2 −m, − x = 8 − − 2 = 5 16 16 16 (101.1000)2 = −2 7 16 שיטת משלים ל: 2 בשיטת משלים ל 2עבור nביטים משמאל לנקודה ו mמימין לנקודה ,נקבל את אותה הנוסחא כמו הייצוג של המספרים השלמים : n 2' comp = 2 − x −m אך כעת המקום להוסיף 1לתוצאת היפוך הביטים – אנו מוסיפים , 2 } בעצם עדיין מוסיפים " "1ב .{ lsb דוגמא : 7 המספר (010.0111)2עבור n = 3, m = 4מייצג 2 16 ⎧101.1000 ⎨+ המשלים ל 2שלו הינו ⎩000.0001 : = 101.1001 6 2 תירגול מספר 3-state .1 In Out 3-state En :טבלת אמת En 0 0 1 1 In 0 1 0 1 In out High Z - נתק High Z - נתק 0 1 Out In En = 0 Out En = 1 3-state בשביל מה צריך Bus “0” “1” :3-state-במקרה כזה יש התנגשות אך אם נשתמש ב Bus “0” “1” En2 En1 En1 1 0 0 1 En2 0 1 0 1 Out “1” “0” לא מוגדר מצב אסור :3-state- מבנה ה.2 : ושערים לוגיים3-state בעזרתMux (2-1) ממש.3 I0 Mux 2-1 I0 Out I1 Out S0 I1 S0 Latch .4בעזרת D-FF כל עוד ה clk-ב "1"-מה שיש ב D-עובר ל Q-אם clkעובר ל "0"-אז Qשומר על הערך האחרון של .D )Q(n+1 )Q(n+1 0 1 D Don’t care 0 1 clk 0 1 1 Q D clk D clk Q ”clk = “0 Qשומר על ערכו האחרון ”clk = “1 Qעוקב אחר המצב של D ”clk = “0 Qשומר על ערכו האחרון D-FF .5שמגיב לעליית שעון רק בעליית שעון מה שיש ב D-עובר ל Q-עד לעלייה הבאה. Q D clk D clk Q D in Master – Slave מסוגFlip – Flop .6 . – מגיב לירידהMaster Q out . – מגיב לעלייהSlave Ds Qs Dm Qm clk clk clk D clk Qm Qs Register – אוגר.7 . המאחסנת מספר ביטיםCPU- – יחידת איחסון מידע בRegister סימון : ביטיםm אוגר בעל m m D clk Q A out A <m..1> Bus .8פירוש הסימון ברמת ה:FF- כל ה FF-הם בעלי אותו clkהמגיב לירידה במקרה זה .מכיוון שמדובר באוגר אנו רוצים לגשת לכולו באותו זמן – לקריאה או לכתיבה. Bus m Q D1 in D A<1 > clk Q D2 in D A<2 >clk Q Dm in D >A<m clk clk A out m m Q D Q D clk clk FFהמגיב לירידה FFהמגיב לעליה : העברת נתונים בין אוגרים.9 m :נרצה לבצע m Bus D Q m m R0 R0 in m R1←R0 :פיתרון R0 out clk R0 out="1", R1 in="1" m D יש לשים לב כי המצב Q m R0 out="1" m R1 R1 in m R1 out="1" R1 out clk .בו זמנית הוא אינו חוקי : במכונה הבאהAbstract RTN: R1←R1+R2 רוצים לממש.10 m m D Q m m R1 R1 in m Bus clk D m R1 out m Y m clk Y in m D Q בעלALU add פעולת Adder Q m m R2 R2 in m clk R2 out m D Q Z Z in clk m Z out m :קווי הבקרה הקיימים R1 in, R2 in, Y in, Z in, R1 out, R2 out, Z out זמן Concrete RTN שלבי פעולה Control signals קווי בקרה T0 Y←R1 R1 out, Y in T1 Z←R2+Y R2 out, Z in T2 R1←Z Z out, R1 in R1 out Y in Y←R1 R2 out Z in Z←R2+Y Z out R1 in R1←Z מרצה :דר משה שוורץ מתרגל :חורש בן שטרית תרגול : IIIמעבדים ,שיטות מיעון ומודל SRC נושאי התרגול .1מעבדים 0-4כתובות .2שיטות מיעון .3מודל SRC מעבדים 0-4כתובות ניתן לחלק מעבדים לפי כמות הכתובות המקסימאלית הנמצאת בפקודה . ככל שיש יותר כתובות אליהן ניתן לפנות ,כל המעבד יותר "משוכלל" ומאפשר לבצע פעולות מסובכות במספר פקודות קטן יחסית למעבדים בעלי מספר פקודות קטן יותר. הנתונים שאנו צריכים לדעת עבור כל פקודת מכונה הינם: א .סוג הפעולה ) ( opcode ב .הכתובת בה תשמר התוצאה ) ( res ג .כתובת האופרנד הראשון ) ( opr1 ד .כתובת האופרנד השני ) ( opr2 ה .מיקום הפקודה הבאה. בחלק מהמעבדים ,בחלק מהפקודות הנתונים מובאים בצורה מפורשת ) ( explicitואילו אחרים מובאים הצורה בלתי מפורשת ) .( implicit מעבד 4כתובות בשיטה זו כל הנתונים מובאים בצורה מפורשת בכל פקודה : רוחב כל מילה בזכרון הינו 24ביט ,ואורך כל פקודה הינו 13בתים. ניכר שיש בשיטה זו יתירות משום שבד"כ הפקודה הבאה נמצאת מיד בהמשך הפקודה הקודמת ) למעט הסתעפויות( ולכן ניתן לחסוך נתון זה ולהשאירו בצורה לא מפורשת 1 מעבד 3כתובות מיקום הפקודה הבאה איננו נמצא בקידוד בפקודה, אלא מחושב בנפרד ע"י רגיסטר ה ( Program Counter ) PC במקרה זה רוחב כל פקודה הינו 10בתים. דוגמא: A← B+C A, B, C Add מעבד 2כתובות במקרה זה האופרנד השני משמש גם שאוגר תוצאת החישוב ,התוצאה לכן "דורסת" את הנתון הקודם באופרנד זה .במקרה זה אורך כל פקודה הינו 7בתים. דוגמא: A ← A+ B A, B Add מעבד בעל כתובת אחת בשיטה זו ,אנו משתמשים באוגר נוסף -אקומולטר ) ( ACCהמשמש כאופרנד השני וכן גם אוגר תוצאת החישוב , ניתן לאתחל את ה ACCמהזכרון ולשמור את התוצאה בזכרון : ld B ACC ← B st B B ← ACC דוגמא: ACC ← A + ACC A Add במקרה זה אורך כל פקודה הינו 4בתים. 2 מעבד בעל 0כתובות בשיטה זו ,אנו משתמשים במחסנית ומפעילים את כל החישובים על הערך הנמצא בראש המחסנית ) ( Top Of Stack - TOSעם הערך הנמצא במיקום הבא אחריו ) , ( Second Of Stack – SOSעדיין ישנן פקודות בעלות כתובת אחת ) טעינה מהזכרון ושמירה בזכרון( ולכן חלק מהפקודות הינן באורך בית אחד וחלק באורך 4בתים. TOS ← B B ← TOS דוגמא: push B pop B TOS ← TOS + SOS דוגמא מסכמת תכנת קטע קוד המחשב את הביטוי + D פתרון : אפס כתובות Push B Push C Sub Mult Push D Add Pop A 7פקודות ) 19בתים( 4פניות לזיכרון 2 Add ) A ← (B − Cבאמצעות מעבדים בעלי 0-3כתובות. כתובת אחת ld B Sub C St A Mult A Add D St A 6פקודות ) 24בתים( 6פניות לזיכרון 2כתובות ld A, B Sub A, C Mult A, A Add A, D 4פקודות ) 28בתים( 11פניות לזיכרון ) שתי פניות ב , ldשלוש פניות בכל השאר( 3כתובות Sub A, B, C Mult A, A, A Add A, A, D 3פקודות ) 30בתים( 9פניות לזיכרון 3 שיטות מיעון הפנייה לזכרון יכולה להתבצע במספר שיטות צורות פנייה ,שיטות אלו נקראות שיטות מיעון .אנו נציג מספר שיטות : א .מיעון מיידי ) (immediate ב .מיעון ישיר ) (direct ג .מיעון עקיף ) (indirect ד .מיעון ישיר רגיסטר ) (register direct ה .מיעון עקיף רגיסטר ) (register indirect ו .מיעון היסט ) (displacement ז .מיעון יחסי ) ( relative addressing מיעון מיידי ) ( immediate בשיטה זו נציב בצורה מידית ערך בזכרון/רגיסטר לדוגמא : R[ra ] ← C 2 R[ra ] ← R[rb ] + C 2 la ra ,C 2 addi ra , rb , C 2 בד"כ לא נהוג להציב ערך ישירות מהמעבד לזכרון )אלא ,קודם נעביר לרגיסטר וממנו לזכרון( מיעון ישיר ) ( direct בשיטה זו נפנה למיקום הזכרון בצורה ישירה לדוגמא : ] R[ra ] ← M [C 2 ra ,C 2 ld מיעון עקיף ) ( indirect בשיטה זו נפנה למיקום הזכרון ע"י שימוש בכתובת הנמצאת בזכרון במיקום אחר לדוגמא : ]] R[ra ] ← M [M [C 2 מיעון ישיר רגיסטר ) ( register direct בשיטה זו נפנה לרגיסטרים בצורה ישירה לדוגמא : ] R[ra ] ← R[rb ] + R[rc ) ra , (C 2 ld add ra , rb , rc מיעון עקיף רגיסטר ) ( register indirect בשיטה זו נפנה לזיכרון בצורה עקיפה דרך רגיסטרים לדוגמא : ] M [R[rb ]] ← R[ra ) ra , (rb st מיעון היסט ) ( displacement בשיטה זו נפנה לזיכרון בצורה עקיפה דרך רגיסטרים ובנוסף נבצע הסטה )חיבור עם קבוע( לדוגמא : ] ra , C 2 (rb ) M [C 2 + R[rb ]] ← R[ra מיעון יחסי ) ( relative addressing בשיטה זו נפנה לזיכרון בצורה יחסית ל PCלדוגמא : ] R[ra ] ← M [PC + C1 ra ,C1 4 ldr st מודל SRC מודל ( Simple RISC computer ) SRCהוא מודל פשוט המשמש כדוגמא למחשב ,מיותר לציין שהמחשבים של היום מסובכים הרבה יותר ממודל זה ואפילו המעבדים הפשוטים ביותר מורכבים יותר ממודל זה. במודל זה נשתמש בהנחות הבאות : זיכרון ראשי ) ( Main Memory – MMבגודל 2בתים כאשר כל תא בזיכרון מכיל בית אחד. רגיסטרים כללים ) 32רגיסטרים בגודל 4בתים כל אחד( – PCרגיסטר המצביע על מיקום הפקודה הבאה. - Instruction Register – IRמכיל את הפקודה הנוכחית ,המתבצעת כעת. 32 תהליך ביצוע הפקודות הפקודות מבוצעות בשלבים הבאים : - Fetch (1הבאת הפקודה הנמצאת בכתובת עליה מצביע ה PCאל רגיסטר ה .IR - Execution (2פיענוח הפקודה הנמצאת ב IRוביצועה (3קידום ה PC ← PC + 4 : PCוחזרה לשלב . 1 זיכרון משום שכל תא בזיכרון מכיל בית אחד ,כאשר אנו טוענים נתונים מהזכרון אל הרגיסטרים או שומרים מידע מהרגיסטרים אל הזכרון ,הפעולות מתבצעות בבלוקים של 4בתים .ולכן בעצם הסימון : ]M [x] = M [x]# M [x + 1]# M [x + 2]# M [x + 3 הזכרון עצמו הינו בלוק אחד של מידע ,אך מערכת ההפעלה מחלקת אותו לשני חלקים: - Code segmentמכיל את קידוד הפקודות של התוכנית – Data segmentמכיל את הנתונים בהם משתמשת התוכנית וכן מאחסן את תוצאות התוכנית. פקודת חומרה – זוהי פקודה המבוצעת ע"י החומרה )מעגלים( של המעבד לדוגמא – במעבד בעל פקודת חומרה חיבור בלבד ,פעולת מכפלה תבוצע ע"י מספר פקודות חומרה ואילו פעולת החיבור תבוצע בפקודה אחת. ישנם מעבדים בהם קיימת לדוגמא הפקודה MAC- multiply and accumulateבהם מבוצע כפל וחיבור בפקודת חומרה אחת. 5 פורמט הפקודות במודל ה SRCקיימות מספר פורמטים של פקודות ,כל פקודה הינה באוך קבוע של 32ביט – 4בתים . :Type I דוגמא :פקודת טעינה יחסית ] R[ra ] ← M [PC + C1 דוגמא ספציפית ldr r6 ,12 : הפקודה ממומשת כך : opcode = 2 ra ,C1 ldr )]([00010][00110][0L01100 פקודה זו תכניס אל רגיסטר 6את ערך ה PCועוד ) 12בעצם 3פקודות קדימה( : Type II דוגמא :פקודת טעינה דוגמא ספציפית r2 , r5 ,20 : הפקודה ממומשת כך : opcode = 1 ]] R[ra ] ← M [C 2 + R[rb ra , rb , C 2 ld ld )]([00001][00010][00101][0L010100 הערה :במקרה ש , rb = 00000לא נשתמש ברגיסטר r0אלא נקבל פקודה שונה : ] R[ra ] ← M [C 2 דוגמא: פקודת חיבור דוגמא ספציפית addi r2 , r4 ,9 : הפקודה ממומשת כך : opcode = 13 R[ra ] ← R[rb ] + C 2 ra ,C 2 ld addi ra , rb , C 2 )]([01101][00010][00100][0L01001 6 : Type III 7 4 תירגול מספר פורמט פקודות ld,addi פקודות.1 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 Opcode ra rb c2 5 bit 5 bit 5 bit 17 bit 7 6 5 4 3 2 1 0 0 0 פקודת טעינה Opcode = 1 ld ra,rb,c2 R[ra]←M[R[rb]+c2] דוגמא :נתונה הפקודה ld r2,r3,20 R[r2]←M[R[r3]+20] :קידוד הפקודה 0 0 0 0 1 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 Opcode ra rb c2 1 2 3 20 0 0 0 1 0 1 R[ra]←M[c2] אזrb=0 אם פקודת חיבור Opcode = 13 addi ra,rb,c2 R[ra]←R[rb]+c2 דוגמא :נתונה הפקודה ld r3,r5,10 R[r3]←R[r5]+10 :קידוד הפקודה 0 1 0 1 1 0 0 0 1 1 0 0 1 0 1 0 0 0 0 0 0 0 0 0 Opcode ra rb c2 13 3 5 10 0 0 0 0 1 0 1 0 1 0 0 0 ldr,lar פקודות.2 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 Opcode ra c1 5 bit 5 bit 22 bit 8 7 6 5 4 3 2 Load relative פקודת Opcode = 2 ldr ra,c1 R[ra]←M[PC+c1] דוגמא :נתונה הפקודה ldr r2,4 R[r2]←M[PC+4] 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 Opcode ra c1 2 2 4 0 0 0 0 0 0 0 1 shr, shra, shl, shc פקודות.3 shra פקודת . עם עיגול כלפי מטה2-אם המספר הוא חיובי אי זוגי אז מתבצע חילוק ל דוגמא 00...01010 shra ( זוגי10 )10 00...00101 shra 00...00010 ( אי זוגי5)10 ( זוגי2 )10 .5div(2)=2 של חילוק ועיגול כלפי מטהdiv זוהי פעולת אם המספר הוא שלילי ואי זוגי נקבל 11...10110 shra ( זוגי− 10 )10 11...11011 shra 11...11101 ( אי זוגי− 5 )10 ( אי זוגי− 3)10 .(-5)div(2)=(-3) div-כלומר יש עיגול כלפי מטה וזו פעולת ה br, brl פקודות הסתעפות.4 br Opcode = 8 brl Opcode = 9 br rb PC←R[rb] brl ra,rb R[ra]←PC PC←R[rb] brzr rb,rc If R[rc]=0 then PC←R[rb] brlzr ra,rb,rc R[ra]←PC If R[rc]=0 then PC←R[rb] brnz rb,rc If R[rc]≠0 then PC←R[rb] brlnz ra,rb,rc R[ra]←PC If R[rc]≠0 then PC←R[rb] brpl rb,rc If R[rc]≥0 then PC←R[rb] brlpl ra,rb,rc R[ra]←PC If R[rc]≥0 then PC←R[rb] brmi rb,rc If R[rc]<0 then PC←R[rb] brlmi ra,rb,rc R[ra]←PC If R[rc]<0 then PC←R[rb] .IR<2..0>-התנאי שיקבע איזו הסתעפות תתבצע נמצא ב : פיענוח פקודה.5 (4 A965005)H 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 4 0 1 9 A 0 0 1 0 1 0 1 0 6 0 1 0 1 5 1 0 0 1 9 8 7 6 0 0 1 0 0 5 4 3 2 0 0 0 0 0 1 0 0 1 5 0 9 10 11 5 5 Opcode ra rb rc cond 0 0 LSB Condition Assembly language form 000 Never brlnv 001 Always br, brl 010 If rc = 0 brzr, brlzr 011 If rc ≠ 0 brnz, brlnz 100 If rc ≥ 0 brpl, brlpl 101 If rc < 0 brim, brlmi 1 :הפקודה היא brlmi r10,r11,r5 R[r10]←PC If R[r5]<0 then PC←R[r11] המספרים2 אשר משווה ביןSRC-( כתוב תוכנית ב84)H ( ומספר שני בכתובת80 )H נתון מספר אחד בכתובת.6 . (100 )H ומכניסה את הערך הגדול מבין שניהם לכתובת 0 ld r1,80H R[r1]←M[80H] 4 ld r2,84H R[r2]←M[84H] 8 sub r3,r2,r1 R[r3]←R[r2]-R[r1]=M[84H]-M[80H] 12 lar r4,16 R[r4]←PC+16=16+16=32 16 brim r4,r3 If R[r3]<0 then PC←R[r4]=32 20 st r2,100H M[100H]←R[r2]=M[84H] 24 lar r5,8 R[r5]←PC+8=28+8=36 28 br r5 PC←R[r5] 32 st r1,100H M[100H]←R[r1]=M[80H] 36 stop :דרך נוספת 0 ld r1,80H R[r1]←M[80H] 4 ld r2,84H R[r2]←M[84H] 8 sub r3,r2,r1 R[r3]←R[r2]-R[r1]=M[84H]-M[80H] 12 lar r4,8 R[r4]←PC+8=16+8=24 16 brpl r4,r3 If R[r3]≥0 then PC←R[r4]=24 20 la r2,r1,0 R[r2]←R[r1]+0 24 st r2,100H M[100H]←R[r2] 28 stop PC←R[r5] אם המספר זוגי. הבודקת האם המספר זוגי או אי זוגיSRC-( כתוב תוכנית ב200 )H נתון מספר בזיכרון בכתובת.7 . (200)H התוצאה נשמרת בכתובת.1 אם המספר אי זוגי התוכנית מחסירה ממנו.2-התוכנית מחלקת אותו ב 0 ld r1,200H R[r1]←M[200H] 4 andi r2,r1,1 R[r2]←R[r1] and 1 בדיקת זוגיות 8 lar r3,16 R[r3]←PC+16=12+16=28 12 brzr r3,r2 If R[r3]=0 then PC←R[r3]=28 16 addi r1,r1,-1 R[r1]←R[r1]-1 20 lar r4,8 R[r4]←PC+8=24+8=32 24 br r4 PC←R[r4]=32 28 shra r1,r1,1 R[r1]←R[r1]/2 32 st r1,200H M[200H]←R[r1] 36 stop :דרך נוספת 0 ld r1,200H R[r1]←M[200H] 4 andi r2,r1,1 R[r2]←R[r1] and 1 בדיקת זוגיות 8 addi r1,r1,-1 R[r3]←R[r1]-1 12 shra r4,r1,1 R[r4]←R[r1]/2 16 lar r5,8 R[r5]←PC+8=20+8=28 20 brzr r5,r2 If R[r2]=0 then PC←R[r5]=28 24 la r4,r3,0 R[r4]←R[r3]+0 28 st r4,200H M[200H]←R[r4] 32 stop ומכניסה את המנה x1 כתוב תוכנית המחשבת את. (204 )H בכתובתx2-( ו200)H בכתובתx1 נתון מספר.8 x2 . (20C )H ( ואת השארית לכתובת208)H לכתובת 0 la r3,0 R[r3]←0 איתחול המונה 4 ld r1,200H R[r1]←M[200H] 8 ld r2,204H R[r2]←M[204H] 12 addi r3,r3,1 R[r3]←R[r3]+1 16 sub r1,r1,r2 R[r1]←R[r1]-R[r2]=x1-x2 20 lar r4,-12 R[r4]←PC-12=24-12=12 24 brpl r4,r1 If R[r1]≥0 then PC←R[r4]=12 28 add r1,r1,r2 R[r1]←R[r1]+R[r2] מקבל את השאריתR[r1] 32 addi r3,r3,-1 R[r3]←R[r3]-1 מקבל את המנהR[r3] 36 st r1,20CH M[20CH]←R[r1] 40 st r3,208H M[208H]←R[r3] 44 stop מרצה :דר משה שוורץ מתרגל :חורש בן שטרית תרגול : Vתוכניות ב SRC נושאי התרגול .1תוכניות אסמבלי במודל ה SRC תוכניות אסמבלי תוכנית parity ביט זוגיות ) ( parity bitמשמש בן השאר לבדיקה האם נכנסו שגיאות למידע מאוחסן /משודר . ביט הזוגיות בעצם מציין האם סכום ה"אחדים" במידע ,זוגי או אי-זוגי. תרגיל 1 כתוב תוכנית המקבלת מערך מקור בן 100איברים ,וכותבת במערך מטרה )גם הוא בן 100איברים( את פונקצית הזוגיות עבור כל איבר. במקרה שלנו איבר המטרה יהיה 0אם כמות האחדים באיבר המקור הינה זוגית -1אם כמות האחדים באיבר המקור הינה אי-זוגית מערך המקור מתחיל בכתובת , 400כתובת תחילת מערך המטרה הינה . 800 פתרון תרגיל 1 עבור כל איבר המערך המקור ,יש לסכום את כמות ה , 1 ניתן לבצע זאת ע"י ביצוע 31הזזות ימינה )כל פעם בכמות אחרת( ,ביצוע כפל ב " "000..00001וסכימה. בכל שלב) לאחר כל הזזה( נבדוק האם האיבר הינו אפס ,בכדי להפסיק את הלולאה ) בדרך זו לא נדרש לספור עד . ( 31 1 פתרון תרגיל 1גרסה ראשונה הסבר מצביע לאיבר במערך מקור ערך איבר המקור סכום ה"אחדים" מציאת האם הביט הימני משמעות כתובת פקודה R[r1]←400 la r1,400 0 ]]R[r3]←M[R[r1 )ld r3,0(r1 4 R[r7]←0 la r7,0 8 R[r5]←R[r3]&1 andi r5,r3,1 12 ביותר הינו אחד R[r6]←PC+8=28 lar r6,8 16 If R[r5]=0 then PC←R[r6]=28 Brzr r6,r5 20 R[r7]←R[r7]+1 addi r7, r7,1 24 R[r7]←R[r3]>>1 shr r3, r3,1 28 R[r8]←PC-24=12 lar r8,-24 32 If R[r3] ≠0 then PC←R[r8]=12 Brnz r8,r3 36 R[r7]←R[r7]+1 andi r7, r7,1 40 R[r5]←0 la r5,0 44 R[r6]←PC+8=28 lar r6,8 48 If R[r7]=0 then PC←R[r6]=28 Brzr r6,r7 52 )]R[r5]←not(R[r5 not r5, r5 56 שמירת פונקצית הזוגיות ]M[400+R[r1]]← R[r5 )st r5, 400(r1 60 קידום המצביע על מערך R[r1]← R[r1]+4 addi r1, r1,4 64 סכימת כמות האחדים הזזה ימינה האם הסכום זוגי הכנסת אפס לאוגר הכנסת -1לאוגר המקור addi r9, r1,-400 בדיקה האם הגענו לסוף 68 המערך כתובת לולאה ראשית R[r8]←PC-72=4 lar r10, -72 72 If R[r9] ≠0 then PC←R[r10]=4 Brnz r10,r9 76 stop 80 2 פתרון תרגיל 1גרסה שנייה בכדי לייעל את התוכנית ,ניתן לבטל את שורות 40-56ולבצע את הקוד הבא: הסבר מצביע לאיבר במערך מקור ערך איבר המקור סכום ה"אחדים" מציאת האם הביט הימני משמעות כתובת פקודה R[r1]←400 la r1,400 0 ]]R[r3]←M[R[r1 )ld r3,0(r1 4 R[r7]←0 la r7,0 8 R[r5]←R[r3]&1 andi r5,r3,1 12 ביותר הינו אחד R[r6]←PC+8=28 lar r6,8 16 If R[r5]=0 then PC←R[r6]=28 Brzr r6,r5 20 )]R[r7]← not(R[r7 not r7, r7 24 R[r7]←R[r3]>>1 shr r3, r3,1 28 R[r8]←PC-24=12 lar r8,-24 32 If R[r3] ≠0 then PC←R[r8]=12 Brnz r8,r3 36 שמירת פונקצית הזוגיות ]M[400+R[r1]]← R[r5 )st r7, 400(r1 40 קידום המצביע על מערך R[r1]← R[r1]+4 addi r1, r1,4 44 כמות האחדים זוגית/אי זוגית הזזה ימינה המקור addi r9, r1,-400 בדיקה האם הגענו לסוף 48 המערך כתובת לולאה ראשית R[r8]←PC-52=4 lar r10, -72 52 If R[r9] ≠0 then PC←R[r10]=4 Brnz r10,r9 56 stop 60 3 פתרון תרגיל 1גרסה שלישית ניתן לייעל את התוכנית יותר ,ע"י ביצוע השמות ) ( larמחוץ ללולאות ובכך לחסוך המון פקודות מיותרות: ההשמה הינה קבועה ולכן אין צורך לבצע אותה בתוך הלולאה. הלולאה החיצונית ביותר ) לא משורטטת( רצה 100פעמים , הלולאה הפנימית יכולה לרוץ במקרה הגרוע 100*31פעמים. הסבר מצביע לאיבר במערך מקור כתובת לולאה ראשית ערך איבר המקור סכום ה"אחדים" מציאת האם הביט הימני ביותר משמעות כתובת פקודה R[r1]←400 la r1,400 0 R[r6]←PC+24=36 lar r6,24 4 R[r8]←PC+1 2=24 lar r8,12 8 R[r8]←PC= 16 lar r10,0 12 ]]R[r3]←M[R[r1 )ld r3,0(r1 16 R[r7]←0 la r7,0 20 R[r5]←R[r3]&1 andi r5,r3,1 24 הינו אחד כמות האחדים זוגית/אי זוגית הזזה ימינה שמירת פונקצית הזוגיות קידום המצביע על מערך המקור If R[r5]=0 then PC←R[r6]= 36 Brzr r6,r5 28 )]R[r7]← not(R[r7 not r7, r7 32 R[r7]←R[r3]>>1 shr r3, r3,1 36 If R[r3] ≠0 then PC←R[r8]= 24 Brnz r8,r3 40 ]M[400+R[r1]]← R[r5 )st r7, 400(r1 44 R[r1]← R[r1]+4 addi r1, r1,4 48 addi r9, r1,-400 52 Brnz r10,r9 56 בדיקה האם הגענו לסוף המערך If R[r9] ≠0 then PC←R[r10]=16 stop 60 4 שאלה מבוחן 31/05/2002 5 פתרון השאלה גרסה ראשונה נתחיל למלא את המערך מסופו )ז"א בערך ,( 1000+1023*4=1000+4092 באיבר האחרון ) הראשון מבחינת התוכנית( – יש לבצע הזזה של 31ימינה. משמעות הסבר מונה את המערך כולו )פחות (32 אוגר המונה 31פעמים )(31*4 איבר המקור מידת ההזזה הנחוצה ימינה כתובת פקודה R[r30]←3968 la r30,3968 0 R[r 29]←PC=8 lar r29,0 4 R[r31]←124 la r31,12 4 8 R[r28]←PC= 16 lar r28,0 12 ]R[r27]← R[r30]+ R[r31 add r27,r30,r31 16 ]]R[r7]← M[1000+R[r27 ld r1,r27,1000 20 R[r26]←R[r31]<1..0># shr r26,r31,2 24 >R[r31]<31..2 ביצוע הזזה ארטמטית R[r1]← R[r26]@R[r1]< 31># shra r1,r1,r26 28 >]R[r1]<31.. R[r26 שמירת במערך המטרה ]M[10000+R[r27]]← R[r1 st r1, r27,10000 32 R[r31]←R[r31]-4 addi r31, r31,-4 36 If R[r31] >0 then PC←R[r28]=16 brlp r28,r31 40 R[r30]← R[r30]-128 addi r30, r30,-128 44 If R[r30] >0 then PC←R[r29]=8 brlp r29,r30 48 stop 52 lar r28,0 12 R[r28]←PC= 16 ) שימו לב יש טעות בספר בטבלת הפקודות ,פקודה ( 27 גם כאן נוכל לחסוך פקודות ע"י ביצוע השמה לפני לולאה ,ובנוסף אם חסרים אוגרים נוכל לאחד את תחילת הלולאות ובכך לחסוך משתנה – כיצד נבצע זאת? ) הפתרון יובא בתרגול( 6 6 תירגול מספר .1 Bus General purpose register Condition code logic Gra Grb CONin CON Register Grc Rin File IR Rout BAout PC IRin C1out C2out PCin PCout A MA C=B A Shr Inc4 B Sub ALU Shc Memory Add Shl Or Shra MD MDbus Not Shift control n C master-slave n=0 Cout Write MDout And Cin Read MAin Ld Decr Wait General purpose registers – register file – Gra, Grb, Grc .1בוחר את האוגר – אחד בכל פעם. – BAout .2אם הוא שווה ל 1-יוצא 0ל. bus - – Rin .3כותב לאוגר. – Rout .4קורא מהאוגר. Instruction register – IR – IRin .1כותב לתוך ה. IR - – C1out, C2out .2יוצאים ל bus -עם הרחבת סימן מתאימה. Condition logic תמיד בודק את מה שיש על ה bus -ב 3-סיביות ה . LSB -כאשר רוצים לקבל תוצאה מעלים את CONinל 1-ובקו הבקרה CONיש תוצאה. Shift control .1הקו n=0עולה ל 1-כאשר . n=0הכניסה היא 5סיביות LSBמה. bus - .2הקו Decrמבצע . n←n-1 .3הקו Ldטוען ל n -את מה שיש על ה. bus - Interface to memory – MA .1מכיל את הכתובת בזיכרון. – MAin .2מכניס את הכתובת מה bus -ל. MA - – MD .3מכיל את המידע של תא הזיכרון .מחובר גם ל CPU-Bus -וגם ל. Memory-Bus - – MDout .4כתיבה מ MD -ל. CPU-Bus - – MDbus .5קריאה ל MD -מה. CPU-Bus - – Read .6קריאה מהזיכרון – תא שכתובתו ב MA -ל. MD - – Write .7כתיבה לזיכרון – תא שכתובתו ב MA -מ. MD - .2ארעה תקלה במעבד – קו הבקרה notלא פועל .כתוצאה מכך פקודת negלא פועלת .תכנן מחדש את הפקודה negללא שימוש בקו הבקרה . not negמקוריAbstract RTN: R[rc]←not(R[rc])+1 : –R[rc] = 0 – R[rc] :נשתמש במקום Step Concrete RTN קווי בקרה T0 MA←PC : C←PC+4 PCout, MAin, INC4, Cin T1 MD←M[MA] : PC←C Read, Cout, PCin, Wait T2 IR←MD MDout, IRin T3 A←0 BAout, Ain T4 C←A-R[rc] Grc, Rout, SUB, Cin T5 R[ra]←C Cout, Gra, Rin, End .סדר כתיבת קווי הבקרה לא משנה כי לא מתייחסים כעת לבעיות תיזמון . של הפקודה הבאהfetch - להיות מוכן לT0 - לCPU - מחזיר את הEnd קו הבקרה abs ra,rb : תכנן פקודה חדשה.3 Abstract RTN: R[ra]←|R[rb]| . תן הצעה לקידוד הפקודה.א . וקווי בקרהConcrete RTN רשום.ב : קידוד הפקודה.א 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 0 0 1 1 Opcode 9 8 7 6 5 4 3 1 ra rb Un-used 7 2 1 0 1 0 0 cond 4 . R[rb]≥0 התנאי שנבדק הוא .ב Step Concrete RTN קווי בקרה T0 MA←PC : C←PC+4 PCout, MAin, INC4, Cin T1 MD←M[MA] : PC←C Read, Cout, PCin, Wait T2 IR←MD MDout, IRin T3 CON←cond(R[rb]) Grb, Rout, CONin T4 CON→C←R[rb] not(CON)→C←(-1) CON→(Grb, Rout, C=B, Cin) not(CON)→(BAout, NOT, Cin) T5 not(CON)→A←C not(CON)→(Cout, Ain) T6 not(CON)→C←A+R[rb] not(CON)→(Grb, Rout, ADD, Cin) T7 not(CON)→C←not(C) not(CON)→(Cout, NOT, Cin) Master-Slave הואC זה אפשרי כי T8 R[ra]←C Gra, Rin, Cout, End set ra,rb,rc : נתונה פקודה חדשה.4 .LSB - סיביות ה5 – רק32- ל0 – מכיל מספר ביןR[rc] . – עליו מתבצעת הפעולהR[rb] . – אוגר המטרהR[ra] .R[rb] - בR[rc] - בסיבית שמקומה ב1 הפונקציה קובעת 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0 0 0 0 1 R[rc] 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 1 1 1 1 0 1 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 R[rb] 1 1 1 1 1 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 1 1 1 1 0 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 R[ra] Step Concrete RTN T0 קווי בקרה T0 MA←PC : C←PC+4 T1 MD←M[MA] : PC←C Read, Cout, PCin, Wait T2 IR←MD MDout, IRin T3 n←R[rc] Gra, Rout, Ld T4 C←(-1) : A←0 BAout, Ain, NOT, Cin T5 C←A – C Cout, SUB, Cin T6 shl(:=(n≠0)→(C←C<30..0>#0:n←n-1;shl)) (n≠0)→(Cout, SHL, Decr, goto6, Cin) T7 A←C Cout, Ain T8 C←A OR R[rb] Grb, Rout, OR, Cin T9 R[ra]←C Cout, Gra, Rin, End T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 Clock logic מונה צעדים 4 Load : set לפקודתcontrol unit - שינויים ב.5 Opcode n=0 5 Decoder 5-32 set T6 goto6 Reset End goto6 PCout, MAin, INC4, Cin T0 פקודותT4 אחרותT5 T8 0110 Rout Cin SRC- ייצור מספרים ב.6 BAout על ידי קו בקרה: 0 -1=not(0) : (-1) 0 - (-1) = 1 : 1 INC4(0) = 4 : 4 xor ra,rb,rc : וקווי בקרה לפקודה הבאהConcrete RTN כתוב.7 Abstract RTN: R[ra]←R[rb] xor R[rc] x ⊕ y = xy + x y Step Concrete RTN קווי בקרה T0 MA←PC : C←PC+4 PCout, MAin, INC4, Cin T1 MD←M[MA] : PC←C Read, Cout, PCin, Wait T2 IR←MD MDout, IRin T3 C←not(R[rb]) Grb, Rout, NOT, Cin T4 A←C Cout, Ain T5 C←A and R[rc] Grc, Rout, AND, Cin T6 R[ra]←C Cout, Gra, Rin T7 C←not(R[rc]) Grc, Rout, NOT, Cin T8 A←C Cout, Ain T9 C←A and R[rb] Grb, Rout, AND, Cin T10 A←C Cout, Ain T11 C←A or R[ra] Gra, Rout, OR, Cin T12 R[ra]←C Cout, Gra, Rin, End even ra,rb : נתונה פקודה חדשה.8 R[ra]←R[rb]/2 : זוגיR[rb] אם R[ra]←R[rb]-1 : אי זוגיR[rb] אם . תן הצעה לקידוד הפקודה.א . וקווי בקרהConcrete RTN רשום.ב : קידוד הפקודה.א 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 0 0 1 1 9 8 7 6 5 4 3 1 Opcode ra rb 2 1 0 0 1 0 cond Un-used 7 2 .ב Step Concrete RTN קווי בקרה T0 MA←PC : C←PC+4 PCout, MAin, INC4, Cin T1 MD←M[MA] : PC←C Read, Cout, PCin, Wait T2 IR←MD MDout, IRin T3 C←(-1) : A←0 BAout, Ain, NOT, Cin T4 C←A-C Cout, SUB, Cin T5 A←C Cout, Ain T6 C←A and R[rb] Grb, Rout, AND, Cin T7 CON←cond(C) Cout, CONin T8 CON→(C←R[rb]<31>#R[rb]<31..1>) not(CON)→(C←A-R[rb]) CON→(Grb, Rout, SHRA, Cin) not(CON)→(Grb, Rout, SUB, Cin) T9 not(CON)→(A←0) not(CON)→(BAout, Ain) T10 not(CON)→(C←A-C) not(CON)→(Cout, SUB, Cin) T11 R[ra]←C Cout, Gra, Rin, End דר משה שוורץ: מרצה חורש בן שטרית: מתרגל Concrete RTN : VII תרגול נושאי התרגול Concrete RTN .1 ייצור מספרים :SRC -ייצור מספרים ב About על ידי קו בקרה 0 not(0) -1 0 - (-1) = 1 1 INC4 4 קידוד פקודות חדשות : XOR פקודת-תרגיל xor ra,rb,rc : וקווי בקרה לפקודה הבאהConcrete RTN כתוב Abstract RTN: R[ra]←R[rb] xor R[rc] x ⊕ y = xy + x y Step T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 Concrete RTN MA←PC : C←PC+4 MD←M[MA] : PC←C IR←MD C←not(R[rb]) A←C C←A and R[rc] R[ra]←C C←not(R[rc]) A←C C←A and R[rb] A←C C←A or R[ra] R[ra]←C 1 קווי בקרה PCout, MAin, INC4, Cin Read, Cout, PCin, Wait MDout, IRin Grb, Rout, NOT, Cin Cout, Ain Grc, Rout, AND, Cin Cout, Gra, Rin Grc, Rout, NOT, Cin Cout, Ain Grb, Rout, AND, Cin Cout, Ain Gra, Rout, OR, Cin Cout, Gra, Rin, End : even פקודת-תרגיל even ra,rb :נתונה פקודה חדשה R[ra]←R[rb]/2 : זוגיR[rb] אם R[ra]←R[rb]-1 : אי זוגיR[rb] אם . תן הצעה לקידוד הפקודה.א . וקווי בקרהConcrete RTN רשום.ב ( )ישיר: even פקודת-1 פתרון : קידוד הפקודה.א Step T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 Concrete RTN MA←PC : C←PC+4 MD←M[MA] : PC←C IR←MD C←(-1) : A←0 C←A-C=1 A←C C←A and R[rb] CON←cond(C) CON→(C←R[rb]<31>#R[rb]<31..1>) not(CON)→(C←A-R[rb]) not(CON)→(A←0) not(CON)→(C←A-C) R[ra]←C קווי בקרה PCout, MAin, INC4, Cin Read, Cout, PCin, Wait MDout, IRin BAout, Ain, NOT, Cin Cout, SUB, Cin Cout, Ain Grb, Rout, AND, Cin Cout, CONin CON→(Grb, Rout, SHRA, Cin) not(CON)→(Grb, Rout, SUB, Cin) not(CON)→(BAout, Ain) not(CON)→(Cout, SUB, Cin) Cout, Gra, Rin, End .ב 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 0 0 1 1 1 Opcode 7 ra rb 9 8 7 6 5 4 Un-used . האם הרגיסטר שווה לאפס, cond=2 במקרה שלנו התנאי הינו 2 3 2 0 1 1 cond 2 0 0 ( )ישיר: even פקודת-2 פתרון ) גם מספרים. ולכן ניתן רק לאפס ביט זה1 = LSB מתבסס על העובדה כי למספר איזוגי לעולם יהיה (!שליליים ביצוג לשניים – נסו זאת Step T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 Concrete RTN MA←PC : C←PC+4 MD←M[MA] : PC←C IR←MD C←(-1) : A←0 C←A-C=1 A←C C←A and R[rb] CON←cond(C) C←R[rb]<31>#R[rb]<31..1> not(CON)→(C←C <30..0>#0) R[ra]←C קווי בקרה PCout, MAin, INC4, Cin Read, Cout, PCin, Wait MDout, IRin BAout, Ain, NOT, Cin Cout, SUB, Cin Cout, Ain Grb, Rout, AND, Cin Cout, CONin Grb, Rout, SHRA, Cin not(CON)→( Cout, SHL, Cin ) Cout, Gra, Rin, End ( )ישיר: even פקודת-3 פתרון X[0] = X-((X>>1)<<1) : מהחישובLSB מתבסס על העובדה כי ניתן לקבל את ביט ה Step T0 T1 T2 T3 T4 T5 T6 T7 T8 Concrete RTN MA←PC : C←PC+4 MD←M[MA] : PC←C IR←MD C←( R[rb]<31>#R[rb]<31..1>) : A← R[rb] C←C←C <30..0>#0: R[ra]← C C←A-C: A← C CON←cond(C) not(CON)→(C←A) not(CON)→(R[ra]←C) קווי בקרה PCout, MAin, INC4, Cin Read, Cout, PCin, Wait MDout, IRin Grb, Rout, Ain , Cin, SHRA Cout, SHL, Cin, Gra, Rin Cout, Ain , Cin, SUB Cout, CONin not(CON)→( ADD, Cin, About) not(CON)→(Cout, Gra, Rin), End :תרגיל : רוצים ליצור פקודה חדשה. מילים8 המחולק לבלוקים של, 0 המתחיל בכתובת,נתון מערך בזיכרון Check_Address ra,rb אז, אם זוהי כתובת התחלה של בלוק במערך הנתון. rb הפקודה בודקת את הכתובת הנתונה בריגסטר אז הפקודה, אם זוהי איננה כתובת התחלה של בלוק במערך. ra " לתוך רגיסטר1" הפקודה מחזירה . אליו שייכת הכתובת הנתונה, את כתובת ההתחלה של הבלוקra מחזירה לתוך רגיסטר . INC5 ( ויש פעולה חדשהOR,AND ) נתון כי במערכת אין את הפעולות 3 כתוב RTNקונקרטי וקוי בקרה לפקודה חדשה .באפשרותך לעשות שינויים בחומרה של מחולל הצעדים ,במידה ובחרת לעשות שינויים ,הצג אותם. (1הוסף חומרה ביחידת , Condition Logicכך שניתן יהיה לבדוק האם הכתובת הנתונה ב , rbהיא כתובת התחלת בלוק .פרט את מימוש החומרה ,השתמש בה בכתיבת . RTN (2ציר את מימוש יחידת הבקרה ע"י שערים לוגיים ,את מחולל הצעדים )כולל שינויים( ,ואת מימוש אותות הבקרה הבאיםDecr,Shl,Shr,About,Goto7,Grb : (3כתוב RTNקונקרטי וקווי בקרה ללא תוספת החומרה ב . Condition Logic (4נתון כי רק ב 10%מהמקרים יש שגיאה בכתובת ההתחלה של הבלוק .חשב את ה speed up במימוש ע"י החומרה החדשה ) , ( Condition Loginלעומת החומרה הישנה .זמן ביצוע צעד הוא .T פתרון : (1הבלוקים מתחילים בכתובת , 0ולכן הבלוק הבא יחל לאחר 32=4*8כתובות . שינויים ב control unit -לפקודה: >IR<2..0 3 Decoder 6 5 4 3 2 1 0 CON Bus 5 D Q CON Q CON in ><31.. 0 4 (' דרך א- )דרך ישירה: RTN מימוש ה Step T0-T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 Concrete RTN Fetch CON←cond(R[rb]) not(CON)→(C←5) CON→(C←(-1):A←0) not(CON)→(n←C) CON→(C←A-C) not(CON)→(C← R[rb]) not(CON)→ (shr(:=(n≠0)→ (C←0#C<31..1>:n←n-1;shr))) not(CON)→( R[ra]←C) not(CON)→(C←5) not(CON)→(n←C) not(CON)→(C← R[ra]) not(CON)→ shl(:=(n≠0)→ (C←C<30..0>#0:n←n-1;shl)) R[ra]← C קווי בקרה Fetch CONin, Grb ,Rout not(CON)→(BAout , INC5, Cin) CON→(NOT, BAout, Ain , Cin) not(CON)→( Cout , Ld) CON→( Cout , SUB , Cin) not(CON)→( Grb ,Rout , Cin ) not(CON)→ (n≠0)→(Cout, SHR, Decr, goto7, Cin) not(CON)→( Gra ,Rin, Cout ) not(CON)→(BAout , INC5, Cin) not(CON)→( Cout , Ld) not(CON)→( Gra ,Rout , Cin ) not(CON)→ (n≠0)→(Cout, SHL, Decr, goto12, Cin) Gra ,Rin , Cout,End (' דרך ב- )יעיל יותר: RTN מימוש ה Step T0-T2 T3 T4 T5 T6 T7 T8 T9 T10 Concrete RTN Fetch CON←cond(R[rb]) not(CON)→(C←5) CON→(C←(-1):A←0) not(CON)→(n←C) CON→(C←A-C) not(CON)→( C←(-1)) CON→( R[ra]← C ) not(CON)→ (shl(:=(n≠0)→ (C←0#C<31..1>:n←n-1;shl))) not(CON)→(A← C) not(CON)→(C← R[rb]^A) not(CON)→(R[ra]← C) קווי בקרה Fetch CONin, Grb ,Rout not(CON)→(BAout , INC5, Cin) CON→(NOT, BAout, Ain , Cin) not(CON)→( Cout , Ld) CON→( Cout , SUB , Cin) not(CON)→ (NOT, BAout, Cin) CON→( Gra ,Rin , Cout,End) not(CON)→ (n≠0)→(Cout, SHL, Decr, goto6, Cin) not(CON)→( Ain , Cout ) not(CON)→( Grb ,Rout , Cin ,AND ) Gra ,Rin , Cout,End . מימוש קווי הבקרה יובא בכיתה.2 5 : ללא החומרה החדשה ביחידת הבקרהRTN נממש את ה.3 Step T0-T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 Concrete RTN Fetch C←5 n←C C← R[rb]:A← R[rb] shr(:=(n≠0)→ (C←0#C<31..1>:n←n-1;shr) shl(:=(n≠0)→ (C←C<30..0>#0:n←n-1;shl)) C←A-C: R[ra]← C CON←cond(C) CON→(C←(-1):A←0) not(CON)→ (end) CON→ (C←A-C) R[ra]← C קווי בקרה Fetch BAout , INC5, Cin Cout , Ld Cin, Grb ,Rout ,Ain (n≠0)→(Cout, SHR, Decr, goto6, Cin) (n≠0)→(Cout, SHL, Decr, goto7, Cin) Cout , SUB , Cin, Gra ,Rin CONin,Cout CON→(NOT, BAout, Ain , Cin) not(CON)→( END) (CON)→( Cout , SUB , Cin) Gra ,Rin , Cout,End : נחשב את ההאצה של החומרה החדשה.4 T2 − T1 speed _ up = T1 זמן הפקודה ללא שינוי החומרה- T2 , זמן הפקודה לאחר שינוי החומרה- T1 T1 = 0.9 * (7T ) + 0.1 * (10T + 5T ) = 7.8T T2 = 0.9 * (11T + 2 * 5T ) + 0.1 * (9T + 2 * 5T ) = 9.9T + 1.9T = 11.8T T − T 11.8 − 7.8 speed _ up = 2 1 = = 0.57 T1 7.8 6 מרצה :דר משה שוורץ מתרגל :חורש בן שטרית תרגול 2-Bus ,3-Bus : VIII נושאי התרגול 2-Bus, 3-Bus .1 Speed-up .2 תרגיל -פקודת : Mult תכנן פקודה חדשהmult ra,rb,rc : ]Abstract RTN: R[ra]←R[rb]*R[rc נתון . 0≤R[rc]≤31 א .כתוב קווי בקרה ו Concrete RTN -עבור ארכיטקטורת .2-BUS ב .כתוב קווי בקרה ו Concrete RTN -עבור ארכיטקטורת .3-BUS חשב את ה speed-up -עבור פקודה זו במעבר מ 2-BUS -ל 3-BUS -בהנחה כי . τ 3− BUS = 1.5 ⋅ τ 2− BUS 1 : 2-BUS ארכיטקטורת .C אין רגיסטר.א .2- אחד במקום בT ניתן להעביר נתונים מרגיסטר לרגיסטר בצעד.ב A Bus B Bus Rout Rin Register File Sra Srb Gra Grb Src Grc Condition code logic IR PC MA Memory MD A A B ALU 2 Shift control n : 2-BUS פתרון.א 3 Step T0 T1 Concrete RTN MA←PC MD←M[MA] : PC←PC+4 T2 T3 T4 T5 T6 IR←MD n←R[rc] A← R[rb] R[ra]←0 mult(:=(n≠0)→(R[ra]←R[ra]+A:n←n-1;mult)) קווי בקרה PCout, C=B, MAin Read, Wait, PCout , INC4, PCin MDout, C=B, IRin Grc, Rout, Ld Grb, Rout, C=B, Ain BAout, C=B, Sra, Rin (n≠0)→(Gra, Rout, ADD, Sra, Rin, Decr, goto6) (n=0)→End : 3-BUS ארכיטקטורת . פעולות מקבילות.1 . קריאה מהזיכרון בצעד אחד.2 C Bus A Bus B Bus Rin R(A)out G(A)ra G(A)rb G(A)rc R(B)out G(B)ra G(B)rb G(B)rc Register File Sra Srb Src Condition code logic IR PC MA(C)in MA(B)in MA Memory MD A B ALU 4 Shift control n : 2-BUS פתרון.ב Step T0 T1 T2 T5 Concrete RTN MA←PC : MD←M[MA] : PC←PC+4 קווי בקרה PCout, MA(B)in, INC4, PCin, Read, Wait IR←MD MDout, C=B, IRin n←R[rc] : R[ra]←0 G(B)rc ,R(B)out, Ld, G(A)rc ,R(A)out , SUB, Sra, Rin, goto5 mult(:=(n≠0)→(R[ra]←R[ra]+R[rb]:n←n-1;mult)) (n≠0)→(G(A)ra, R(A)out,G(B)rb, R(B)out, ADD, Sra, Rin, Decr, goto5) (n=0)→End Speedup .ג T2− BUS − T3− BUS ⋅ 100 T3− BUS T = IC ⋅ CPI ⋅ τ . = זמן ביצועT .1 = = מספר פקודותIC . = מספר צעדים לפקודהCPI . τ 3− BUS = 1.5 ⋅ τ 2− BUS = זמן מחזור של שעוןτ (6 + (R[rc] + 1)) ⋅ τ − (3 + (R[rc] + 1)) ⋅ 1.5 ⋅ τ Speedup = (3 + (R[rc] + 1)) ⋅ 1.5 ⋅ τ Speedup = 5 מרצה :דר משה שוורץ מתרגל :חורש בן שטרית תרגול : IXמחברים נושאי התרגול .1מחבר/מחסר טורי Carry Look Ahead – CLA .2 Full Adder בלוק Full Adderזוה uהרכיב הבסיסי במחברים , מחבר שני ביטים )כולל : ( Carry in המורכב מהשערים הבאים : 1 מחברים מחבר/מחסר טורי : נניח שהשהיית FAהינה 2Δוכן השהיית ה XORבכניסה הינה , 2Δ מכאן נקבל כי השהיית המערכת הינה ) 2Δ(m + 1כאשר mמייצג את כמות הביטים במספרים. יתרון המערכת הינו בפשטותה ,אך ברור כי ההשהייה גדלה לינארית עם mולכן ,עבור מספר ביטים גדול המערכת הינה מאוד איטית. : Carry Look Ahead בשיטה זו ננסה לייצר את ה Carryמהר יותר בכדי לבצע חישובים בצורה מקבילית. ישנם שני פרמטרים חדשים : – ( Generate ) - G jמקבל 1כאשר נוצר נשא בחיבור הביטים ה G j = x j y j : j – ( Propagate ) - Pjמקבל 1כאשר יש להעביר נשא שנוצר קודם – להמשך המערכת : Pj = x j + y j ניתן לרשום את הנשא בכל שלב בצורה הבאה: c1 = G0 + P0 c0 c 2 = G1 + P1c1 = G1 + P1G0 + P1 P0 c0 c3 = G2 + P2 G1 + P2 P1G0 + P2 P1 P0 c0 ) c 4 = G3 + P3 (G2 + P2 G1 + P2 P1G0 + P2 P1 P0 c0 בכדי לייצר את G j , Pjיש צורך בידיעת ) x j , y jניתן לייצר זאת ב Δאחד( בנוסף יש צורך בחישוב ) c jהשהייה של ( 2Δ ולבסוף חישוב מוצא ה ) FAהשהייה של .( 2Δ מכאן – ניתן לייצר את כל מוצאי המערכת בזמן של 5Δבלבד ! הבעייה הינה שישנה הגבלה לכמות הכניסות עבור השערים ) – ( AND ,ORבעיית . FAN-in ככלל שערים לוגים בעלי כניסות מרובות הינם איטיים יותר משערים לוגים בעלי כניסות מועטות. הפתרון הינו ביצוע הררכי של : CLA 2 Carry Look Aheadהיררכי : במבנה זה נבצע את החישובים בצורה היררכית כך שבכל פעם נבצע חישובים עם כמות מוגבלת של ביטים לדוגמה עבור k=2נקבל : נוסחאות הרמה הראשונה: c1 = G0 + P0 c0 G0 = G1 + P1G0 1 P0 = P1 P0 1 3 באופן דומה נבנה 2bit-CLAלחיבור שני מספרים בני 8ביטים : מספר הרמות הינו log k m {log k m − 1) ⋅ 2Δ ⋅ 2 + 2 T= Δ = Δ + 2Δ { + (1 44 42444 { 3 last CLA generate FA all CLA זמן החישב הכולל הינו : G,P T = (1 + 4 log k m )Δ כאן אנו רואים כי התלות של ההשהייה ב mהינה לוגרתמית ולכן יעילה יותר מחיבור טורי ככל ש mגדול יותר. 4 ניתן להגדיל את kולקבל מערכת יעילה יותר ,לדוגמא עבור k=4בלוק הבסיס נראה כך : c 4 = G0 + P0 c0 1 1 G0 = G3 + P3G 2 + P3 P2 G1 + P3 P2 P1G0 1 P0 = P3 P2 P1 P0 1 תרגיל : ברצונך לסכם שני מספרים x,yבני 10ביט כל אחד ,השווה את זמן ההשהייה של השיטות הבאות : א .מחבר/מחסר טורי ב .מחבר k=2 , CLA ג .מחבר k=4 , CLA פתרון : א. מחבר/מחסר טורי: T = 2Δ(m + 1) = 22Δ ב .מחבר : k=2 , CLA דרך - Iנבנה מערכת עבור 16ביט ונאפס את הכניסות : 10-15 T = (1 + 4 log 2 16)Δ = 17Δ דרך – IIנבנה מערכת עבור 8ביט ונוסיף רק את החומרה עבור 10ביט , נקבל במקרה זה: T = (1 + 4 log 2 8)Δ = 13Δ ג .מחבר :4 k= , CLA T = (1 + 4 log 4 16)Δ = 9Δ 5 מרצה :דר משה שוורץ מתרגל :חורש בן שטרית תרגול : Xמכפלים נושאי התרגול .1מכפל מערך מקבילי .2מכפל טורי/מקבילי – מספרים לא מסומנים .3מכפל טורי/מקבילי – מספרים מסומנים מכפל מערך מקבילי בדומה לכפל ארוך ) כפי שנלמד בכיתה ד' ( ,לדוגמא: ⎧1 0 1 ⎨× ⎩1 1 1 −−−−−−−−−− 1 0 1 ⎧ ⎪ +⎨ 1 0 1 ⎪1 0 1 ⎩ −−−−−−−−−− 1 0 0 0 1 1 נממש מכפל טורי מקבילי ,ע"י מספר בלוקים זהים: בלוק זה הינו הרכיב הבסיסי במכפל טורי מקבילי ,מכפיל בין שני ביטים הרכיב הינו פשוט ביותר ובעצם מורכב מ FAומשער : AND 1 x y pk(in) cin cout x2 pk(out) 0 x1 0 x0 0 y0 0 y1 0 y2 0 p2m – 1 p2m – 2 p2m – 3 p2m – 4 p2 T= Δ Δ(m − 1) + 2{ mΔ = { + 41 424 3 first lebel and all other T = (6m − 3)Δ 2 levels p1 : השהיית המערכת p0 (מקבילי )מספרים לא מסומנים/מכפל טורי Multiplicand xm –1 xm –2 x2 x1 Partial product generator x0 yj Multiplier digit m + 1-digit adder 0 2m-digit right shift register, p , חיבור והזזה של התוצאה הזמנית בכל פעם/מכפל זה מבוסס על הכפלה 3 תרגיל : ⎧1 0 1 1 ⎨× = 11 × 6 חשב : ⎩0 1 1 0 נאתחל את הצובר ACC -ב 2m ) . 0ביטים( ⎧1 0 1 1 ⎨× ⎩0 1 1 0 00 0 0 0 00 0 0 0 PP0 0 0 0 00 0 1 0 1 1 temp ACC PP1 temp 0 0 1 0 11 0 01 0 1 1 ACC PP2 1 0 0 0 01 0 01 0 0 00 1 0 00 0 0 0 temp ACC PP3 01 0 1 10 1 0 0 00 1 0 0 1 0 00 0 1 0 temp ACC אכן התקבלה תוצאה סופית נכונה )(66 ⎛ ⎞ = ⎟m ( ) T =⎜Δ + 2 Δ m + 1 ⎟3 ⎜ pp{j 1424 השהיית המערכת: addition ⎝ ⎠ T = 2m 2 + 3 Δ ) ( 4 מכפל טורי/מקבילי )מספרים מסומנים( m -bit multiplicand register m -bit multiplier shift register 0 Subtract Carry in m + 1-bit 2’s complement adder m – 1 bits Sign extension 2m -bit accumulator shift register החישוב מתבצע באופן דומה למכפל למספרים לא מסומנים ,מלבד העובדות שינו הרחבת זימן למספרים ובנוסף הביט האחרון מוחסר ולא מחובר. תרגיל : ⎨⎧× = )(− 3) × (− 1 1 0 1 חשב : ⎩1 1 1 ⎧1 0 1 ⎨× ⎩1 1 1 11 0 1 11 0 1 11 1 0 1 11 0 1 11 0 1 1 1 1 1 0 11 1 00 1 1 10 0 0 0 1 1 0 0 0 01 1 PP0 temp ACC PP1 temp ACC PP2 temp ללא הזזה ACC את הביט האחרון מקבלים תוך משלים לשניים והרחבת סימן נבצע חיבור בין ACC + PP2ונקבל את התוצאה (− 3) × (− 1) = 3 : 5 תרגיל : ⎧0. 1 1 0 ⎞⎛ 3⎞ ⎛ 5 ⎨× = ⎟ ⎜ ⎟ × ⎜ −בשתי בתצורות ) שני סדרי האיברים( חשב : ⎠⎝ 4⎠ ⎝ 8 ⎩1. 0 1 1 מספר חיובי כפול מספר שלילי: ⎧0. 1 1 0 ⎨× ⎩1. 0 1 1 0 0. 1 1 0 0 0. 1 1 0 0 0. 0 1 1 0 0 0. 1 1 0 0 1. 0 0 1 0 0 0. 1 0 0 1 0 0 0. 0 0 0 0 0. 1 0 0 1 0 0 0. 0 1 0 0 1 0 1 1. 0 1 0 PP0 temp ACC PP1 temp ACC PP2 temp ACC PP3 1 1. 1 0 0 0 1 0 1 1. 1 0 0 0 1 0 מספר שלילי כפול מספר חיובי: 1 . 0 1 1 ⎧ ⎨× ⎩0. 1 1 0 = temp ללא הזזה ACC 0 0. 0 0 0 0 0. 0 0 0 PP0 0 0 0 00 1 1. 0 1 1 1 1. 0 1 1 0 1 1. 1 0 1 1 0 1 1. 0 1 1 temp ACC PP1 temp ACC PP2 1 1. 0 0 0 1 0 temp ACC PP3 1 1. 1 0 0 0 1 0 1 1. 1 0 0 0 1 0 = temp ללא הזזה ACC 1 1. 1 0 0 0 1 0 0 0. 0 0 0 6 מרצה :דר משה שוורץ מתרגל :חורש בן שטרית תרגול : XIמחלקים ונקודה צפה נושאי התרגול .1מחלק שלמים .2מחלק שברים .3נקודה צפה תכנות חלוקת שלמים נעסוק בחלוקה של שני מספרים חלוקה של המחולק ) (Dבמחלק ) , (dישנן שתי תוצאות :תוצאת החלוקה והשארית. כאשר מחלקים מחולק בן 2mביטים במחלק בעל mביטים ,לא תמיד מקבלים תוצאה ושארית בני mביטים כ"א .הדוגמא הטובה ביותר הינה חלוקה ב. "1"- Dividend left shift register Load 0 Divisor register Subtractor Positive result Quotient left shift register 1 אלגוריתם חלוקת שלמים: .1 .2 .3 .4 .5 שים את המחולק בחצי התחתון )הימני( של רגיסטר המחולק .שים את במחלק ברגיסטר המחלק.אפס את התוצאה ואת ביט הסופר. הזז את רגיסטר המחולק הזזה אחת שמאלה. אם תוצאת החיסור חיובית ,הכנס " "1לרגיסטר התוצאה והחלף את החצי השמאלי ) העליון( של המחולק בהפרש. אם תוצאת החיסור שלילית הכנס " "0לתוך התוצאה. אם נכנסו פחות מ mביטים לתוצאת החילוק ,חזור ל.2 mהביטים ברגיסטר תוצאת החילוק – הם תוצאת החילוק . mהביטים בחצי השמאלי של המחולק – הם השארית . תרגיל : ⎧1 0 1 0 1 ⎨ 21 / 6 = / חשב : ⎩0 0 1 1 0 התוצאה הינה 3ושארית .3 0 0 0 0 01 0 1 0 1 0 0 1 1 0 q=0 0 0 0 0 10 1 0 1 0 0 1 1 0 q = 00 0 0 0 1 01 0 1 0 0 1 1 0 q = 000 0 0 1 0 10 1 0 0 1 1 0 q = 0001 0 1 0 1 01 0 0 1 1 0 0 0 1 0 01 q = 00011 0 1 0 0 1 0 0 1 1 0 0 0 0 1 1 אכן התקבלה תוצאה סופית נכונה :תוצאה 3ושארית : 3 D d )diff (− D d )diff (− D d )diff (− D d )diff (− D d ) diff (+ D d ) diff (+ q⋅d + r = D 3 ⋅ 6 + 3 = 21 2 אלגוריתם חלוקת שברים: .1 .2 .3 .4 .5 .6 שים את המחולק בחצי העליון )השמאלי( של רגיסטר המחולק .שים את במחלק ברגיסטר המחלק.אפס את התוצאה ואת ביט הסופר. אם תוצאת החיסור חיובית ,הגדר גלישת חילוק! הזז את רגיסטר המחולק הזזה אחת שמאלה. אם תוצאת החיסור חיובית ,הכנס " "1לרגיסטר התוצאה והחלף את החצי השמאלי ) העליון( של המחולק בהפרש. אם תוצאת החיסור שלילית הכנס " "0לתוך התוצאה. אם נכנסו פחות מ mביטים לתוצאת החילוק ,חזור ל.3 mהביטים ברגיסטר תוצאת החילוק– הם תוצאת החילוק )מנה( .הנקודה נמצאת משמאל. quotient 2m re min der mהביטים בחצי השמאלי של המחולק – הם השארית . 2 2m תרגיל : ⎧0. 1 1 0 3 7 ⎨/ = / חשב : 4 8 ⎩ 0. 1 1 1 התוצאה הינה 3ושארית .3 אין גלישה משום שההפרש שלילי. q=0 0. 1 1 0 0 0 0 0. 1 1 1 D d )diff ( − D q = 0.1 1. 1 0 0 0 0 0. 1 1 1 0. 1 0 1 0 0 q = 0.11 1. 0 1 0 0 0. 1 1 1 0. 0 1 1 0 ) diff ( + q = 0.110 0. 1 1 0 D 0. 1 1 1 d d ) diff ( + D d )diff ( − 3 = 0. 0 0 0 1 1 0 חישוב השארית הינו : 1 424 3 32 m bits 3 תוצאת החילוק: 4 = q = 0.110 q⋅d + r = D אכן התקבלה תוצאה סופית נכונה 3 7 3 21 3 24 3 : ⋅ + = + = = 4 8 32 32 32 32 4 3 נקודה צפה Floating point - לפי תקן . e = eˆ − 127 : IEEE בכדי לחשב ערך של מספר ,נבצע את החישוב : num = (− 1) ⋅ f ⋅ 2 e S בבסיס לינארי ישנם שני יצוגים :מספרים מנורמלים /לא מנורמלים . L4 1.10101 0101 14 42 4 במספר מנורמל :המנטיסה מתחילה ב 1.ונקבל 3 23 bits 0.10101 0101 L4 14 42 4 במספר לא מנורמל :המנטיסה מתחילה ב 0.ונקבל 3 23 bits אין צורך לרשום את האפס/אחד משמאל לנקודה ,משום שאנו יוצאים מנקודת הנחה שהמספרים מנורמלים). למעט eˆ = 0 בכדי לדעת את סימן התוצאה במהלך חישובים בין שני מספרים ,נשווה תחילה את האקספוננטים ,אם הם לא שווים נוכל לדעת את התשובה בוודאות .אם הם שווים נתבונן במנטיסות של המספרים. תרגיל : חשב 1.011 ⋅ 2 − 1.001 ⋅ 2 = ? : Normalize and round ⎧1.101 0 ⋅ 2 2 = ⎨− 2 ⎩0.0001 ⋅ 2 2 3 1.1011 ⋅ 2 2 Alignment ⎧1.0110 ⋅ 2 3 = ⎨− 3 ⎩0.1001 ⋅ 2 Operands ⎧1.011 ⋅ 2 3 ⎨− 2 ⎩1.001 ⋅ 2 0.1101 ⋅ 2 3 התוצאה 1.101 ⋅ 2 2 : 4 : חומרה למימוש חיבור וחיסור בנקודה צפה e1 e2 f1 me me f2 mf Exponent Sub t r ac t er mf Swap mf sig n |e 1 -e 2 | A lig nm ent Sh if t er me m f + rounding bit s mf sub t r ac t s1 s2 Sig n Comput at ion Sig nif ic and A d der/ sub t r act er sig n FA/ FS e1 e2 me me Se lec t mz me m f + rounding bit s Lead zeros Count er No r m aliz e and Round Sub t ract and bias mf me sr 5 êr fr תרגיל : תן טבלאת אמת ומימושו של קו . Subtract פתרון שער XORעל הכניסות S1, S2, FA/FS : תרגיל : נתון שהקו signשיוצא מ significant adder/subtractorהתקלקל ,כתוצאה מכך המוצא מקבל 0/1 בצורה אקראית . .1כיצד התקלה תשפיע על תפקוד המערכת? .2הצע תיקון פשוט כך שברוב המקרים המערכת תעבוד כיאות. פתרון ינתן בכיתה... 6 מרצה :דר משה שוורץ מתרגל :חורש בן שטרית תרגול : XIIזיכרון מטמון נושאי התרגול .1זיכרון מטמון מבוא אחד מצווארי הבקבוק בעבודה של מעבדים הינו נושא פנייה לזכרון הראשי . הפנייה לזכרון הראשי עורכת זמן רב ומאיטה את ביצועי המערכת. בנוסף רוב הזמן אנו עובדים עם מידע "לוקאלי" ,נתונים שבאים אחד אחרי השני או בקרבת מקום אחד לשני. זיכרון מטמון ) (Cacheנוצר בכדי לקצר את זמן ההשהייה בעבודה עם נתונים מהזכרון הראשי. גודל זיכרון המטמון קטן יותר ,וזמן הפניה קצר יותר מאשר לזכרון הראשי. הזכרון בנוי בצורה ההררכית – כאשר תוכנית פונה לזיכרון ,תחילה נחפש את הנתון בזכרון המטמון . במידה והנתון נמצא בזכרון המטמון ) ( HITנעבוד איתו ,אחרת יש צורך להביאו מהזכרון הראשי ) . ( MISS – Valid Bitבכדי לדעת האם הנתונים בזכרון המטמון מעודכנים )בתחילה ישנם ביטים אקראיים( נחזיק ביט עבור כל בלוק בזכרון המטמון שיגדיר האם בלוק זה מעודכן או לא ) .סה"כ נחזיק ביטים ככמות הבלוקים( דוגמא : נניח שכל בלוק מכיל 128מילים בנות 32ביט כ"א .נניח שגודל ה cacheהינו 4בלוקים .במקרה זה יהיו 4ביטים שיוגדרו valid bitsויעודכנו כל פעם שנביא נתונים מהזיכרון הראשי לזכרון המטמון. זמני ריצה אופייניים : לצורך הדיון והשוואה של ביצועים נשתמש בהנחות הבאות: ⎧CPU ⇔ Cache = 0.1T ⎨ word ⎩CPU ⇔ memory = 1T block {memory ⇔ Cache = 10T 1 פגיעה HIT קריאה : זמן ביצוע 0.1T כתיבה : כאשר אנו כותבים לזכרון המטמון ,הוא כבר לא מכיל את אותם הנתונים כמו הזכרון הראשי ולכן יש צורך לבצע עידכון ,ישנן שתי שיטות בעבודה במצב של : HIT :Write Backבשיטה זו נכתוב את השינוי רק ב cacheולא בזכרון הראשי ,לפני ביצוע החלפה של בלוק זה בבלוק אחר מהזיכרון הראשי נעדכן את הזיכרון הראשי .לצורך מימוש עבודה בשיטה זו יש צורך ב dirty bitעבור כל בלוק בכדי לדעת האם הוא השתנה או לא. זמן ביצוע HITבמקרה זה הינו 0.1T : Write Throughבשיטה זו נכתוב את השינוי גם ב cacheוגם בזכרון הראשי .לכן אין צורך במנגנון המתריע על שינוי בין הזיכרון הראשי לזכרון המטמון משום שהם מעודכנים יחד. בשיטה זו לא נרוויח את ביצועי הזכרון . זמן ביצוע HITבמקרה זה הינו T החטאה MISS קריאה : בזמן קריאה במקרה של Missישנן שתי אפשרויות: :Reread בשיטה זו – במקרה של החטאה ,נביא את כל הבלוק לתוך זיכרון המטמון .ולאחר מכן נבצע קריאה מחדש ) כמובן עכשיו תהייה פגיעה( זמן ביצוע ( miss+hit ) 10.1T :No Reread בשיטה זו – במקרה של החטאה ,נביא את כל הבלוק מהזיכרון הראשי לזיכרון המטמון . אך בניגוד שליטה הקודמת ) - ( Rereadנביא את המילה ל CPUמיד עם הגעתה ל cacheואז נשלים את הבאת כל הבלוק לתוך זיכרון המטמון . זמן ביצוע במקרה הגרוע ( Main-> Cache , Cache -> CPU ) 10.1T : במקרה הממוצע זמן הביצוע יהיה מהיר יותר – לצורך חישוב מהו הזמן המדוייק יש צורך בנתונים נוספים. במקרה של שאלה בבחינה – ) אלא אם כן נאמר אחרת( – יש לקחת את הזמן הגרוע קרי . 10.1T : Read Throughבשיטה זו נקרא את הנתון ישירות מהזיכרון הראשי זמן ביצוע - 1Tבשיטה זו לא נרוויח את ביצועי הזכרון . ) שיטה זו לא הובאה בתרגול( . 2 החטאה – MISSהמשך כתיבה : בזמן כתיבה במקרה של Missנדבר על שתי אפשרויות: :Write allocate בשיטה זו – במקרה של החטאה ,נביא את הבלוק מהזכרון הראשי לזיכרון מטמון ,לאחר מכן נכתוב לזיכרון מטמון ונעדכן את ה – dirty bitכמו ב . write back זמן ביצוע ( miss+hit ) 10.1T זמן ביצוע + miss+hit ) 20.1Tאם דרסנו ( dirty bit ==1 :Write no allocate בשיטה זו – במקרה של החטאה ,לא נביא את הבלוק מהזכרון הראשי לזיכרון מטמון,אלא נכתוב ישר לזיכרון הראשי כמו . write throughזמן ביצוע T 3 מדיניות החלפת בלוקים כאשר זיכרון המטמון מלא ,ואנו מעוניינים בהבאת בלוק חדש – יש צורך בהחלפת אחד הבלוקים הקודמים. :LRU – Least recently used בשיטה זו –הבלוק שיוחלף הינו הבלוק שלא היה בו שימוש )הזמן הארוך ביותר לעומת האחרים( . על מנת לממש שיטה זו יש להחזיק מונה עבור כל אחד מהבלוקים ב , cacheאשר יקודם ב 1בכל זמן נתון וכאשר תתבצע פנייה מהזיכרון – המונה יאופס. במקרה זה נחליף את הבלוק עם המונה הגדול ביותר. :FIFO – first in first out בשיטה זו –הבלוק שיוחלף הינו הבלוק הראשון שנכנס לזיכרון ,ניתן למימוש בקלות על ידי תור. :Random הבלוק שמוחלף נבחר אקראית ע"י המערכת. תרגיל: נתןן מערך בזיכרון הראשי המכיל 9בלוקים .כל בלוק מכיל 128מילים .המערך מתחיל בכתובת 0 בזיכרון .זיכרון מטמון הינו בגודל 4בלוקים . זמני גישה : ⎧CPU ⇔ Cache = 0.1T ⎨ word ⎩CPU ⇔ memory = 1T block {memory ⇔ Cache = 10T נתונה התוכנית הבאה: 1151 )] R[32] ← ∑ (M [4i ]and M [4604 − 4i i =0 חשב את ההבדלים בביצוע התוכנית עם ובלי cacheוגם Tavעבור מדיניות החלפה : LRU א( FIFO ב( 4 :פתרון מילים ולכן קטע זיכרון זה מכיל9 × 128 = 1152 בלוקים ישנם9 ב, תאי זיכרון4 כל מילה הינה . תאי זיכרון1152 × 4 = 4608 : LRU במדיניותcache א( מהלך הפעולות בזיכרון Block1 Block2 Block3 Block4 Miss Hit 1 0 ? ? ? 1 0 2 0 8 ? ? 1 2*127 H R = Hit 3 0 8 1 ? 1 0 4 0 8 1 7 1 2*127 5 2 8 1 7 1 0 6 2 6 1 7 1 2*127 7 2 6 3 7 1 0 8 2 6 3 5 1 2*127 9 4 6 3 5 1 127+ 128+ 2*128 10 4 2 3 5 1 0 11 6 2 3 5 1 2*127 12 6 2 1 5 1 0 13 6 2 1 7 1 2*127 14 0 2 1 7 1 0 15 0 8 1 7 1 2*127 hits = 1− M R total requests + Tav _ write ⋅ Pwrite Ratio = Tav = Tav _ read ⋅ Pread Tav _ read = H R ⋅ 0.1T + M R ⋅ 10.1T speed _ up = T Tav :( LRU ) בתרגיל זה 15 = 0.993 2 ⋅ 1152 = 0.993 ⋅ 0.1T + 0.007 ⋅ 10.1T = 0.17T HR = 1− M R = 1− Tav _ read speed _ up = T = 5.88 0.17T : FIFO במדיניותcache ב( מהלך הפעולות בזיכרון 1 0 ? ? ? 1 0 Block1 Block2 Block3 Block4 Miss Hit 2 0 8 ? ? 1 2*127 3 0 8 1 ? 1 0 4 0 8 1 7 1 2*127 5 2 8 1 7 1 0 6 2 6 1 7 1 2*127 7 2 6 3 7 1 0 8 2 6 3 5 1 2*127 9 4 6 3 5 1 127+ 128+ 2*128 10 4 2 3 5 1 0 11 4 2 6 5 1 2*127 .. ' וקיבלנו פתרון זהה לסעיף אH R = 1 − M R = 1 − 5 12 4 2 6 7 1 0 13 1 2 6 7 1 2*127 14 1 8 6 7 1 0 15 = 0.993 2 ⋅ 1152 15 1 8 0 7 1 2*127
© Copyright 2024