Компоненты и технологии, № 5'2003 Софт
Система команд микропроцессорного ядра РкоБЬге,
реализуемого на основе ПЛИС семейств ЗраАап-П, $раг!ап-11Е, №ех, №ех-Е
Продолжаем ознакомление с микропроцессорным модулем РкоВ1аге, предназначенным для применения в проектах, реализуемых на основе ПЛИС семейств БраЛап-М, БрагГап-НЕ, У1гГех, У1гГех-Е. Настоящая статья представляет подробное описание системы команд этого ядра.
Валерий Зотов
Команды управления последовательностью выполнения операций в программе
Команды переходов JUMP позволяют осуществить передачу управления в программе по указанному адресу. Эти команды обычно используются для организации ветвления и формирования циклов в ходе выполнения алгоритма программы. Микропроцессорное ядро PicoBlaze поддерживает пять модификаций инструкции переходов JUMP: одну безусловную и четыре условных. Форматы различных вариантов команд переходов JUMP представлены в таблице 1. Единственным параметром команд переходов является однобайтовая константа, значение которой определяет адрес перехода. При мнемо-
Таблица 1. Форматы команд переходов
Поле кода операции П Іоле адреса переход Мнемоника Выполняемая операция
1 о о о X X о 1 A A A A A A A A JUMP aa Безусловный переход
1 о о 1 о о о 1 A A A A A A A A JUMP Z,aa Переход при условии, что флаг ZERO Flag находится в установленном состоянии
1 о о 1 о 1 о 1 A A A A A A A A JUMP NZ,aa Переход при условии, что флаг ZERO Flag находится в сброшенном состоянии
1 о о 1 1 о о 1 A A A A A A A A JUMP C,aa Переход при условии, что флаг CARRY Flag находится в установленном состоянии
1 о о 1 1 1 о 1 A A A A A A A A JUMP NC,aa Переход при условии, что флаг CARRY Flag находится в сброшенном состоянии
15 17 Тз" 17 И" Ю Т Т ~T ~ ~T T T T T T | Номер разряда микрокоманды
Условие не выполнено
Новое значение программного счетчика
Старое значение програмного счетчика
I I I I I I l-i
JUMP Z,сю JUMP NZ,aa JUMP С,аа JUMP NC
JUMP aa
Адрес перехода
a|a|a|a|a|a|a|a
Условие выполнено или безуловный переход
Рис. 1. Выполнение команд безусловного и условных переходов
нической форме записи команд этот параметр задается в виде двух шестнадцатеричных символов.
Процесс выполнения команд переходов иллюстрирует рис. 1. При исполнении операции безусловной передачи управления JUMP aa в программный счетчик записывается значение адреса перехода aa. При условных переходах загрузка в программный счетчик нового адреса, указанного в команде, производится только при выполнении соответствующего условия. Если заданное условие не выполнено, то программный счетчик продолжает работу в инкрементном режиме, то есть его прежнее содержимое увеличивается на единицу. В процессе реализации команд безусловного и условных переходов состояние флагов регистра статуса не изменяется.
Команда JUMP Z,aa инициирует переход к выполнению инструкции, расположенной по указанному адресу, при условии, что флаг нулевого результата ZERO Flag находится в состоянии логической единицы. При исполнении команды JUMP NZ,aa управление передается инструкции с указанным адресом только в случае, если флаг нулевого результата ZERO Flag установлен в состояние логического нуля. Команда JUMP C,aa загружает новое значение адреса в программный счетчик при условии, что состояние флага переноса/займа CARRY Flag соответствует значению логической единицы. С помощью команды JUMP NC,aa осуществляется переход к выполнению инструкции с указанным адресом, если флаг переноса/займа CARRY Flag находится в сброшенном состоянии (логического нуля).
Команды вызова подпрограмм CALL позволяют передать управление по адресу, который соответствует первой инструкции вызываемой процедуры. Обращение к подпрограмме может происходить как в безусловном порядке, так и при выполнении заданного условия. Форматы безусловного и условных вариантов команд вызова подпрограмм CALL приведены в таблице 2. Адрес вызываемой процедуры задается в том же виде, что и адрес в командах перехода JUMP. Команды безусловного и условных об-------www.finestreet.ru------------------------
Компоненты и технологии, № 5'2003
Таблица 2. Форматы команд вызова подпрограмм
Поле кода операции Поле адреса подпрограммы Мнемоника Выполняемая операция
1 о о о X X 1 1 A A A A A A A A CALL aa Безусловный вызов подпрограммы
1 о о 1 о о 1 1 A A A A A A A A CALL Z,aa Вызов подпрограммы при условии, что флаг ZERO Flag находится в установленном состоянии
1 о о 1 о 1 1 1 A A A A A A A A CALL NZ,aa Вызов подпрограммы при условии, что флаг ZERO Flag находится в сброшенном состоянии
1 о о 1 1 о 1 1 A A A A A A A A CALL C,aa Вызов подпрограммы при условии, что флаг CARRY Flag находится в установленном состоянии
1 о о 1 1 1 1 1 A A A A A A A A CALL NC,aa Вызов подпрограммы при условии, что флаг CARRY Flag находится в сброшенном состоянии
15 и и 12 И Ю Т ~T ~T T T ~T ~T T Номер разряда микрокоманды
Стек
Условие
Старое значение програмного счетчика
Программный счетчик
Условие выполнено или безуловный вызов подл р граммы
Условие выполнено или безуловный вызов подпрграммы
Рис. 2. Выполнение команд безусловного и условных вызовов подпрограмм
1 1 1 1
CALL Z,aa CALL NZ,aa CALL C,aa CALL NC.aa Адрес перехода АІАІАІАІАІАІА
CALL аа — 1 A
ращений к подпрограммам не влияют на состояние флагов регистра статуса.
На рис. 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. Безусловное завершение выполняемой подпрограммы и передача управления основной программе или подпрограмме, из которой производилось обра-
щение к этой процедуре, осуществляется с помощью команды RETURN. При этом из стека извлекается последнее записанное значение, увеличивается на единицу и загружается в программный счетчик. Таким образом, в программный счетчик заносится адрес очередной команды основной программы (или подпрограммы при вложенном вызове процедуры), следующей после инструкции обращения к подпрограмме.
При реализации команды условного возврата из подпрограммы, прежде всего, осуществляется контроль выполнения соответствующего условия. При получении положительного результата проверки далее выполняется та же последовательность действий, что и при безусловном возврате. Если условие не выполнено, то текущее содержимое программного счетчика увеличивается на единицу. Таким образом, новое значение программного счетчика в этом случае соответствует адресу следующей команды текущей исполняемой подпрограммы.
Команда RETURN Z возвращает управление вызывающей программе или подпрограмме в случае, если флаг нулевого результата ZERO Flag принимает значение логической единицы. С помощью команды RETURN NZ осуществляется возврат из подпрограммы при условии, что флаг нулевого результата ZERO Flag сброшен в состояние логического нуля. Команда RETURN C выполняет операцию возврата из подпрограммы, если состояние флага переноса/займа CARRY Flag соответствует значению логической единицы. При исполнении команды RETURN NC управление передается вызывающей программе или подпрограмме только при условии, что флаг переноса/займа CARRY Flag находится в сброшенном состоянии. При выполнении команд возврата из подпрограммы состояние флагов регистра статуса не изменяется.
Таблица 3. Форматы команд безусловного и условного возврата из подпрограммы
Поле кода операции Поле адреса Мнемоника Выполняемая операция
1 о о о X X о о о о о о о о о о RETURN Безусловный возврат из подпрограммы
1 о о 1 о о о о о о о о о о о о RETURN Z Возврат из подпрограммы при условии, что флаг ZERO Flag находится в установленном состоянии
1 о о 1 о 1 о о о о о о о о о о RETURN NZ Возврат из подпрограммы при условии, что флаг ZERO Flag находится в сброшенном состоянии
1 о о 1 1 о о о о о о о о о о о RETURN C Возврат из подпрограммы при условии, что флаг CARRY Flag находится в установленном состоянии
1 о о 1 1 1 о о о о о о о о о о RETURN NC Возврат из подпрограммы при условии, что флаг CARRY Flag находится в сброшенном состоянии
15 и и 12 ТГ Ю Т Т т т т ~2 т т Номер разряда микрокоманды
Старое значение програмного счетчика
Программный счетчик
1 1
RETURN Z
RETURN NZ
RETURN С
RETURN NC Стек
RETURN
Условие выполнено или безуловный ВЫЗОВ подпрграммы
Рис. 3. Выполнение команд безусловного и условного возврата из подпрограммы
е
Компоненты и технологии, № 5'2003
Таблица 4. Форматы команд поразрядных операций «Логическое И»
Поле кода операции Поле номера регистра Поле константы Мнемоника Выполняемая операция
о о о і n n n n K K K K K K K K AND sN, kk Поразрядное «Логическое И» содержимого регистра sN и константы kk
Поле префикса кода операции Поле номера первого регистра Поле номера второго регистра Поле кода операции Мнемоника Выполняемая операция
1 і о о n n n n m m m m о о о 1 AND sN,sM Поразрядное «Логическое И» содержимого регистров sN и sM
тт 17 13 12 IT іо 9 8 ~Г 6 ~5~ 4 Т ~2 т т 1 Номер разряда микрокоманды
Таблица 5. Форматы команд поразрядных операций «Логическое ИЛИ»
Поле кода операции Поле номера регистра Поле константы Мнемоника Выполняемая операция
о о 1 о n n n n K K K K K K K K OR sN, kk Поразрядное «Логическое ИЛИ» содержимого регистра sN и константы kk
Поле префикса кода операции Поле номера первого регистра Поле номера второго регистра Поле кода операции Мнемоника Выполняемая операция
1 1 о о n n n n m m m m о о 1 о OR sN,sM Поразрядное «Логическое ИЛИ» содержимого регистров sN и sM
75" ТТ 13 12 IT 1о 9 8 7 6 5 4 Т Т Т Т 1 Номер разряда микрокоманды
Таблица 6. Форматы команд поразрядных операций «Исключающее ИЛИ»
Поле кода операции Поле номера регистра Поле константы Мнемоника Выполняемая операция
о о 1 1 n n n n K K K K K K K K XOR sN, kk Поразрядное «Исключающее ИЛИ» содержимого регистра sN и константы kk
Поле префикса кода операции Поле номера первого регистра Поле номера второго регистра Поле кода операции Мнемоника Выполняемая операция
1 1 о о n n n n m m m m о о 1 1 XOR sN,sM Поразрядное «Исключающее ИЛИ» содержимого регистров sN и sM
ТТ 17 13 12 IT 1о 9 8 7 6 5 4 Т ~2 т т 1 Номер разряда микрокоманды
Группа логических команд
В командах, входящих в эту группу, используются два параметра, которые определяют значения операндов. Первым операндом всегда является содержимое регистра общего назначения, номер которого N указан в тексте команды. В качестве номера регистра N может использоваться любое число в диапазоне от 0 до 15, которое при мнемонической записи команд задается в шестнадцатеричном формате (0 — F). В этот же регистр записывается результат выполненной операции. В качестве второго операнда используется либо константа, значение которой указывается непосредственно в коде команды, либо содержимое другого регистра
общего назначения. При мнемонической форме записи команд значение константы задается в виде двух шестнадцатеричных символов.
При выполнении поразрядных логических операций флаг переноса/займа CARRY Flag всегда сбрасывается в состояние логического нуля. Значение флага ZERO Flag определяется полученным результатом. Если все разряды результирующего слова принимают значение логического нуля, то флаг нулевого результата ZERO Flag устанавливается в состояние, соответствующее логической единице. В противном случае, если хотя бы в одном разряде результата присутствует единичное значение, то флаг нулевого результата ZERO Flag переключается в сброшенное состояние.
Форматы команд поразрядных операций «Логическое И» (поразрядное умножение) AND представлены в таблице 4.
Команда AND sN,kk выполняет операцию «Логическое И» над соответствующими разрядами содержимого регистра с номером N и константы kk. Для поразрядного умножения содержимого двух регистров общего назначения с номерами N и M предназначена команда AND sN,sM. Выполнение этих команд иллюстрирует рис. 4.
Операции поразрядного сложения двух операндов осуществляются с помощью инструкций OR, форматы которых определены в таблице 5.
Команда OR sN,kk выполняет поразрядную операцию «Логическое ИЛИ» содержимого регистра с номером N и константы kk (рис. 5). Поразрядное сложение содержимого двух регистров общего назначения с номерами N и M реализует команда OR sN,sM.
Форматы инструкций XOR, предназначенных для выполнения поразрядной операции «Исключающее ИЛИ», представлены в таблице 6.
Инструкция XOR sN,kk выполняет поразрядную операцию «Исключающее ИЛИ», в которой участвует содержимое регистра с номером N и константа kk, значение которой указывается непосредственно в команде. Команда XOR sN,sM осуществляет аналогичную операцию, операндами которой является содержимое двух регистров общего назначения с номерами N и M. Выполнение поразрядных операций «Исключающее ИЛИ» демонстрирует рис. 6.
Инструкция LOAD, которая также относится к группе логических команд, предназначена для загрузки данных в выбранный регистр общего назначения (табл. 7). Источником данных может служить содержимое любого регистра общего назначения или константа, указанная непосредственно в коде команды.
Команда LOAD sN,kk записывает значение константы kk, указанной в инструкции, в регистр общего назначения с номером N. Команда LOAD sN,sM производит загрузку данных
Исходное содержимое регисра sN AND sN,kk
Константа, указанная в команде & & &&&&&&
К К К К К К К К
11111111
Регистр sN
CARRY Г71 ZERO Flag Ш Flag ■ Результат Ф 0 0
Результат =0
Исходное содержимое регистра sN I AND sN,sM |
& & &&&&&&
Содержимое регистра iN
іншії
Регистр jN
CARRY ПЛ ZERO ■ Результат Ф 0 ЛҐ 0
Результат =0
Рис. 4. Выполнение поразрядных операций «Логическое И»
Исходное содержимое регисра sN
Константа, указанная в команде
|к|к|к|к|к|к|к|к|
іншії
CARRY
Flag
Регистр sN
И
ZERO
Flag
И
Результат Ф О
■--------------------1
Результат =0
I OR iN.»M I
Исходное содержимое регистра sN
Содержимое регистра sN
1 I II і I 1 і
CARRY
Flag
Регистр sN
И
ZERO [7] Flag 1--------1
Результат Ф О
Результат = 0
Рис. S. Выполнение поразрядных операций «Логическое ИЛИ»
XOR sN,kk
Исходное содержимое регисра sN
Константа, указанная в команде
CARRY
Flag
Регистр sN
И
ZERO
Flag
А А А А А А А А
К К кккккк
1 1 1 1 1 1 1 1
И Результат ф 0
лґ' 0 і
Исходное содержимое регистра sN
Содержимое регистра sN
Результат =0
| XOR sN,sM |
1 1 і і 1 1 11
CARRY
Flag
Регистр sN
И
ZERO [7]
Flag 1---------1
Результат Ф 0
Результат =0
Рис. б. Выполнение поразрядных операций «Исключающее ИЛИ»
Компоненты и технологии, № 5'2003
Таблица 7. Форматы инструкции загрузки данных в регистр общего назначения
Поле кода Поле номера операции регистра
Поле константы
Выполняемая операция
о | о | о | о | n I n I n I n I K I K I K I K I K I K I K I K I LOAD sN, kk | Загрузка константы kk в регистр sN
Поле префикса кода операции Поле номера первого регистра Поле номера второго регистра Поле кода операции Мнемоника Выполняемая операция
1 1 о о n n n n m m m m о о о о LOAD sN,sM Загрузка содержимого регистра sM в регистр sN
ТТ тт 13 12 IT 1о 9 8 7 6 в 4 Т Т Т Т 1 Номер разряда микрокоманды
Константа, указанная
К К К К к к к к
Регистр sN 1 LOAD sN,sM 1 Регистр sN
Рис. 7. Выполнение операций загрузки данных в регистр общего назначения
Таблица 8. Форматы команд сложения двух операндов без учета переноса
Поле кода Поле номера операции регистра
Поле константы
ADD sN, kk
Поле префикса Поле номера Поле номера Поле кода кода операции первого регистра второго регистра операции
Выполняемая операция
Сложение содержимого регистра sN и константы kk
Выполняемая операция
и
14
13
12
1о
ADD sN,sM Сложение содержимого регистров sN и sM
Номер разряда микрокоманды
Регистр 5N
Регистр sN
ADD sN,kk
ІАРР sN. sM
Исходное содержимое регистра sN
Исходное содержимое регистра sN
Константа, указанная в команде
І к| К І к| к| к I к І к| к|
Содержимое регистра sN
CARRY
Flag
Результат < FF ** О
ZERO
Flag
и-
Результат ф 0
Результат > РР
Рис. 8. Выполнение операций сложения двух операндов без учета переноса
Результат = О
из регистра с номером M в регистр с номером N. Операции загрузки данных в регистр не оказывают влияния на флаги регистра статуса. Рис. 7 отображает процесс выполнения операции загрузки данных в регистр общего назначения.
Группа арифметических команд
Арифметические команды микропроцессорного ядра PicoBlaze обеспечивают выполнение операций сложения и вычитания над двумя восьмиразрядными операндами. Первым параметром в арифметической команде всегда является номер одного из регистров общего назначения, содержимое которого используется в качестве первого операнда. Этот же регистр используется для записи результата выполненной операции. В роли второго операнда может выступать константа, значение которой задается непосредственно в коде команды, или содержимое любого регистра общего назначения. При выполнении арифметических операций состояние флагов регистра статуса зависит от полученного результата.
Форматы команд сложения двух операндов без учета переноса представлены в таблице 8.
Команда ADD sN,kk выполняет сложение содержимого регистра с номером N и константы kk. Для получения суммы содержимого
двух регистров общего назначения с номерами N и M предназначена команда ADD sN,sM. На рис. 8 показана последовательность действий, выполняемых при сложении двух операндов без учета переноса.
Сложение двух операндов с учетом переноса, полученного при выполнении предыду-
щей операции, производится с помощью инструкции ADDCY. Форматы двух вариантов этой команды приведены в таблице 9.
Команда ADDCY sN,kk суммирует содержимое регистра с номером N с константой kk с учетом состояния флага переноса перед выполнением этой операции. Сложение содержимого двух регистров общего назначения с учетом значения флага переноса осуществляется с помощью команды ADDCY sN,sM (рис. 9).
После исполнения команд сложения (с учетом и без учета переноса) флаг нулевого результата ZERO Flag переключается в установленное состояние, если сумма равна нулю. При получении результата, отличного от нулевого, флаг ZERO Flag сбрасывается в состояние логического нуля. Флаг переноса/займа CARRY Flag принимает значение логической единицы, если сумма операндов превышает значение 255 (FF). В противном случае этот флаг переключается в сброшенное состояние.
Операция вычитания без учета займа выполняется с помощью инструкции SUB, форматы двух вариантов которой представлены в таблице 10.
Команда SUB sN,kk позволяет вычесть значение константы kk из содержимого регистра с номером N. Для вычисления разности содержимого двух регистров общего назначения с номерами N и M следует использовать команду SUB sN,sM. Процесс выполнения команд вычитания без учета займа отображен на рис. 10.
Для вычисления разности двух операндов с учетом значения займа, образовавшегося при выполнении предыдущей операции, предназначена инструкция SUBCY, форматы вариантов которой приведены в таблице 11.
Команда SUBCYsN,kk выполняет вычитание значений константы kk и флага займа CARRY Flag из содержимого регистра с номером N. Вычисление разности содержимого двух регистров общего назначения с номерами N и M с участием значения флага займа CARRY Flag производится с помощью команды SUBCYsN,sM (рис. 11).
Таблица 9. Форматы команд сложения двух операндов с учетом переноса
Поле кода операции Поле номера регистра Поле константы Мнемоника Выполняемая операция
о 1 о 1 n n n n K K K K K K K K ADDCY sN, kk Сложение содержимого регистра sN и константы kk с учетом переноса
Поле префикса кода операции Поле номера первого регистра Поле номера второго регистра Поле кода операции Мнемоника Выполняемая операция
1 1 о о n n n n m m m m о 1 о 1 ADDCY sN,sM Сложение содержимого регистров sN и sM с учетом переноса
1Ї 14 13 12 11 1о~ ~9~ “6“ ~ ~T У Т Т "о" 1 Номер разряда микрокоманды
Исходное содержимое
Константа, указанная CARRY
ADD sN,kk 1 1 1 1 1 1 1 1 к| к| к| к| КI к| к| к + п
Исходное содержимое
Содержимое
CARRY
IADD sN, sМ щ 1 1 1 1 1 1 1 + п
CARRY Щ Flag '
Результат < FF О
-1
ZERO
Flag
И
Результат Ф О
Результат >?? Резул ьтат = О
Рис. 9. Осуществление операций сложения двух операндов с учетом переноса
о
о
о
K
K
K
K
K
K
K
K
n
n
n
n
1
1
о
о
о
1
о
о
n
n
n
n
m
m
4
9
8
7
6
3
2
о
Є
Компоненты и технологии, № 5'2003
Таблица 10. Форматы команд вычитания без учета займа
Поле кода операции Поле номера регистра Поле константы Мнемоника Выполняемая операция
о 1 1 о n n n n K K K K K K K K SUB sN, kk Вычитание из содержимого регистра sN константы kk
Поле префикса кода операции Поле номера первого регистра Поле номера второго регистра Поле кода операции Мнемоника Выполняемая операция
1 1 о о n n n n m m m m о 1 1 о SUB sN,sM Вычитание содержимого регистра sM из содержимого регистра sN
тт тт 13 12 тт 1о 9 8 ~Г 6 4 Т ~2 Т Т 1 Номер разряда микрокоманды
Исходное содержимое
Константа, указанная
Регистр *N I SUB sN,kk 1 -4і 1 регистра sN в команде
К К К к к | к | к к
Регистр sN |SUB sN, sM | •* Исходное содержимое регистра sN Содержимое регистра sN
CARRY
Flag
Результат ^ FF О -1
ZERO
Flag
Результат >??
Рис. 10. Вычисление разности двух операндов без учета займа
Результат Ф О
Результат = О
Таблица 11. Форматы инструкций вычитания с учетом займа
Поле кода операции Поле номера регистра Поле константы Мнемоника Выполняемая операция
о 1 1 1 n n n n K K K K K K K K SUBCY sN, kk Вычитание из содержимого регистра sN константы kk с учетом займа
Поле префикса кода операции Поле номера первого регистра Поле номера второго регистра Поле кода операции Мнемоника Выполняемая операция
1 1 о о n n n n m m m m о 1 1 1 SUBCY sN,sM Вычитание содержимого регистра эМ из содержимого регистра эИ с учетом займа
ТТ тт 13 12 IT 1о 9 8 7 6 б 4 Т ~2 Т Т 1 Номер разряда микрокоманды
Регистр sN Исходное содержимое 1 1 регистра sN Константа, указанная в команде CARRY Flag
ISUBCYsN,kk|| I I I I I I I I к| К| К| к| К| К| К| К - □ CARRY Flag
Регистр sN Исходное содержимое Содержимое регистра sN
реіисіра .N
- 1 1
Результат < FF
CARRY [7] А-----------------------о
Flag — ^------------------------1
ZERO
Flag
И-
Результат > ГГ
Рис. 11. Вычисление разности двух операндов с учетом займа
Результат Ф О
Результат = О
Таблица 12. Форматы команд логического или циклического сдвига данных
Поле кода операции Поле номера регистра Поле направления сдвига Поле типа сдвига Мнемоника Выполняемая операция
1 1 о 1 n n n n о о о о 1 1 1 о SRG sN Логический сдвиг содержимого регистра эИ вправо на один разряд с записью 0
1 1 о 1 n n n n о о о о 1 1 1 1 SR1 sN Логический сдвиг содержимого регистра эИ вправо на один разряд с записью 1
1 1 о 1 n n n n о о о о 1 о 1 о SRX sN Логический сдвиг содержимого регистра эИ вправо с сохранением последнего разряда
1 1 о 1 n n n n о о о о 1 о о о SRA sN Циклический сдвиг содержимого регистра эИ вправо через разряд переноса/займа
1 1 о 1 n n n n о о о о 1 1 о о RR sN Циклический сдвиг содержимого регистра эИ вправо без участия бита переноса
1 1 о 1 n n n n о о о о о 1 1 о SL0 sN Логический сдвиг содержимого регистра эИ влево на один разряд с записью 0
1 1 о 1 n n n n о о о о о 1 1 1 SL1 sN Логический сдвиг содержимого регистра эИ влево на один разряд с записью 1
1 1 о 1 n n n n о о о о о о 1 о SLX sN Логический сдвиг содержимого регистра эИ влево с сохранением последнего разряда
1 1 о 1 n n n n о о о о о о о о SLA sN Циклический сдвиг содержимого регистра эИ влево через разряд переноса/займа
1 1 о 1 n n n n о о о о о 1 о о RL sN Циклический сдвиг содержимого регистра эИ влево без участия бита переноса
14 13 12 11 1о 9 8 7 6 Г 4 3 2 1 о Номер разряда микрокоманды
После выполнения команд вычитания (с учетом и без учета займа) состояние флагов регистра статуса изменяется в зависимости от полученного результата. Флаг нулевого результата ZERO Flag переключается в установленное состояние, если разность равна нулю. При получении результата, отличного от нулевого, флаг ZERO Flag сбрасывается в состояние логического нуля. Флаг переноса/займа CARRY Flag принимает значение логической единицы при отрицательном значении разности операндов. В противном случае этот флаг переключается в сброшенное состояние.
Команды сдвига данных
Команды этой группы предназначены для выполнения операций логического (арифметического) или циклического сдвига данных, хранящихся в регистре общего назначения с указанным номером, на один разряд. Форматы инструкций сдвига данных представлены в таблице 12.
Команды 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 зависит от значения содержимого используемого регистра общего назначения после выполнения операции сдвига. Если во всех разрядах этого регистра присутствуют нулевые
Компоненты и технологии, № 5'2003
RR sN
Sll sN
CARRY Flag
Eh
CARRY Flag
3
Регистр sN
Регистр sN
I-
ZERO Flag
0i
ZERO Flag
ZERO Flag
□ c
ZERO Flag
0C
ZERO Flag
me
Результат = 0 Результат Ф О
Результат = О
Результат Ф О
Результат = О Результат Ф О
Результат = О Результат Ф О
Рис. 12. Выполнение операций логического или циклического сдвига данных
Результат = О
значения, то флаг ZERO Flag переключается в установленное состояние. В противном случае флаг нулевого результата ZERO Flag сбрасывается.
Команды ввода/вывода
Команды ввода/вывода предназначены для организации чтения данных из входного порта в заданный регистр общего назначения и передачи информации из указанного регистра в выходной порт. Инструкции ввода/вывода включают в себя два параметра. Значение первого параметра определяет номер регистра общего назначения, используемого в качестве приемника данных при операции ввода или в качестве источника при выполнении операции вывода. Второй параметр позволяет указать адрес порта ввода/вывода, к которому производится обращение. Адресация ко входным и выходным портам в инструкциях ввода/вывода может осуществляться с помощью восьмиразрядной константы, значение которой задается непосредственно в команде, или содержимого регистра общего назначения с указанным номером. Форматы команд ввода/вывода приведены в таблице 13.
Команда INPUT sN, kk выполняет передачу данных из входного порта с адресом kk в регистр общего назначения с номером sN. Чтение входных данных из порта ввода/вывода, адрес которого указывает содержимое регистра sM, производится при использовании инструкции INPUT sX,(sY).
Передача содержимого регистра общего назначения с номером sN в выходной порт с адресом kk осуществляется с помощью команды OUTPUT sX, kk. Для записи выходных данных из регистра sN в порт, адрес которого определяется содержимым регистра sM, предназначена команда OUTPUT sN,(sM). Рис. 13 поясняет выполнение операций ввода/вывода с различными видами адресации.
Команды обслуживания прерываний
В эту группу входят команды возврата из процедуры обработки прерываний и установки режима обслуживания прерываний в программе.
Инструкция возврата из процедуры обслуживания прерывания RETURNI предназначена для передачи управления программе, при
Таблица 13. Форматы команд ввода/вывода
выполнении которой поступил запрос прерывания. Возврат к выполняемой программе производится в безусловном порядке после завершения процедуры обработки прерывания. Параметры команды возврата из процедуры обслуживания прерывания позволяют также определить дальнейший режим (запрета или разрешения) обработки прерываний. Форматы инструкций обслуживания прерываний представлены в таблице 14.
Команда RETURNI ENABLE возвращает управление из процедуры обслуживания прерывания основной программе с разрешением последующих прерываний. Для выхода из процедуры обработки прерывания и установки режима запрета прерывания следует использовать команду RETURNI DISABLE. Механизм возврата из процедуры обслуживания прерываний показан на рис. 14. При завершении процесса обработки прерывания в программный счетчик из стека загружается значение адреса, которое было записано последним. Таким образом, в программный счетчик заносится адрес команды, которая выполнялась в момент поступления запроса на прерывание. Кроме того, восстанавливается состояние флагов в регистре статуса, в котором они находились при вызове процедуры обслуживания запроса на прерывание.
Команды ENABLE INTERRUPT и DISABLE INTERRUPT позволяют изменить режим обработки прерываний на любом этапе выполняемой программы. При этом следует учитывать, что до завершения текущей процедуры обслуживания прерывания должен быть установлен режим запрета прерываний.
Поле кода операции Поле номера регистра Поле адреса порта ввода/вывода Мнемоника Выполняемая операция
1 о 1 о n n n n K K K K K K K K INPUT sN, kk Чтение данных из порта ввода/вывода с адресом кк в регистр эИ
1 1 1 о n n n n K K K K K K K K OUTPUT sN, kk Запись данных из регистра эИ в порт ввода/вывода с адресом кк
Поле кода операции Поле номера первого регистра Поле номера второго регистра Нулевые разряды Мнемоника Выполняемая операция
1 о 1 1 n n n n m m m m о о о о INPUT sN,(sM) Чтение данных из порта ввода/вывода с адресом, определяемым регистром эМ, в регистр эИ
1 1 1 1 n n n n m m m m о о о о OUTPUT sN,(sM) Запись данных из регистра эИ в порт с адресом, определяемым регистром эМ
и и U 12 11 1о 9 8 7 6 Г 4 Т Т Т Т Номер разряда микрокоманды
Адрес порта ввода/вывода Адрес, указанный в команде
Порт ввода/вывода Адрес порта ввода/вывода
Регистр sm
Регистр sN |INPUTsN,(sM]
1
Порт ввода/вывода Адрес порта ввода/вывода
Регистр sN
JOUTPUTsMkicl ------------►
Адрес, указанный в команде
-|к| к| к|к|к|к|к| к|
Порт ввода/вывода Адрес порта ввода/вывода
Регистр sm
Регистр sN OUTPUT sN,(sM)
►
Порт ввода/вывода
Рис. 13. Выполнение инструкций ввода-вывода с различными видами адресации
Є
Компоненты и технологии, № S'2003
Таблица 14. Форматы команд обслуживания прерываний
Поле режима обработки прерываний Поле кода операции Мнемоника Выполняемая операция
1 о о о о о о о 1 1 1 1 о о о о RETURNI ENABLE Возврат из процедуры обработки и установка режима запрета прерывания
1 о о о о о о о 1 1 о 1 о о о о RETURNI DISABLE Возврат из процедуры обработки и установка режима разрешения прерывания
1 о о о о о о о о о 1 1 о о о о ENABLE INTERRUPT Установка режима разрешения прерывания
1 о о о о о о о о о о 1 о о о о DISABLE INTERRUPT Установка режима запрета прерывания
1Ї 77 13 12 11 1о 9 8 7 6 Г т 3 2 1 о Номер разряда микрокоманды
Стек
Регистр фиксации флагов
Программный счетчик 1 1- -■
1 1 1 1 1 1 1 1 1 4
RETURNI ENABLE
RETURNI DISABLE
CARRY
INTERRUPT ENABLE Flag
■
ZERO
Flag
□«
CARRY
ZERO
Flag
-■
Рис. 14. Выполнение возврата из процедуры обслуживания прерываний
Заключение
Несмотря на то что приведенное выше описание системы команд микропроцессорного ядра РкоВ1аге относится, прежде всего, к модулю, предназначенному для употребления в проектах, которые реализуются на основе ПЛИС серий БраТап-П, 8раЛап-ПЕ, Уц1ех и Уи1ех-Е, оно в значительной мере применимо и к другим элементам этого семейства. Все рассмотренные команды поддерживаются и остальными версиями микропроцессорного ядра РкоВ1аге, различаясь только длиной (разрядностью) и форматом инструкций. Отличительные особенности микропроцессорных модулей РкоВ1аге, которые предназначены для использования в кристаллах серий УЫ;ех-П и СооШиппег-П, будут проанализированы в следующих публикациях цикла.
Литература
1. Зотов В. РкоВ1аге — семейство восьмиразрядных микропроцессорных ядер, реализуемых на основе ПЛИС фирмы ХШпх. // Компоненты и технологии. 2003. № 4.