Обзор методов описания встраиваемой аппаратуры

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 описания над ресурсами-хранилищами;

  • время выполнения и другие параметры стоимости (например, энергопотребление):

  • задержки;

  • Constraints – ограничения на совместимость различных операций, как в рамках одной инструкции, так и между соседними инструкциями, а также ограничения в ассемблерном синтаксисе; ограничения записываются в виде логических правил, включающих в себя ссылки на параметры, константы и логические операции.

    Описание тривиального процессора в 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.


    Содержание раздела