دی‌ال‌اکس

دی‌ال‌اکس (که به صورت «دیلاکس» تلفظ می‌شود) یک معماری پردازنده مبتنی بر RISC است که توسط جان هنسِی و دیوید پترسون طراحی شده است؛ این دو به ترتیب طراحان اصلی پروژه‌های  و برکلی ریسک بوده‌اند. این دو پروژه، نمونه‌های محک طراحی ریسک به‌شمار می‌روند (نام دی‌ال‌اکس نیز از طراحی برکلی گرفته شده است).

دی‌ال‌اکس در اصل نسخه‌ای ساده‌شده، پاک‌سازی‌شده و مدرن‌شده از پردازنده میپس دانشگاه استنفورد است. دی‌ال‌اکس از یک معماری ساده ۳۲ بیتی بارگیری/ذخیره‌سازی (به انگلیسی: load/store) بهره می‌برد که تا حدودی با پردازنده‌های مدرن معماری میپس متفاوت است. از آنجا که دی‌ال‌اکس عمدتاً با هدف آموزش طراحی شده بود، این معماری به‌طور گسترده‌ای در دوره‌های دانشگاهی مربوط به معماری کامپیوتر مورد استفاده قرار می‌گیرد.

دو پیاده‌سازی سخت‌افزاری «» شناخته‌شده وجود دارد: ASPIDA و VAMP. پروژه ASPIDA منجر به هسته ای با ویژگی‌های خوب بسیاری شد: متن باز است، از  پشتیبانی می‌کند، طراحی ناهمزمان دارد، از چندین مجموعه دستورالعمل پشتیبانی می‌کند و توسط **[[مدارهای مجتمع با کاربرد خاص|ای‌سیک]]** (به انگلیسی: ASIC) تأیید شده است. VAMP نوعی از دی‌ال‌اکس است که به عنوان بخشی از پروژه Verisoft از نظر ریاضی تأیید شده است. این پیاده‌سازی با PVS مشخص شده، در وریلاگ پیاده‌سازی شده و روی یک اف‌پی‌جی‌ای از زایلینکس اجرا می‌شود. یک پشته کامل از کامپایلر تا هسته و TCP/IP بر روی آن ساخته شده است.

## تاریخچه
در معماری MIPS استنفورد، یکی از روش‌های استفاده‌شده برای افزایش کارایی این بود که همه دستورالعمل‌ها باید در یک سیکل کلاک به پایان برسند. این امر باعث می‌شد کامپایلرها در مواردی که اجرای یک دستورالعمل قطعاً بیشتر از یک سیکل کلاک طول می‌کشید، دستور NOP وارد کنند؛ بنابراین، فعالیت‌های ورودی و خروجی (مانند دسترسی به حافظه) به‌طور خاص این رفتار را تحمیل می‌کردند و در نتیجه، منجر به افزایش بیهوده حجم برنامه می‌شدند. به‌طور کلی، برنامه‌های میپس مجبور بودند تعداد زیادی دستورالعمل بی‌فایده NOP داشته باشند، که رفتاری ناخواسته بود. معماری دی‌ال‌اکس اجرای تک سیکل کلاک را تحمیل نمی‌کند و در نتیجه از این مشکل مصون است.

در طراحی دی‌ال‌اکس، از رویکردی مدرن‌تر برای مدیریت دستورالعمل‌های طولانی استفاده شد: **ارسال پیش‌دستانه داده (به انگلیسی: data-forwarding)** و **بازآرایی دستورالعمل‌ها (instruction reordering)**. در این حالت، دستورالعمل‌های طولانی در واحدهای عملیاتی خود «متوقف» می‌شوند و سپس زمانی که قادر به اتمام اجرا باشند، مجدداً به جریان دستورالعمل بازگردانده می‌شوند. از دید بیرونی، این رفتار طوری به نظر می‌رسد که گویی اجرای برنامه به‌صورت خطی صورت گرفته است.

## رمزگشایی دستورالعمل
دستورالعمل‌های DLX را می‌توان به سه نوع *I-type, R-type* و *J-type* تقسیم کرد. دستورالعمل‌های نوع R، دستورالعمل‌های کاملاً مبتنی بر ثبات هستند که ارجاع به سه ثبات درون یک کلمه ۳۲ بیتی دارد. دستورالعمل‌های نوع I دو ثبات را مشخص می‌کنند و از ۱۶ بیت برای نگهداری یک مقدار *فوری* استفاده می‌کنند. در نهایت، دستورالعمل‌های نوع J مربوط به پرش هستند و شامل یک آدرس ۲۶ بیتی می‌باشند.

