Система команд микропроцессорного ядра MicroBlaze

Компоненты и технологии, № 1'2004

Система команд

микропроцессорного ядра MicroBlaze

В предыдущей публикации цикла была дана общая характеристика и рассмотрена архитектура семейства микропроцессорных ядер МкгоВ1ахе, которые предназначены для применения в проектах, реализуемых на основе ПЛИС серий РРЭД фирмы ХМшх [1]. Продолжая тему, настоящая статья представляет подробное описание системы команд этих ядер.

Валерий Зотов

walerry@euro.ru

Общая характеристика команд МкгоВ1аге

В системе команд микропроцессорного ядра МкгоВ1аге при классификации по функциональному признаку можно выделить девять групп инструкций. К первой группе относятся инструкции, предназначенные для выполнения основных арифметических операций. В эту группу входят команды сложения, вычитания, умножения, деления и сравнения двух 32-разрядных операндов. Значение одного из операндов, участвующих в арифметических операциях, содержится в регистре общего назначения, номер которого указан в команде. В качестве второго операнда может использоваться значение, заданное непосредственно в коде команды, или содержимое другого регистра общего назначения.

Вторую группу образуют логические инструкции. Эти команды выполняют поразрядные операции «Логическое И» (поразрядное умножение), «Логическое ИЛИ» (поразрядное сложение), «Исключающее ИЛИ». В качестве операндов могут выступать значения содержимого двух регистров общего назначения, а также содержимое любого регистра общего назначения и константа, указанная в тексте команды.

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

Четвертую группу составляют инструкции преобразования типов данных. Команды этой группы предназначены для реформирования данных различной длины до 32-разрядного значения. Как пра-

вило, для этих целей используется операция знакового расширения.

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

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

В седьмую группу входят инструкции ввода-вывода. Эти команды предназначены для организации обмена данными между регистрами общего назначения и входными-выходными интерфейсами, соответствующими спецификации FSL (Fast Simplex Link). Для каждого режима чтения данных, поступающих через входной интерфейс FSL, предусмотрены соответствующие версии инструкций, которые используются для записи считанной информации в выбранный регистр общего назначения. Несколько вариантов команд вывода позволяют реализовать различные режимы передачи данных из любого регистра общего назначения через выходной интерфейс FSL.

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

Последняя группа объединяет команды, используемые для работы с кэш-памятью. В нее входят инструкции записи в кэш-память данных и в кэшпамять команд.

Компоненты и технологии, № 1'2004

Форматы команд, поддерживаемых микропроцессорным ядром MicroBlaze

Тип А

В системе команд микропроцессорного ядра MkroBlаze используется в основном два типа формата инструкций. Структура этих вариантов форматов команд показана нарис. 1. Длина всех инструкций, независимо от типа формата, составляет тридцать два двоичных разряда.

Команды, которые относятся к первому типу формата (типу А), включают в себя пять полей. Первые четыре поля инструкции являются основными, а последнее — вспомогательным. Основными полями инструкций типа А являются:

• поле кода операции;

• поле номера регистра общего назначения, предназначенного для записи результата выполняемой операции;

• поле номера регистра, содержащего значение первого операнда;

• поле номера регистра, содержащего значение второго операнда.

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

Команды, принадлежащие ко второму типу формата (типу В), состоят из четырех полей, первые три из которых выполняют те же функции и имеют ту же длину, что и в инструкциях типа А:

• поле кода операции;

• поле номера регистра, предназначенного для записи результата выполняемой операции;

• поле номера регистра, содержащего значение первого операнда;

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

Как видно из рис. 1, формат команд, относящихся к типу В, позволяет указывать непосредственно в составе инструкции значение

Поле кода операции Поле номера регистра, для записи результата Поле номера регистра содержащего первый операнд Поле номера регистра, содержащего второй операнд Поле дополнительных параметров Название паля команды

Тип В

Пале кода операции Поле номера регистра, для записи результата Поле номера регистра содержащего первый операнд Поле константы, указываемой непосредственно в инструкции Название поля команды

011 І2 13 І4 1 5 6 17 18 19 110 11 І12І13І14І15 16І17І18 І19 120121122І23І24І25І26І27І28129І30І31 № разряда

Рис. 1. Основные варианты форматов команд, поддерживаемых микропроцессорным ядром MicroBlаze

16-разрядной константы. При этом в качестве операнда обычно используется результат знакового расширения этого значения до 32-разрядного слова. Для того чтобы получить непосредственное 32-разрядное значение операнда, в системе команд микропроцессорного ядра MicroBlаze предусмотрена специальная инструкция расширения 1ММ. Эта команда позволяет использовать в последующей инструкции типа В 32-разрядное значение константы.

