Tutorials #4-#5 Controller + DataPath design – © Yohai Devir 2007 Technion - IIT
Controller & DP DP = מסלול נתונים זיכרון כלים (לוגיקה צירופית) נתב Controller = בקר "מוח המערכת" פלט קלט אותות בקרה אותות סטטוס – © Dima Elenbogen :54 פלט
Register רגיסטר = מערך של FF DQ רגיסטר לא מותנה DQ רגיסטר מותנה load – © Dima Elenbogen :54
Computing N! #1 – pseudo-Code i = N; result = 1; while (i > 1) { result = result * i; i = i - 1; } done = 1; output(result); – © Yohai Devir 2007 Technion - IIT
Computing N! (2) #1 – pseudo-Code i = N; result = 1; while (i > 1) { result = result * i; i = i - 1; } done = 1; output(result); i = N; result = 1; LOOP:if (i ≤ 1) goto END; result = result * i; i = i - 1; goto LOOP; END:done = 1; output(result); © Yohai Devir 2007 Technion - IIT© Dima Elenbogen 2009
Computing N! (3) #2 – finding variables i = N; result = 1; while (i > 1){ result = result * i; i = i - 1; } done = 1; output(result); © Yohai Devir 2007 Technion - IIT© Dima Elenbogen 2009
Computing N! (4) #3 – operations i = N; result = 1; while (i > 1) { result = result * i; i = i - 1; } done = 1; output(result); © Yohai Devir 2007 Technion - IIT© Dima Elenbogen 2009 GR
Computing N! (8) The Datapath i = N; result = 1; while (i > 1) { result = result * i; i = i - 1; } done = 1; output(result); © Yohai Devir 2007 Technion - IIT© Dima Elenbogen 2009 ld_resld_i sel_isel_res GR out
ld_resld_i sel_isel_res GR out Computing N! (9) Datapath Flow Chart – what operations can be done in parallel ? i = N; result = 1; while (i > 1) { result = result * i; i = i - 1; } done = 1; output(result); (0) i = N result = © Yohai Devir 2007 Technion - IIT© Dima Elenbogen 2009
Computing N! (10) Datapath Flow Chart – what operations can be done in parallel ? i = N; result = 1; while (i > 1) { result = result * i; i = i - 1; } done = 1; output(result); (0) i = N result = 1 (1) (i – 1) > 0 ? © Yohai Devir 2007 Technion - IIT© Dima Elenbogen 2009 Yes No
Computing N! (11) Datapath Flow Chart – which operations can be done in parallel ? i = N; result = 1; while (i > 1) { result = result * i; i = i - 1; } done = 1; output(result); (0) i = N result = 1 (1) (i – 1) > 0 ? (2) result = result * i (3) i = i © Yohai Devir 2007 Technion - IIT© Dima Elenbogen 2009 Yes No
Computing N! (12) Datapath Flow Chart – which operations can be done in parallel ? i = N; result = 1; while (i > 1) { result = result * i; i = i - 1; } done = 1; output(result); (0) i = N result = 1 (1) (i – 1) > 0 ? ניתן למזג © Yohai Devir 2007 Technion - IIT© Dima Elenbogen 2009 (2) result = result * i (3) i = i - 1 Yes No
Computing N! (13) Datapath Flow Chart – which operations can be done in parallel ? i = N; result = 1; while (i > 1) { result = result * i; i = i - 1; } done = 1; output(result); (0) i = N result = 1 (1) (i – 1) > 0? (2) result=result*i i = i © Yohai Devir 2007 Technion - IIT© Dima Elenbogen 2009 Yes No
Computing N! (14) Datapath Flow Chart – which operations can be done in parallel ? i = N; result = 1; while (i > 1) { result = result * i; i = i - 1; } done = 1; output(result); (0) i = N result = 1 (1) (i – 1) > 0? (2) result=result*i i = i © Yohai Devir 2007 Technion - IIT© Dima Elenbogen 2009 האם ניתן להפוך את סדר השורות? Yes No
Off the Record (1) אילו ע''פי האלגוריתם סדר השורות בגוף הלולאה היה במקור הפוך, האם עדיין היינו יכולים לבצע את גוף הלולאה במחזור יחיד? © Dima Elenbogen 2010 Technion - IIT... while (i > 1) { i = i - 1; result = result * i; }... ld_resld_i sel_isel_res GR out
... while (i > 1) { i = i - 1; result = result * i; }... אילו ע''פי האלגוריתם סדר השורות בגוף הלולאה היה במקור הפוך, האם עדיין היינו יכולים לבצע את גוף הלולאה במחזור יחיד? לא אם אסור לשנות את מסלול הנתונים © Dima Elenbogen 2010 Technion - IIT Off the Record (2) ld_resld_i sel_isel_res GR out
... while (i > 1) { i = i - 1; result = result * i; }... אילו ע''פי האלגוריתם סדר השורות בגוף הלולאה היה במקור הפוך, האם עדיין היינו יכולים לבצע את גוף הלולאה במחזור יחיד? כן אם מותר לשנות את מסלול הנתונים ולהזין את הערך החדש של i ישירות מהמחסר © Dima Elenbogen 2010 Technion - IIT Off the Record (3) ld_resld_i sel_isel_res GR out
Computing N! (15) בקר – תרשים זרימה (0) i = N result = 1 (1) (i – 1) > 0? (2) result=result*i i = i - 1 (3) Yes No (0) (1) (2) (3) © Yohai Devir 2007 Technion - IIT© Dima Elenbogen 2009
? Computing N! (16) בקר – דיאגרמת מצבים (0) i = N result = 1 (1) (i – 1) > 0 ? (2) result=result*i i = i - 1 (3) Yes No ld_i, ld_res sel_res = 0 sel_i = 0 ? ? ? © Yohai Devir 2007 Technion - IIT© Dima Elenbogen 2009
Computing N! (17) (0) i = N result = 1 (1) (i – 1) > 0 ? (2) result=result*i i = i - 1 (3) © Yohai Devir 2007 Technion - IIT© Dima Elenbogen 2009 ld_i, ld_res sel_res = 0 sel_i = 0 ? ? gr בקר – דיאגרמת מצבים Yes No
Computing N! (18) (0) i = N result = 1 (1) (i – 1) > 0 ? (2) result=result*i i = i - 1 (3) © Yohai Devir 2007 Technion - IIT© Dima Elenbogen 2009 ld_i, ld_res sel_res = 0 sel_i = 0 ld_i ld_res sel_res = 1 sel_i = 1 ? gr בקר – דיאגרמת מצבים Yes No
Computing N! (19) בקר – דיאגרמת מצבים (0) i = N result = 1 (1) (i – 1) > 0 ? (2) result=result*i i = i - 1 (3) © Yohai Devir 2007 Technion - IIT© Dima Elenbogen 2009 ld_i, ld_res sel_res = 0 sel_i = 0 ld_i ld_res sel_res = 1 sel_i = 1 done gr Yes No
Computing N! (20) מהו סוג הבקר? Mealy Moore © Yohai Devir 2007 Technion - IIT© Dima Elenbogen 2009 ld_i, ld_res sel_res = 0 sel_i = 0 ld_i ld_res sel_res = 1 sel_i = 1 done gr
Computing N! (20) מהו סוג הבקר? Mealy Moore ld_i, ld_res sel_res = 0 sel_i = 0 ld_i ld_res sel_res = 1 sel_i = 1 done © Yohai Devir 2007 Technion - IIT© Dima Elenbogen 2009 gr
Computing N! (21) בקר – מימוש ld_i, ld_res sel_res = 0 sel_i = 0 ld_i ld_res sel_res = 1 sel_i = 1 done © Yohai Devir 2007 Technion - IIT© Dima Elenbogen 2009 gr
Computing N! (22) בקר – מימוש CS Sel_iLoad_iSel_resLoad_resDone © Yohai Devir 2007 Technion - IIT© Dima Elenbogen 2009 ld_i, ld_res sel_res = 0 sel_i = 0 ld_i ld_res sel_res = 1 sel_i = 1 done gr
© Yohai Devir 2007 Technion - IIT© Dima Elenbogen 2009 Computing N! (23) CONTROL + DP External Clock
Computing N! (24) © Yohai Devir 2007 Technion - IIT© Dima Elenbogen 2009
DP signalsControl signals Comment Niresi-1i*resGRCSNSsel i sel res load i load res done 13?? CS Sel_iLoad_iSel_resLoad_resDone
DP signalsControl signals Comment Niresi-1i*resGRCSNSsel i sel res load i load res done 13?? CS Sel_iLoad_iSel_resLoad_resDone
DP signalsControl signals Comment Niresi-1i*resGRCSNSsel i sel res load i load res done 13????? i N; res CS Sel_iLoad_iSel_resLoad_resDone
DP signalsControl signals Comment Niresi-1i*resGRCSNSsel i sel res load i load res done 13????? i N; res CS Sel_iLoad_iSel_resLoad_resDone
DP signalsControl signals Comment Niresi-1i*resGRCSNSsel i sel res load i load res done 13????? i N; res CS Sel_iLoad_iSel_resLoad_resDone
DP signalsControl signals Comment Niresi-1i*resGRCSNSsel i sel res load i load res done 13????? i N; res CS Sel_iLoad_iSel_resLoad_resDone
DP signalsControl signals Comment Niresi-1i*resGRCSNSsel i sel res load i load res done 13????? i N; res i=1? CS Sel_iLoad_iSel_resLoad_resDone
DP signalsControl signals Comment Niresi-1i*resGRCSNSsel i sel res load i load res done 13????? i N; res 1 2Ø i=1? CS Sel_iLoad_iSel_resLoad_resDone
DP signalsControl signals Comment Niresi-1i*resGRCSNSsel i sel res load i load res done 13????? i N; res 1 2Ø i=1? CS Sel_iLoad_iSel_resLoad_resDone
DP signalsControl signals Comment Niresi-1i*resGRCSNSsel i sel res load i load res done 13????? i N; res 1 2Ø i=1? CS Sel_iLoad_iSel_resLoad_resDone
DP signalsControl signals Comment Niresi-1i*resGRCSNSsel i sel res load i load res done 13????? i N; res 1 2Ø i=1? CS Sel_iLoad_iSel_resLoad_resDone
DP signalsControl signals Comment Niresi-1i*resGRCSNSsel i sel res load i load res done 13????? i N; res 1 2Ø i=1? 3Ø res i*res i i CS Sel_iLoad_iSel_resLoad_resDone
DP signalsControl signals Comment Niresi-1i*resGRCSNSsel i sel res load i load res done 13????? i N; res 1 2Ø i=1? 3Ø res i*res i i-1 4Ø i=1? 5Ø res i*res i i-1 6Ø i=1? 7Ø done 8Ø done CS Sel_iLoad_iSel_resLoad_resDone
– © Yohai Devir 2007 Technion - IIT Another example
– © Yohai Devir 2007 Technion - IIT 2 nd example - hardware i = N; K = 2; while (i / K >= K) { If (i % K == 0) { i = i + 1; K = 2; } else { K = K + 1; } done = 1; output (i);
– © Yohai Devir 2007 Technion - IIT 2 nd example - hardware i = N; K = 2; while (i / K >= K) { If (i % K == 0) { i = i + 1; K = 2; } else { K = K + 1; } done = 1; output (i);
– © Yohai Devir 2007 Technion - IIT 2 nd example - hardware i = N; K = 2; while (i / K >= K) { If (i % K == 0) { i = i + 1; K = 2; } else { K = K + 1; } done = 1; output (i);
– © Yohai Devir 2007 Technion - IIT i = N; K = 2; while (i / K >= K) { If (i % K == 0) { i = i + 1; K = 2; } else { K = K + 1; } done = 1; output (i);
– © Yohai Devir 2007 Technion - IIT i = N; K = 2; while (i / K >= K) { If (i % K == 0) { i = i + 1; K = 2; } else { K = K + 1; } done = 1; output (i);
– © Yohai Devir 2007 Technion - IIT i = N; K = 2; while (i / K >= K) { If (i % K == 0) { i = i + 1; K = 2; } else { K = K + 1; } done = 1; output (i);
– © Yohai Devir 2007 Technion - IIT i = N; K = 2; while (i / K >= K) { If (i % K == 0) { i = i + 1; K = 2; } else { K = K + 1; } done = 1; output (i);
– © Yohai Devir 2007 Technion - IIT i = N; K = 2; while (i / K >= K) { If (i % K == 0) { i = i + 1; K = 2; } else { K = K + 1; } done = 1; output (i);
– © Yohai Devir 2007 Technion - IIT
– © Yohai Devir 2007 Technion - IIT