3584 МИКРОПРОЦЕССОРНЫЕ СИСТЕМЫ

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

Архитектура процессора NeuroMatrix® NM6403

и его функциональные возможности

Цель работы: ознакомление с общей архитектурой, функциональными особеннос­тями современного отечественного процессора NeuroMatrix® NM6403 (Л1879ВМ1) и его отличиями от других процессоров этого класса.

 

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

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

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

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

2. СТРУКТУРА ПРОЦЕССОРА

2.1. Внешний интерфейс процессора

Структура процессора, описанная в данном разделе, отражает взгляд программиста, поэтому некоторые понятия, которые не используются при программировании, опущены.

Процессор NM6403 имеет четыре канала, по которым он может обмениваться данными с внешними устройствами (см. рис. 1).

 

Рис. 1. Схема каналов доступа к данным со стороны процессора NM6403

Глобальная и локальная шины используются для доступа к внешней памяти. Память, которая доступна через глобальную шину, называется глобальной памятью. Память, доступная через локальную шину, называется локальной.

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

2.2. Общее описание внутренней структуры процессора

Процессор NM6403 имеет следующие внутренние блоки (рис. 2):

  • скалярный процессор (СП);
  • векторный процессор (ВП);
  • два DMA-сопроцессора, управляющие работой коммуникационных портов;
  • два таймера;
  • регистры управления интерфейсом доступа к внешней памяти.

 

Рис. 2. Блочная структура процессора NeuroMatrix NM6403

Процессор NM6403 имеет 64-разрядный интерфейс работы с внешней памятью. За одно обращение к памяти он позволяет записать или прочитать одно 64-разрядное число по каждой из шин.

2.2.1. Описание основных элементов скалярного процессора

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

СП позволяет осуществлять следующие операции:

- различные виды адресации с модификацией адресных регистров;

- чтение/запись в память как 32-разрядных слов, так и пар слов, образующих 64-разрядное число;

- все виды арифметических и логических операций над регистрами общего назначения с модификацией и без модификации флагов состояния;

- различные типы сдвигов, в том числе на произвольное количество битов;

- условные и безусловные переходы, в том числе отложенные переходы;

- вызовы функций с записью в стек адреса возврата, в том числе и отложенные вызовы функций;

- пошаговое умножение;

- управление таймерами;

- настройка регистров управления доступом к внешней памяти на тип, используемый в конкретном устройстве;

- управление векторным процессором путем задания его конфигурации.

2.2.2 Описание основных элементов векторного процессора

ВП представляет собой специализированный матричный узел – операционное устройство (ОУ) для выполнения операций умножения с накоплением, арифметических и логических операций, маскирования, функций активации над векторами и матрицами.

Под векторами понимаются одномерные массивы однородных данных, расположенные в памяти в виде непрерывного блока. Матрица - это массив векторов.

Разрядность всех узлов ВП составляет 64 бита. ВП осуществляет обработку целочисленных данных, которые упакованы в 64-разрядные слова с помощью простой конкатенации (см. рис. 3). В общем случае слово упакованных данных представляет собой вектор D = {Dk...D1}, содержащий k элементов, суммарная разрядность которых составляет 64 бита. Причем в одном слове D могут быть упакованы данные, имеющие разную разрядность. Количество элементов k, упакованных в одном слове, зависит от их разрядностей и может принимать целочисленное значение в диапазоне от 1 до 64.

 

Рис. 3. Формат слова упакованных векторных данных

 

В состав ВП входят следующие компоненты.

Рабочая матрица - операционный узел, в котором осуществляются операции умножения с накоплением. С рабочей матрицей связана пара регистров, которые определяют её разбиение на столбцы и строки. Описание функционирования рабочей матрицы приведено в п. 2.3.1.

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

