چرا Datapath تکسیکلی نمیتواند صرفاً سریعتر اجرا شود
پایپلاینینگ به معنای استفاده مجدد از دقیقاً همان datapath تکسیکلی و ساعتبندی سریعتر آن نیست. از آنجا که پنج دستور متفاوت همزمان پنج مرحله متفاوت را اشغال میکنند، سختافزار هر مرحله باید بهطور فیزیکی جدا شود، و نتایج جزئی یک دستوری که هنوز در حال پیشرفت است باید هنگام حرکت از یک مرحله به مرحله بعدی حفظ شود.
رجیسترهای پایپلاین: حفظ وضعیت بین مراحل
بین هر جفت مرحله پایپلاین مجاور، یک Pipeline Register تمام مقادیری که یک دستور نیاز دارد به مرحله بعدی حمل کند را ذخیره میکند.
رجیستر IF/ID: دستور واکشیشده و PC افزایشیافته را نگه میدارد
رجیستر ID/EX: مقادیر رجیستر decodeشده، فوری، و سیگنالهای کنترلی را نگه میدارد
رجیستر EX/MEM: نتیجه ALU، مقدار رجیستر برای store ها، و سیگنالهای کنترلی را نگه میدارد
رجیستر MEM/WB: مقداری که باید write back شود و سیگنالهای کنترلی را نگه میداردهرکدام از این رجیسترها یکبار در هر سیکل ساعت بهروزرسانی میشوند، که اجازه میدهد نتایج جزئی یک دستور با امنیت درون یک رجیستر بنشیند در حالی که نتایج دستور بعدی همزمان یک مرحله قبلتر محاسبه میشوند.
سیگنالهای کنترلی باید همراه با دستور حرکت کنند
در طرح تکسیکلی که پیشتر در این مجموعه پوشش داده شد، سیگنالهای کنترلی درون همان سیکل تولید و استفاده میشدند. در یک طرح پایپلاینشده، یک سیگنال کنترلی تولیدشده در حین decode ممکن است تا چند سیکل بعد، وقتی دستور به مرحله حافظه یا write-back میرسد، مورد نیاز نباشد. برای مدیریت این موضوع، سیگنالهای کنترلی همراه با دادهای که روی آن اعمال میشوند، از طریق همان رجیسترهای پایپلاین به جلو حمل میشوند، و اطمینان میدهند هر سیگنال در مرحله درست در زمان درست برای دستور خاص خودش میرسد.
یک مثال: دنبال کردن یک دستور Load در سراسر پایپلاین
یک دستور load را در نظر بگیرید که در طول پنج سیکل ساعت از تمام پنج مرحله عبور میکند.
سیکل ۱ (IF): واکشی دستور load
سیکل ۲ (ID): decode آن، خواندن رجیستر پایه، تولید سیگنالهای کنترلی
سیکل ۳ (EX): ALU رجیستر پایه و آفست را جمع میکند تا آدرس بسازد
سیکل ۴ (MEM): خواندن مقدار از حافظه داده در آن آدرس
سیکل ۵ (WB): نوشتن مقدار بازیابیشده در رجیستر مقصددر هر یک از این سیکلها، دستورات دیگر همزمان چهار مرحله پایپلاین دیگر را اشغال میکنند، هرکدام دادهها و سیگنالهای کنترلی خودشان را از طریق رجیسترهای پایپلاین خودشان حمل میکنند بدون اینکه با پیشرفت دستور load تداخل داشته باشند.
چرا این تغییر ساختاری اهمیت دارد
این جداسازی مراحل با استفاده از رجیسترهای پایپلاین است که اجرای همپوشان را از نظر فیزیکی ممکن میسازد. بدون آن، سختافزار یک مرحله بعدی هیچ راه قابلاعتمادی برای دانستن اینکه در حال حاضر باید روی داده کدام دستور کار کند نداشت، چون چند دستور همزمان مناطق مختلف datapath را اشغال میکنند.