Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Бесплатный конструктор сайтов и Landing Page

Хостинг с DDoS защитой от 2.5$ + Бесплатный SSL и Домен

SSD VPS в Нидерландах под различные задачи от 2.6$

✅ Дешевый VPS-хостинг на AMD EPYC: 1vCore, 3GB DDR4, 15GB NVMe всего за €3,50!

🔥 Anti-DDoS защита 12 Тбит/с!

VPS в России, Европе и США

Бесплатная поддержка и администрирование

Оплата российскими и международными картами

🔥 VPS до 5.7 ГГц под любые задачи с AntiDDoS в 7 локациях

💸 Гифткод CITFORUM (250р на баланс) и попробуйте уже сейчас!

🛒 Скидка 15% на первый платеж (в течение 24ч)

2008 г.

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

В.В. Рубанов

Назад Содержание Вперёд

2.3.1. nML

Язык nML [43-44] изначально был разработан в Техническом университете Берлина в 1991 году и является пионером в области ADL-решений, ориентированных на высокоуровневое описание системы команд. В этом университете nML использовался в качестве способа описания аппаратуры для настраиваемого симулятора SIGH/SIM и компилятора CBC (с языка ALDiSP). Язык nML получил дальнейшее развитие в бельгийском научно-исследовательском центре микроэлектроники IMEC, где в рамках дочерней компании Target Compiler Technologies была создана коммерческая среда разработки [45], ориентированная на DSP-архитектуры. В эту среду входят компилятор CHESS (с языка C), симулятор CHECKERS, ассемблер, дисассемблер и компоновщик. Также поддерживается синтез шаблонов VHDL-описания.

В nML выделяются определения типов (type), элементов хранения данных (mem) и собственно иерархическое описание системы команд, задаваемое с помощью атрибутных грамматик в виде OR и AND-правил. Элементами грамматики служат операции (op) и режимы адресации (mode). Для операций обязательные атрибуты включают в себя описание поведения на расширенном подмножестве C (action), ассемблерного синтаксиса (syntax) и отображения в машинные коды (image). Для режимов адресации – только синтаксис и двоичный код. Корневая операция имеет фиксированное имя instruction.

Базовые типы данных nML включают в себя:

  • int(n) - тип знаковых целых n-битных чисел в дополнительном коде;
  • card(n) - тип n-битных беззнаковых чисел;
  • float(n,m) - тип знаковых чисел с плавающей точкой с n-битной мантиссой и m-битным основанием, в соответствии со стандартом IEEE-754;
  • fix(n,m) - тип знаковых чисел с фиксированной точкой, с n битами до и m битами после двоичной точки;
  • bool - булевский тип; предопределены две константы true и false; при приведении к целому true получает значение -1, а false значение 0.

Пример 5 иллюстрирует описание в nML тривиального процессора с шестнадцатью 16-битными регистрами и парой команд сложения и вычитания:

type word = card(16)	\ 16-битные данные
type index = card(4)	\ индекс для адресации 16 регистров

mem  RF[16, word]	\ 16 регистров размера word
mem  PC[1, word]		\ регистр-счетчик команд

mode REG(i:index)=RF[i]  \ режим прямой регистровой адресации
syntax = format("R%d",i) \ синтаксис вида R0, R1, .., R15
image  = format("%4b",i) \ тривиальное отображение номера
                         \ регистра в 4 бита машинного слова

op instruction (x:instr_action)
action = {
	PC = PC + 1;
	x.action;
}
syntax = x.syntax
image  = x.image

op instr_action = add_op | sub_op		\ OR-правило

