300 likes | 495 Views
D. a. t. a. R. e. g. i. s. t. e. r. #. A. d. d. r. e. s. s. P. C. I. n. s. t. r. u. c. t. i. o. n. R. e. g. i. s. t. e. r. s. A. L. U. A. d. d. r. e. s. s. R. e. g. i. s. t. e. r. #. I. n. s. t. r. u. c. t. i. o. n. D. a. t.
E N D
D a t a R e g i s t e r # A d d r e s s P C I n s t r u c t i o n R e g i s t e r s A L U A d d r e s s R e g i s t e r # I n s t r u c t i o n D a t a m e m o r y m e m o r y R e g i s t e r # D a t a מרכיבי מסלול הנתונים • זיכרון פקודות (Read Only, חוץ מזמן טעינת תכנית חדשה) • זיכרון נתונים (Read / Write) • רגיסטרים • Program counter (PC) • ALU December 2013
R e g i s t e r n u m b e r W r i t e E enable 0 R e g i s t e r 0 1 D n-to-1 log n R e g i s t e r E selector to-n n u m b e r d e c o d e r R e g i s t e r 1 D n – 2 n – 1 E R e g i s t e r n – 2 n-to-1 D selector E R e g i s t e r n – 1 R e g i s t e r D d a t a R e g i s t e r n u m b e r A General Register File כתובת רגיסטר לכתיבה כתובת רגיסטר לקריאה תוכן לכתיבה כתובת רגיסטר לקריאה תוכן נקרא December 2013
R e g i s t e r R e g i s t e r Register Files (Read Ports) R e a d r e g i s t e r n u m b e r 1 R e g i s t e r 0 R e g i s t e r 1 M u R e a d d a t a 1 x n-2 n-1 R e a d r e g i s t e r n u m b e r 2 M u R e a d d a t a 2 x December 2013
Register Files (Write Port) W r i t e E 0 R e g i s t e r 0 1 D n - t o - 1 E R e g i s t e r n u m b e r d e c o d e r R e g i s t e r 1 D n-2 n-1 E R e g i s t e r n-2 D E R e g i s t e r n-1 D R e g i s t e r d a t a December 2013
MIPS Register File December 2013
ביצוע פקודות בשלבים • מסלול הנתונים ממומש כמכונת מצבים • ביצוע פקודה מחזור שעון אחד • אבל במהלך הביצוע לא הכול קורה בו זמנית. ניתן להבחין בשלבים שונים הקורים זה אחר זה • נבחן כל שלב בנפרד. • מאוחר יותר נשנה את המכונה כך שכל שלב יתבצע במחזור שעון נפרד • במכונה שבה כל פקודה מתבצעת במספר מחזורי שעון • במכונה עם pipeline December 2013
Instruction memory PC op rs rt rd shamt funct שני השלבים הראשונים זהים לכל הפקודות • FETCH – הבאת הפקודה שה-PC מצביע עליה מזיכרון הפקודות • DECODE– פענוח הפקודה ו-READ – קריאת 0,1 או 2 רגיסטרים, בהתאם לפקודה. December 2013
A d d 4 R e a d P C a d d r e s s I n s t r u c t i o n I n s t r u c t i o n m e m o r y הבאת פקודה והגדלת ה-PC ב-4 December 2013
Op=0 Rs=10 Rt=11 Rd=9 Shamt=0 Funct=32 פענוח הפקודה • פענוח פקודה מסוג R-type: add $t1, $t2, $t3 פעולת ה ALUהינה תוצאה של Op ו Func A L U c o n t r o l 5 3 R e a d r e g i s t e r 1 R e a d d a t a 1 5 R e g i s t e r R e a d Z e r o r e g i s t e r 2 n u m b e r s R e g i s t e r s D a t a A L U A L U 5 W r i t e r e s u l t r e g i s t e r R e a d d a t a 2 W r i t e D a t a d a t a R e g W r i t e a . R e g i s t e r s b . A L U December 2013
base Reg temp Reg offset Op=35 Rs=9 Rt=8 Address offset=100 תמיכה ב-load, store במסלול הנתונים • דוגמה: lw $t0, 100($t1) A L U o p e r a t i o n 3 R e a d r e g i s t e r 1 M e m W r i t e R e a d d a t a 1 R e a d Z e r o r e g i s t e r 2 I n s t r u c t i o n A L U R e g i s t e r s A L U R e a d W r i t e r e s u l t A d d r e s s d a t a r e g i s t e r R e a d d a t a 2 W r i t e D a t a d a t a m e m o r y W r i t e R e g W r i t e d a t a 1 6 3 2 S i g n M e m R e a d e x t e n d December 2013
words bytes P C + 4 f r o m i n s t r u c t i o n d a t a p a t h A d d S u m B r a n c h t a r g e t S h i f t l e f t 2 A L U o p e r a t i o n 3 R e a d r e g i s t e r 1 I n s t r u c t i o n R e a d d a t a 1 R e a d r e g i s t e r 2 T o b r a n c h R e g i s t e r s A L U Z e r o c o n t r o l l o g i c W r i t e r e g i s t e r R e a d d a t a 2 W r i t e Op=4 Rs=8 Rt=9 Address offset=25 d a t a R e g W r i t e 1 6 3 2 S i g n e x t e n d תמיכה בקפיצה מותנית • דוגמה: beq $t0, $t1, 100 • ננצל שוב את העובדה שכתובות של פקודות מסתיימות ב-'00' multiply by 4 December 2013
A L U o p e r a t i o n 3 R e a d r e g i s t e r 1 M e m W r i t e R e a d d a t a 1 M e m t o R e g R e a d A L U S r c Z e r o r e g i s t e r 2 I n s t r u c t i o n R e g i s t e r s A L U R e a d A L U R e a d W r i t e d a t a 2 A d d r e s s r e s u l t d a t a r e g i s t e r M M u u W r i t e x D a t a x d a t a m e m o r y W r i t e R e g W r i t e d a t a 1 6 3 2 S i g n M e m R e a d e x t e n d שילוב חלקי מסלול הנתונים • החלקים התומכים ב- add/sub וב- lw/swמשולבים בעזרת בוררים (mux): December 2013
next instruction P C S r c M A d d u x A L U A d d 4 r e s u l t S h i f t l e f t 2 R e g i s t e r s A L U o p e r a t i o n 3 R e a d M e m W r i t e A L U S r c R e a d r e g i s t e r 1 P C R e a d a d d r e s s R e a d M e m t o R e g d a t a 1 Z e r o r e g i s t e r 2 I n s t r u c t i o n A L U A L U R e a d W r i t e R e a d A d d r e s s r e s u l t M d a t a r e g i s t e r d a t a 2 M u I n s t r u c t i o n u x W r i t e m e m o r y D a t a x d a t a m e m o r y W r i t e R e g W r i t e d a t a 3 2 1 6 S i g n M e m R e a d e x t e n d שילוב התמיכה בקפיצות מותנות sequential December 2013
P C S r c 0 M A d d u x A L U 1 4 A d d r e s u l t S h i f t R e g W r i t e l e f t 2 I n s t r u c t i o n [ 2 5 – 2 1 ] R e a d r e g i s t e r 1 R e a d M e m W r i t e R e a d P C d a t a 1 I n s t r u c t i o n [ 2 0 – 1 6 ] a d d r e s s R e a d M e m t o R e g A L U S r c r e g i s t e r 2 Z e r o I n s t r u c t i o n R e a d 0 A L U A L U [ 3 1 – 0 ] 0 R e a d W r i t e d a t a 2 1 A d d r e s s r e s u l t M r e g i s t e r M d a t a u M I n s t r u c t i o n u I n s t r u c t i o n [ 1 5 – 1 1 ] x W r i t e u x m e m o r y R e g i s t e r s x 1 d a t a 1 D a t a 0 W r i t e m e m o r y R e g D s t d a t a 1 6 3 2 S i g n I n s t r u c t i o n [ 1 5 – 0 ] e x t e n d A L U M e m R e a d c o n t r o l I n s t r u c t i o n [ 5 – 0 ] A L U O p בקרת ALU ובחירת rd / rt כיעד לכתיבה R-type lw / sw December 2013
Op Op Rs Rs Rt Rt Address offset Rd Shamt Funct בקרת ALU • בוחרים מה יעשה ה-ALU כתלות בערכי השדות OP, FUNCT מן הפקודה R-type I-type December 2013
0 M u x A L U A d d 1 r e s u l t A d d S h i f t P C S r c l e f t 2 R e g D s t 4 B r a n c h M e m R e a d M e m t o R e g I n s t r u c t i o n [ 3 1 2 6 ] C o n t r o l A L U O p M e m W r i t e A L U S r c R e g W r i t e I n s t r u c t i o n [ 2 5 2 1 ] R e a d R e a d r e g i s t e r 1 P C R e a d a d d r e s s d a t a 1 I n s t r u c t i o n [ 2 0 1 6 ] R e a d Z e r o r e g i s t e r 2 I n s t r u c t i o n 0 R e g i s t e r s A L U R e a d A L U [ 3 1 – 0 ] 0 R e a d W r i t e A d d r e s s M d a t a 2 r e s u l t 1 d a t a I n s t r u c t i o n r e g i s t e r M u M u m e m o r y x u I n s t r u c t i o n [ 1 5 1 1 ] W r i t e x D a t a 1 x d a t a 1 m e m o r y 0 W r i t e d a t a 1 6 3 2 I n s t r u c t i o n [ 1 5 0 ] S i g n e x t e n d A L U c o n t r o l I n s t r u c t i o n [ 5 0 ] קווי הבקרה לבוררים ו-ALU December 2013
הבקר הראשי • הבקר הראשי משתמש רק בערכי השדה OP לקביעת כל הבוררים December 2013
I n p u t s O p 5 O p 4 O p 3 O p 2 O p 1 O p 0 O u t p u t s R - f o r m a t I w s w b e q R e g D s t A L U S r c M e m t o R e g R e g W r i t e M e m R e a d M e m W r i t e B r a n c h A L U O p 1 A L U O p O מימוש הבקר הראשי 0 35 43 4 December 2013
ביצוע פקודת R-type(1/4) December 2013
ביצוע פקודת R-type(2/4) December 2013
ביצוע פקודת R-type(3/4) December 2013
ביצוע פקודת R-type(4/4) December 2013
word byte הוספת פקודת J • דוגמה: j 10000 • בכתובת אין מספיק סיביות (רק 26—דרושות 32). נשלים ע"י שרשור הסיביות: • 4 סיביות עליונות: PC+4 [31…28] • 26 סיביות מהפקודה • 2 סיביות '00' (ע"י הזזה שמאלה בשני מקומות) Op=2 Jump target address=2500 December 2013
J u m p a d d r e s s [ 3 1 – 0 ] I n s t r u c t i o n [ 2 5 – 0 ] S h i f t l e f t 2 2 6 2 8 0 1 M M P C + 4 [ 3 1 – 2 8 ] u u x x A L U A d d 1 0 r e s u l t A d d S h i f t R e g D s t l e f t 2 J u m p 4 B r a n c h M e m R e a d I n s t r u c t i o n [ 3 1 – 2 6 ] M e m t o R e g C o n t r o l A L U O p M e m W r i t e A L U S r c R e g W r i t e I n s t r u c t i o n [ 2 5 – 2 1 ] R e a d R e a d r e g i s t e r 1 P C R e a d a d d r e s s d a t a 1 I n s t r u c t i o n [ 2 0 – 1 6 ] R e a d Z e r o r e g i s t e r 2 I n s t r u c t i o n 0 R e g i s t e r s A L U R e a d A L U [ 3 1 – 0 ] 0 R e a d W r i t e M d a t a 2 A d d r e s s r e s u l t 1 d a t a I n s t r u c t i o n r e g i s t e r M u M u m e m o r y x u I n s t r u c t i o n [ 1 5 – 1 1 ] W r i t e x 1 D a t a x d a t a 1 m e m o r y 0 W r i t e d a t a 1 6 3 2 I n s t r u c t i o n [ 1 5 – 0 ] S i g n e x t e n d A L U c o n t r o l I n s t r u c t i o n [ 5 – 0 ] הוספת הטיפול ב-JUMP December 2013
PCout INSTR. MEMout CONTROLout REG1,2out ALUout DATA MEMout Only for lw tSU REG DATAin PCin מהלך ביצוע פקודה במימוש מחזור יחיד December 2013
מתי מגיע השעון ? J u m p a d d r e s s [ 3 1 – 0 ] I n s t r u c t i o n [ 2 5 – 0 ] S h i f t l e f t 2 2 8 2 6 0 1 M M P C + 4 [ 3 1 – 2 8 ] u u x x A L U A d d 1 0 r e s u l t A d d S h i f t R e g D s t l e f t 2 J u m p 4 B r a n c h M e m R e a d I n s t r u c t i o n [ 3 1 – 2 6 ] M e m t o R e g C o n t r o l A L U O p M e m W r i t e A L U S r c R e g W r i t e I n s t r u c t i o n [ 2 5 – 2 1 ] R e a d R e a d r e g i s t e r 1 P C R e a d a d d r e s s d a t a 1 I n s t r u c t i o n [ 2 0 – 1 6 ] R e a d Z e r o r e g i s t e r 2 I n s t r u c t i o n 0 R e g i s t e r s A L U R e a d A L U [ 3 1 – 0 ] 0 R e a d W r i t e M d a t a 2 A d d r e s s r e s u l t 1 d a t a I n s t r u c t i o n r e g i s t e r M u M u m e m o r y x u I n s t r u c t i o n [ 1 5 – 1 1 ] t W r i t e x 1 D a t a x d a t a 1 m e m o r y 0 W r i t e d a t a 1 6 3 2 I n s t r u c t i o n [ 1 5 – 0 ] S i g n t+1 e x t e n d A L U c o n t r o l t+1 I n s t r u c t i o n [ 5 – 0 ] December 2013
ביצועי מחשב בעל מחזור שעון יחיד • מחשב בעל מחזור שעון יחיד הוא פשוט לתכנון • אבל זמן המחזור תלוי בזמן הביצוע של פקודה האיטית ביותר... • אילו פקודות מהירות ואילו איטיות? • נבדוק את זמני ההשהיה של היחידות במחשב: • זיכרונות: 2 ns • ALU ומחברים: 2 ns • רגיסטרים: 1 ns • בוררים: 0 ns (באופן מעשי זה יותר) • חוטים: 0 ns (באופן מעשי זה יותר) December 2013
מסלולים קריטיים במחשב December 2013
שיפור הביצועים • המסלול הקריטי בדוגמה 8ns קובע את זמן המחזור • תדר השעון המרבי: 1/8ns = 125 MHz • ניתן להפוך את המחשב ל-pipeline • ילמד בהמשך הסמסטר • שיטה אחרת אפשרית הינה תכנון מסלול נתונים של מספר מחזורי שעון • מה ניתן להרוויח ע"י מספר מחזורי שעון בפקודה? December 2013
פקודות load, store לוקחות זמן רב, ואחרות פחות • אולי כדאי לכתוב תכניות שמכילות פחות פקודות איטיות ויותר פקודות מהירות? • בתכניות רבות יש התפלגות פקודות טיפוסית: • 24% Loads, 12% Stores, 44% ALU, 18% Branches, 2% Jumps • הזמן הממוצע של ביצוע פקודה: 8×24% + 7×12% + 6×44% + 5×18% + 2×2% = 6.3ns • שיפור הביצועים פוטנציאלי: 8ns / 6.3ns = 1.27 December 2013