Студопедия КАТЕГОРИИ: АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Разбиение рабочей матрицы и запись весовых коэффициентов
Для разбиения матрицы на строки и столбцы можно либо воспользоваться выпадающим списком стандартных разбиений (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.Для начала, рассмотрим несколько простых и очевидных примеров использования операции взвешенного суммирования. Выполните следующие действия:
На этом конфигурирование векторного процессора заканчивается и он настроен на выполнение определённой функции. Остаётся подать исходные данные на входы Х и Y рабочей матрицы, и мы получим результат вычислений в регистре afifo. Введите в поле Х 64-разрядную константу 1111111111111111 h, а вход Y пока использовать не будем. Для того чтобы ввести число, вовсе не надо отсчитывать 16 цифр, т.к. больше чем 16 цифр программа в любом случае не даст Вам ввести. Кроме того, следует помнить, что во все окна редактирования данные вводятся и выводятся через них в 16-ричной системе счисления. При этом если введено/выведено менее 16-ти цифр, то предполагается, что слева число дополняется недостающими нулями. Итак, посмотрим, что же мы получили в результате. Если всё сделали правильно, то в afifoбудет число 10 h (16), т.е. это просто сумма 16-ти 4-разрядных тетрад каждая из которых равна 1 h (0001 b). Далее, выполните следующее:
3. Теперь Вам предстоит самостоятельно запрограммировать рабочую матрицу на вычисление 64-разрядного вектора, который в последующих пунктах будет использоваться Вами. Для этого потребуются числа дней рождения Вашей бригады. Исходя из того, что в месяце максимальное число дней 31 = 1 Fh, для разрядности входных данных достаточно 8 бит. Числа необходимо перевести в 16-ричную систему и, при необходимости, дополнить слева нулём до двух 16-ричных цифр. Затем, эти числа записываются по порядку в поле Х. Например, если после перевода получились числа 1 Ah и Ch, то в поле Х их надо ввести так: 1 A0 C или так: C1 A, но не так: 1 AC. Это важно потому, что иначе данные не будут соответствовать разбиению матрицы и результат будет отличен от ожидаемого. Теперь разбейте рабочую матрицу на 64 ячейки (8 бит х 8 бит). В каждом столбце будут выполняться свои операции, которые перечислены ниже в порядке от младших разрядов к старшим. Для их решения, необходимо задать нужные весовые коэффициенты и, при необходимости, соответствующие разряды слова на входе Y. В результате получится искомый вектор, отдельные части которого являются решениями этих задач. Итак, задачи: 1.Вычислите сумму всех дней рождения. 2.Из самого большого дня рождения вычтите остальные. 3.Из суммы всех дней рождения, кроме самого малого вычтите самое малое умноженное на 3 h. 4.Вычислите сумму произведений всех дней рождений на соответствующие им месяца. 5.Вычислите сумму всех дней рождения за вычетом их количества. 6.Вычислите сумму всех дней рождения плюс их количество. 7.Младший байт входа Х. 8.Противоположное значение старшего байта входа Х, отличного от 00 h. Значение входов Х, Y, выхода в afifo и конфигурацию рабочей матрицы (в виде таблицы весовых коэффициентов) занесите в отчет в 16-ричной системе. 9.Кнопкой Clear all очистите конфигурацию процессора. Результат прошлой операции занесите в поле Х. Сейчас, необходимо, с помощью операции взвешенного суммирования поменять местами тетрады в слове Х. Подумайте, как это сделать. Значение выхода в afifo и конфигурацию рабочей матрицы (в виде таблицы весовых коэффициентов) занесите в отчет. 10.Кнопкой Clear all очистите конфигурацию процессора. Теперь рассмотрим операции векторного АЛУ. Векторное АЛУ, в отличие от скалярного работает над 64-разрядными данными. Чтобы его использовать, снимите флажок vsum. Помните, что разбиение на элементы при использовании векторного АЛУ одинаково для входов Х и Y, и задаётся регистром nb. Занесите в поле Y результат полученный в пункте 3, поле Х оставьте равным 0, а разбиение задайте произвольно. Выберите операцию вычитания. В результате получим: afifo = X – Y. Значение входов Х, Y, выхода в afifo и выполняемую операцию занесите в отчет в 16-ричной системе. Рекомендуется записывать в столбик – цифра под цифрой. 11.Сложите на векторном АЛУ результат прошлой операции с результатом пункта 3 не меняя разбиение. Занесите данные, результат и операцию в отчет. Результат должен быть равен 0 h. 12.Проинвертируйте побитно на векторном АЛУ результат пункта 3. Подумайте, какие для этого нужно выбрать операции, значения входов Х, Y и разбиение на элементы. Занесите данные, результат и операцию в отчет в двоичной системе. Убедитесь в правильности результата. 13.Поочерёдно выполните побитовые операции and, or и xor над результатами предыдущего пункта и пункта 3. Все данные, результаты и операции занесите в отчет в двоичной системе. Убедитесь в правильности результатов. 14.Кнопкой Clear all очистите конфигурацию процессора. Рассмотрим операцию маскирования. Выполните операцию маскирования с векторным умножением (см. раздел 1.4.3), настроив процессор согласно первому примеру в пункте 1, но на Y подайте не 0, а то же, что на Х (1111111111111111 h). При этом, вектор масок задайте равным: ffffffffffffffff h и 0 h. Все данные, результаты и операции занесите в отчет. Убедитесь в правильности результатов. 15.Кнопкой Clear all очистите конфигурацию процессора. Выполните операцию логического маскирования (см. раздел 1.4.3), задав на вход Х – результат пункта 3, на вход Y – 8888888888888888 h и Mask = f0f0f0f0f0f0f0f0 h. Все данные, результаты и операции занесите в отчет. Убедитесь в правильности результатов. 16.Кнопкой Clear all очистите конфигурацию процессора. Рассмотрим обработку данных функцией активации. Выполните операцию арифметической активации входа Х (см. раздел 1.4.4) складывая Х (=f31f05) с нулём на векторном АЛУ. При этом, задайте разбиение на элементы по 8 бит с верхним порогом насыщения равным 15 и соответственно, нижним равным -16. Все данные, результаты и операции занесите в отчет в двоичной системе. Убедитесь в правильности результатов. 17.Кнопкой Clear all очистите конфигурацию процессора. Выполните операцию логической активации входа Х (см. раздел 1.4.4), приняв Х равным результату пункта 3. Используйте операцию and с Y = ffffffffffffffff h. При этом, разбиение на элементы задайте равным 16 элементам по 4 бита каждый (см. табл. 1-1). Все данные, результаты и операции занесите в отчет в двоичной системе. Убедитесь в правильности результатов. 18.Кнопкой Clear all очистите конфигурацию процессора. Рассмотрим операцию циклического сдвига вправо операнда Х (см. раздел 1.4.5). Задайте всей матрице, как одной ячейке, весовой коэффициент равный 1 h, чтобы она просто складывала Х и Y. Выполните операцию взвешенного суммирования операнда Х (=0000000000000001 h) и Y (=0 h) два раза: с и без операции shift. Все данные, результаты и операции занесите в отчет. Убедитесь в правильности результатов. Контрольные вопросы
Лабораторная работа № 7 Программирование процессора NeuroMatrix ® NM 6403 Цель работы. Целью работы является ознакомление с языком ассемблера процессора NeuroMatrix® NM6403 (Л18789 ВМ1) и возможностями, которые он предоставляет программисту. |
||
Последнее изменение этой страницы: 2018-05-10; просмотров: 237. stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда... |