Введение

архитектура процессора 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.

История

В архитектуре 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.