Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Формирование векторной команды



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

Рекомендуется соблюдать следующий порядок формирования команды:

  1. Определить операционное устройство: либо рабочая матрица (операция взвешенного суммирования), либо векторное АЛУ. В первом случае – установить флажок " Vsum";
  2. Если необходимо, то подключить регистры маскирования и активации. При работе с векторным АЛУ задать требуемую арифметико-логическую операцию в группе переключателей " Operations";
  3. Задать необходимое разбиение матрицы;
  4. Ввести входные значения.

Действия пользователя по формированию команды отображаются в поле " Command". Обозначения, принятые при выводе команды, не соответствуют реальным устройствам процессора Л1879ВМ1. Например, команда маскирования может выглядеть следующим образом: rep 1 with mask M, shift X, activate Y;

В реальной команде вместо операндов M, X и Y необходимо использовать существующие аппаратные ресурсы (data, ram, afifo и т. д.).

Разбиение рабочей матрицы и запись весовых коэффициентов

Для разбиения матрицы на строки и столбцы можно либо воспользоваться выпадающим списком стандартных разбиений (nbl, nbh, sbl, sbh), либо вводить константы разбиения в окна ввода, либо разбить матрицу в визуализаторе с помощью кнопок-переключателей. Все изменения в матрице отображаются в визуализаторе и в окнах ввода. Для удобства 64-х разрядные регистры разбиения (nb1 и sb) разделены на младшие и старшие части. При необходимости, можно скопировать значение младшей части регистра в старшую часть (кнопка " -> " ). Следует учитывать, что при работе с арифметико-логическими командами (в отличие от команд взвешенного суммирования) разбиение можно задать только в регистрах nbl и nbh, то есть вектора на входах X и Y будут иметь одинаковое разбиение. В операции взвешенного суммирования разбиение на столбцы (nbl, nbh) может отличаться от разбиения на строки (sbl, sbh). Весовые коэффициенты можно задать щелчком мыши в визуализаторе матрицы, устанавливая/сбрасывая необходимые биты. Альтернативный способ – вызов окна диалога из всплывающего меню. В этом случае, можно задать значение всей строке, либо одному весовому коэффициенту. В окне диалога предусмотрен ввод шестнадцатеричных и десятичных значений. Для просмотра всех введённых весов можно воспользоваться генератором кода (кнопка " Code" ). Весовые коэффициенты будут записаны в секцию данных в массиве Weights.

Установка входных значений

Входные значения (Entry X, Entry Y), маску (Mask X, Mask Y), пороги для функции активации можно задать щелчком мыши в визуализаторе матрицы на соответствующих регистрах, устанавливая/сбрасывая необходимые биты, либо вводя значения в соответствующие окна ввода.

Генератор кода

Сформированная пользователем команда, входные значения, константы разбиения и другая введённая пользователем информация используются для генерирования листинга ассемблерного кода. В листинге определены секция данных (значения, определённые пользователем) и секция кода – пример реализации функции с вызовом векторной команды. Генератор кода включается кнопкой " Code".

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

ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ

  1. Запустите программу NMCalculator, разверните её на весь экран, и выберите в главном меню: Setup -> Step of grid -> 5 для 15” монитора или Setup -> Step of grid -> 6 для 17” монитора.
  2. Для начала, рассмотрим несколько простых и очевидных примеров использования операции взвешенного суммирования. Выполните следующие действия:

· Выберите операцию взвешенного суммирования, установив флажок на индикаторе vsum.

· Разбейте рабочую матрицу на 16 строк по 4 бита. Для этого, выберите из выпадающего списка поля sbl нужное значение. При этом, это значение будет автоматически скопировано и в старшую часть этого регистра.

· В результате такого разбиения получилась матрица из 16 ячеек. Теперь, в каждую ячейку запишите весовой коэффициент равный 1. Для этого, щёлкая правой кнопкой мыши на ячейке, выберите пункт всплывающего меню Set element … и в появившемся окне введите 1.

На этом конфигурирование векторного процессора заканчивается и он настроен на выполнение определённой функции. Остаётся подать исходные данные на входы Х и Y рабочей матрицы, и мы получим результат вычислений в регистре afifo. При этом если введено/выведено менее 16-ти цифр, то предполагается, что слева число дополняется недостающими нулями. Итак, посмотрим, что же мы получили в результате. Если всё сделали правильно, то в afifo будет число 10 h (16), т.е. это просто сумма 16-ти 4-разрядных тетрад каждая из которых равна 1 h (0001 b ). Далее, выполните следующее:

· Подайте на вход Y 2 h. Как видите, она прибавляется к результату.

