ISDL
Язык ISDL был разработан группой CAA (Computer-Aided Automation) университета MIT, США [46] и впервые представлен на конференции по автоматизированному дизайну DAC [47] в 1997 году. Основной специализацией ISDL является описание VLIW-архитектур. Изначально язык задумывался для поддержки настраиваемых компилятора, ассемблера и симулятора, а также генератора Verilog-описаний на основе ISDL-спецификаций. Как и nML, ISDL, главным образом, позволяет на основе использования атрибутной грамматики описывать систему команд процессора, включающую в себя семантику поведения, синтаксис ассемблера, машинные коды, а также описание ресурсных конфликтов. К важным достоинствам языка можно отнести возможность специфицировать задержки и конфликтные ситуации для параллелизма уровня команд (Instruction Level Parallelism, ILP) в виде логических правил, хотя явное описание конвейера отсутствует. Описание ISDL состоит из следующих секций:
- Format – формат машинного слова (разбиение на именованные битовые поля);
-
Global_Definitions – глобальные определения лексем (Token) и нетерминальных символов (Non_Terminal);
-
Storage – элементы-хранилища (регистры, память, стек, управляющие и специальные регистры);
-
Instruction_Set – спецификация системы команд в виде набора операций, описание каждой из которых включает следующие атрибуты:
параметры в виде лексем и нетерминальных символов;
бинарное кодирование в машинном слове;
поведение в виде RTL описания над ресурсами-хранилищами;
время выполнения и другие параметры стоимости (например, энергопотребление):
задержки;
Описание тривиального процессора в ISDL приведено в примере 6. SECTION Format IW = OPF[4], DSTF[4], SRCF[4];
SECTION Global_Definitions Token “R”[0..15] REG {[0..15];}; Non_Terminal DST: REG {$$ = REG;} {RF[REG]}; Non_Terminal SRC: REG {$$ = REG;} {RF[REG]};
SECTION Storage RegFile RF = 16, 16 // 16 16-битных регистров ProgramCounter PC = 16 // 16-битный счетчик команд
SECTION Instruction_Set Field ALU_OP: ADD DST, SRC // ассемблерный синтаксис { IW.OPF = 0x0; IW.DSTF = DST; IW.SRCF = SRC; } // двоичное кодирование { DST
Пример 6. Тривиальный процессор в ISDL
Для описания поведения используется собственный C-подобный язык с включенной библиотекой функций и расширенных операций работы над данными на битовом уровне. Базовые типы языка ограничены только знаковым и беззнаковым целыми, а также числами с плавающей точкой с параметрами, зависящими от инструментальной платформы, на которой работают инструменты ISDL.
Анализируя возможности ISDL, можно выявить следующие недостатки:
- нет механизмов описания поведения операции на конкретных тактах / стадиях конвейера, что делает невозможным потактово-точное моделирование;
каждую операцию можно привязать только к одному функциональному «полю» (field), что затрудняет корректное описание использования ресурсов много-тактовыми командами;
нет механизмов описания глобальных аспектов архитектуры таких, как прерывания, аппаратные циклы, конвейер;
имеется лишь ограниченное число базовых типов (например, нет поддержки строк и чисел с фиксированной точкой).
Кроме того, к сожалению, отсутствуют в доступном виде реальные инструментальные средства, поддерживающие ISDL, так как инициаторы проекта ограничились только реализацией ассемблера, некоторых модулей симулятора GENSIM и кодогенератора для компилятора в качестве диссертационных работ MIT.