Векторное АЛУ - устройство, позволяющее совершать стандартный набор арифметических и логических операций над парами 64-разрядных слов, каждое из которых разделено на малоразрядные элементы. При арифметических операциях в случае переполнения внутри диапазона, отведенного под один малоразрядный элемент, блокируется перенос битов в соседний элемент. Более подробное описание работы векторного АЛУ приведено в п. 2.3.2.

Буфер весовых коэффициентов (wfifo) - очередь глубиной в 32 64-разрядных слова, организованная по принципу FIFO. В нее подгружаются весовые коэффициенты, и в ней они хранятся, прежде чем происходит их загрузка в теневую матрицу. Загрузка данных и их выгрузка из wfifo могут осуществляться по частям, то есть, например, в wfifo можно загрузить сначала 8 слов, а затем еще 24, но так, чтобы не произошло переполнения.

Буфер внутренней памяти (ram) - очередь глубиной в 32 64-разрядных слова, организованная по принципу FIFO. Используется как один из аргументов в операциях умножения с накоплением, а также в операциях на векторном АЛУ. В ram может быть загружено от 1 до 32 слов. Буфер может использоваться многократно, однако в операциях должны участвовать все данные, хранящиеся в ram. Не допускается использование только части хранящихся там данных;

Псевдобуфер шины данных (data) используется для обозначения данных, находящихся на шине данных непосредственно в процессе их загрузки из памяти в ВП. Позволяет обрабатывать данные на проходе. Псевдобуфер имеет глубину в 32 64-разрядных слова и организован по принципу FIFO. Используется как один из аргументов в операциях умножения с накоплением, а также в операциях на векторном АЛУ.

Буфер накопления результатов (afifo) - очередь глубиной в 32 64-разрядных слова, организованная по принципу FIFO. Результат любой операции на ВП сохраняется в afifo. Может также использоваться как один из аргументов в операциях умножения с накоплением и в операциях на векторном АЛУ. Для того чтобы получить доступ к результатам вычислений на векторном процессоре, хранящимся в afifo, необходимо выгрузить их в память.

Векторный регистр (vr) - 64-разрядный регистр, используемый в качестве определенного операнда в операции умножения с накоплением. Можно представить его, как буфер, состоящий из заданного количества одинаковых слов. Может быть загружен из СП. Доступен только на запись.

Устройства, обеспечивающие выполнение функции активации над входными векторами. В ВП содержится два устройства, работающих независимо. Они позволяют активировать входные данные перед выполнением операции умножения с накоплением или перед подачей их на векторное АЛУ.

Устройства, обеспечивающие выполнение операции маскирования над входными векторами. Более подробное описание выполнения операции маскирования дано в разделе п. 2.3.3.

Устройство, обеспечивающее циклический сдвиг вправо на один бит слова данных, подаваемого на вход X рабочей матрицы в операции взвешенного суммирования. Более подробное описание работы устройства циклического сдвига дано в п. 2.3.5.

2.3. Основные вычислительные блоки векторного процессора

Основные блоки векторного процессора определяют возможности процессора NM6403 при выполнении следующих операций:

  • умножение с накоплением, называемое также взвешенным суммированием;
  • арифметические и логические операции на векторном АЛУ;
  • маскирование данных;
  • функции активации;
  • сдвиг операнда Х при выполнении взвешенного суммирования.

Помимо этого, приведен порядок выполнения преобразований над данными, если эти преобразования заданы в одной векторной команде.

2.3.1. Взвешенное суммирование

Операция умножения с накоплением выполняется на рабочей матрице, входящей в состав операционного узла ВП. Схематично она представлена на  рис. 4.

Математически операция взвешенного суммирования, выполняемая на операционном узле ВП, записывается следующим образом:

 

где          Zi - элемент выходного вектора Xj - элемент данных, поступающих на вход X операционного узла ВП, Yi - частичная сумма, накопленная на предыдущем шаге взвешенного суммирования, Wij - весовой коэффициент, расположенный в соответствующей ячейке рабочей матрицы процессора, M - количество столбцов и N - количество строк рабочей матрицы соответственно.