· Измените значение на входе X таким образом, чтобы результат снова стал равным 10 h. Занесите в отчет это значение.

· Верните начальные значения входов Х (=1111111111111111 h ) и Y (=0 h ).

· Изменим конфигурацию рабочей матрицы: установите в ноль значение весового коэффициента самой нижней ячейки. При этом значение результата должно стать на единицу меньше ( fh ). Объясните почему это происходит. Пояснения занесите в отчет.

· Удалите одну единицу со входа Х. Какую по-вашему, единицу Вы удалили – старшую или младшую? Как при этом изменится результат? Запомните это для себя.

· Теперь повторите последние 3 пункта, но весовой коэффициент надо установить в ноль не нижней ячейки, а самой верхней. Обратите внимание, что при удалении одной единицы со входа Х, т.е. замене его старшей тетрады на ноль, результат в afifo уже не уменьшается на 1 как прежде. Объясните почему это происходит. Пояснения занесите в отчет.

· Верните начальные значения входов Х (=1111111111111111 h ), Y (=0 h ) и конфигурацию рабочей матрицы.

· Разбейте рабочую матрицу на 2 столбца по 32 бита каждый. Задайте значения весовых коэффициентов рабочей матрицы в левом столбце следующими: самый нижний -1, второй снизу 2 h, а остальные оставьте равными 0. Для того чтобы ввести -1 не обязательно переводить её в ffffffffh, можно вводить прямо в десятичной системе, установив переключатель в окне ввода весового коэффициента на Decimal. Проанализируем результат: 100000010. Младшие 8 цифр (00000010) – это результат прошлой операции по сложению всех тетрад входа Х плюс младшие 32 разряда входа Y. А вот старшие 8 цифр (00000001) – это результат новой операции, которая равна удвоенному значению второй тетрады за вычетом первой тетрады и плюс старшие 32 разряда входа Y. Таким образом, мы запрограммировали векторный узел процессора на одновременное выполнение двух операций над одними и теми же входными данными. Например, можно разбить матрицу на три столбца следующим образом: 5/27/32 или 1/2/21/40. Допустимо использование не всей матрицы.

· Измените слово на входе Х на следующее: 11 h. Выпишите результат операции в отчет и объясните его.

· Измените слово на входе Х на следующее: 1 h. Выпишите результат операции в отчет и объясните его.

  1. Теперь Вам предстоит самостоятельно запрограммировать рабочую матрицу на вычисление 64-разрядного вектора, который в последующих пунктах будет использоваться Вами. Для этого потребуются числа дней рождения Вашей бригады. Исходя из того, что в месяце максимальное число дней 31 = 1 Fh, для разрядности входных данных достаточно 8 бит. Числа необходимо перевести в 16-ричную систему и, при необходимости, дополнить слева нулём до двух 16-ричных цифр. Затем, эти числа записываются по порядку в поле Х. Например, если после перевода получились числа 1 Ah и Ch, то в поле Х их надо ввести так: 1 A 0 C или так: C 1 A, но не так: 1 AC. Это важно потому, что иначе данные не будут соответствовать разбиению матрицы и результат будет отличен от ожидаемого. Теперь разбейте рабочую матрицу на 64 ячейки (8 бит х 8 бит). В каждом столбце будут выполняться свои операции, которые перечислены ниже в порядке от младших разрядов к старшим. Для их решения, необходимо задать нужные весовые коэффициенты и, при необходимости, соответствующие разряды слова на входе Y. В результате получится искомый вектор, отдельные части которого являются решениями этих задач. Итак, задачи:
  1. Вычислите сумму всех дней рождения.
  2. Из самого большого дня рождения вычтите остальные.
  3. Из суммы всех дней рождения, кроме самого малого вычтите самое малое умноженное на 3 h.
  4. Вычислите сумму произведений всех дней рождений на соответствующие им месяца.
  5. Вычислите сумму всех дней рождения за вычетом их количества.
  6. Вычислите сумму всех дней рождения плюс их количество.
  7. Младший байт входа Х.
  8. Противоположное значение старшего байта входа Х, отличного от 00 h.

