Функциональность транслятора — КиберПедия 

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

Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...

Функциональность транслятора

2022-09-11 21
Функциональность транслятора 0.00 из 5.00 0 оценок
Заказать работу

Интерфейс транслятора

Транслятор должен быть реализован в виде отдельного приложения (версии для Windows и Linux), вызываемого из консоли. Формат вызова:

 

<команда> <входной_файл>

 

<команда> - собственно, команда, запускающая транслятор, <входной_файл> - текстовый файл на языке ассемблера nm64 со специальными вставками (блоками) конфигурации PU. Синтаксис блока конфигурации PU описан ниже.

 

В процессе трансляции выявленные ошибки, а также вспомогательная информация выводятся в отдельный файл отчета.

 

Результат трансляции следует выдавать в stdout, а отчет об ошибках – в stderr.

 

Функциональность транслятора

 

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

Вместо каждой из команд конфигурирования транслятор должен выводить код, правила формирования которого описаны в данном документе ниже.

Предполагается следующий алгоритм работы транслятора:

· вывод строк входного файла, не содержащих команд конфигурирования PU,

· обнаружение в коде входного файла команд конфигурирования PU,

· синтаксический разбор, выделение из команды параметров конфигурации PU,

· анализ значений параметров – выявление ошибочных конфигураций,

· расчёт кодов на основе параметров,

· генерация ассемблерного кода на основе рассчитанных кодов и встроенного шаблона.

 


 

Проверка валидности конфигурации

 

Настройка блока PU физически осуществляется через программно-доступные периферийные регистры процессора NMC.

Неправильное сочетание кодов в конфигурационных регистрах PU может привести к зависанию системы. Поэтому функция транслятора – генерировать валидные коды настроек PU на основе заданных пользователем параметров конфигурации.

 

В первую очередь нужно проверить, что заданные пользователем значения параметров вообще лежат в допустимых диапазонах (выше в таблице параметров).

 

На втором этапе нужно проверить, валидно ли сочетание параметров.

 

В конце – рассчитать недостающий параметр in_size или out_size.

 


 

Анализ параметров конфигурации

 

Приведённые ниже условия проверяют валидность сочетания параметров.

 

Генерация кода на основе параметров конфигурации

 

В данном разделе описано, каким образом из заданных пользователем настроек сгенерировать ассемблерный код конфигурирования аппаратного блока PU. На данном этапе предполагается, что настройки валидны, то есть была проведена описанная выше проверка параметров.

Конфигурирование PU заключается в инициализации набора программно-доступных регистров блока определёнными значениями.

Для того чтобы сгенерировать ассемблерный код конфигурирования PU, транслятор должен рассчитать требуемые значения регистров и переменные генерации (переменные генерации используются для подстановок в шаблон и условной генерации). Затем следует подставить рассчитанные значения в шаблон ассемблерного кода конфигурирования PU.

 

Шаблон ассемблерного кода

 

Результат работы транслятора – ассемблерный код – следует генерировать на основе шаблона, подставляя в него рассчитанные значения конфигурационных регистров и переменных. В примере шаблона есть участки между.if и.endif, которые следует генерировать только при выполнении условия (которое после.if). Это НЕ директивы ассемблера, а конструкции, используемые только в этом документе для пояснения, какие фрагменты шаблона следует генерировать, а какие – нет.

Шаблон может быть представлен в любом другом формате, желательно только, чтобы его можно было легко исправлять.

 

 

pswr set 0000_0000_0000_0000_0000_0010_0000_0000b;    

 

.if $address_set

push ar0,gr0;

.endif

 

.if $long_mask_set

pr0 = $REG#0;

pr1 = $REG#1;

.endif

 

.if $short_mask_set

pr8 = $REG#2;

.endif

 

pr9 = $REG#3;

pr10 = $REG#4;

 

.if $address_set

gr0 = $address;

gr0 >>= 1;

pr11 = gr0;

.if $buffer_set

gr0 = $buffer;

gr0 >>= 1;

.endif

pr12 = gr0;

ar0 = ($buffer_size) - 1;

ar0 = ar0 + gr0;

pr13 = ar0;

.endif 

 

pr14 = $REG#8;

pr15 = $REG#9;

 

.if $address_set

pop ar0,gr0;

.endif

 

pswr clear 0000_0000_0000_0000_0000_0010_0000_0000b;

 

 