Рабочая матрица имеет два входа X и Y (см. рис. 5). На эти входы подаются данные, расположенные во внешней памяти либо во внутренних буферах ram и afifo, работающих по принципу FIFO. Данные из буферов или из памяти могут быть поданы как на вход X, так и на вход Y. То есть, например, вектор 64-разрядных слов, хранящийся в ram, может быть передан на обработку в операционный узел через вход X и/или Y. Для управления потоком данных из внешней памяти используется логический буфер data. В качестве входа Y может также быть использован векторный регистр vr.  Кроме этого, в качестве входов могут выступать так называемые "нулевые" устройства, что означает, что данные на вход не поступают.

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

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

 

 

Рис. 4. Схематичное представление операции взвешенного суммирования

Разбиение матрицы на строки определяется регистром sb2. Этот же регистр определяет разбиение 64-разрядных слов входных данных, поступающих на вход X. В sb2 предварительно записывается слово, определяющее границы разбиения.

Разбиение рабочей матрицы на столбцы задается регистром nb2. Он же определяет разбиение 64-разрядных данных на входе Y и разрядности результатов вычислений, содержащихся в буфере afifo.

Рис. 5 показывает, какие действия может выполнить ВП с помощью одной процессорной инструкции. Допустим, в буфер данных ram было предварительно загружено из памяти 32 длинных слова. При операции взвешенного суммирования из памяти по очереди считываются слова входных данных, каждое из которых направляется на вход X операционного узла ВП. Параллельно из буфера ram считывается очередное слово и направляется на вход Y. Каждый элемент, составляющий слово на входе X, умножается на весовой коэффициент, находящийся в соответствующей ячейке рабочей матрицы, результаты умножения складываются в пределах столбца, а затем к ним добавляется значение элемента, находящегося на соответствующей позиции в слове, поступившем на вход Y. Результат операции записывается в буфер afifo.

Данные, находящиеся в буферах FIFO векторного процессора, хранятся в 64-разрядных словах. Для них на этом этапе разбиение на элементы не определено. Такое разбиение появляется только тогда, когда они поступают на вход X или Y рабочей матрицы или на вход векторного АЛУ. В зависимости от того, на какой вход, Х или Y, поступают данные, они делятся на элементы тем или иным образом.

 

Рис. 5. Схема выполнения операции взвешенного суммирования на ВП

Например, если разбиение входа X – 8 бит, то есть каждое слово представляется как 8 элементов по 8 бит, а разбиение Y – 16 бит, то в зависимости от того, куда будут направлены данные, хранящиеся в ram, на вход X или Y, они будут трактоваться либо как массив 8- либо 16- битных элементов.

2.3.2. Выполнение операций на векторном АЛУ

Арифметические и логические операции на векторном АЛУ выполняются над наборами 64-разрядных слов, подаваемых на входы X и Y операционного узла ВП. Эти наборы подаются на входы из буферов ram, afifo либо из памяти (data). Данные, хранящиеся, например, в ram, могут быть переданы на обработку в операционное устройство как через вход X, так и через вход Y. Кроме этого, в качестве входов могут выступать так называемые "нулевые" устройства, что означает, что данные на вход не поступают. Результат вычислений всегда попадает в afifo.

Входы X и Y векторного АЛУ являются равноправными. Разбиение данных, поступающих на эти входы, на элементы определяется регистром nb2. Регистр sb2 не оказывает никакого влияния на вычисления в векторном АЛУ. В этом состоит особенность работы векторного АЛУ по сравнению с рабочей матрицей.

Операции на векторном АЛУ выполняются с учетом разбиения входных данных на элементы (см. рис. 6). Это означает, что в местах разбиения 64-разрядных слов на элементы ставятся "перегородки", которые в случае переполнения блокируют перенос старшего бита в соседнее поле, занимаемое другим элементом, а также препятствуют распространению знака за пределы границ элемента. При блокировках переноса переносимый бит теряется.

 

