پیاده سازی
: (CU) Control Unit
در طرح واحد کنترل، دو روش اساسی وجود دارد که عبارتند از: روش Hard-Wired و روش Microprogrammed . طراح باید از همان ابتدا مشخص کند که از چه روشی برای طراحی واحد کنترل استفاده می نماید. در این آزمایش پردازنده را با استفاده از روش Hard-Wired طراحی کردیم.
- اطلاعاتی که واحد کنترل نیاز دارد تا بر اساس آن ها بتواند سیگنال های کنترلی را برای بخش های درونی و بیرونی پردازنده تولید کند:
1- کد دستورالعمل: واحد کنترل از کد دستورالعمل می فهمد که چه عملیاتی باید در پردازنده اجرا شود. در این پردازنده ساده ما از 4 دستورالعمل ADD,SUB,LOAD,OUT استفاده می کنیم و برای راحت تر شدن پردازش کد دستورالعمل را 4 بیت در نظر می گیریم و کد دستورات را به صورت زیر در نظر می گیریم تا دیگر نیازی به رمزگشایی کد دستورالعمل(Decode) نباشد:
ADD:= 0001 , SUB:=0010 , LOAD:=0100 , OUT:=1000
2- اطلاعات زمانی: که مرحله زمانی اجرای دستورالعمل را نشان می دهد. در پردازنده طراحی شده به زمان های T1.T2…T6 نیاز داریم. با استفاده از یک Sequence Counter زمان های T1 تا T6 را بوجود می آوریم و با کمک Decoder آن را رمزگشایی می کنیم.
واحد کنترل، وظیفه دادن فرامین و هماهنگی های لازم را برای انجام مراحل سه گانه فراخوانی (Fetch)، رمزگشایی ( (Decode و اجرا (Execute) بر عهده دارد.
یک ریزعمل ساده ترین عملیاتی است که در یک پالس زمانی قابل اجراست، پس در هر پالس زمانی باید سیگنال های کنترلی که منجر به انجام ریزعمل مورد نظر می شوند را فعال کنیم.
با نوشتن RTL های مربوط به هر قسمت جدول زیر حاصل می شود.
برای مثال طبق جدول زیربرای عمل جمع به 3 ریزعمل نیاز داریم: اول اینکه آدرسXX به MAR منتقل شود در مرحله دوم مقدار خانه MAR ام حافظه به رجیستر B منتقل شود و در پایان حاصل جمع اکومولاتور و B به اکومولاتور منتقل شود.
Micro operation
Instruction
LO
LB
EU
SU
EA
LA
EI
LI
CE
LM
EP
CP
MAR ß PC
PCß PC+1
IRßM[MAR]
FETCH
T1
T2
T3
MARßXX
BßROM[XX]
AßA+B
ADD
T4
T5
T6
MARßXX
BßROM[XX]
AßA-B
SUB XX
T4
T5 T6
MARßXX
AßROM[XX]
LOAD XX
T4
T5
T6
ßA
OUT
با توجه به جدول مدار واحد کنترل را رسم می کنیم. هر پایه کنترلی در زمان مشخص و برای دستور خاصی فعال می شوند. مثلاً پایه CE زمانی فعال می شود که یا در لحظه T3 باشیم ، یا درT5 و دستور ADD باشیم ، یا درT5 و دستور SUB باشیم و یا درزمانT5 دستور LOAD در حال اجرا باشد. این را به صورت یک OR چهار ورودی که ورودی هایش از T3و خروجی های 3 AND حاصل می شود پیاده سازی می کنیم.
یادآوری می کنم که خروجی Decoder استفاده شده Active low است ، به همین دلیل خروجی های Decoder را NOT کرده سپس آن ها را به عنوان Ti ها استفاده می کنیم.
در نهایت مداری به شکل زیر حاصل می شود.
- برای تست این واحد به صورت مجزا مثلاً ورودی ADDرا به Vcc و SUB وLOAD OUT را به زمین وصل می کنیم. برای اینکه در هر لحظه بدانیم در پالس چندم هستیم، خروجی های Counter را به 7-segment وصل می کنیم. فرکانس clk مدار را به گونه ای تنظیم می کنیم که زمان کافی برای مشاهده نتیجه داشته باشیم. پایه های کنترلی را نیز به LED های روی برد وصل می کنیم تا فعال و غیر فعال بودنشان در هر لحظه قابل بررسی باشد. سپس مشاهده می کنیم که مثلاً در لحظه T5 (وADD ) پایه های CE , LB فعالند.
پیاده سازی MAR :
MAR ,محلی از cpu است که آدرس) دستورات وdata ) در آن قرار می گیرد. آدرس ها از طریق bus در MAR قرار می گیرد. اما ما بوسیله ی یک پایه ی کنترلی مشخص می کنیم که چه موقع محتوای BUS در MAR قرار بگیرد.در واقع برای پیاده سازی MAR از یک بافر 74244 و یک رجیستر 74374 استفاده می کنیم. محتوای BUS در داخل بافر قرار می گیرد و ما با فعال کردن پایه ی out put Enable بافر مشخص می کنیم که چه موقع این محتوا در رجیسترمان قرار بگیرد.
در این جا چون تعداد خانه های مورد استفاده ی EPROM از 16 کمتر است پس تنها 4 خط آدرس کافی است .در نتیجه تنها از 4 بیت MAR استفاده می کنیم .
پیاده سازی ROM:
در این CPU ما از ROM به عنوان وسیله ای برای ذخیره ی دستورات وdatd استفاده می کنیم.برای این cpu ,4 دستور تعریف زیر تعریف شده است:
Add 0001
Sub 0010
Lod 0100
Out 1000
برای هر دستور یک کد باینری تعریف کرده ایم(مثلا برای دستور add کد باینری 0001 تعریف شده است.)cpu مورد نظر accumulatore base است.یعنی یکی از oprand های دستورات آن ACC است.دستورات را این طور تعریف می شود:
آدرس oprand +نام عمل
برای یک دستور 8 بیت در نظر می گیریم ,4 بیت پر ارزش کد باینری دستور و 4بیت کم ارزش آدرس oprand را در بر می گیرد.
برای پیاده سازی ROM از یک بافر 74244و از یک EPROM با شماره ی 2716 استفاده می کنیم.4 بیت کم ارزش آدرس EPROM از4بیت کم ارزش خروجی MAR وبقیه از زمین گرفته می شوند.
EPROM محتوای آدرس داده شده را در بافر میریزدو ما با استفاده از پایه ی کنترلی out put enable معین می کنیم چه زمانی محتوای EPROM روی BUS قرار بگیرد.
با استفاده از یک Programer ,EPROM را به صورت زیر program می کنیم.
دستور
Data
0 1 2 3 4 5 6 7
46 15 26 47 80 2 1 4*
پیاده سازی B:
B یک رجیستر کمکی برای انجام عمل SUB وadd است. برای پیاده سازی آن از یک بافر 74244 واز یک رجیستر 74374 استفاده شده است.محتوای bus وارد بافر می شودو هر زمان out put enable بافر فعال باشد محتوای بافر وارد رجیستر می شود.در واقع از out put enable به عنوان پایه ی کنترلی استفاده میشود.