234262 Tutorials #4-#5 Controller + DataPath design 234262 – © Yohai Devir 2007 Technion - IIT.

Post on 21-Dec-2015

226 views 2 download

Transcript of 234262 Tutorials #4-#5 Controller + DataPath design 234262 – © Yohai Devir 2007 Technion - IIT.

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(