Значение входов Х, Y, выхода в afifo и конфигурацию рабочей матрицы (в виде таблицы весовых коэффициентов) занесите в отчет в 16-ричной системе.

  1. Кнопкой Clear all очистите конфигурацию процессора. Результат прошлой операции занесите в поле Х. Сейчас, необходимо, с помощью операции взвешенного суммирования поменять местами тетрады в слове Х. Подумайте, как это сделать. Значение выхода в afifo и конфигурацию рабочей матрицы (в виде таблицы весовых коэффициентов) занесите в отчет.
  2. Кнопкой Clear all очистите конфигурацию процессора. Теперь рассмотрим операции векторного АЛУ. Векторное АЛУ, в отличие от скалярного работает над 64-разрядными данными. Чтобы его использовать, снимите флажок vsum. Помните, что разбиение на элементы при использовании векторного АЛУ одинаково для входов Х и Y , и задаётся регистром nb. Занесите в поле Y результат полученный в пункте 3, поле Х оставьте равным 0, а разбиение задайте произвольно. Выберите операцию вычитания. В результате получим: afifo = X Y. Значение входов Х, Y, выхода в afifo и выполняемую операцию занесите в отчет в 16-ричной системе. Рекомендуется записывать в столбик – цифра под цифрой.
  3. Сложите на векторном АЛУ результат прошлой операции с результатом пункта 3 не меняя разбиение. Занесите данные, результат и операцию в отчет. Результат должен быть равен 0 h.
  4. Проинвертируйте побитно на векторном АЛУ результат пункта 3. Подумайте, какие для этого нужно выбрать операции, значения входов Х, Y и разбиение на элементы. Занесите данные, результат и операцию в отчет в двоичной системе. Убедитесь в правильности результата.
  5. Поочерёдно выполните побитовые операции and, or и xor над результатами предыдущего пункта и пункта 3. Все данные, результаты и операции занесите в отчет в двоичной системе. Убедитесь в правильности результатов.
  6. Кнопкой Clear all очистите конфигурацию процессора. Рассмотрим операцию маскирования. Выполните операцию маскирования с векторным умножением (см. раздел 1.4.3), настроив процессор согласно первому примеру в пункте 1, но на Y подайте не 0, а то же, что на Х (1111111111111111 h ). При этом, вектор масок задайте равным: ffffffffffffffff h и 0 h. Все данные, результаты и операции занесите в отчет. Убедитесь в правильности результатов.
  7. Кнопкой Clear all очистите конфигурацию процессора. Выполните операцию логического маскирования (см. раздел 1.4.3), задав на вход Х – результат пункта 3, на вход Y – 8888888888888888 h и Mask = f0f0f0f0f0f0f0f0 h. Все данные, результаты и операции занесите в отчет. Убедитесь в правильности результатов.
  8. Кнопкой Clear all очистите конфигурацию процессора. Рассмотрим обработку данных функцией активации. Выполните операцию арифметической активации входа Х (см. раздел 1.4.4) складывая Х (=f31f05) с нулём на векторном АЛУ. При этом, задайте разбиение на элементы по 8 бит с верхним порогом насыщения равным 15 и соответственно, нижним равным -16. Все данные, результаты и операции занесите в отчет в двоичной системе. Убедитесь в правильности результатов.
  9. Кнопкой Clear all очистите конфигурацию процессора. Выполните операцию логической активации входа Х (см. раздел 1.4.4), приняв Х равным результату пункта 3. Используйте операцию and с Y = ffffffffffffffff h. При этом, разбиение на элементы задайте равным 16 элементам по 4 бита каждый (см. табл. 1-1). Все данные, результаты и операции занесите в отчет в двоичной системе. Убедитесь в правильности результатов.
  10. Кнопкой Clear all очистите конфигурацию процессора. Рассмотрим операцию циклического сдвига вправо операнда Х (см. раздел 1.4.5). Задайте всей матрице, как одной ячейке, весовой коэффициент равный 1 h, чтобы она просто складывала Х и Y. Выполните операцию взвешенного суммирования операнда Х (=0000000000000001 h ) и Y (=0 h ) два раза: с и без операции shift. Все данные, результаты и операции занесите в отчет. Убедитесь в правильности результатов.

ЛАБОРАТОРНАЯ РАБОТА № 2

Программирование нейромикропроцессора NeuroMatrix ® NM 6403

Ц ель работы: ознакомление с языком ассемблера нейромикропроцессора NeuroMatrix ® NM 6403 (Л18789 ВМ1) и возможностями, которые он предоставляет программисту.

ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ

По материалам разделов 2 и 3 изучить структуру формат ассемблерных инструкций структуру микрокоманд (МК), порядок ввода данных, кодирование и выполнение МК.

По материалам раздела 4 ознакомиться с порядком ввода микропрограмм и исходные данные.

Выполнить упражнения из раздела 5 по указанию преподавателя.


Поделиться:



Популярное:

Последнее изменение этой страницы: 2016-08-31; Просмотров: 825; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.014 с.)
Главная | Случайная страница | Обратная связь