آپ‌کدها ۶ بیت طول دارند، که در مجموع ۶۴ دستورالعمل پایه ممکن را شامل می‌شوند. برای انتخاب یکی از ۳۲ رجیستر، ۵ بیت مورد نیاز است.
* در مورد دستورالعمل‌های نوع R، این بدان معناست که فقط ۲۱ بیت از کلمه ۳۲ بیتی استفاده می‌شود، که به ۶ بیت پایین‌تر اجازه می‌دهد به عنوان «دستورالعمل‌های توسعه‌یافته» استفاده شوند.
* دی‌ال‌اکس می‌تواند بیش از ۶۴ دستورالعمل را پشتیبانی کند، مادامی که آن دستورالعمل‌ها صرفاً روی ثبات‌ها کار کنند. این ویژگی برای مواردی مانند پشتیبانی از واحد ممیز شناور (FPU) مفید است.

## خط لوله
دی‌ال‌اکس، مانند طراحی میپس، عملکرد خود را بر اساس استفاده از خط لوله دستورالعمل بنا نهاده است. در طراحی DLX، این یک طراحی نسبتاً ساده است، که در مفهوم، ریسک «کلاسیک» محسوب می‌شود. خط لوله شامل پنج مرحله است:

; IF - واحد/سیکل واکشی دستورالعمل
: IR <-Mem(PC)
: NPC <-PC + 4
: عملیات: ارسال PC و واکشی دستورالعمل از حافظه به ثبات دستورالعمل (IR)؛ ۴ واحد افزودن به PC برای آدرس‌دهی به دستورالعمل‌های متوالی بعدی. ثبات IR برای نگهداری دستورالعمل بعدی که در سیکل‌های کلاک متوالی مورد نیاز خواهد بود استفاده می‌شود؛ به همین صورت، ثبات NPC برای نگهداری PC ترتیبی بعدی استفاده می‌شود.
; ID - واحد رمزگشایی دستورالعمل
: عملیات: دستورالعمل را رمزگشایی کرده و برای خواندن ثبات‌ها به فایل ثبات دسترسی پیدا می‌کند. این واحد دستورالعمل را از IF دریافت می‌کند و کد عملیاتی و عملوند را از آن دستورالعمل استخراج می‌کند. همچنین در صورت درخواست عملیات، مقدار ثبات‌ها را بازیابی می‌کند.
; EX – واحد اجرا/چرخه آدرس مؤثر
: عملیات: واحد محاسبه و منطق (ALU) روی عملوندهایی که در چرخه قبلی آماده شده‌اند، عمل می‌کند و بسته به نوع دستورالعمل دی‌ال‌اکس، یکی از چهار عملکرد زیر را انجام می‌دهد.
: ارجاع به حافظه: دستورالعمل ثبات-ثبات ALU، دستورالعمل ثبات-فوری ALU
: پرش شرطی
; MEM - واحد دسترسی به حافظه
: دستورالعمل‌های دی‌ال‌اکس فعال در این واحد عبارتند از بارگذاری، ذخیره‌سازی و پرش‌های شرطی.
; WB – واحد بازنوشت
: معمولاً در اصطلاحات مدرن به آن «واحد ذخیره‌سازی» گفته می‌شود. نتیجه را -چه از سیستم حافظه و چه از واحد محاسبه و منطق (ALU) دریافت شود- در فایل رجیستر بنویسید.

## منابع
* سیلر، فیلیپ ام؛ کایلی، دیوید آر. (۱۹۹۶). *راهنمای معماری مجموعه‌دستورالعمل DLX*. مورگان کافمن. شابک: ۱–۵۵۸۶۰–۳۷۱–۹.
* پترسون، دیوید؛ هنسی، جان (۱۹۹۶). *معماری کامپیوتر: یک رویکرد کمی* (ویرایش اول). مورگان کافمن. شابک: ۹۷۸–۱–۵۵۸۶۰–۳۲۹–۵.
* پترسون، دیوید؛ هنسی، جان (۱۹۹۴). *سازمان و طراحی کامپیوتر* (ویرایش اول). مورگان کافمن. شابک: ۹۷۸–۱–۵۵۸۶۰–۲۸۱–۶.

## پیوند به بیرون
* پردازنده DLX
* دستورالعمل‌های DLX
* وین دی ال ایکس
* شبیه‌ساز DLX (GNU GPL)
* شبیه‌ساز ESCAPE DLX 
* openDLX - شبیه‌ساز متن‌باز DLX در جاوا (GNU GPLv3)
* تأیید رسمی پردازنده VAMP
* پردازنده DLX ناهمزمان ASPIDA
* HERA: معماری RISC آموزشی هاورفورد

رده:معماری‌های مجموعه دستورالعمل