Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...
Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...
Топ:
Определение места расположения распределительного центра: Фирма реализует продукцию на рынках сбыта и имеет постоянных поставщиков в разных регионах. Увеличение объема продаж...
Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов...
Проблема типологии научных революций: Глобальные научные революции и типы научной рациональности...
Интересное:
Средства для ингаляционного наркоза: Наркоз наступает в результате вдыхания (ингаляции) средств, которое осуществляют или с помощью маски...
Влияние предпринимательской среды на эффективное функционирование предприятия: Предпринимательская среда – это совокупность внешних и внутренних факторов, оказывающих влияние на функционирование фирмы...
Инженерная защита территорий, зданий и сооружений от опасных геологических процессов: Изучение оползневых явлений, оценка устойчивости склонов и проектирование противооползневых сооружений — актуальнейшие задачи, стоящие перед отечественными...
Дисциплины:
2022-09-11 | 22 |
5.00
из
|
Заказать работу |
|
|
В данном разделе описано, каким образом из заданных пользователем настроек сгенерировать ассемблерный код конфигурирования аппаратного блока PU. На данном этапе предполагается, что настройки валидны, то есть была проведена описанная выше проверка параметров.
Конфигурирование PU заключается в инициализации набора программно-доступных регистров блока определёнными значениями.
Для того чтобы сгенерировать ассемблерный код конфигурирования PU, транслятор должен рассчитать требуемые значения регистров и переменные генерации (переменные генерации используются для подстановок в шаблон и условной генерации). Затем следует подставить рассчитанные значения в шаблон ассемблерного кода конфигурирования PU.
Расчёт значений регистров и переменных генерации
На данном этапе транслятор должен рассчитать значения конфигурационных регистров
· REG#0, REG#1, REG#2, REG#3, REG#4, REG#8, REG#9 (названия взяты из [1])
и значения переменных
· $long_mask_set (логического типа),
· $short_mask_set (логического типа),
· $address (строка),
· $buffer (строка),
· $buffer_size (строка),
· $address_set (логического типа),
· $buffer_set (логического типа).
В регистрах, имеющих поля, следует рассчитать каждое поле отдельно и затем собрать целое значение регистра, учитывая специфицированную [1] разрядность полей; зарезервированные поля заменять нулями. Ниже даны формулы с использованием операторов языка C. Функции вычисления масок даны в приложении.
REG#8.NCODE = in_bitwise >> 1;
REG#8.MCODE = out_bitwise >> 1;
REG#8.Y = (in_matrix | (in_bitwise > out_bitwise))? 64: in_bitwise * step;
REG#8.NPB = 64 * min(in_bitwise, out_bitwise) / max(in_bitwise, out_bitwise);
REG#8.NPE = max(in_bitwise, out_bitwise) / min(in_bitwise, out_bitwise);
REG#9.PACK = in_bitwise > out_bitwise; // важно при in_bitwise==out_bitwise использовать режим распаковки
|
REG#9.SE = sign_extend;
REG#9.SAT = saturate;
REG#9.BIT = (in_bitwise==1) | (out_bitwise==1);
REG#9.MSB = reverse;
REG#9.MATIN = in_matrix;
REG#9.MATOUT = out_matrix;
REG#9.DIAG = out_main_diag;
REG#9.COL = out_column;
REG#9.COLNUM = col_bit_offset;
REG#9.Xs = normalize;
REG#9.SHIFT = normalize + in_align;
if ((in_bitwise!=1) & (out_bitwise!=1))
{
REG#2 = (in_bitwise > out_bitwise)? get_masks(out_bitwise): get_maskup(in_bitwise, out_bitwise);
}
if ((in_bitwise > out_bitwise) & saturate)
{
REG#0 = get_masksat(in_bitwise, out_bitwise, normalize);
REG#1 = REG#0;
$long_mask_set = 1;
}
if (out_matrix & out_column)
{
unsigned long t = get_maskcol(out_bitwise, col_bit_offset);
REG#0 = (unsigned int) t & 0x00000000FFFFFFFF;
REG#1 = (unsigned int) ((t & 0xFFFFFFFF00000000) >> 32);
$long_mask_set = 1;
}
REG#4 = in_size;
REG#3 = out_size;
if (defined(source))
{
REG#9.MODE = 2; // режим Master-Slave
$address = source;
$address_set = 1;
}
else
{
if (defined(destination))
{
REG#9.MODE = 1; // режим Slave-Master
$address = destination;
$address_set = 1;
}
else
{
REG#9.MODE = 3; // режим Slave-Slave
}
}
if (defined(source) | defined(destination))
{
if (defined(buffer))
{
$buffer = buffer;
$buffer_set = 1;
}
$buffer_size = defined(buffer_size)? buffer_size: (defined(source)? in_size: out_size);
}
Шаблон ассемблерного кода
Результат работы транслятора – ассемблерный код – следует генерировать на основе шаблона, подставляя в него рассчитанные значения конфигурационных регистров и переменных. В примере шаблона есть участки между.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) |
|
|
Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначенные для поддерживания проводов на необходимой высоте над землей, водой...
Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...
Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...
Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!