Группа арифметических команд

Арифметические команды микропроцессорного ядра MicroBlaze обеспечивают выполнение операций сложения, вычитания, умножения, деления и сравнения над двумя 32-разрядными операндами. Первым параметром в арифметической команде всегда является номер одного из регистров общего назначения, который используется для записи результата выполняемой операции. В качестве номера регистра может использоваться любое число в диапазоне от 1 до 31. Второй параметр определяет номер регистра общего назначения, который содержит значение первого операнда. В роли второго операнда может выступать константа, значение которой задается непосредственно в коде команды, или содержимое любого регистра общего назначения. Таким образом, третий параметр арифметической команды определяет значение константы или номер регистра, содержимое которого используется в качестве второго операнда.

В системе команд микропроцессорного ядра MicroBlaze представлены восемь вариантов инструкций, предназначенных для выполнения операций сложения. Для вычисления суммы двух 32-разрядных слагаемых без учета переноса используются инструкции ADD, ADDK, ADDI и ADDIK, форматы которых представлены в таблице 1.

Команды ADD Rd,Ra,Rb и ADDK Rd,Ra,Rb выполняют сложение содержимого двух регистров общего назначения с номерами a и b без учета переноса. Инструкции ADDI Rd,Ra, Imm и ADDIK Rd,Ra,Imm предназначены для суммирования без учета переноса содержимого регистра общего назначения с номером a и значения, которое является результатом знакового расширения 16-разрядной константы Imm до 32-разрядного слова. Если инструкции ADDI или ADDIK предшествует команда IMM, то указанное в ней значение используется в качестве 16 старших разрядов второго слагаемого. Значение суммы, полученное в результате выполнения рассмотренных команд, записывается в регистр с номером d. После исполнения команд сложения ADD и ADDI флаг переноса (займа) Carry Flag (29-й разряд регистра статуса) устанавливается в состояние высокого логического уровня в том случае, если в результате выполненной операции происходит перенос из самого старшего разряда. В противном случае этот флаг переключается в сброшенное состояние (низкого логического уровня). В отличие от команд ADD и ADDI инструкции ADDK и ADDIK позволяют реализовать аналогич-

Таблица 1. Форматы команд сложения двух операндов без учета переноса

Поле кода операции Поле номера первого регистра Поле номера второго регистра Поле номера третьего регистра Нулевые разряды Мнемоника Выполняемая операция

0 0 0 0 0 0 d d d d d a a a a a b b b b b 0 0 0 0 0 0 0 0 0 0 0 ADD Rd,Ra,Rb Сложение содержимого регистров Ra и Rb без учета переноса и запись результата в регистр Rd

0 0 0 1 0 0 d d d d d a a a a a b b b b b 0 0 0 0 0 0 0 0 0 0 0 ADDK Rd,Ra,Rb Сложение содержимого регистров Ra и Rb без учета переноса с записью результата в регистр Rd, без изменения флага переноса

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Номер разряда микрокоманды

Поле кода операции Поле номера первого регистра Поле номера второго регистра Поле значения константы Мнемоника Выполняемая операция

0 0 1 0 0 0 d d d d d a a a a a i i i i i i i i i i i i i i i i ADDI Rd,Ra,Imm Сложение содержимого регистра Ra и знакового расширения константы Imm без учета переноса, с записью результата в регистр Rd

0 0 1 1 0 0 d d d d d a a a a a i i i i i i i i i i i i i i i i ADDIK Rd,Ra,Imm Сложение содержимого регистра Ra и знакового расширения константы Imm без учета переноса, с записью результата в регистр Rd, без изменения флага переноса

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Номер разряда микрокоманды

Компоненты и технологии, № 1'2004

ные операции, не изменяя при этом состояние флага переноса (займа) Carry Flag. Рисунок 2 в наглядной форме поясняет выполнение операций сложения без учета переноса.

Сложение двух операндов с учетом переноса, полученного при выполнении предыдущей операции, производится с помощью команд ADDC, ADDKC, ADDIC и ADDIKC, форматы которых приведены в таблице 2.

Команды ADDC Rd,Ra,Rb и ADDKC Rd,Ra,Rb используются для вычисления суммы содержимого двух регистров общего назначения с номерами а и b с учетом состояния флага переноса перед выполнением этой операции. Команды ADDIC Rd,Ra,Imm и ADDIKC Rd,Ra,Imm суммируют значение содержимого регистра с номером a с результатом знакового расширения 16-разрядной константы Imm, указанной непосредственно в инструкции, до 32-разрядного слова. Чтобы использовать в качестве второго слагаемого 32-разрядную константу, следует перед командой ADDIC или ADDIKC поместить инструкцию IMM. Для записи результата вычислений, выполняемых с помощью команд ADDC, ADDKC, ADDIC и ADDIKC, используется регистр общего назначения с номером d. Процесс выполнения команд сложения двух операндов с учетом переноса отображен на рис. 3.

