یک Datapath واقعاً چه کاری انجام میدهد
یک Datapath مجموعهای از واحدهای عملکردی و اتصالات مسئول جابهجایی و تبدیل داده در حین اجرای یک دستور است. ساخت آن نیازمند شناسایی عناصر سختافزاری ضروری در ابتدا، سپس اتصال آنها بهگونهای است که داده برای هر نوع دستوری که پردازنده باید پشتیبانی کند، بهدرستی جریان یابد.
بلوکهای سازنده اصلی
تعداد کمی مؤلفه ضروری بارها در سراسر datapath ظاهر میشوند.
Program Counter (PC)رجیستری است که آدرس حافظه دستوری که در حال حاضر اجرا میشود را نگه میدارد.Instruction Memoryدستورات برنامه را ذخیره میکند و با استفاده از PC برای واکشی دستور بعدی برای اجرا خوانده میشود.Register Fileمجموعه کوچک و سریع رجیسترهای همهمنظوره است، که اجازه میدهد دو رجیستر خوانده شوند و یکی در طول یک دستور واحد نوشته شود.ALU (Arithmetic Logic Unit)عملیاتهای محاسباتی و منطقی، مانند جمع یا مقایسه، را روی مقادیری که دریافت میکند انجام میدهد.Data Memoryاز حافظه دستور جداست و فقط توسط دستورات load و store برای خواندن یا نوشتن مقادیر داده دسترسیپذیر است.
واکشی دستور بعدی
هر سیکل دستور به همان شکل شروع میشود: مقدار فعلی PC برای خواندن دستور بعدی از حافظه دستور استفاده میشود، و همزمان، یک جمعکننده کوچک PC را بهاندازه یک مقدار ثابت افزایش میدهد تا به دستور بعدی اشاره کند، مگر اینکه یک branch یا jump این را بعداً در همان سیکل تغییر دهد.
PC → Instruction Memory → دستور واکشیشده
PC → Adder (+4 یا +عرض دستور) → مقدار PC بعدیاجرای یک دستور محاسباتی
برای یک دستور محاسباتی ساده مانند add، datapath دو مقدار رجیستر منبع را از فایل رجیستر میخواند، آنها را به ALU برای محاسبه نتیجه تغذیه میکند، و آن نتیجه را دوباره در رجیستر مقصد در فایل رجیستر مینویسد.
اجرای یک دستور انتقال داده
یک دستور load یا store مسیری مشابه اما متمایز را دنبال میکند. ALU نه برای محاسبه یک نتیجه محاسباتی نهایی، بلکه برای محاسبه یک آدرس حافظه با جمع کردن مقدار رجیستر پایه با یک آفست استفاده میشود. برای یک load، این آدرس برای خواندن یک مقدار از حافظه داده استفاده میشود، که سپس در فایل رجیستر نوشته میشود؛ برای یک store، مقداری که از فایل رجیستر خوانده شده در آن آدرس محاسبهشده در حافظه داده نوشته میشود.
اجرای یک دستور شاخه
یک دستور شاخه شرطی دو مقدار رجیستر را میخواند، آنها را با استفاده از ALU مقایسه میکند، و از نتیجه آن مقایسه برای تصمیمگیری اینکه آیا مقدار PC بعدی باید آدرس پیدرپی معمولی باشد یا یک آدرس جدید محاسبهشده از آفست مقصد شاخه، استفاده میکند.
چرا مالتیپلکسرها مورد نیازند
انواع مختلف دستورات نیاز دارند داده را به روشهای متفاوتی از میان datapath مسیریابی کنند — یک دستور محاسباتی یک نتیجه ALU را دوباره در یک رجیستر مینویسد، در حالی که یک دستور load بهجای آن یک مقدار خواندهشده از حافظه را مینویسد. Multiplexers، که با سیگنالهای استخراجشده از دستور در حال اجرا کنترل میشوند، مشخص میکنند کدام منبع داده باید در هر نقطه اتصال استفاده شود، که اجازه میدهد همان سیمهای فیزیکی و واحدهای عملکردی به چند نوع دستور خدمت کنند.
از بلوکهای سازنده تا یک Datapath کارآمد
هیچکدام از این مؤلفههای منفرد بهتنهایی کار معناداری انجام نمیدهد. ارزش آنها از نحوه اتصال آنها به یکدیگر میآید، با سیگنالهای کنترلی که داده را در مسیر درست برای هر نوع دستور هدایت میکنند — پایهای که بخش بعدی روی آن میسازد تا دقیقاً تعریف کند این سیگنالهای کنترلی چگونه تولید میشوند.