طراحی منطق کنترلی برای یک پردازنده تک‌سیکلی

یک datapath به‌تنهایی بدون سیگنال‌های کنترلی که به آن بگویند برای هر دستور چه کاری انجام دهد، هیچ کاری نمی‌کند. این مقاله توضیح می‌دهد منطق کنترلی چگونه فیلدهای opcode و function یک دستور را می‌خواند تا سیگنال‌های دقیق مورد نیاز برای مسیریابی درست داده را تولید کند، و مرور می‌کند یک پیاده‌سازی کامل تک‌سیکلی چگونه انواع مختلف دستورات را اجرا می‌کند.

کنترل تک‌سیکلیسیگنال‌های کنترلیرمزگشایی دستور

~3 دقیقه مطالعه · آخرین به‌روزرسانی ۱۵ شهریور ۱۴۰۵

قطعه گمشده: گفتن به 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 مشترک هدایت می‌کند.

چرا یک طرح تک‌سیکلی نقطه شروع مفیدی است

در این طرح، هر دستور به‌طور کامل درون یک سیکل ساعت کامل می‌شود، صرف‌نظر از اینکه چقدر ساده یا پیچیده باشد. این باعث می‌شود منطق کنترلی از نظر مفهومی ساده برای طراحی و استدلال درباره‌اش باشد، چون نیازی به ردیابی دستورات نیمه‌کامل‌شده در چند سیکل نیست. این سادگی، با این حال، با یک هزینه کارایی قابل‌توجه همراه است که وقتی پایپ‌لاینینگ بعداً در این مجموعه معرفی شود روشن می‌شود، چون طول سیکل ساعت باید به‌اندازه کافی طولانی باشد تا حتی کندترین دستور را نیز پوشش دهد.

نوشته و پژوهش‌شده توسط دکتر شاهین صیامی

مقالات مرتبط

اصول کش: حافظه کوچک و سریع چگونه پیش‌بینی می‌کند بعداً چه چیزی نیاز است

یک کش فقط به این دلیل کار می‌کند که برنامه‌ها تمایل دارند داده یکسان یا نزدیک به هم را به‌طور تکراری دسترسی کنند نه به‌صورت تصادفی. این مقاله اصل محلیت که کش را مؤثر می‌کند را توضیح می‌دهد، یک کش مستقیم‌نگاشت‌شده چگونه داده را با استفاده از یک آدرس مکان‌یابی می‌کند، و در یک hit کش در مقابل یک miss کش چه اتفاقی می‌افتد.

ادامه

سلسله‌مراتب حافظه: چرا کامپیوترها از چند نوع حافظه استفاده می‌کنند

هیچ فناوری حافظه واحدی هم‌زمان سریع، بزرگ، و ارزان نیست. این مقاله مفهوم سلسله‌مراتب حافظه که چند فناوری حافظه مختلف را ترکیب می‌کند تا به سرعت سریع‌ترین آن‌ها با هزینه ارزان‌ترین نزدیک شود را معرفی می‌کند، سپس فناوری‌های اصلی که هر سطح را می‌سازند مرور می‌کند.

ادامه

تصورات غلط رایج درباره طراحی پردازنده و تصویر کلی فصل چهارم

پس از پوشش datapath ها، پایپ‌لاینینگ، خطرها، و مقایسه‌های پردازنده دنیای واقعی، وقت آن است چند تصور غلط پایدار درباره نحوه رفتار واقعی پردازنده‌ها را اصلاح کنیم. این مقاله به مغالطات رایج درباره پایپ‌لاینینگ و کارایی می‌پردازد، سپس مسیر کامل از datapath های ساده تا اجرای سوپراسکالر که در سراسر این فصل پوشش داده شد را به هم پیوند می‌دهد.

ادامه

پایپ‌لاین‌های دنیای واقعی: مقایسه ARM و Intel، و تسریع ضرب ماتریس

مفاهیم نظری پایپ‌لاین در پردازنده‌های تجاری واقعی شکل مشخصی به خود می‌گیرند، که بسته به اهداف طراحی‌شان از نظر عمق پایپ‌لاین و عرض صدور به‌طور گسترده متفاوت‌اند. این مقاله مقایسه می‌کند ARM Cortex-A53 و Intel Core i7 چگونه پایپ‌لاینینگ را متفاوت برای کارایی توان در مقابل کارایی خام پیاده‌سازی می‌کنند، سپس نشان می‌دهد موازی‌سازی سطح دستور چگونه ضرب ماتریس را در عمل تسریع می‌کند.

ادامه

موازی‌سموازی‌سازی سطح دستور: اجرای بیش از یک دستور به‌طور هم‌زمانازی سطح دستور: اجرای بیش از یک دستور به‌طور هم‌زمان

موازی‌سازی سطح دستور: اجرای بیش از یک دستور به‌طور هم‌زمان

ادامه

یک پردازنده پایپ‌لاین‌شده چگونه استثناها را مدیریت می‌کند

هر دستوری آن‌طور که انتظار می‌رود اجرا نمی‌شود — برخی شرایط خطایی مانند یک opcode نامعتبر یا سرریز محاسباتی را فعال می‌کنند که پردازنده باید با امنیت به آن‌ها پاسخ دهد. این مقاله توضیح می‌دهد استثناها چه هستند، یک پردازنده پایپ‌لاین‌شده چگونه آن‌ها را بدون خراب کردن وضعیت برنامه تشخیص داده و مدیریت می‌کند، و چرا استثناها مشابه خطرهای کنترلی رفتار می‌شوند.

ادامه