При выполнении команд ADDC и ADDIC итоговое состояние флага переноса (займа) Carry Flag в регистре статуса зависит от полученного результата. При возникновении в результате операции сложения переноса

CARRY Flag Нет переноса

1 * 1 Есть перенос <—1

1 Регистр Ra Регистр Rd | ADD Rd,Ra,lmm | Регистр Rd

1 МММММ МММММММ МММ 1II МММ MMIM ММ МММ ММ М+| llllllllllllllllllllllllllllllll

IADDK Rd,Ra,lmm|

CARRY Flag Нет переноса „ Константа,

1 3 1 I I Есть перенос i •*—I указанная lo в команде

Регистр Ra

Регистр Rd | ADDI Rd,Ra,lmm | У ' lo 1 15

1IIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 1ГП IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIM+l llllllllllllllllllllllllllllllll

1 ADDIK Rd,Ra,lmm|

Рис. 2. Выполнение операций сложения двух операндов без учета переноса

Нет переноса CARRY ГЛ 0 H„3 H Есть перенос 1 Регистр Rd . Регистр Ra Регистр Rd CARRY lADDC Rd.Ra.Rbl Flag

lllllllllllllllllllllllllllllllll^ MMMMMIMMMIMIMMMMIMI+MMIMMMMMMMMMIMMMIM+LJ

I ADDKC Нет переноса CARRY Ш 0 Fln0  ^ Есть перенос 1 ♦, Регисф Rd id,Ra,Rb 1 Константа, указанная Рпгилтр Rn ? ,КОМлОНДв CARRY

|ADDICRd,Ra,lmm| ' vi0 l'l«iFla9

llllllllllllllllllllllllllllllllir ММІММММММММММІМММІ+МММММІММММІММІІММІМ+П

1 АОРКС Нс1,Ка,1тт 1 Рис. 3. Осуществление операций сложения двух операндов с учетом переноса

из самого старшего разряда этот флаг переключается в установленное состояние (высокого логического уровня). При отсутствии переноса из самого старшего разряда в итоговой сумме флаг переноса (займа) сбрасывается в состояние низкого логического уровня. Инструкции АВВКС и АОВ1КС выполняют операции сложения двух операндов

с учетом переноса, сохраняя при этом исходное состояние флага переноса (займа).

Для выполнения операций вычитания предусмотрены восемь вариантов инструкций. Вычисление разности двух операндов без учета займа выполняется с помощью инструкций RSUB, RSUBK, RSUBI и RSUBIK, форматы которых представлены в таблице 3.

Таблица 2. Форматы команд сложения двух операндов с учетом переноса

Поле кода операции Поле номера первого регистра Поле номера второго регистра Поле номера третьего регистра Нулевые разряды Мнемоника Выполняемая операция

0 0 0 0 1 0 d d d d d a a a a a b b b b b 0 0 0 0 0 0 0 0 0 0 0 ADDC Rd,Ra,Rb Сложение содержимого регистров Ra и Rb с учетом переноса и запись результата в регистр Rd

0 0 0 1 1 0 d d d d d a a a a a b b b b b 0 0 0 0 0 0 0 0 0 0 0 ADDKC Rd,Ra,Rb Сложение содержимого регистров Ra и Rb с учетом переноса, с записью результата в регистр Rd, без изменения флага переноса

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Номер разряда микрокоманды

Поле кода операции Поле номера первого регистра Поле номера второго регистра Поле значения константы Мнемоника Выполняемая операция

0 0 1 0 1 0 d d d d d a a a a a і і і і і і і і і і і і і і і і ADDIC Rd,Ra,Imm Сложение содержимого регистра Ra и знакового расширения константы 1тт с учетом переноса, с записью результата в регистр Rd

0 0 1 1 1 0 d d d d d a a a a a і і і і і і і і і і і і і і і і ADDIKC Rd,Ra,Imm Сложение содержимого регистра Ra и знакового расширения константы 1тт с учетом переноса, с записью результата в регистр Rd, без изменения флага переноса

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Номер разряда микрокоманды

Таблица 3. Форматы команд вычитания двух операндов без учета займа

Поле кода операции Поле номера первого регистра Поле номера второго регистра Поле номера третьего регистра Нулевые разряды Мнемоника Выполняемая операция