op add_op (dst:REG, src:REG)			\ AND-правило
action = { dst = dst + src; }
syntax = format("ADD %s, %s”, dst.syntax, src.syntax)
image  = format(“0000 %s %s”, dst.image, src.image)

op sub_op (dst:REG, src:REG)
action = { dst = dst - src; }
syntax = format("SUB %s, %s”, dst.syntax, src.syntax)
image  = format(“0001 %s %s”, dst.image, src.image)

Пример 5. Тривиальный процессор в nML

Существенным ограничением nML является отсутствие механизмов описания многотактовых функциональных единиц и конвейеров. Кроме того, в nML поддерживаются только команды фиксированной длины, не поддерживается описание межкомандных зависимостей, и производительность симулятора, опубликованная в [17], невысока.

2.3.2. 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 <- DST + SRC; }	// поведение
	{}				// побочные эффекты
	{ cycle = 1; size = 1; }// длительность и размер
	{ latency = 1; }		// задержка

	SUB DST, SRC		// ассемблерный синтаксис
	{ IW.OPF = 0x1;
  IW.DSTF = DST;
  IW.SRCF = SRC; }		// двоичное кодирование 
	{ DST <- DST - SRC; }	// поведение
	{}				// побочные эффекты
	{ cycle = 1; size = 1; }// длительность и размер
	{ latency = 1; }		// задержка

Пример 6. Тривиальный процессор в ISDL

Для описания поведения используется собственный C-подобный язык с включенной библиотекой функций и расширенных операций работы над данными на битовом уровне. Базовые типы языка ограничены только знаковым и беззнаковым целыми, а также числами с плавающей точкой с параметрами, зависящими от инструментальной платформы, на которой работают инструменты ISDL.

Анализируя возможности ISDL, можно выявить следующие недостатки:

  • нет механизмов описания поведения операции на конкретных тактах / стадиях конвейера, что делает невозможным потактово-точное моделирование;
  • каждую операцию можно привязать только к одному функциональному «полю» (field), что затрудняет корректное описание использования ресурсов много-тактовыми командами;
  • нет механизмов описания глобальных аспектов архитектуры таких, как прерывания, аппаратные циклы, конвейер;
  • имеется лишь ограниченное число базовых типов (например, нет поддержки строк и чисел с фиксированной точкой).

Кроме того, к сожалению, отсутствуют в доступном виде реальные инструментальные средства, поддерживающие ISDL, так как инициаторы проекта ограничились только реализацией ассемблера, некоторых модулей симулятора GENSIM и кодогенератора для компилятора в качестве диссертационных работ MIT.

2.3.3. EXPRESSION

Язык EXPRESSION разрабатывался в Университете Калифорнии (University of California, Irvine, США) [48] и был впервые представлен на конференции DATE в 1999 году [49]. Этот язык поддерживает широкий класс встраиваемых систем с ILP и иерархиями памяти от RISC, DSP, ASIP до VLIW. EXPRESSION позволяет создавать интегрированное описание структуры и поведения подсистемы процессор-память. Спецификация на EXPRESSION состоит из шести секций (первые три отвечают за поведение, последние три за структуру):

  • OP_GROUP – спецификация операций (элементарных команд (OP_CODE) c описанием параметров и поведения);
  • INSTR – описание формата команды в виде набора ячеек (SLOTS), имеющих определенное положение и ширину в командном слове и ответственных за определенный функциональный модуль;
  • OP_MAPPING – отображение общих (generic) операций компилятора на машинные операции, описанные в первой секции; данное описание используется при генерации кодогенератора компилятора;
  • описание структурных компонентов – функциональные устройства (UNIT), элементы памяти (STORAGE), шины (CONNECTION) и порты (PORT); задаются связи между ними, а также некоторые свойства (например, типы операций, которое может выполнять устройство, и количество параллельно выполняемых за такт операций);
  • описание конвейера (PIPELINE) в виде упорядоченных именованных стадий, связанных с функциональными устройствами; секция также содержит описание каналов передачи данных (DTPATHS).
  • STORAGE PARAMETERS – описание свойств элементов памяти: тип (регистровая память, кэш, SRAM, DRAM), количество и размерность ячеек, ассоциативность кэша, адресное пространство, время доступа.

Пример 7 содержит описание тривиального модельного процессора на языке EXPRESSION.

(OP_GROUP alu_ops
	(OP_CODE add
		(OP_TYPE DATA_OP)
		(OPERANDS (DST reg) (SRC1 reg) (SRC2 reg))
		(BEHAVIOR DST = SRC1 + SRC2)
	)
	(OP_CODE sub
		(OP_TYPE DATA_OP)
		(OPERANDS (DST reg) (SRC1 reg) (SRC2 reg))
		(BEHAVIOR DST = SRC1 - SRC2)
	)
)

(VAR_GROUPS (reg RF) )

(INSTR
	(WORDLEN 12)
	(SLOTS ((TYPE DATA) (BITWIDTH 12) (UNIT ALU)) )
)

(SUBTYPE UNIT ExUnit)
(SUBTYPE STORAGE RegFile)

(ExUnit ALU
	(CONNECTIONS AluRfConn)
(OPCODES alu_ops)
(CAPACITY 1)
)

(RegFile RF (CONNECTIONS AluRfConn) )

(PIPELINE FETCH DECODE EX)
(EX: ALU)
(DTPATHS (TYPE BI (ALU RF AluRfConn) ))

(STORAGE PARAMETERS
	(RF
    (TYPE REGFILE)
    (SIZE 16)
    (WIDTH 16)
)

Пример 7. Тривиальный процессор в EXPRESSION

На основе описания EXPRESSION автоматически генерируются компилятор EXPRESS и симулятор SYMPRESS [50-51]. Также существуют дополнительные утилиты для исследования и оценки использования иерархий памяти (MEMOREX) и визуальное средство для автоматизации процесса оценки и анализа различных архитектурных решений в процессе дизайна аппаратуры (V-SAT). Однако опубликованная скорость работы симулятора SYMPRESS является недостаточной для интерактивного процесса обработки миллиардов тактов в типичном цикле разработки современных алгоритмов цифровой обработки сигналов.

К сожалению, как сам язык EXPRESSION, так и поддерживающие его средства нацелены только на обеспечение процесса исследования проектных альтернатив (DSE) и не рассчитаны на создание кросс-инструментов для разработки реальных прикладных программ. Поэтому полностью отсутствует промежуточный ассемблерный уровень – сценарий использования предполагает компиляцию программы на C во внутреннее промежуточное представление, которое непосредственно используется симулятором для получения оценок производительности, но не позволяет вести пошаговую отладку программы и использовать алгоритмы на ассемблере. Соответственно, в языке отсутствуют средства описания ассемблерного синтаксиса и двоичного кодирования команд. Также, ввиду наличия детальной структурной составляющей, начальное создание спецификации EXPRESSION является относительно трудоемким по сравнению с nML и ISDL. Кроме того, необходимость согласовывать поведенческие и структурные части описания делает неудобными и чреватыми ошибками изменения на уровне системы команд. В этом смысле EXPRESSION стоит между чистыми поведенческими ADL-решениями и структурными описаниями HDL-уровня.

2.4. Языки программирования общего назначения

Еще одним методом описания модели аппаратуры и построения соответствующего инструментария кросс-разработки является непосредственное использование высокоуровневых языков программирования общего назначения для реализации симулятора, ассемблера, дисассемблера, отладчика и прочих необходимых инструментов без использования каких либо специализированных для аппаратного обеспечения формальных описаний. Основными языками для этой цели обычно служат C и C++.

На практике большинству производителей встраиваемых процессоров (см. например, [52-57]) и многим компаниям, специализирующимся на разработке кросс-инструментов под заказ (например [58-65]), приходится использовать именно этот подход, чтобы получить кросс-инструментарий производственного качества как по уровню производительности, так и по удобству и богатству функциональности. Это становится возможным благодаря универсальным возможностям указанных языков программирования для реализации различных решений, оптимизированных под конкретную целевую аппаратуру.

Однако это достается дорогой ценой в терминах трудоемкости и календарного времени на создание кросс-инструментов, так как подразумевает большой объем ручного программирования. В случае разработки «с чистого листа» затраты на построение производственной версии полного набора кросс-инструментария составляют около 6-9 месяцев, и для этого требуются команды, включающие около 10 квалифицированных программистов. Адаптация уже существующих для подобной аппаратуры собственных (знакомых конкретным программистам) решений и повторное использование соответствующих библиотек позволяет сократить эти сроки и трудозатраты в несколько раз. Однако главным ограничением такого подхода все равно остается требование к наличию устоявшегося описания целевой аппаратуры, так как адаптация построенных вручную инструментов даже к незначительным изменениям в спецификации аппаратуры требует существенных затрат и чревата ошибками. Например, как правило, несколько дней требуется для полного цикла проектирования, кодирования и тестирования необходимых изменений для отражения смены кодировки, синтаксиса и поведения всего одной команды. Данное ограничение не позволяет использовать такой подход на этапе проектирования аппаратуры, оставляя его возможным для применения только при построении инструментов для разработки прикладных программ уже на этапе серийного производства чипов (в условиях устоявшейся спецификации).

3. Анализ существующих подходов

В предыдущих разделах были рассмотрены различные средства описания аппаратуры и соответствующие методы построения кросс-инструментов. В данном разделе проводится итоговый сравнительный анализ рассмотренных решений.

Итак, качественные характеристики описанных выше классов языков для описания аппаратуры и соответствующих методов построения кросс-инструментария представлены в табл. 1.

Таблица 1. Характеристики языков описания аппаратуры и соответствующих методов построения кросс-инструментов.

На основе данных, приведённых в табл. 1, можно сделать следующие выводы (см. краткую сводку в табл. 2):

  1. HDL-языки описания аппаратуры позволяют описывать наиболее точные модели аппаратуры и автоматически получать соответствующий симулятор, однако их использование в качестве основы для построения кросс-инструментария для прототипирования аппаратуры и разработки прикладных программ не представляется целесообразным ввиду низкой скорости работы симулятора, высокой трудоемкости построения модели аппаратуры и сложности внесения в нее изменений на уровне системы команд, а также из-за отсутствия в языке конструкций для задания информации, необходимой для построения остальных кросс-инструментов в дополнение к симулятору.
  2. ADL-языки предоставляют наиболее удобные возможности для описания моделей аппаратуры на уровне системы команд, а соответствующий метод автоматического построения кросс-инструментария позволяет эффективно использовать получаемые инструменты для прототипирования аппаратуры. Однако использование существующих ADL-решений не позволяет получать инструменты качества, достаточного для разработки реальных программ, из-за неточности получаемой модели, невысокой скорости работы и ограниченной функциональности получаемых инструментов.
  3. Ручная реализация необходимых кросс-инструментов на языках программирования общего назначения на сегодняшний день является практически единственным методом построения полного набора кросс-инструментария производственного качества (с высокой скоростью работы, достаточной точностью модели и удобной функциональностью, адаптированной под конкретную аппаратуру). Однако этот способ практически исключает возможность использовать такой кросс-инструментарий на этапе прототипирования аппаратуры из-за высокой трудоемкости и временных затрат для создания начальной версии инструментария и для последующих циклов его обновления для отражения различных вариаций проектируемой аппаратуры.

Отдельно стоит отметить, что ни один из указанных методов явно не поддерживает расширяемые архитектуры в смысле обеспечения разделения технической ответственности и интеллектуальной собственности в получаемых для полной системы инструментах между производителями отдельных компонентов.

Область применения На основе HDL-языков На основе ADL-языков На основе
C, C++, …
Для прототипирования аппаратуры Ограничено Эффективно Практически невозможно
Для производственной разработки прикладных программ Практически невозможно Ограничено Эффективно

Таблица 2. Эффективность применения кросс-инструментов, получаемых рассмотренными методами на основе различных языков.

Таким образом, наиболее близким (хотя и с существенными недостатками) из рассмотренных методов построения кросс-инструментов для решения постав-ленных задач является метод автоматической генерации кросс-инструментов на основе спецификации на некотором ADL-языке. Рассмотрим более подробно сравнительные характеристики описанных выше ADL языков и соответствующих инструментальных средств поддержки (см. табл. 3).

Таким образом, ни один из существующих ADL-языков не позволяет описывать потактово-точные модели аппаратуры, включающие в себя все типичные для встраиваемых архитектур возможности: конвейер, прерывания, циклы с нулевой задержкой, периферию, зависимости между командами и отдельными операндами (для диагностики конфликтов). Поддержка расширяемой аппаратуры присутствует только в EXPRESSION, но и там соответствующие описания могут быть созданы только в рамках единой спецификации всей системы, что не позволяет разделять описания отдельных компонентов. Кроме того, ни одно из существующих инструментальных решений на основе ADL-языков не поддерживает генерацию полного набора кросс-инструментов, а скорость работы и удобство использования отдельных получаемых компонентов остаются на низком уровне.

Характеристика nML ISDL EXPRES-SION
Общие возможности
Описание синтаксиса ассемблера и бинарного кодирования команд + + -
Описание потактового поведения команд - - неявно
Описание иерархии памяти + + +
Описание структуры функциональных модулей - - +
Поддержка описания различных особенностей аппаратуры
Машинное слово переменной длины - + -
Межкомандные зависимости - + ?
Ограничения на комбинации операндов команд + + -
Конвейер - - +
Прерывания - - -
Циклы с нулевой задержкой - - -
Сопроцессоры - - +
Периферийные устройства - - -
Возможности инструментальной поддержки
Генерация симулятора + + +
Потактово-точная симуляция - - +-
Скорость симулятора (модельных тактов в сек.) 106 ? 106
Генерация ассемблера + + -
Генерация дисассемблера + - -
Генерация компоновщика + + -
Генерация пошагового символьного отладчика - - -
Интегрированная среда разработки (IDE) - - -

Таблица 3. Возможности основных современных ADL-языков и соответствующих инструментальных средств поддержки.

Таким образом, ни один из существующих ADL-языков не позволяет описывать потактово-точные модели аппаратуры, включающие в себя все типичные для встраиваемых архитектур возможности: конвейер, прерывания, циклы с нулевой задержкой, периферию, зависимости между командами и отдельными операндами (для диагностики конфликтов). Поддержка расширяемой аппаратуры присутствует только в EXPRESSION, но и там соответствующие описания могут быть созданы только в рамках единой спецификации всей системы, что не позволяет разделять описания отдельных компонентов. Кроме того, ни одно из существующих инструментальных решений на основе ADL-языков не поддерживает генерацию полного набора кросс-инструментов, а скорость работы и удобство использования отдельных получаемых компонентов остаются на низком уровне.

Назад Содержание Вперёд

Скидка до 20% на услуги дата-центра. Аренда серверной стойки. Colocation от 1U!

Миграция в облако #SotelCloud. Виртуальный сервер в облаке. Выбрать конфигурацию на сайте!

Виртуальная АТС для вашего бизнеса. Приветственные бонусы для новых клиентов!

Виртуальные VPS серверы в РФ и ЕС

Dedicated серверы в РФ и ЕС

По промокоду CITFORUM скидка 30% на заказ VPS\VDS

VPS/VDS серверы. 30 локаций на выбор

Серверы VPS/VDS с большим диском

Хорошие условия для реселлеров

4VPS.SU - VPS в 17-ти странах

2Gbit/s безлимит

Современное железо!

Новости мира IT:

Архив новостей

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 7861149
Пресс-релизы — pr@citforum.ru
Обратная связь
Информация для авторов
Rambler's Top100 TopList This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2019 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...