Система команд микропроцессорного ядра MicroBlaze
Команды управления последовательностью выполнения операций в программе
Группа инструкций, используемых для передачи управления в программе, включает в себя:
- команды безусловных переходов;
- команды условных переходов;
- команды возврата из подпрограмм и процедур обслуживания прерываний.
Система команд микропроцессорного ядра MicroBlaze содержит инструкции безусловных переходов, использующие как абсолютную, так и относительную адресацию. При абсолютной адресации исполнительный адрес, по которому осуществляется передача управления в программе, указывается в виде значения соответствующего параметра команды. В случае применения инструкций переходов, использующих относительную адресацию, исполнительный адрес вычисляется как сумма текущего значения содержимого программного счетчика и смещения, задаваемого в виде значения соответствующего параметра команды. Для определения значения адреса перехода (при абсолютной адресации) или смещения (при относительной адресации) может применяться регистровый косвенный или непосредственный способы. При регистровом косвенном способе значение адреса перехода или смещения содержится в регистре общего назначения, номер которого указывается в качестве соответствующего параметра команды. Непосредственный способ позволяет задавать требуемые значения адреса или смещения в виде составной части (соответствующего поля) инструкции. Как правило, при этом значение адреса или смещения представляет собой результат знакового расширения 16-разрядной константы Imm, указанной непосредственно в инструкции, до 32-разрядного слова.
Большинство команд безусловных переходов представлено в двух вариантах: с немедленной передачей управления и с задержкой исполнения. При выполнении инструкции с немедленной передачей управления загрузка нового значения (адреса перехода) в программный счетчик осуществляется сразу же после завершения обработки этой команды. Инструкции безусловных переходов с задержкой исполнения применяются с целью сокращения временных потерь, вызванных необходимостью перезагрузки конвейера после их выполнения. При использовании этих команд фактическая передача управления происходит только после завершения исполнения следующей инструкции, находящейся в фазе дешифрации. В конце мнемонического идентификатора таких инструкций присутствует символ D (Delay), указывающий на то, что исполнение этих команд осуществляется с дополнительной задержкой.
Микропроцессорное ядро MicroBlaze поддерживает четырнадцать разновидностей команд безусловной передачи управления в программе, форматы которых приведены в таблице 1.
В инструкциях безусловного перехода BRRb и BRI Imm используется относительная адресация с регистровым косвенным и непосредственным указанием значения смещения соответственно. Команда BR передает управление по адресу, равному сумме значений текущего состояния программного счетчика и содержимого регистра общего назначения, номер которого указывается в качестве единственного параметра инструкции. При использовании команды BRI адрес перехода представляет собой сумму текущего значения программного счетчика и результата знакового расширения 16-разрядной константы Imm, указанной непосредственно в инструкции, до 32-разрядного слова. Рисунок 1 демонстрирует выполнение команд безусловного перехода с относительной адресацией.
Команды BRD Rb и BRID Imm также предназначены для осуществления безусловного перехода с относительной адресацией, но передача управления осуществляется только после завершения обработки следующей (декодируемой) инструкции. Команды BRLDRd,Rb и BRLID Rd,Imm выполняют те же операции, что и предыдущая пара инструкций, сохраняя предварительно текущее состояние программного счетчика в регистре общего назначения. Номер регистра, используемого для записи текущего состояния программного счетчика, указывается в качестве значения первого параметра этих команд. Рисунок 2 поясняет выполнение команд безусловного перехода с относительной адресацией и задержкой исполнения.
Инструкции BRA Rb и BRAI Imm реализуют функцию безусловной передачи управления в программе с использованием абсолютной адресации, с регистровым косвенным и непосредственным указанием значения адреса перехода соответственно. В команде BRA значение адреса перехода определяется содержимым регистра общего назначения, номер которого указывается в качестве единственного параметра инструкции. Команда BRAI передает управление по адресу, который представляет собой результат знакового расширения 16-разрядной константы Imm, указанной непосредственно в инструкции, до 32-разрядного слова. Рис. 3 демонстрирует выполнение команд безусловного перехода с абсолютной адресацией.
Команды BRAD Rb и BRAID Imm позволяют осуществлять безусловный переход с абсолютной адресацией и задержкой исполнения, которая необходима для завершения обработки следующей инструкции (находящейся в стадии декодирования). Единственным отличием команд BRALD Rd,Rb и BRALID Rd,Imm от предыдущей пары инструкций является сохранение текущего состояния программного счетчика в регистре общего назначения, номер которого указывается в качестве значения первого параметра этих команд. На рис. 4 показана последовательность операций при выполнении команд безусловного перехода с абсолютной адресацией и задержкой исполнения.
Инструкции BRK Rd,Rb и BRKI Rd,Immпредназначены для реализации в программе режима Break с передачей управления по указанному адресу. В этих командах применяется абсолютная адресация. Первым параметром в данных инструкциях является номер одного из регистров общего назначения, который используется для записи значения текущего состояния программного счетчика. Содержимое этого регистра впоследствии может использоваться в процессе вычисления адреса возврата при выполнении соответствующей инструкции. В качестве значения второго параметра команды BRK также указывается номер регистра, содержимое которого определяет адрес передачи управления. В инструкции BRKI адрес перехода представляет собой результат знакового расширения 16-разрядной константы Imm, указанной непосредственно в инструкции, до 32-разрядного слова. При исполнении рассмотренных команд флаг Break in Progress Flag (28-й разряд регистра статуса) переключается в установленное состояние. Процесс выполнения команд BRK и BRKI иллюстрирует рисунок 5.
При условных переходах загрузка в программный счетчик нового адреса, по которому передается управление в программе, производится только при выполнении соответствующего условия. Если заданное условие не выполнено, то программный счетчик продолжает работу в инкрементном режиме. Проверка выполнения соответствующего условия заключается в сопоставлении с нулем значения содержимого одного из регистров общегоназначения, номер которого указывается в качестве первого параметра инструкций условных переходов. Система команд микропроцессорного ядра MicroBlaze содержит инструкции, позволяющие анализировать выполнение одного из шести типов условий:
- значение содержимого указанного регистра равно нулю;
- значение содержимого указанного регистра не равно нулю;
- значение содержимого указанного регистра меньше нуля;
- значение содержимого указанного регистра меньше или равно нулю;
- значение содержимого указанного регистра больше нуля;
- значение содержимого указанного регистра больше или равно нулю.
В отличие от команд безусловного перехода в инструкциях условных переходов всегда используется относительная адресация с регистровым косвенным и непосредственным указанием значения смещения. Все команды условной передачи управления представлены в двух вариантах: с немедленным исполнением и с задержкой до завершения обработки следующей (декодируемой) инструкции. Форматы команд условных переходов представлены в таблице 2.
Инструкции BEQ Ra,Rb и BEQI Ra,Imm инициируют передачу управления по заданному адресу при условии, что значение содержимого регистра общего назначения с номером a равно нулю. Адрес перехода формируется путем суммирования текущего значения программного счетчика и смещения, которое указывается в виде содержимого регистра Rb (в команде BEQ) или результата знакового расширения 16-разрядной константы Imm до 32-разрядного слова (в команде BEQI). При исполнении команд BNERa,Rb и BNEI Ra,Imm управление передается инструкции с указанным адресом только в случае, если значение содержимого регистра общего назначения с номером a неравно нулю. Инструкции BLT Ra,Rb и BLTI Ra,Imm загружают новое значение адреса в программный счетчик при условии, что значение содержимого регистра Ra меньше нуля. С помощью команд BLE Ra,Rb и BLEI Ra,Imm осуществляется переход к выполнению инструкции с указанным адресом, если содержимое регистра Ra меньше или равно нулю. Инструкции BGT Ra,Rb и BGTI Ra,Imm предназначены для передачи управления в программе по новому адресу при условии, что значение содержимого регистра Ra больше нуля. Команды BGE Ra,Rb и BGEI Ra,Imm позволяют выполнить переход к инструкции с требуемым адресом, если содержимое регистра Ra больше или равно нулю. Рисунок 6 поясняет выполнение команд условных переходов.
Инструкции BEQD Ra,Rb, BNED Ra,Rb, BLTD Ra,Rb, BLED Ra,Rb, BGTD Ra,Rb, BGEDRa,Rb, BEQID Ra,Imm, BNEID Ra,Imm, BLTIDRa,Imm, BLEID Ra,Imm, BGTID Ra,Imm, BGEID Ra,Imm выполняют те же функции, что и команды BEQ, BNE, BLT, BLE, BGT, BGE, BEQI, BNEI, BLTI, BLEI, BGTI, BGEI, рассмотренные выше. Отличие заключается в том, что передача управления производится при выполнении соответствующего условия только после завершения обработки следующей инструкции, находящейся в стадии дешифрации. Процесс выполнения команд условного перехода с задержкой исполнения показан на рисунке 7.
В системе команд микропроцессорного ядра MicroBlaze представлено три инструкции возврата управления в программе:
- команда возврата из подпрограмм;
- команда возврата из процедур обслуживания прерываний;
- команда выхода из режима Break.
Все команды этой подгруппы предусматривают задержку передачи управления до момента завершения исполнения следующей инструкции, находящейся в стадии дешифрации. Тем самым снижаются временные потери, связанные с необходимостью перезагрузки конвейера. В командах возврата применяется относительная адресация, при которой значение адреса возврата складывается из базового значения и смещения.
Все три инструкции возврата управления используют два параметра. В качестве значения первого параметра указывается номер регистра общего назначения, в котором содержится базовый адрес передачи управления. Вторым параметром является 16-разрядная константа, значение которой определяется непосредственно в составе инструкции. Результат знакового расширения этой константы до 32-разрядного слова используется в качестве значения смещения при относительной адресации. Форматы инструкций возврата управления приведены в таблице 3.
Инструкция возврата из процедуры обслуживания прерывания RTID Ra,Imm предназначена для передачи управления программе, при выполнении которой поступил запрос прерывания. Адрес возврата вычисляется как сумма содержимого регистра общего назначения с номером a и результата знакового расширения константы Imm до 32-разрядного значения. После завершения исполнения этой команды флаг Interrupt Enable Flag (30-й разряд регистра статуса) переключается в установленное состояние (высокого логического уровня), разрешая тем самым обработку последующих прерываний. Выполнение инструкции возврата из процедуры обслуживания прерывания демонстрирует рисунок 8.
Безусловное завершение выполняемой подпрограммы и передача управления основной программе или подпрограмме, из которой производилось обращение к этой процедуре, осуществляется с помощью команды RTSD Ra,Imm. При возврате из подпрограмм выполняется та же последовательность действий, что и при возврате из процедуры обслуживания прерывания, но значения флагов регистра статуса не изменяются (рис. 8).
Команда RTBD Ra,Imm используется для выхода из режима Break с передачей управления по адресу, значение которого равно сумме содержимого регистра общего назначения с номером a и результата знакового расширения константы Imm. После ее исполнения флаг Break in Progress Flag (двадцать восьмой разряд регистра статуса) переключается в сброшенное состояние (низкого логического уровня) (рис. 8).
Группа инструкций ввода/вывода
Интерфейс ввода-вывода микропроцессорного ядра MicroBlaze, соответствующий спецификации FSL (Fast Simplex Link), поддерживает два режима передачи данных: с блокировкой и без блокировки работы процессора. Для каждого из этих режимов предусмотрены соответствующие команды ввода-вывода. При выполнении инструкций, использующих режим блокировки, работа процессора приостанавливается до завершения считывания или записи достоверных данных. Исполнение команд ввода-вывода без блокировки не останавливает функционирование процессора независимо от того, могут ли быть считаны или переданы достоверные данные через указанный канал интерфейса FSL.
Одни и те же каналы интерфейса FSL могут использоваться для передачи как информационных, так и управляющих данных. Тип передаваемого слова данных определяет значение специального контрольного бита. В случае передачи информационных данных значение этого бита должно быть равно нулю. Для идентификации управляющих данных используется единичное значение контрольного бита. Поэтому для передачи информационных и управляющих данных используются различные варианты инструкций ввода-вывода.
Команды ввода-вывода через каналы интерфейса FSL используют два параметра. Значение первого параметра определяет номер регистра общего назначения, используемого в качестве приемника данных при операции ввода (чтения) или в качестве источника при выполнении операции вывода (записи). Второй параметр позволяет указать номер используемого канала интерфейса FSL.
Система команд микропроцессорного ядра MicroBlaze включает в себя четыре инструкции, предназначенные для чтения данных различного типа, поступающих через входной интерфейс FSL. Информация о форматах этих команд содержится в таблице 4.
Команда GET Rd,FSLn выполняет операцию чтения информационных данных из n-го канала интерфейса FSL в регистр общего назначения с номером d, используя режим блокировки процессора. Инструкция nGETRd,FSLn предназначена для чтения информационных данных из n-го канала интерфейса FSL в регистр Rd без блокировки. Считывание управляющих данных из n-го канала интерфейса FSL в регистр с номером d в режиме блокировки осуществляется с помощью команды cGET Rd,FSLn. Для чтения управляющих данных из n-го канала интерфейса FSL в регистр Rd без блокировки используется инструкция ncGET Rd,FSLn. Если при выполнении операций чтения значение контрольного бита не соответствует ожидаемому типу данных, то флаг FSL Error Flag (27-й разряд регистра статуса MSR) устанавливается в состояние, соответствующее высокому логическому уровню. При выполнении команд чтения без блокировки для достоверных данных флаг переноса Carry Flag (двадцать девятый разряд регистра статуса) сбрасывается в состояние низкого логического уровня. В случае чтения неверных данных флаг переноса устанавливается в состояние высокого логического уровня. Рисунок 9 поясняет выполнение инструкций чтения данных из каналов интерфейса FSL
Для передачи данных различного типа из регистра общего назначения в выходной канал интерфейса FSL предусмотрены четыре варианта инструкций, форматы которых приведены в таблице 5.
Передача информационных данных из регистра общего назначения с номером a в n-й канал интерфейса FSL в режиме блокировки осуществляется с помощью команды PUTRa,FSLn. Для записи информационных данных из регистра Ra в n-й канал интерфейса FSL без блокировки предназначена командаnPUT Ra,FSLn. Команда cPUT Ra,FSLn выполняет операцию передачи управляющих данных из регистра Ra в n-й канал интерфейса FSL, используя режим блокировки процессора. Инструкция ncPUT Ra,FSLn осуществляет вывод управляющих данных из регистра Ra в n-й канал интерфейса FSL без блокировки. При успешном выполнении команд передачи данных из регистра общего назначения в выходной канал интерфейса FSL флаг переноса Carry Flag сбрасывается в состояние низкого логического уровня. В противном случае флаг переноса устанавливается в состояние высокого логического уровня. Рисунок 10 поясняет выполнение команд передачи данных различного типа из регистра общего назначения в выходной канал интерфейса FSL.
Группа специальных команд
Инструкции, входящие в данную группу, предназначены для копирования содержимого регистров специального назначения в регистры общего назначения и наоборот.
Форматы специальных команд представлены в таблице 6.
Инструкция MTS S1,Ra позволяет загрузить содержимое выбранного регистра общего назначения Ra в регистр состоянияMSR. Данные, записанные в регистр состояния с помощью команды MTS, вступают в силу через один цикл после исполнения этой инструкции.
Команда MFS Rd,Sa выполняет копирование содержимого одного из регистров специального назначения Sa в регистр общего назначения с номером d. При использовании в инструкции MFS в качестве второго параметра S1 производится копирование содержимого регистра состояния MSR. Если в качестве второго параметра указано значение S0, то в регистр общего назначения Rd записывается содержимое программного счетчика. Рисунок 11 иллюстрирует выполнение специальных инструкций.
Инструкции записи в кэш-память
Для работы с кэш-памятью в системе команд микропроцессорного ядра MicroBlaze предусмотрены две инструкции, позволяющие загружать содержимое выбранного регистра общего назначения в кэш-память данных и в кэш-память команд. Эти инструкции используют два параметра. В качестве первого параметра указывается номер регистра общего назначения, который используется для хранения адреса записи. Второй параметр определяет номер регистра общего назначения, содержимое которого копируется в кэш-память. Форматы команд, предназначенных для работы с кэш-памятью, определены в таблице 7.
Инструкция WIC Ra,Rb используется для загрузки содержимого регистра общего назначения Rb в кэш-память команд. Инструкция WDC Ra,Rb выполняет операцию копирования содержимого регистра Rb в кэш-память данных. Рисунок 12 поясняет процесс выполнения этих команд.
На этом завершается описание системы команд микропроцессорного ядра MicroBlaze. Прежде чем приступить к изучению процесса разработки устройств на основе этого модуля, необходимо познакомиться с программными средствами проектирования, составной частью которых является ядро MicroBlaze. Поэтому в следующей публикации цикла будут рассмотрены характеристики и структура пакета Embedded Development Kit (EDK), предлагаемого фирмой Xilinx в качестве основного инструмента разработки и отладки встраиваемых микропроцессорных систем на основе ПЛИС серий FPGA.