Регистры REG#0, REG#1, REG#2 следует выводить как константы ассемблера NMC ([2]) в шестнадцатеричном формате, регистры REG#3, REG#4 - как константы ассемблера NMC в десятичном формате, регистры REG#8, REG#9 – как константы в двоичном формате с разделением полей регистра знаками подчёркивания.

 

 


Ссылки

 

1. «Программная модель устройства упаковки/распаковки потоков данных» - последняя версия спецификации IP-блока.

4.2. «NeuroMatrix. Описание языка ассемблера. Справочное руководство»

2.3. «Микросхема интегральная ЦУПП. Руководство по эксплуатации»

 


Приложение А. Функции для расчёта масок

 

Показанный ниже код следует рассматривать как пример реализации функций автоматического расчёта масок из приложения к [1]. Данный код не был проверен - при непосредственной реализации следует убедиться, что он верен, т.е. соответствует спецификации [1].

 

unsigned int get_masks(int out_bitwise)

{

unsigned int t = 2;

unsigned int t1 = 0;

int ne = 64 / out_bitwise;

 

t = t << (out_bitwise - 2);

for (int i=0; i<ne; i++)

{

t1 = t1 | t;

t = t << out_bitwise;

}

return t1;

}

unsigned int get_maskup(int in_bitwise, int out_bitwise)

{

unsigned int t = 1;

unsigned int t1 = 0;

int ne = 64 / out_bitwise;

 

t = t << in_bitwise;

t = t - 1;

 

for (int i=0; i<ne; i++)

{

t1 = t1 | t;

t = t << out_bitwise;

}

return t1;

}

unsigned int get_masksat(in_bitwise, out_bitwise, normalize)

{

unsigned int t = 1;

unsigned int t1 = 0;

int ne = 64 / in_bitwise;

int z = in_bitwise - out_bitwise - normalize;

 

t = t << z;

t = t - 1;

t = t << (out_bitwise -1);

  

for (int i=0; i<ne; i++)

{

t1 = t1 | t;           

t = t << in_bitwise;

}

return t1;

}

unsigned long get_maskcol(out_bitwise, col_bit_offset)

{

unsigned long t = 1;

 

t = t << out_bitwise;

t = t - 1;

 

t = t << col_bit_offset;

return t;

}

 

 


Приложение Б. Соответствие имён регистров в различных версиях документации

 

В различных версиях документации использовались разные названия для регистров блока PU. Таблица ниже показывает соответствие между разными названиями в программной модели (ПМ, [1]), руководстве по эксплуатации СБИС ЦУПП (РЭ, [3]) и названиями регистров в ассемблере NMC3.

 

Соответствие названий регистров PU

ПМ РЭ Ассемблер
REG#0 PUR0 pr0 (окно 1)
REG#1 PUR1 pr1 (окно 1)
REG#2 PUR2 pr8 (окно 1)
REG#3 PUR3 pr9 (окно 1)
REG#4 PUR4 pr10 (окно 1)
REG#5 PUR5 pr11 (окно 1)
REG#6 PUR6 pr12 (окно 1)
REG#7 PUR7 pr13 (окно 1)
REG#8 PUR8 pr14 (окно 1)
REG#9 PUR9 pr15 (окно 1)

 

Интерфейс транслятора

Транслятор должен быть реализован в виде отдельного приложения (версии для Windows и Linux), вызываемого из консоли. Формат вызова:

 

<команда> <входной_файл>

 

<команда> - собственно, команда, запускающая транслятор, <входной_файл> - текстовый файл на языке ассемблера nm64 со специальными вставками (блоками) конфигурации PU. Синтаксис блока конфигурации PU описан ниже.

 

В процессе трансляции выявленные ошибки, а также вспомогательная информация выводятся в отдельный файл отчета.

 

Результат трансляции следует выдавать в stdout, а отчет об ошибках – в stderr.

 

Функциональность транслятора

 

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

Вместо каждой из команд конфигурирования транслятор должен выводить код, правила формирования которого описаны в данном документе ниже.

Предполагается следующий алгоритм работы транслятора:

· вывод строк входного файла, не содержащих команд конфигурирования PU,

· обнаружение в коде входного файла команд конфигурирования PU,

· синтаксический разбор, выделение из команды параметров конфигурации PU,

· анализ значений параметров – выявление ошибочных конфигураций,

· расчёт кодов на основе параметров,

· генерация ассемблерного кода на основе рассчитанных кодов и встроенного шаблона.

 


 


Поделиться с друзьями:

Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...

Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...

История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.036 с.