0 0 0 0 0 1 d d d d d a a a a a b b b b b 0 0 0 0 0 0 0 0 0 0 0 RSUB Rd,Ra,Rb Вычитание содержимого регистра Ra из содержимого регистра Rb без учета займа и запись результата в регистр Rd

0 0 0 1 0 1 d d d d d a a a a a b b b b b 0 0 0 0 0 0 0 0 0 0 0 RSUBK Rd,Ra,Rb Вычитание содержимого регистра Ra из содержимого регистра Rb без учета займа, с записью результата в регистр Rd, без изменения флага переноса

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Номер разряда микрокоманды

Поле кода операции Поле номера первого регистра Поле номера второго регистра Поле значения константы Мнемоника Выполняемая операция

0 0 1 0 0 1 d d d d d a a a a a і і і і і і і і і і і і і і і і RSUBI Rd,Ra,Imm Вычитание содержимого регистра Ra из знакового расширения константы 1тт без учета займа и запись результата в регистр Rd

0 0 1 1 0 1 d d d d d a a a a a і і і і і і і і і і і і і і і і RSUBIK Rd,Ra,Imm Вычитание содержимого регистра Ra из знакового расширения константы 1тт без учета займа, с записью результата в регистр Rd, без изменения флага переноса

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Номер разряда микрокоманды

Компоненты и технологии, № 1'2004

Для получения разности содержимого двух регистров общего назначения с номерами Ь и а следует использовать команды RSUB Rd,Ra,Rbи RSUBKRd,Ra,RЬ. Команды RSUBI Rd,Ra,Imm и RSUBIK Rd,Ra,Imm позволяют вычесть значение содержимого регистра с номером а из значения, полученного в результате знакового расширения константы Imm, указанной непосредственно в инструкции, до 32-разрядного слова. Если команде RSUBI или RSUBIK предшествует инструкция ШЫ, то в качестве первого операнда используется 32-разрядное слово, состоящее из двух 16-разрядных значений, указанных в этих командах. При использовании рассмотренных инструкций вычитания следует обратить внимание на то, что результаты выполнения команд RSUBK и RSUBIK, в отличие от инструкций RSUB и RSUBI, не оказывают влияния на состояние флага переноса (займа). Рисунок 4 демонстрирует выполнение команд вычитания без учета займа.

Для вычисления разности двух операндов с учетом значения займа, образовавшегося при выполнении предыдущей операции, предназначены инструкции RSUBC, RSUBKC, RSUBIC и RSUBIKC. Информация о форматах этих команд содержится в таблице 4.

Команды RSUBIC Rd,Ra,Imm и RSUBIKC Rd,Ra,Imm выполняют вычитание значений содержимого регистра с номером a с участием флага займа из операнда, который является результатом знакового расширения 16-разрядной константы Imm, указанной непосредственно в инструкции, до 32-разрядного слова. Для использования в этих командах в качестве первого операнда 32-разрядной константы следует непосредственно перед ними вставить инструкцию IMM, которая определяет старшие шестнадцать разрядов слова. Вычис-

CARRY Г71„ Flag Hi

Нет заема Есть заем

Регистр 11с1

”1

RSUB R^RqRbl

Регистр Rb

Регистр Ra

IRSUBK Rd,Ra,Rb|

CARRY г—і. Flag  і

Нет заема Есть заем

Регистр Rd

Константа, указанная в команде

RSUBI Rd,Ra,lmm

Регистр Ra

