Введение
архитектура процессора DLX (произносится "Делюкс") – это архитектура процессора RISC, разработанная Джоном Л. Хеннесси и Дэвидом А. Паттерсоном, основными разработчиками архитектур Stanford MIPS и Berkeley RISC (соответственно) – двух эталонных примеров проектирования RISC (названных по аналогии с разработкой Беркли). DLX по сути представляет собой упрощенную, очищенную (и модернизированную) версию процессора Stanford MIPS. DLX имеет простую 32-битную архитектуру с загрузкой и сохранением данных, несколько отличающуюся от современной архитектуры MIPS. Поскольку DLX изначально предназначался главным образом для учебных целей, его архитектура широко используется в университетских курсах по компьютерной архитектуре. Существует две известные аппаратные реализации типа "softcore": ASPIDA и VAMP. Проект ASPIDA привёл к созданию ядра с множеством полезных функций: оно имеет открытый исходный код, поддерживает Wishbone, использует асинхронную схему, поддерживает несколько наборов инструкций (ISA) и прошло проверку на соответствие требованиям ASIC. VAMP – это вариант DLX, который был математически верифицирован в рамках проекта Verisoft. Его спецификация была выполнена с использованием PVS, реализация – на Verilog, а работает он на FPGA от Xilinx. На его основе был создан полный программный стек, включающий компилятор, ядро и протокол TCP/IP.
The DLX (pronounced "Deluxe") is a RISC processor architecture designed by John L. Hennessy and David A. Patterson, the principal designers of the Stanford MIPS and the Berkeley RISC designs (respectively), the two benchmark examples of RISC design (named after the Berkeley design). The DLX is essentially a cleaned up (and modernized) simplified Stanford MIPS CPU. The DLX has a simple 32 bit load/store architecture, somewhat unlike the modern MIPS architecture CPU. As the DLX was intended primarily for teaching purposes, the DLX design is widely used in university level computer architecture courses. There are two known "softcore" hardware implementations: ASPIDA and VAMP. The ASPIDA project resulted in a core with many nice features: it is open source, supports Wishbone, has an asynchronous design, supports multiple ISAs, and is ASIC proven. VAMP is a DLX variant that was mathematically verified as part of Verisoft project. It was specified with PVS, implemented in Verilog, and runs on a Xilinx FPGA. A full stack from compiler to kernel to TCP/IP was built on it.
История
В архитектуре Stanford MIPS одним из методов повышения производительности было принудительное выполнение всех инструкций за один такт. Это вынуждало компиляторы вставлять "no ops" в случаях, когда выполнение инструкции гарантированно занимало бы больше одного такта. Таким образом, операции ввода-вывода (например, доступ к памяти) специально вызывали такое поведение, что приводило к искусственному увеличению размера программы. В целом, программы для MIPS были вынуждены содержать большое количество бесполезных инструкций NOP, что было непреднамеренным следствием. Архитектура DLX не требует выполнения за один такт и, следовательно, не подвержена этой проблеме. В DLX реализован более современный подход к обработке длительных инструкций: пересылка данных и переупорядочивание инструкций. В этом случае более длительные инструкции "останавливаются" в своих функциональных блоках и затем повторно включаются в поток инструкций, когда они могут быть завершены. Со стороны внешнего наблюдателя такое поведение системы создает впечатление линейного выполнения.
Как это работает
Инструкции DLX можно разделить на три типа: R-тип, I-тип и J-тип. Инструкции R-типа – это инструкции, работающие только с регистрами, содержащие три ссылки на регистры в 32-битном слове. Инструкции I-типа задают два регистра и используют 16 бит для хранения непосредственного значения. Наконец, инструкции J-типа – это переходы, содержащие 26-битный адрес. Опкоды имеют длину 6 бит, что обеспечивает в общей сложности 64 возможных базовых инструкции. Для выбора одного из 32 регистров требуется 5 бит. В случае инструкций R-типа это означает, что используется только 21 бит из 32-битного слова, что позволяет использовать младшие 6 бит как "расширенные инструкции". DLX может поддерживать более 64 инструкций, если эти инструкции работают исключительно с регистрами. Эта особенность полезна, например, для поддержки FPU.