قطعه گمشده: گفتن به Datapath چه کاری انجام دهد
datapath که پیشتر در این مجموعه توصیف شد شامل مالتیپلکسرها، یک ALU، و واحدهای حافظه است، اما هیچکدام از آنها بهتنهایی نمیدانند برای یک دستور مشخص چه عملیاتی انجام دهند. این تصمیم توسط یک قطعه سختافزاری جداگانه به نام Control Unit گرفته میشود، که دستور را بررسی میکند و سیگنالهای مناسب برای راهاندازی هر عنصر قابلکنترل در datapath را تولید میکند.
سیگنالهای کنترلی از کجا میآیند
تصمیمات واحد کنترل عمدتاً بر اساس فیلد Opcode دستور است، و در برخی موارد فیلدهای Funct اضافی، که هر دو پیشتر در این مجموعه هنگام بحث درباره کدگذاری دستور معرفی شدند. از آنجا که این فیلدها در موقعیتهای بیتی ثابتی در فرمتهای دستور قرار دارند، واحد کنترل میتواند آنها را مستقیماً استخراج کند و از منطق ترکیبی ساده برای تعیین اینکه بقیه datapath باید چه کاری انجام دهد استفاده کند.
سیگنالهای کنترلی کلیدی در یک طرح تکسیکلی
تعداد کمی سیگنال کنترلی نماینده نشان میدهند این چگونه کار میکند.
ALUOpبه ALU میگوید کدام عملیات خاص را انجام دهد، مانند جمع برای محاسبه آدرس یک دستور load یا تفریق برای مقایسه یک شاخه.MemReadوMemWriteخواندن از یا نوشتن به حافظه داده را فعال میکنند، که فقط برای دستورات load و store بهترتیب فعال هستند.RegWriteنوشتن یک نتیجه دوباره به فایل رجیستر را فعال میکند، که برای دستورات محاسباتی و load فعال است اما برای store ها یا شاخهها فعال نیست.Branchنشان میدهد آیا دستور فعلی یک شاخه شرطی است، که همراه با نتیجه مقایسه ALU برای تصمیمگیری درباره اینکه آیا PC باید با یک آدرس مقصد شاخه بهروزرسانی شود استفاده میشود.MemtoRegاز طریق یک مالتیپلکسر، انتخاب میکند آیا مقداری که در فایل رجیستر نوشته میشود از نتیجه ALU میآید یا از حافظه داده.
دنبال کردن یک دستور در سراسر منطق کنترلی
در نظر بگیرید این سیگنالها چگونه در سه نوع دستور که روی همان datapath اجرا میشوند متفاوت هستند.
برای یک دستور "add":
ALUOp = جمع, RegWrite = 1,
MemRead = 0, MemWrite = 0, Branch = 0
برای یک دستور "load":
ALUOp = جمع (محاسبه آدرس),
MemRead = 1, RegWrite = 1, MemtoReg = 1
برای یک دستور "branch":
ALUOp = تفریق (مقایسه),
Branch = 1, RegWrite = 0, MemWrite = 0همان سختافزار فیزیکی هر سه نوع دستور را بهدرستی مدیریت میکند صرفاً چون واحد کنترل تغییر میدهد کدام سیگنالها فعال هستند، و هر بار داده را در طول یک مسیر مؤثر متفاوت از میان همان datapath مشترک هدایت میکند.
چرا یک طرح تکسیکلی نقطه شروع مفیدی است
در این طرح، هر دستور بهطور کامل درون یک سیکل ساعت کامل میشود، صرفنظر از اینکه چقدر ساده یا پیچیده باشد. این باعث میشود منطق کنترلی از نظر مفهومی ساده برای طراحی و استدلال دربارهاش باشد، چون نیازی به ردیابی دستورات نیمهکاملشده در چند سیکل نیست. این سادگی، با این حال، با یک هزینه کارایی قابلتوجه همراه است که وقتی پایپلاینینگ بعداً در این مجموعه معرفی شود روشن میشود، چون طول سیکل ساعت باید بهاندازه کافی طولانی باشد تا حتی کندترین دستور را نیز پوشش دهد.