[ЙШ|ККс1,Ка,1тт|

Рис. 4. Вычисление разности двух операндов без учета займа

Нет заема CARRY ГТП а- 1 Flag »- Есть заем Q •*-, Регистр Rd Регисш Rb Регистр Ra CARRY RSUB Rd,Ra,Rb I Flag

1

IRSUBKC Нет заема . CARRY Н 1 Flag Есть заем Rd,Ra,Rb| Константа, указанная ¡5 в команде CARRY

Регистр Rd RSUBIC Rd,Ra,lmm| m ¡15 ™9

llllllllllllllllllllllllllllllllir -111111111111111111111111111111111-111111111111111111111111111111111-Г

11(5иВ1КС Кс1^а,1тт | Рис. 5. Вычисление разности двух операндов с учетом займа

ление разности содержимого двух регистров общего назначения с номерами Ь и a с участием значения флага займа производится с помощью команд RSUBC Rd,Ra,Rb и RSUBKC Rd,Ra,Rb. Для записи результата вычислений, выполняемых с помощью команд вычитания, используется регистр общего назначения с номером d, который указывается в качестве первого параметра этих инструкций.

После выполнения команд вычитания с учетом займа RSUBC и RSUBIC состояние флага переноса (займа) регистра статуса изменяется в зависимости от полученного результата. Инструкции RSUBKC и RSUBIKC применяют-

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

Инструкции умножения поддерживаются только теми элементами семейства микропроцессорных ядер MicroBlаze, которые реализуются на основе ПЛИС, имеющих в своем составе встроенный аппаратный умножитель. Для выполнения операций умножения двух 32-разрядных операндов предусмотрены две разновидности инструкций, форматы которых представлены в таблице 5.

Таблица 4. Форматы команд вычитания двух операндов с учетом займа

Поле кода операции Поле номера первого регистра Поле номера второго регистра Поле номера третьего регистра Нулевые разряды Мнемоника Выполняемая операция

0 0 0 0 1 1 d d d d d a a a a a b b b b b 0 0 0 0 0 0 0 0 0 0 0 RSUBC Rd,Ra,Rb Вычитание содержимого регистра Ra из содержимого регистра Rb с учетом займа и запись результата в регистр Rd

0 0 0 1 1 1 d d d d d a a a a a b b b b b 0 0 0 0 0 0 0 0 0 0 0 RSUBKC Rd,Ra,Rb Вычитание содержимого регистра Ra из содержимого регистра Rb с учетом займа, с записью результата в регистр Rd, без изменения флага переноса

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Номер разряда микрокоманды

Поле кода операции Поле номера первого регистра Поле номера второго регистра Поле значения константы Мнемоника Выполняемая операция

0 0 1 0 1 1 d d d d d a a a a a і і і і і і і і і і і і і і і і RSUBIC Rd,Ra,Imm Вычитание содержимого регистра Ra из знакового расширения константы 1тт с учетом займа и запись результата в регистр Rd

0 0 1 1 1 1 d d d d d a a a a a і і і і і і і і і і і і і і і і Cm ^ £ “ 2 Вычитание содержимого регистра Ra из знакового расширения константы 1тт с учетом займа, с записью результата в регистр Rd, без изменения флага переноса

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Номер разряда микрокоманды

Таблица 5. Форматы команд умножения двух операндов

Поле кода операции Поле номера первого регистра Поле номера второго регистра Поле номера третьего регистра Нулевые разряды Мнемоника Выполняемая операция

0 1 0 0 0 0 d d d d d a a a a a b b b b b 0 0 0 0 0 0 0 0 0 0 0 МШ Rd,Ra,Rb Перемножение содержимого регистров Ra и Rb и запись младшего слова результата в регистр Rd

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Номер разряда микрокоманды

Поле кода операции Поле номера первого регистра Поле номера второго регистра Поле значения константы Мнемоника Выполняемая операция

0 1 1 0 0 0 d d d d d a a a a a і і і і і і і і і і і і і і і і MULI Rd,Ra,Imm Перемножение содержимого регистра Ra и знакового расширения константы 1тт, с записью младшего слова результата в регистр Rd

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Номер разряда микрокоманды

Компоненты и технологии, № 1'2004

(Ка) №0 . Dvision by Zero о 1 О Р,„5У  ^ (Ra)=0 i «"I Регистр Rd Регистр Rb Регистр Ra

IMIIIIIIIIIIIIIIIIIIIIIIIMIIIIlJ ЧІІІІІІІМІІІІІІІІІІІІІІІІІІІІІІІ/ IIIIIIIMIIIIIIIIIIIIIIIIIIIIIII

1 IDIV Rd,Ra,Rb |

Рис. 7. Осуществление операций целочисленного деления

(Ro)>(Rb) i

И С (Ra)<(Rb) 0 f Регистр Rd

I CMP Rd,Ro,Rb 1 I CMPU Rd.Ra.Rb I

Регистр Rb

Регистр Ra

Рис. 8. Выполнение инструкций сравнения двух целочисленных операндов

Команда MUL Rd,Ra,Rb предназначена для перемножения содержимого двух регистров общего назначения с номерами b и a. В инструкции MULI Rd,Ra,Imm первым сомножителем является значение содержимого регистра с номером a. В качестве второго сомножителя выступает значение, полученное в результате знакового расширения 16-разрядной константы Imm, которая задается непосредственно в инструкции, до 32-разр яд-ного слова. Если инструкции MULI предшествует команда IMM, то указанное в ней значение используется в качестве 16 старших разрядов второго сомножителя. Результат применения команд умножения MUL и MULI представляет собой 64-разрядное значение. Старшие 32 разряда произведения отбрасываются, а младшие записываются в регистр общего назначения с номером d, который указывается в качестве первого параметра инструкций умножения. Осуществление операций умножения двух операндов показано на рис. 6. Обозначение LSW (Least Significant Word), используемое на этом ри-

сунке, соответствует процедуре выделения последнего (младшего) 32-разрядного слова в значении результата операции.

Система команд семейства микропроцессорных ядер MicroBlaze содержит два варианта команд целочисленного деления, которые доступны только элементам, реализуемым на основе кристаллов FPGA, обладающих встроенными аппаратными умножителями. При этом в процессе описания конфигурации ядра должна быть указана опция использования встроенного аппаратного делителя. Форматы команд целочисленного деления ЮIV и IDIVU приведены в таблице 6.

В качестве делимого в обоих вариантах инструкций деления выступает содержимое регистра общего назначения с номером Ь, который указывается в форме последнего параметра команд. Делителем является значение содержимого регистра с номером a, который задается в виде второго параметра инструкций. При использовании команды ЮIV Rd,Ra,Rb содержимое регистров Ь и a интерпретируется как целое число со знаком. В инструкции

IDIVU Rd,Ra,Rb значения делимого и делителя представляют собой целые числа без знака. Результат выполнения операции деления сохраняется в регистре с номером d, который определяется значением первого параметра инструкций IDIV и IDIVU. Если содержимое регистра делителя представляет собой нулевое значение, то флаг деления на ноль Divide_By_Zero Flag (25-й разряд регистра статуса) устанавливается в состояние высокого логического уровня. При этом в регистр, предназначенный для записи результата, заносится нулевое значение. В случае, когда значение делителя отличается от нуля, флаг Divide_By_Zero Flag находится в сброшенном состоянии. Рисунок 7 иллюстрирует выполнение операций целочисленного деления.

К группе арифметических команд относятся также инструкции сравнения двух целочисленных операндов CMP и CMPU. Информация о форматах этих команд содержится в таблице 7.

Инструкции CMP Rd,Ra,Rb и CMPU Rd,Ra,Rb предназначены для сравнения значений содержимого регистров общего назначения с номерами a и b. Результат выполнения операции сравнения заносится в регистр с номером d. Различие инструкций CMP и CMPU заключается в типе сравниваемых операндов. При выполнении команды CMP Rd,Ra,Rb значения содержимого регистров a и b воспринимаются как целые числа со знаком. При использовании команды CMPU Rd,Ra,Rb содержимое регистров a и b интерпретируется как целочисленные значения без знака. Фактически инструкции сравнения выполняют операцию вычитания содержимого регистра a из содержимого регистра b, результат которой записывается в регистр d. Если значения содержимого регистров с номерами a и b равны, то в регистр d заносится нулевое значение. Когда сравниваемые операнды не равны, результат выполнения команд CMP и CMPU отличен от нуля. При этом информация о соотношении величин содержимого регистров с номерами a и b содержится в старшем (знаковом) разряде регистра d. Рисунок 8 поясняет процесс выполнения инструкций сравнения двух целочисленных операндов.

Таблица 6. Форматы команд целочисленного деления двух операндов

Поле кода операции Поле номера первого регистра Поле номера второго регистра Поле номера третьего регистра Поле типа операндов Мнемоника Выполняемая операция

0 1 0 0 1 0 d d d d d a a a a a b b b b b 0 0 0 0 0 0 0 0 0 0 0 IDIV Rd,Ra,Rb Целочисленное деление содержимого регистра Rb на содержимое регистра Ra при восприятии операндов как значений со знаком и запись результата в регистр Rd

0 1 0 0 1 0 d d d d d a a a a a b b b b b 0 0 0 0 0 0 0 0 0 1 0 IDIVU Rd,Ra,Rb Целочисленное деление содержимого регистра Rb на содержимое регистра Ra при восприятии операндов как значений без знака и запись результата в регистр Rd

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Номер разряда микрокоманды

Таблица 7. Форматы команд сравнения двух целочисленных операндов

Поле кода операции Поле номера первого регистра Поле номера второго регистра Поле номера третьего регистра Поле типа операндов Мнемоника Выполняемая операция

0 0 0 1 0 1 d d d d d a a a a a b b b b b 0 0 0 0 0 0 0 0 0 0 0 CMP Rd,Ra,Rb Сравнение величин содержимого регистров Rb и Ra, интерпретируемых как значения со знаком, и запись результата в регистр Rd

0 0 0 1 0 1 d d d d d a a a a a b b b b b 0 0 0 0 0 0 0 0 0 1 0 CMPU Rd,Ra,Rb Сравнение величин содержимого регистров Rb и Ra, интерпретируемых как значения без знака, и запись результата в регистр Rd

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Номер разряда микрокоманды

Компоненты и технологии, № 1'2004

fAND Rd.Rg.Rbl

I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I Регистр Re

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I Регистр Rb

I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I Регистр

ГАЫР1 Rd.Rg.Rb1

I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I Регистр Ла

указаная в команде

I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I Регистр К(1

Рис. 9. Выполнение поразрядных операций «Логическое И»

[ANDN Rd;Ra,Rb|

I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I Регистр Ra

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I Регистр Rb

I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I Регистр Rd

| ANPNI Rd,Ra,Rb

I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I Регистр Ra

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ,n ...

________________________________________________________________ i0 -1!5 -

указана« в команде

I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I Регистр Rd

Рис. 10. Выполнение поразрядных операций «Логическое И»

с инверсией второго операнда

Группа логических команд

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

логической командой поместить инструкцию IMM. Результат выполнения логической операции записывается в регистр общего назначения, номер которого определяет первый параметр инструкции.

Форматы команд поразрядных операций «Логическое И» (поразрядное умножение) представлены в таблице 8.

Для поразрядного умножения содержимого двух регистров общего назначения с номерами a и b предназначена команда AND Rd,Ra,Rb. Команда ANDI Rd,Ra,Imm выполняет операцию «Логическое И» над соответствующими разрядами содержимого регистра с номером a и значения, полученного в результате знакового расширения константы Imm до 32-разрядного слова. Рисунок 9 поясняет процесс выполнения этих команд.

Кроме того, в системе команд микропроцессорного ядра MicroBlaze присутствует

еще одна разновидность инструкций, реализующих операцию «Логическое И» с инверсией второго операнда. Форматы этих команд приведены в таблице 9.

Инструкция АЫЮЫ Rd,Ra,Rb используется для поразрядного умножения содержимого регистра с номером a и инвертированного значения содержимого регистра с номером Ь. Команда ANDNI Rd,Ra,Imm предназначена для выполнения поразрядной операции «Логическое И» над содержимым регистра с номером a и инвертированного значения, полученного в результате знакового расширения константы Imm до 32-разрядного слова. Выполнение команд ANDN и ANDNI иллюстрирует рис. 10.

Операции поразрядного сложения двух операндов осуществляются с помощью инструкций OR и ORI, форматы которых определены в таблице 10.

Таблица 8. Форматы команд поразрядных операций «Логическое И»

Поле кода операции Поле номера первого регистра Поле номера второго регистра Поле номера третьего регистра Нулевые разряды Мнемоника Выполняемая операция

1 0 0 0 0 1 d d d d d a a a a a b b b b b 0 0 0 0 0 0 0 0 0 0 0 AND Rd,Ra,Rb Поразрядное «Логическое И» содержимого регистров Ra и Rb и запись результата в регистр Rd

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Номер разряда микрокоманды

Поле кода операции Поле номера первого регистра Поле номера второго регистра Поле значения константы Мнемоника Выполняемая операция

1 0 1 0 0 1 d d d d d a a a a a і і і і і і і і і і і і і і і і ANDI Rd,Ra,Imm Поразрядное «Логическое И» содержимого регистра Ra и знакового расширения константы 1тт, с записью результата в регистр Rd

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Номер разряда микрокоманды

Таблица 9. Форматы команд поразрядных операций «Логическое И» с инверсией второго операнда

Поле кода операции Поле номера первого регистра Поле номера второго регистра Поле номера третьего регистра Нулевые разряды Мнемоника Выполняемая операция

1 0 0 0 1 1 d d d d d a a a a a b b b b b 0 0 0 0 0 0 0 0 0 0 0 ANDN Rd,Ra,Rb Поразрядное «Логическое И» содержимого регистра Ra и инвертированного значения содержимого регистра Rb с записью результата в регистр Rd

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Номер разряда микрокоманды

Поле кода операции Поле номера первого регистра Поле номера второго регистра Поле значения константы Мнемоника Выполняемая операция

1 0 1 0 1 1 d d d d d a a a a a і і і і і і і і і і і і і і і і ANDNI Rd,Ra,Imm Поразрядное «Логическое И» содержимого регистра Ra и инвертированного значения знакового расширения константы 1тт, с записью результата в регистр Rd

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Номер разряда микрокоманды

Таблица 10. Форматы команд поразрядных операций «Логическое ИЛИ»

Поле кода операции Поле номера первого регистра Поле номера второго регистра Поле номера третьего регистра Нулевые разряды Мнемоника Выполняемая операция

1 0 0 0 0 0 d d d d d a a a a a b b b b b 0 0 0 0 0 0 0 0 0 0 0 OR Rd,Ra,Rb Поразрядное «Логическое ИЛИ» содержимого регистров Ra и Rb и запись результата в регистр Rd

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Номер разряда микрокоманды

Поле кода операции Поле номера первого регистра Поле номера второго регистра Поле значения константы Мнемоника Выполняемая операция

1 0 1 0 0 0 d d d d d a a a a a і і і і і і і і і і і і і і і і ORI Rd,Ra,Imm Поразрядное «Логическое ИЛИ» содержимого регистра Ra и знакового расширения константы 1тт, с записью результата в регистр Rd

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Номер разряда микрокоманды

Компоненты и технологии, № 1'2004

IORRJ.Rg.Rb1

IIIII

Mill

III II

ORI Rd.Ra,lmm I

II I II

II I II

I II II I I Регистр Ra

I II II I I Регистр Rb

lili m Регистр Rd

I I I I I I I Регистр Ra

' ' ¡0-І15-

¡9|iicji1 l|il^il3jil^il~j константа, указаная в команде

I II I I I I Регистр Rd

Рис. 11. Выполнение поразрядных операций «Логическое ИЛИ»

IXOR Rd.Rg.Rb~l

І0ІІ0

ш

¡01 ¡01 ¡01 ¡0

II II II II

А ААА А А АА А

II II II II

II II II II

IXORI Rd.Rg.jnmT

II II II II

А А А А А А А А А

¡01 ¡01 ¡01 iO I ¡01 ¡01 ¡01 ¡11 ¡2

IIIII

AAA AAA

II II I

II II I

II II I

AAA AAA

131141 ІД І іб| І7ТІ8

-LLLLLIJ Регистр Ra

A AA A AAA

1111111 Регистр Rb

-LLLLLL1 Регистр Rd

-I—LI_____I—LI_____1 Регистр Ra

A A A A A AA .n .,e —і—і—і—і—і—і— '0-ІІ5-

і9|і10|щ|і12|і13|!1^!Т^ константа, указаная в команде

II II II I II II II II II II II II II II ITT1 Регистр Rd

Рис. 12. Выполнение поразрядных операций «Исключающее ИЛИ»

Таблица 11. Форматы команд поразрядных операций «Исключающее ИЛИ»

Поле кода операции Поле номера первого регистра Поле номера второго регистра Поле номера третьего регистра Нулевые разряды Мнемоника Выполняемая операция

1 0 0 0 1 0 d d d d d a a a a a b b b b b 0 0 0 0 0 0 0 0 0 0 0 XOR Rd,Ra,Rb Поразрядное «Исключающее ИЛИ» содержимого регистров Ra и Rb и запись результата в регистр Rd

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Номер разряда микрокоманды

Поле кода операции Поле номера первого регистра Поле номера второго регистра Поле значения константы Мнемоника Выполняемая операция

1 0 1 0 1 0 d d d d d a a a a a і і і і і і і і і і і і і і і і XORI Rd,Ra,Imm Поразрядное «Исключающее ИЛИ» содержимого регистра Ra и знакового расширения константы Imm, с записью результата в регистр Rd

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Номер разряда микрокоманды

Команда ОКІ Кі,Ка,Ітт выполняет поразрядную операцию «Логическое ИЛИ» содержимого регистра с номером а и значения, являющегося результатом знакового расширения константы 1тт до 32-разрядного слова. Поразрядное сложение содержимого двух регистров общего назначения с номерами а и Ь реализует команда ОК Кй,Ка,КЬ. Последовательность выполнения операций «Логическое ИЛИ» показана нарис. 11.

Форматы инструкций ХОК и ХОКІ, предназначенных для выполнения поразрядной

операции «Исключающее ИЛИ», представлены в таблице 11.

Инструкция XORI Rd,Ra,Imm выполняет поразрядную операцию «Исключающее ИЛИ», в которой участвует содержимое регистра с номером a и значение, полученное в результате знакового расширения константы Imm до 32-разрядного слова. Команда XOR Rd,Ra,Rb осуществляет аналогичную операцию, операндами которой является содержимое двух регистров общего назначения с номерами a и Ь. Выполнение поразрядных

операций «Исключающее ИЛИ» демонстрирует рис. 12. ИИ

Продолжение следует.

Литература

1. Зотов В. МкгоВ^е — семейство тридцатидвухразрядных микропроцессорных ядер, реализуемых на основе ПЛИС фирмы ХДтх // Компоненты и технологии. 2003. № 9.