Система команд микропроцессорного ядра PicoBIaze, реализуемого на основе ПЛИС семейств Spartan-II, Spartan-IIT, Virtex, Virtex-E
Продолжаем ознакомление с микропроцессорным модулем PicoBIaze, предназначенным для применения в проектах, реализуемых на основе ПЛИС семейств Spartan-II, Spartan-IIT, Virtex, Virtex-E. Настоящая статья представляет подробное описание системы команд этого ядра.
Команды управления последовательностью выполнения операций в программе
Команды переходов JUMP позволяют осуществить передачу управления в программе по указанному адресу. Эти команды обычно используются для организации ветвления и формирования циклов в ходе выполнения алгоритма программы. Микропроцессорное ядро PicoBlaze поддерживает пять модификаций инструкции переходов JUMP : одну безусловную и четыре условных. Форматы различных вариантов команд переходов JUMP представлены в таблице 1. Единственным параметром команд переходов является однобайтовая константа, значение которой определяет адрес перехода. При мнемонической форме записи команд этот параметр задается в виде двух шестнадцатеричных символов.
Таблица 1. Форматы команд переходов
Поле кода операции |
Поле адреса перехода |
Мнемоника |
Выполняемая операция |
1 |
0 |
0 |
0 |
x |
x |
0 |
1 |
A |
A |
A |
A |
A |
A |
A |
A |
JUMP aa |
Безусловный переход |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
A |
A |
A |
A |
A |
A |
A |
A |
JUMP Z,aa |
Переход при условии,что флаг ZERO Flag
находится в установленном состоянии |
1 |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
A |
A |
A |
A |
A |
A |
A |
A |
JUMP NZ,aa |
Переход при условии,что флаг ZERO Flag
находится в сброшенном состоянии |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
A |
A |
A |
A |
A |
A |
A |
A |
JUMP C,aa |
Переход при условии,что флаг CARRY Flag
находится в установленном состоянии |
1 |
0 |
0 |
0 |
x |
x |
0 |
1 |
A |
A |
A |
A |
A |
A |
A |
A |
JUMP NC,aa |
Переход при условии,что флаг CARRY Flag
находится в сброшенном состоянии |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Номер разряда микрокоманды |
Процесс выполнения команд переходов иллюстрирует рис.1. При исполнении операции безусловной передачи управления JUMP aa в программный счетчик записывается значение адреса перехода aa . При условных переходах загрузка в программный счетчик нового адреса, указанного в команде, производится только при выполнении соответствующего условия. Если заданное условие не выполнено, то программный счетчик продолжает работу в инкрементном режиме, то есть его прежнее содержимое увеличивается на единицу. В процессе реализации команд безусловного и условных переходов состояние флагов регистра статуса не изменяется.
Команда JUMP Z, aa инициирует переход к выполнению инструкции, расположенной по указанному адресу, при условии, что флаг нулевого результата ZERO Flag находится в состоянии логической единицы. При исполнении команды JUMP NZ, a управление передается инструкции с указанным адресом только в случае, если флаг нулевого результата ZERO Flag установлен в состояние логического нуля. Команда JUMP C, aa загружает новое значение адреса в программный счетчик при условии, что состояние флага переноса/займа CARRY Flag соответствует значению логической единицы. С помощью команды JUMP NC, aa осуществляется переход к выполнению инструкции с указанным адресом, если флаг переноса/займа CARRY Flag находится в сброшенном состоянии (логического нуля).
Команды вызова подпрограмм CALL позволяют передать управление по адресу, который соответствует первой инструкции вызываемой процедуры. Обращение к подпрограмме может происходить как в безусловном порядке, так и при выполнении заданного условия. Форматы безусловного и условных вариантов команд вызова подпрограмм CALL приведены в таблице 2. Адрес вызываемой процедуры задается в том же виде, что и адрес в командах перехода JUMP . Команды безусловного и условных обращений к подпрограммам не влияют на состояние флагов регистра статуса.
Таблица 2. Форматы команд вызова подпрограмм
Поле кода операции |
Поле адреса подпрограммы |
Мнемоника |
Выполняемая операция |
1 |
0 |
0 |
0 |
x |
x |
1 |
1 |
A |
A |
A |
A |
A |
A |
A |
A |
CALL aa |
Безусловный вызов подпрограммы |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
A |
A |
A |
A |
A |
A |
A |
A |
CALL Z,aa |
Вызов подпрограммы при условии,что флаг ZERO Flag находится в установленном состоянии |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
A |
A |
A |
A |
A |
A |
A |
A |
CALL NZ,aa |
Вызов подпрограммы при условии,что флаг ZERO Flag находится в сброшенном состоянии |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
A |
A |
A |
A |
A |
A |
A |
A |
CALL C,aa |
Вызов подпрограммы при условии,что флаг CARRY Flag находится в установленном состоянии |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
A |
A |
A |
A |
A |
A |
A |
A |
CALL NC,aa |
Вызов подпрограммы при условии,что флаг CARRY Flag находится в сброшенном состоянии |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Номер разряда микрокоманды |
На рис.2 отображена последовательность действий, которые производятся при различных вызовах подпрограмм. Выполнение команды безусловного обращения к подпрограмме CALL aa начинается с записи в стек текущего содержимого программного счетчика (то есть адреса исполняемой инструкции вызова процедуры). Сохраненное значение используется впоследствии, при завершении подпрограммы и возврате в основную программу или подпрограмму, из которой вызывалась текущая процедура. Затем в программный счетчик заносится значение адреса, указанное в команде. Это значение определяет начальный адрес блока памяти, в котором хранится вызываемая подпрограмма.
Микропроцессорным ядром PicoBlaze поддерживается четыре варианта команд условного обращения к подпрограмме. Исполнение команды условного вызова подпрограммы начинается с проверки выполнения соответствующего условия. Если это условие выполнено, то далее производится последовательность операций, рассмотренная выше для команды безусловного обращения к подпрограмме (рис.2). В случае невыполнения заданного условия содержимое программного счетчика увеличивается на единицу, указывая тем самым адрес следующей команды основной программы. Команда CALL Z, aa передает управление подпрограмме, расположенной по указанному адресу, если флаг нулевого результата ZERO Flag установлен в состояние логической единицы. С помощью команды CALL NZ, aa осуществляется вызов подпрограммы при условии, что флаг нулевого результата ZERO Flag находится в состоянии ло-гического нуля. Команда CALL C, aa загружает в программный счетчик указанный адрес подпрограммы, если состояние флага переноса/займа CARRY Flag соответствует значению логической единицы. При исполнении команды CALL NC, aa обращение к подпрограмме производится только при условии, что флаг переноса/займа CARRY Flag находится в сброшенном состоянии.
Команды возврата из подпрограммы RETURN предназначены для передачи управления основной программе или подпрограмме, из которой вызывалась текущая процедура. Эта операция может осуществляться как в безусловной форме, так и в зависимости от выполнения заданного условия.
Таблица 3 представляет форматы безусловного и условных вариантов команд возврата из подпрограммы RETURN .
Таблица 3. Форматы команд безусловного и условного возврата из подпрограммы
Поле кода операции |
Поле адреса |
Мнемоника |
Выполняемая операция |
1 |
0 |
0 |
0 |
x |
x |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
RETURN |
Безусловный возврат из подпрограммы |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
RETURN Z |
Возврат из подпрограммы при условии,что флаг ZERO Flag находится в установленном состоянии |
1 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
RETURN NZ |
Возврат из подпрограммы при условии,что флаг
ZERO Flag находится в сброшенном состоянии |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
RETURN C |
Возврат из подпрограммы при условии,что флаг
CARRY Flag находится в установленном состоянии |
1 |
0 |
0 |
0 |
x |
x |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
RETURN NC |
Возврат из подпрограммы при условии,что флаг
CARRY Flag находится в сброшенном состоянии |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Номер разряда микрокоманды |
Процесс выполнения команд возврата из подпрограмм в условной и безусловной форме показан на рис.3. Безусловное завершение выполняемой подпрограммы и передача управления основной программе или подпрограмме, из которой производилось обращение к этой процедуре, осуществляется с помощью команды RETURN . При этом из стека извлекается последнее записанное значение, увеличивается на единицу и загружается в программный счетчик. Таким образом, в программный счетчик заносится адрес очередной команды основной программы (или подпрограммы при вложенном вызове процедуры), следующей после инструкции обращения к подпрограмме.
При реализации команды условного возврата из подпрограммы, прежде всего, осуществляется контроль выполнения соответствующего условия. При получении положительного результата проверки далее выполняется та же последовательность действий, что и при безусловном возврате. Если условие не выполнено, то текущее содержимое программного счетчика увеличивается на единицу. Таким образом, новое значение программного счетчика в этом случае соответствует адресу следующей команды текущей исполняемой подпрограммы.
Команда RETURN Z возвращает управление вызывающей программе или подпрограмме в случае, если флаг нулевого результата ZERO Flag принимает значение логической единицы. С помощью команды RETURN NZ осуществляется возврат из подпрограммы при условии, что флаг нулевого результата ZERO Flag сброшен в состояние логического нуля. Команда RETURN C выполняет операцию возврата из подпрограммы, если состояние флага переноса/займа CARRY Flag соответствует значению логической единицы. При исполнении команды RETURN NC управление передается вызывающей программе или подпрограмме только при условии, что флаг переноса/займа CARRY Flag находится в сброшенном состоянии. При выполнении команд возврата из подпрограммы состояние флагов регистра статуса не изменяется.
Группа логических команд
В командах, входящих в эту группу, используются два параметра, которые определяют значения операндов. Первым операндом всегда является содержимое регистра общего назначения, номер которого N указан в тексте команды. В качестве номера регистра N может использоваться любое число в диапазоне от 0 до 15, которое при мнемонической записи команд задается в шестнадцатеричном формате (0 — F). В этот же регистр записывается результат выполненной операции. В качестве второго операнда используется либо константа, значение которой указывается непосредственно в коде команды, либо содержимое другого регистра общего назначения. При мнемонической форме записи команд значение константы задается в виде двух шестнадцатеричных символов.
При выполнении поразрядных логических операций флаг переноса/займа CARRY Flag всегда сбрасывается в состояние логического нуля. Значение флага ZERO Flag определяется полученным результатом. Если все разряды результирующего слова принимают значение логического нуля, то флаг нулевого результата ZERO Flag устанавливается в состояние, соответствующее логической единице. В противном случае, если хо я бы в одном разряде результата присутствует единичное значение, то флаг нулевого результата ZERO Flag переключается в сброшенное состояние.
Форматы команд поразрядных операций «Логическое И » (поразрядное умножение) AND представлены в таблице 4.
Таблица 4. Форматы команд поразрядных операций "Логическое И"
Поле кода операции |
Поле номера регистра |
Поле константы |
Мнемоника |
Выполняемая операция |
0 |
0 |
0 |
1 |
n |
n |
n |
n |
K |
K |
K |
K |
K |
K |
K |
K |
AND sN,kk |
Поразрядное «Логическое И » содержимого регистра sN и константы kk |
Поле префикса кода операции |
Поле номера первого регистра |
Поле номера второго регистра |
Поле кода операции |
Мнемоника |
Выполняемая операция |
1 |
1 |
0 |
0 |
n |
n |
n |
n |
m |
m |
m |
m |
0 |
0 |
0 |
1 |
AND sN,sM |
Поразрядное «Логическое И » содержимого регистров sN и sM |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Номер разряда микрокоманды |
Команда AND sN, kk выполняет операцию «Логическое И » над соответствующими разрядами содержимого регистра с номером N и константы kk . Для поразрядного умножения содержимого двух регистров общего назначения с номерами N и M предназначена команда AND sN, sM . Выполнение этих команд иллюстрирует рис.4.
Операции поразрядного сложения двух операндов осуществляются с помощью инструкций OR , форматы которых определены в таблице 5.
Таблица 5. Форматы команд поразрядных операций «Логическое ИЛИ »
Поле кода операции |
Поле номера регистра |
Поле константы |
Мнемоника |
Выполняемая операция |
0 |
0 |
1 |
0 |
n |
n |
n |
n |
K |
K |
K |
K |
K |
K |
K |
K |
OR sN,kk |
Поразрядное «Логическое ИЛИ » содержимого регистра sN и константы kk |
Поле префикса кода операции |
Поле номера первого регистра |
Поле номера второго регистра |
Поле кода операции |
Мнемоника |
Выполняемая операция |
1 |
1 |
0 |
0 |
n |
n |
n |
n |
m |
m |
m |
m |
0 |
0 |
1 |
0 |
OR sN,sM |
Поразрядное «Логическое ИЛИ » содержимого регистров sN и sM |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Номер разряда микрокоманды |
Команда OR sN, kk выполняет поразрядную операцию «Логическое ИЛИ» содержимого регистра с номером N и константы kk (рис.5). Поразрядное сложение содержимого двух регистров общего назначения с номерами N и M реализует команда OR sN, sM .
Форматы инструкций XOR , предназначенных для выполнения поразрядной операции «Исключающее ИЛИ », представлены в таблице 6.
Таблица 6. Форматы команд поразрядных операций «Исключающее ИЛИ »
Поле кода операции |
Поле номера регистра |
Поле константы |
Мнемоника |
Выполняемая операция |
0 |
0 |
1 |
1 |
n |
n |
n |
n |
K |
K |
K |
K |
K |
K |
K |
K |
XOR sN,kk |
Поразрядное «Исключающее ИЛИ » содержимого регистра sN и константы kk |
Поле префикса кода операции |
Поле номера первого регистра |
Поле номера второго регистра |
Поле кода операции |
Мнемоника |
Выполняемая операция |
1 |
1 |
0 |
0 |
n |
n |
n |
n |
m |
m |
m |
m |
0 |
0 |
1 |
1 |
XOR sN,sM |
Поразрядное «Исключающее ИЛИ » содержимого регистров sN и sM |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Номер разряда микрокоманды |
Инструкция XOR sN, kk выполняет поразрядную операцию «Исключающее ИЛИ », в которой участвует содержимое регистра с номером N и константа kk , значение которой указывается непосредственно в команде. Команда XOR sN, sM осуществляет аналогичную операцию, операндами которой является содержимое двух регистров общего назначения с номерами N и M . Выполнение поразрядных операций «Исключающее ИЛИ » демонстрирует рис.6.
Инструкция LOAD , которая также относится к группе логических команд, предназначена для загрузки данных в выбранный регистр общего назначения (табл.7). Источником данных может служить содержимое любого регистра общего назначения или константа, указанная непосредственно в коде команды.
Таблица 7. Форматы инструкции загрузки данных в регистр общего назначения
Поле кода операции |
Поле номера регистра |
Поле константы |
Мнемоника |
Выполняемая операция |
0 |
0 |
0 |
0 |
n |
n |
n |
n |
K |
K |
K |
K |
K |
K |
K |
K |
LOAD sN,kk |
Загрузка константы kk в регистр sN |
Поле префикса кода операции |
Поле номера первого регистра |
Поле номера второго регистра |
Поле кода операции |
Мнемоника |
Выполняемая операция |
1 |
1 |
0 |
0 |
n |
n |
n |
n |
m |
m |
m |
m |
0 |
0 |
0 |
0 |
LOAD sN,sM |
Загрузка содержимого регистра sM
в регистр sN |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Номер разряда микрокоманды |
Команда LOAD sN, kk записывает значение константы kk , указанной в инструкции, в регистр общего назначения с номером N . Команда LOAD sN, sM производит загрузку данных из регистра с номером M в регистр с номером N . Операции загрузки данных в регистр не оказывают влияния на флаги регистра статуса. Рис.7 отображает процесс выполнения операции загрузки данных в регистр общего назначения.
Группа арифметических команд
Арифметические команды микропроцессорного ядра PicoBlaze обеспечивают выполнение операций сложения и вычитания над двумя восьмиразрядными операндами. Первым параметром в арифметической команде всегда является номер одного из регистров общего назначения, содержимое которого используется в качестве первого операнда. Этот же регистр используется для записи результата выполненной операции. В роли второго операнда может выступать константа, значение которой задается непосредственно в коде команды, или содержимое любого регистра общего назначения. При выполнении арифметических операций состояние флагов регистра статуса зависит от полученного результата.
Форматы команд сложения двух операндов без учета переноса представлены в таблице 8.
Таблица 8. Форматы команд сложения двух операндов без учета переноса
Поле кода операции |
Поле номера регистра |
Поле константы |
Мнемоника |
Выполняемая операция |
0 |
1 |
0 |
0 |
n |
n |
n |
n |
K |
K |
K |
K |
K |
K |
K |
K |
ADD sN,kk |
Сложение содержимого регистра sN и константы kk |
Поле префикса кода операции |
Поле номера первого регистра |
Поле номера второго регистра |
Поле кода операции |
Мнемоника |
Выполняемая операция |
1 |
1 |
0 |
0 |
n |
n |
n |
n |
m |
m |
m |
m |
0 |
1 |
0 |
0 |
ADD sN,sM |
Сложение содержимого регистров sN и sM |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Номер разряда микрокоманды |
Команда ADD sN, kk выполняет сложение содержимого регистра с номером N и константы kk . Для получения суммы содержимого двух регистров общего назначения с номерами N и M предназначена команда ADD sN,sM . На рис.8 показана последовательность действий, выполняемых при сложении двух операндов без учета переноса.
Сложение двух операндов с учетом переноса, полученного при выполнении предыдущей операции, производится с помощью инструкции ADDCY. Форма ы двух вариантов этой команды приведены в таблице 9.
Таблица 9. Форматы команд сложения двух операндов с учетом переноса
Поле кода операции |
Поле номера регистра |
Поле константы |
Мнемоника |
Выполняемая операция |
0 |
1 |
0 |
1 |
n |
n |
n |
n |
K |
K |
K |
K |
K |
K |
K |
K |
ADDCY sN,kk |
Сложение содержимого регистра sN и константы kk с учетом переноса |
Поле префикса кода операции |
Поле номера первого регистра |
Поле номера второго регистра |
Поле кода операции |
Мнемоника |
Выполняемая операция |
1 |
1 |
0 |
0 |
n |
n |
n |
n |
m |
m |
m |
m |
0 |
1 |
0 |
1 |
ADDCY sN,sM |
Сложение содержимого регистров sN и sM с учетом переноса |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Номер разряда микрокоманды |
Команда ADDCY sN, kk суммирует содержимое регистра с номером N с константой kk с учетом состояния флага переноса перед выполнением этой операции. Сложение содержимого двух регистров общего назначения с учетом значения флага переноса осуществляется с помощью команды ADDCY sN, sM (рис.9).
После исполнения команд сложения (с учетом и без учета переноса) флаг нулевого результата ZERO Flag переключается в установленное состояние, если сумма равна нулю. При получении результата, отличного от нулевого, флаг ZERO Flag сбрасывается в состояние логического нуля. Флаг переноса/займа CARRY Flag принимает значение логической единицы, если сумма операндов превышает значение 255 (FF). В противном случае этот флаг переключается в сброшенное состояние.
Операция вычитания без учета займа выполняется с помощью инструкции SUB , форматы двух вариантов которой представлены в таблице 10.
Таблица 10. Форматы команд вычитания без учета займа
Поле кода операции |
Поле номера регистра |
Поле константы |
Мнемоника |
Выполняемая операция |
0 |
1 |
1 |
0 |
n |
n |
n |
n |
K |
K |
K |
K |
K |
K |
K |
K |
SUB sN,kk |
Вычитание из содержимого регистра sN константы kk |
Поле префикса кода операции |
Поле номера первого регистра |
Поле номера второго регистра |
Поле кода операции |
Мнемоника |
Выполняемая операция |
1 |
1 |
0 |
0 |
n |
n |
n |
n |
m |
m |
m |
m |
0 |
1 |
1 |
1 |
SUB sN,sM |
Вычитание содержимого регистра sM из содержимого регистра sN |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Номер разряда микрокоманды |
Команда SUB sN, kk позволяет вычесть значение константы kk из содержимого регистра с номером N . Для вычисления разности содержимого двух регистров общего назначения с номерами N и M следует использовать команду SUB sN, sM . Процесс выполнения команд вычитания без учета займа отображен на рис.10.
Для вычисления разности двух операндов с учетом значения займа, образовавшегося при выполнении предыдущей операции, предназначена инструкция SUBCY , форматы вариантов которой приведены в таблице 11.
Таблица 11. Форматы инструкций вычитания с учетом займа
Поле кода операции |
Поле номера регистра |
Поле константы |
Мнемоника |
Выполняемая операция |
0 |
1 |
1 |
1 |
n |
n |
n |
n |
K |
K |
K |
K |
K |
K |
K |
K |
SUBCY sN,kk |
Вычитание из содержимого регистра sN константы kk с учетом займа |
Поле префикса кода операции |
Поле номера первого регистра |
Поле номера второго регистра |
Поле кода операции |
Мнемоника |
Выполняемая операция |
1 |
1 |
0 |
0 |
n |
n |
n |
n |
m |
m |
m |
m |
o |
1 |
1 |
1 |
SUBCY sN,sM |
Вычитание содержимого регистра sM из содержимого регистра sN с учетом займа |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Номер разряда микрокоманды |
Команда SUBCY sN, kk выполняет вычитание значений константы kk и флага займа CARRY Flag из содержимого регистра с номером N . Вычисление разности содержимого двух регистров общего назначения с номерами N и M с участием значения флага займа CARRY Flag производится с помощью команды SUBCY sN, sM (рис.11).
После выполнения команд вычитания (с учетом и без учета займа) состояние флагов регистра статуса изменяется в зависимости от полученного результата. Флаг нулевого результата ZERO Flag переключается в установленное состояние, если разность равна нулю. При получении результата, отличного от нулевого, флаг ZERO Flag сбрасывается в состояние логического нуля. Флаг переноса/займа CARRY Flag принимает значение логической единицы при отрицательном значении разности операндов. В противном случае этот флаг переключается в сброшенное состояние.
Команды сдвига данных
Команды этой группы предназначены для выполнения операций логического (арифметического) или циклического сдвига данных, хранящихся в регистре общего назначения с указанным номером, на один разряд. Форматы инструкций сдвига данных представлены в таблице 12.
Таблица 12. Форматы команд логического или циклического сдвига данных
Поле кода операции |
Поле номера регистра |
Поле направления сдвига |
Поле типа сдвига |
Мнемоника |
Выполняемая операция |
1 |
1 |
0 |
1 |
n |
n |
n |
n |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
SR0 sN |
Логический сдвиг содержимого регистра sN вправо на один разряд с записью 0 |
1 |
1 |
0 |
1 |
n |
n |
n |
n |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
SR1 sN |
Логический сдвиг содержимого регистра sN вправо на один разряд с записью 1 |
1 |
1 |
0 |
1 |
n |
n |
n |
n |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
SRx sN |
Логический сдвиг содержимого регистра sN вправо с сохранением последнего разряда |
1 |
1 |
0 |
1 |
n |
n |
n |
n |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
SRA sN |
Циклический сдвиг содержимого регистра sN вправо через разряд переноса/займа |
1 |
1 |
0 |
1 |
n |
n |
n |
n |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
RR sN |
Циклический сдвиг содержимого регистра sN вправо без участия бита переноса |
1 |
1 |
0 |
1 |
n |
n |
n |
n |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
SL0 sN |
Логический сдвиг содержимого регистра sN влево на один разряд с записью 0 |
1 |
1 |
0 |
1 |
n |
n |
n |
n |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
SL1 sN |
Логический сдвиг содержимого регистра sN влево на один разряд с записью 1 |
1 |
1 |
0 |
1 |
n |
n |
n |
n |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
SLX sN |
Логический сдвиг содержимого регистра sN влево с сохранением последнего разряда |
1 |
1 |
0 |
1 |
n |
n |
n |
n |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
SLA sN |
Циклический сдвиг содержимого регистра sN влево через разряд переноса/займа |
1 |
1 |
0 |
1 |
n |
n |
n |
n |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
RL sN |
Циклический сдвиг содержимого регистра sN влево без участия бита переноса |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Номер разряда микрокоманды |
Команды SR0 sN и SR1 sN выполняют логический сдвиг содержимого регистра с номером sN вправо на один разряд с записью соответственно нулевого и единичного бита в «освободившийся » (крайний левый) разряд. Команда SRX sN позволяет осуществить операцию логического сдвига данных вправо в регистре sN с сохранением состояния последнего (крайнего левого) разряда. На рис.12 в наглядной форме показан процесс выполнения различных сдвиговых операций, поддерживаемых микропроцессорным ядром PicoBlaze.
Циклический сдвиг данных в регистре общего назначения на один разряд вправо, выполняемый через разряд переноса/займа CARRY Flag регистра статуса, осуществляется с помощью команды SRA sN . Операция циклического сдвига вправо без участия бита переноса реализуется с помощью команды RR sN .
Команды SL0 sN и SL1 sN предназначены для выполнения операций логического сдвига данных влево с занесением нулевого и единичного бита соответственно в «освободившийся » (крайний правый) разряд используемого регистра sN. Для логического сдвига влево содержимого регистра sN с сохранением значения последнего (крайнего правого) разряда предусмотрена команда SLX sN .
Операции циклического сдвига данных влево в регистре sN выполняются с помощью инструкций SLA sN и RL sN . При использовании команды SLA sN циклический сдвиг производится через разряд переноса/займа CARRY Flag регистра статуса. Команда RL sN позволяет осуществить циклический сдвиг данных влево без участия разряда переноса регистра статуса.
При выполнении сдвиговых операций в разряд регистра статуса, который содержит значение флага переноса/займа CARRY Flag, записывается бит данных, «выталкиваемый » из регистра общего назначения в процессе сдвига. Состояние флага нулевого результата ZERO Flag зависит от значения содержимого используемого регистра общего назначения после выполнения операции сдвига. Если во всех разрядах этого регистра присутствуют нулевые значения, то флаг ZERO Flag переключается в установленное состояние. В противном случае флаг нулевого результата ZERO Flag сбрасывается.
Команды ввода/вывода
Команды ввода/вывода предназначены для организации чтения данных из входного порта в заданный регистр общего назначения и передачи информации из указанного регистра в выходной порт. Инструкции ввода/вывода включают в себя два параметра. Значение первого параметра определяет номер регистра общего назначения, используемого в качестве приемника данных при операции ввода или в качестве источника при выполнении операции вывода. Второй параметр позволяет указать адрес порта ввода/вывода, к которому производится обращение. Адресация ко входным и выходным портам в инструкциях ввода/вывода может осуществляться с помощью восьмиразрядной константы, значение которой задается непосредственно в команде, или содержимого регистра общего назначения с указанным номером. Форматы команд ввода/вывода приведены в таблице 13.
Таблица 13. Форматы команд ввода/вывода
Поле кода операции |
Поле номера регистра |
Поле адреса порта ввода/вывода |
Мнемоника |
Выполняемая операция |
1 |
0 |
1 |
0 |
n |
n |
n |
n |
K |
K |
K |
K |
K |
K |
K |
K |
INPUT sN,kk |
Чтение данных из порта ввода/вывода с адресом kk в регистр sN |
1 |
1 |
1 |
0 |
n |
n |
n |
n |
K |
K |
K |
K |
K |
K |
K |
K |
OUTPUT sN,kk |
Запись данных из регистра sN в порт ввода/вывода с адресом kk |
Поле кода операции |
Поле номера первого регистра |
Поле номера второго регистра |
Нулевые разряды |
Мнемоника |
Выполняемая операция |
1 |
0 |
1 |
1 |
n |
n |
n |
n |
m |
m |
m |
m |
0 |
0 |
0 |
0 |
INPUT sN,(sM) |
Чтение данных из порта ввода/вывода с адресом,определяемым регистром sM, в регистр sN |
1 |
1 |
1 |
1 |
n |
n |
n |
n |
m |
m |
m |
m |
0 |
0 |
0 |
0 |
OUTPUT sN,(sM) |
Запись данных из регистра sN в порт с адресом,определяемым регистром sM |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Номер разряда микрокоманды |
Команда INPUT sN, kk выполняет передачу данных из входного порта с адресом kk в регистр общего назначения с номером sN . Чтение входных данных из порта ввода/вывода, адрес которого указывает содержимое регистра sM , производится при использовании инструкции INPUT sX, (sY).
Передача содержимого регистра общего назначения с номером sN в выходной порт с адресом kk осуществляется с помощью команды OUTPUT sX, kk . Для записи выходных данных из регистра sN в порт, адрес которого определяется содержимым регистра sM , предназначена команда OUTPUT sN, (sM). Рис.13 поясняет выполнение операций ввода/вывода с различными видами адресации.
Команды обслуживания прерываний
В эту группу входят команды возврата из процедуры обработки прерываний и установки режима обслуживания прерываний в программе.
Инструкция возврата из процедуры обслуживания прерывания RETURNI предназначена для передачи управления программе, при выполнении которой поступил запрос прерывания. Возврат к выполняемой программе производится в безусловном порядке после завершения процедуры обработки прерывания. Параметры команды возврата из процедуры обслуживания прерывания позволяют также определить дальнейший режим (запрета или разрешения) обработки прерываний. Форматы инструкций обслуживания прерываний представлены в таблице 14.
Таблица 14. Форматы команд обслуживания прерываний
Поле режима обработки прерываний |
Поле кода операции |
Мнемоника |
Выполняемая операция |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
RETURNI ENABLE |
Возврат из процедуры обработки и установка режима запрета прерывания |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
RETURNI DISABLE |
Возврат из процедуры обработки и установка режима разрешения прерывания |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
ENABLE INTERRUPT |
Установка режима разрешения прерывания |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
DISABLE INTERRUPT |
Установка режима запрета прерывания |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Номер разряда микрокоманды |
Команда RETURNI ENABLE возвращает управление из процедуры обслуживания прерывания основной программе с разрешением последующих прерываний. Для выхода из процедуры обработки прерывания и установки режима запрета прерывания следует использовать команду RETURNI DISABLE . Механизм возврата из процедуры обслуживания прерываний показан на рис.14. При завершении процесса обработки прерывания в программный счетчик из стека загружается значение адреса, которое было записано последним. Таким образом, в программный счетчик заносится адрес команды, которая выполнялась в момент поступления запроса на прерывание. Кроме того, восстанавливается состояние флагов в регистре статуса, в котором они находились при вызове процедуры обслуживания запроса на прерывание.
Команды ENABLE INTERRUPT и DISABLE INTERRUPT позволяют изменить режим обработки прерываний на любом этапе выполняемой программы. При этом следует учитывать, что до завершения текущей процедуры обслуживания прерывания должен быть установлен режим запрета прерываний.
Заключение
Несмотря на то что приведенное выше описание системы команд микропроцессорного ядра PicoBlaze относится, прежде всего, к модулю, предназначенному для употребления в проектах, которые реализуются на основе ПЛИС серий Spartan-II, Spartan-IIE, Virtex и Virtex-E, оно в значительной мере применимо и к другим элементам этого семейства. Все рассмотренные команды поддерживаются и остальными версиями микропроцессорного ядра PicoBlaze, различаясь только длиной (разрядностью) и форматом инструкций. Отличительные особенности микропроцессорных модулей PicoBlaze, которые предназначены для использования в кристаллах серий Virtex-II и CoolRunner-II, будут проанализированы в следующих публикациях цикла.
Литература
- Зотов В. PicoBlaze — семейство восьмиразрядных микропроцессорных ядер, реализуемых на основе ПЛИС фирмы Xilinx.// Компоненты и технологии.2003.№ 4.
Валерий Зотов
|