Рис. 6. Выполнение вычислений на векторном АЛУ

 

На рис. 7 приведен пример сложения двух 64-разрядных слов, разбитых на 8 элементов по 8 бит каждый, на векторном АЛУ процессора NM6403.

 

Рис. 7. Сложение двух 64-разрядных слов на векторном АЛУ

Серым цветом на рисунке отображены ячейки, где "перегородки" повлияли на результат вычислений.

2.3.3. Операция маскирования

Для выполнения маскирования в операционном узле ВП существует специальное устройство. Оно имеет три входа и два выхода (см. рис. 8). Данные, подаваемые на входы Х и Y рабочей матрицы или векторного АЛУ, сначала проходят через это устройство и только после этого попадают в рабочую матрицу или на векторное АЛУ. Если код векторной ко­манды не включает операцию маскирования, то данные, поступающие на входы X и Y уст­ройства, пропускаются на выход без изменений. Если в коде команды присутствует запрос на маскирование, то используется также третий вход в устройство, на который подается вектор масок. Он может считываться из памяти (data), либо из буферов ram или afifo.

Векторные команды маскирования, как и все остальные векторные команды процессора NM6403, выполняются от 1 до 32 тактов. На каждом такте на входы X, Y и на вход вектора масок подаётся по одному 64-разрядному слову.

Маскирование с векторным умножением

В системе команд процессора существует векторная команда, например:

маска      X             Y

rep 32 data = [ar0++] with vsum ram, data, afifo;

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

ü     побитовая операция AND слова со входа X и слова маски: X and MASK. Эта операция оставляет в результирующем векторе X только те биты, которые в маске были равны единице;

ü     побитовая операция AND слова со входа Y и инвертированного слова маски: Y and not MASK. Эта операция оставляет в результирующем векторе Y только те биты, которые в маске были равны нулю;

ü     выполнение операции взвешенного суммирования над маскированными данными.

 

Рис. 8. Положение устройства маскирования в ОУ ВП

Логическое маскирование

В случае совмещения операции маскирования с обработкой на векторном АЛУ, задаваемой командой:

маска        X            Y

rep 32 data = [ar0++] with mask ram, data, afifo;

над данными на каждом шаге выполняется следующее преобразование:

(X and MASK) or (Y and not MASK)

Сложно записанная формула вероятно скрывает простоту и пользу данного преобразования. На рис. 9 дается пояснение в графической форме.

В тех позициях, на которых в маске стоят единицы, в слово результата будут записаны биты слова со входа X, на остальные места попадут биты слова со входа Y. Таким образом, операция маскирования позволяет за один такт из двух длинных слов собрать одно, взяв нужные биты из одного слова и из другого.

 

 

Рис. 9. Выполнение операции маскирования

 

2.3.4. Обработка данных функцией активации

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

Всего существует два типа функций активации:

ü     пороговая функция (см. рис. 10,а);

ü     функция насыщения (см. рис. 10,б).

Рис. 10. Типы встроенных функций активации процессора NM6403

 

Основную роль в управлении функциями активации играют регистры f1cr и f2cr.

Активация выполняется перед тем, как данные попадут в рабочую матрицу или на векторное АЛУ. Ей могут быть подвергнуты данные, поступающие либо на вход X, либо на вход Y, либо на оба входа сразу.

Выбор типа активации зависит от того, в какой команде эта активация задается.

Арифметическая активация

Функция насыщения выполняется только в составе команды взвешенного суммирования (в том числе и с маскированием) и в арифметических командах на векторном АЛУ. Действие, которое она выполняет, называется также арифметической активацией. Второе название удобно, поскольку позволяет очертить круг векторных команд, совместно с которыми может выполняться функция насыщения. Это векторные команды процессора, содержащие арифметические действия.

Логическая активация

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