234262 tutorials #4-#5 controller + datapath design 234262 – © yohai devir 2007 technion - iit
Post on 21-Dec-2015
226 views
TRANSCRIPT
234262
Tutorials #4-#5
Controller + DataPath design
234262 – © Yohai Devir 2007Technion - IIT
Controller & DP
DP = מסלולנתונים
זיכרון•
כלים )לוגיקה צירופית(•
נתב•
Controller = בקר "מוח המערכת"
פלט
קלט
אותות בקרה
אותות סטטוס
234262 – © Dima Elenbogen 200910:02 PM
פלט
Register
FF = מערך של רגיסטר
D Q
רגיסטר לא מותנה
D Q
רגיסטר מותנה
load
234262 – © Dima Elenbogen 200910:02 PM
Computing N!
#1 – pseudo-Codei = N;result = 1;while (i > 1) {
result = result * i;i = i - 1;
}done = 1;output(result);
234262 – © Yohai Devir 2007Technion - IIT
Computing N! )2(
#1 – pseudo-Codei = 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);
234262 © Yohai Devir 2007 Technion - IIT © Dima Elenbogen 2009
Computing N! )3(
#2 – finding variablesi = N;result = 1;while (i > 1){
result = result * i;i = i - 1;
}done = 1;output(result);
234262 © 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);
234262 © 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);
234262 © Yohai Devir 2007 Technion - IIT © Dima Elenbogen 2009
ld_resld_i
sel_i sel_res
GR
out
ld_resld_i
sel_i sel_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 = 1
234262 © 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 ?
234262 © Yohai Devir 2007 Technion - IIT © Dima Elenbogen 2009
Yes
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 - 1
234262 © Yohai Devir 2007 Technion - IIT © Dima Elenbogen 2009
Yes
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 ?
ניתן למזג
234262 © Yohai Devir 2007 Technion - IIT © Dima Elenbogen 2009
)2(
result =
result * i
)3(
i = i - 1
Yes
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 - 1
234262 © Yohai Devir 2007 Technion - IIT © Dima Elenbogen 2009
Yes
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 - 1
234262 © Yohai Devir 2007 Technion - IIT © Dima Elenbogen 2009
האם ניתן להפוך את
סדר ?השורות
Yes
Off the Record )1(
היה הלולאה בגוף השורות סדר האלגוריתם ע''פי אילו גוף את לבצע יכולים היינו עדיין האם הפוך, במקור
הלולאה במחזור יחיד?
234262 © Dima Elenbogen 2010 Technion - IIT
...while (i > 1) {
i = i - 1;
result = result * i;}...
ld_resld_i
sel_i sel_res
GR
out
...while (i > 1) {
i = i - 1;
result = result * i;}...
היה הלולאה בגוף השורות סדר האלגוריתם ע''פי אילו גוף את לבצע יכולים היינו עדיין האם הפוך, במקור
הלולאה במחזור יחיד?
לאאם אסור לשנות את מסלול
הנתונים.
234262 © Dima Elenbogen 2010 Technion - IIT
Off the Record )2(
ld_resld_i
sel_i sel_res
GR
out
...while (i > 1) {
i = i - 1;
result = result * i;}...
היה הלולאה בגוף השורות סדר האלגוריתם ע''פי אילו גוף את לבצע יכולים היינו עדיין האם הפוך, במקור
הלולאה במחזור יחיד?
כן אם מותר לשנות את מסלול
הנתונים ולהזין את הערך ישירות מהמחסרiהחדש של
234262 © Dima Elenbogen 2010 Technion - IIT
Off the Record )3(
ld_resld_i
sel_i sel_res
GR
out
Computing N! )15( – תרשים זרימהבקר
)0(
i = N
result = 1
)1(
)i – 1( > 0?
)2(
result=result*i
i = i - 1
)3(
Yes
)0(
)1(
)2(
)3(
234262 © 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
ld_i,
ld_res
sel_res = 0
sel_i = 0
?
?
?
0
1
2
3
234262 © 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(
234262 © Yohai Devir 2007 Technion - IIT © Dima Elenbogen 2009
ld_i,
ld_res
sel_res = 0
sel_i = 0
?
?
gr
0
1
2
3
gr
– דיאגרמת מצביםבקר
Yes
Computing N! )18(
)0(
i = N
result = 1
)1(
)i – 1( > 0 ?
)2(
result=result*i
i = i - 1
)3(
234262 © 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
?
0
1
2
3
gr
gr
– דיאגרמת מצביםבקר
Yes
Computing N! )19(
– דיאגרמת מצביםבקר
)0(
i = N
result = 1
)1(
)i – 1( > 0 ?
)2(
result=result*i
i = i - 1
)3(
234262 © 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
0
1
2
3
gr
gr
Yes
Computing N! )20(
מהו סוג הבקר? Mealy Moore
234262 © 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
0
1
2
3
gr
gr
Computing N! )20(
ld_i,
ld_res
sel_res = 0
sel_i = 0
ld_i
ld_res
sel_res = 1
sel_i = 1
done
0
1
2
3
234262 © Yohai Devir 2007 Technion - IIT © Dima Elenbogen 2009
gr
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
0
1
2
3
234262 © Yohai Devir 2007 Technion - IIT © Dima Elenbogen 2009
gr
gr
Computing N! )22(
– מימושבקר
CS Sel_i Load_i Sel_res Load_res Done
00 0 1 0 1 0
01 0 0 0 0 0
10 1 1 1 1 0
11 0 0 0 0 1
234262 © 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
0
1
2
3
gr
gr
234262 © Yohai Devir 2007 Technion - IIT © Dima Elenbogen 2009
Computing N! )23(
CONTROL + DP
CONTROL
DATA PATH
GR
SEL_I
Sel_res
Load_i
Load_res
Result N
done
External Clock
Computing N! )24(
234262 © Yohai Devir 2007 Technion - IIT © Dima Elenbogen 2009
DP signals Control signals Comment N i res i-1 i*res GR CS NS seli selres loadi loadres done
1 3 ? ? 00
2
345678
CS Sel_i Load_i Sel_res Load_res Done
00 0 1 0 1 0
01 0 0 0 0 0
10 1 1 1 1 0
11 0 0 0 0 1
DP signals Control signals Comment N i res i-1 i*res GR CS NS seli selres loadi loadres done
1 3 ? ? 00 0 0 1 1 0
2
345678
CS Sel_i Load_i Sel_res Load_res Done
00 0 1 0 1 0
01 0 0 0 0 0
10 1 1 1 1 0
11 0 0 0 0 1
DP signals Control signals Comment N i res i-1 i*res GR CS NS seli selres loadi loadres done
1 3 ? ? ? ? ? 00 0 0 1 1 0 iN; res 1
2
345678
CS Sel_i Load_i Sel_res Load_res Done
00 0 1 0 1 0
01 0 0 0 0 0
10 1 1 1 1 0
11 0 0 0 0 1
DP signals Control signals Comment N i res i-1 i*res GR CS NS seli selres loadi loadres done
1 3 ? ? ? ? ? 00 01 0 0 1 1 0 iN; res 1
2
345678
CS Sel_i Load_i Sel_res Load_res Done
00 0 1 0 1 0
01 0 0 0 0 0
10 1 1 1 1 0
11 0 0 0 0 1
DP signals Control signals Comment N i res i-1 i*res GR CS NS seli selres loadi loadres done
1 3 ? ? ? ? ? 00 01 0 0 1 1 0 iN; res 1
2 01
345678
CS Sel_i Load_i Sel_res Load_res Done
00 0 1 0 1 0
01 0 0 0 0 0
10 1 1 1 1 0
11 0 0 0 0 1
DP signals Control signals Comment N i res i-1 i*res GR CS NS seli selres loadi loadres done
1 3 ? ? ? ? ? 00 01 0 0 1 1 0 iN; res 1
2 3 1 01
345678
CS Sel_i Load_i Sel_res Load_res Done
00 0 1 0 1 0
01 0 0 0 0 0
10 1 1 1 1 0
11 0 0 0 0 1
DP signals Control signals Comment N i res i-1 i*res GR CS NS seli selres loadi loadres done
1 3 ? ? ? ? ? 00 01 0 0 1 1 0 iN; res 1
2 3 1 01 0 0 0 0 0 i=1?
345678
CS Sel_i Load_i Sel_res Load_res Done
00 0 1 0 1 0
01 0 0 0 0 0
10 1 1 1 1 0
11 0 0 0 0 1
DP signals Control signals Comment N i res i-1 i*res GR CS NS seli selres loadi loadres done
1 3 ? ? ? ? ? 00 01 0 0 1 1 0 iN; res 1
2 Ø 3 1 2 3 01 0 0 0 0 0 i=1?
345678
CS Sel_i Load_i Sel_res Load_res Done
00 0 1 0 1 0
01 0 0 0 0 0
10 1 1 1 1 0
11 0 0 0 0 1
DP signals Control signals Comment N i res i-1 i*res GR CS NS seli selres loadi loadres done
1 3 ? ? ? ? ? 00 01 0 0 1 1 0 iN; res 1
2 Ø 3 1 2 3 1 01 0 0 0 0 0 i=1?
345678
CS Sel_i Load_i Sel_res Load_res Done
00 0 1 0 1 0
01 0 0 0 0 0
10 1 1 1 1 0
11 0 0 0 0 1
DP signals Control signals Comment N i res i-1 i*res GR CS NS seli selres loadi loadres done
1 3 ? ? ? ? ? 00 01 0 0 1 1 0 iN; res 1
2 Ø 3 1 2 2 1 01 10 0 0 0 0 0 i=1?
345678
CS Sel_i Load_i Sel_res Load_res Done
00 0 1 0 1 0
01 0 0 0 0 0
10 1 1 1 1 0
11 0 0 0 0 1
DP signals Control signals Comment N i res i-1 i*res GR CS NS seli selres loadi loadres done
1 3 ? ? ? ? ? 00 01 0 0 1 1 0 iN; res 1
2 Ø 3 1 2 3 1 01 10 0 0 0 0 0 i=1?
3 3 1 1045678
CS Sel_i Load_i Sel_res Load_res Done
00 0 1 0 1 0
01 0 0 0 0 0
10 1 1 1 1 0
11 0 0 0 0 1
DP signals Control signals Comment N i res i-1 i*res GR CS NS seli selres loadi loadres done
1 3 ? ? ? ? ? 00 01 0 0 1 1 0 iN; res 1
2 Ø 3 1 2 3 1 01 10 0 0 0 0 0 i=1?
3 Ø 3 1 2 3 1 10 01 1 1 1 1 0resi*res
ii-1
45678
CS Sel_i Load_i Sel_res Load_res Done
00 0 1 0 1 0
01 0 0 0 0 0
10 1 1 1 1 0
11 0 0 0 0 1
DP signals Control signals Comment N i res i-1 i*res GR CS NS seli selres loadi loadres done
1 3 ? ? ? ? ? 00 01 0 0 1 1 0 iN; res 1
2 Ø 3 1 2 3 1 01 10 0 0 0 0 0 i=1?
3 Ø 3 1 2 3 1 10 01 1 1 1 1 0resi*res
ii-1
4 Ø 2 3 1 6 1 01 10 0 0 0 0 0 i=1?
5 Ø 2 3 1 6 1 10 01 1 1 1 1 0resi*res
ii-1
6 Ø 1 6 0 6 0 01 11 0 0 0 0 0 i=1?7 Ø 1 6 0 6 0 11 11 0 0 0 0 1 done8 Ø 1 6 0 6 0 11 11 0 0 0 0 1 done
CS Sel_i Load_i Sel_res Load_res Done
00 0 1 0 1 0
01 0 0 0 0 0
10 1 1 1 1 0
11 0 0 0 0 1
234262 – © Yohai Devir 2007Technion - IIT
Another example
234262 – © Yohai Devir 2007Technion - IIT
2nd example - hardware
DIVIDER
X/Y X%Y
X Y
m m
m m
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);
234262 – © Yohai Devir 2007Technion - IIT
2nd example - hardware
DIVIDER
X/Y X%Y
X Y
m m
m m
COMP
X≥Y X=Y
X Y
m m
+1
X+1
X
m
m
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);
234262 – © Yohai Devir 2007Technion - IIT
2nd example - hardware
DIVIDER
X/Y X%Y
X Y
m m
m m
COMP
X≥Y X=Y
X Y
m m
+1
X+1
X
m
m
Universal Switchi = N;K = 2;while (i / K >= K) {
If (i % K == 0) {i = i + 1;K = 2;
} else {K = K + 1;
}}done = 1;output (i);
234262 – © Yohai Devir 2007Technion - IIT
KLoad_K iLoad_i
Universal Switch
DIVIDER
X/Y X%Y
X Y
COMP
X≥Y X=Y
X Y
+1
X+1
X
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);
234262 – © Yohai Devir 2007Technion - 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);
i =NK =2
234262 – © Yohai Devir 2007Technion - 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);
i =NK =2
i/K >= K?
NO
234262 – © Yohai Devir 2007Technion - 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);
i =NK =2
i/K >= K?
i % K == 0?
NO
YES
YESNO
234262 – © Yohai Devir 2007Technion - 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);
i =NK =2
i/K >= K?
i % K == 0?
NO
YES
i = i + 1K =2
K = K +1
YESNO
234262 – © Yohai Devir 2007Technion - IIT
0 1sel_K
2
KLoad_K
iLoad_i
DIVIDER
x%y x/y
y x
COMP
X≥Y X=Y
y x
m
m
stat1
Stat2
x+1xm
0 1
sel_i
N
0 1sel_y
0
sel_x1 0
1 0sel_incm
m m m
result
m mm
m
mm
m
mm mm
i =NK =2
i/K >= K?
i % K == 0?
NO
YES
i = i + 1K =2
K = K +1
YESNO
234262 – © Yohai Devir 2007Technion - IIT
0 1sel_K
2
KLoad_K
iLoad_i
DIVIDER
x%y x/y
y x
COMP
X≥Y X=Y
y x
m
m
stat1
Stat2
x+1xm
0 1
sel_i
N
0 1sel_y
0
sel_x1 0
1 0sel_incm
m m m
result
m mm
m
mm
m
mm mm
i =NK =2
i/K >= K?
i % K == 0?
NO
YES
i = i + 1K =2
K = K +1
YESNO
)0(sel_i=0sel_K=0load_i=1load_K=1
)1(
sel_x=0sel_y=0
)2(
sel_x=1sel_y=1
)5(
Done = 1
NOT)stat1(
stat1
)3(sel_inc=0sel_i=1sel_K=0load_i=1load_K=1
)4(sel_inc=1sel_K=1oad_K=1
stat2NOT)stat2(