Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка (НСиНК) - лабораторные работы.doc
Скачиваний:
24
Добавлен:
15.04.2015
Размер:
356.35 Кб
Скачать

Лабораторная работа № 2

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

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

1. Указания к выполнению работы

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

Ознакомиться с порядком ввода микропрограмм и исходными данными.

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

2. Элементы языка ассемблера процессора nm6403

2.1. Формат ассемблерных инструкций

Процессор NM6403 работает с машинными командами 32- и 64-разрядного формата, причем в одной машинной команде содержится две операции процессора. В этом смысле NM6403 представляет собой скалярный микропроцессор со статической Very Long Instruction Word (V LIW) архитектурой. При этом используются короткие и длинные инструкции. Причем короткие инструкции не содержат константы и имеют разрядность 32 бита. А длинные инструкции содержат в коде команды 32-разрядную константу. Поэтому их разрядность составляет 64 бита. Процессор адресуется к 32-разрядным словам. На хранение коротких инструкций отводится одна ячейка памяти, для длинных – две.

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

Все инструкции процессора NM6403 делятся на два типа:

  • скалярные инструкции, которые управляют работой скалярного RISC-ядра, таймеров, осуществляют загрузку/чтение всех регистров (доступных по чтению/записи) за исключением векторных регистров, образующих очереди FIFO;

  • векторные инструкции, которые управляют работой векторного процессора.

Обе части инструкции выполняются процессором одновременно за один такт. В левой части инструкции записываются только адресные операции, в правой - все арифметическо-логические , не связанные с вычислением адресов и обращением к памяти. Левая и правая части инструкции соединяются воедино с помощью ключевого слова with .

Пример скалярной инструкции процессора:

gr 0 = [ ar 0++] with gr 1 = gr 3 + gr 0;

gr 1 = gr 3 + gr 0 – правая часть инструкции, арифметическая операция;

gr 0 = [ ar 0++] – левая часть инструкции, адресная операция.

В языке ассемблера левая или правая части инструкции могут быть опущены, однако, поскольку процессор не может выполнить только левую или только правую часть команды, вместо опускаемой части при компиляции автоматически добавляется пустая операция nul. То есть ассемблерная инструкция, записанная как: gr0 = [ar0++], трактуется ассемблером как: gr 0 = [ ar 0++] with nul. Аналогично с левой частью: gr1 = gr3 + gr 0 рассматривается как: nul with gr 1 = gr 3 + gr 0.

Для улучшения читаемости программы, в случае, если левая или правая часть инструкции не используется, связка with может опускаться.

2.2. Векторные инструкции процессора

Векторные инструкции процессора так же, как и скалярные, разделены на левую и правую части. Однако, помимо этого, они имеют дополнительное поле, которое присутствует во всех векторных инструкциях за исключением одиночных инструкций ftw и wtw . Поле, о котором идет речь, называется полем количества повторений. Вот пример того, как выглядит векторная инструкция:

rep 32 data = [ar1++] with vsum , data, afifo;.

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

В случае, если левая часть инструкции опущена, поле повторения и слово-связка with остаются при написании инструкции, например:

rep 16 with ram - 1; // правильная инструкция.

Любые другие формы записи инструкции, такие как:

rep 16 ram - 1; или with ram - 1; , являются ошибочными, о чем сообщит компилятор.