Особенности микропроцессорного ядра PicoBlaze, предназначенного для применения в проектах, реализуемых на основе ПЛИС семейств Spartan-3, Virtex-II и Virtex-IIPRO
В представленных ранее публикациях цикла [1–5], посвященного рассмотрению встраиваемых восьмиразрядных микропроцессорных ядер семейства PicoBlaze™, реализуемых на основе ПЛИС фирмы Xilinx®, были приведены сведения о трех представителях этого семейства. После начала серийного выпуска кристаллов новой серии с архитектурой FPGA (Field Programmable Gate Array) Spartan™-3 [7] фирмой Xilinx была разработана соответствующая версия микропроцессорного ядра PicoBlaze, которая предназначена в первую очередь для применения в проектах, реализуемых на основе ПЛИС этого семейства. Кроме того, новая версия ядра PicoBlaze может успешно использоваться в качестве основы для проектирования «систем-на-кристалле» (System-on-Chip), выполняемых на базе ПЛИС семейств Virtex™-II и Virtex-IIPRO™.
Все статьи цикла:
- Особенности микропроцессорного ядра PicoBlaze, предназначенного для применения в проектах, реализуемых на основе ПЛИС семейства Virtex-II
- Особенности микропроцессорного ядра PicoBlaze, предназначенного для применения в проектах, реализуемых на основе ПЛИС семейства CoolRunner-II
- Особенности микропроцессорного ядра PicoBlaze, предназначенного для применения в проектах, реализуемых на основе ПЛИС семейств Spartan-3, Virtex-II и Virtex-IIPRO
- Особенности микропроцессорного ядра PicoBlaze, предназначенного для применения в проектах, реализуемых на основе ПЛИС семейств Spartan-3, Virtex-II и Virtex-IIPRO
Микропроцессорное ядро PicoBlaze, предназначенное для применения в проектах, выполняемых на базе ПЛИС серий Spartan-3, Virtex-II и Virtex-IIPRO, отличается от других представителей этого семейства, рассмотренных ранее, расширенным спектром функциональных возможностей. Новая версия ядра представляет собой результат дальнейшего развития базового варианта микропроцессорного ядра PicoBlaze, реализуемого на основе кристаллов семейств Spartan™-II, Spartan-IIE, Virtex, Virtex-E. Максимальное использование архитектурных особенностей и ресурсов ПЛИС серий Spartan-3, Virtex-II и Virtex-IIPRO позволило обеспечить более высокие технические характеристики и поддержку дополнительных операций. Учитывая вышесказанное, основное внимание в статье уделяется отличиям характеристик, архитектуры и системы команд новой версии микропроцессорного ядра PicoBlaze от базового варианта, описание которого приведено в [1, 2].
Основные характеристики микропроцессорного ядра PicoBlaze, реализуемого на основе ПЛИС семейств Spartan-3, Virtex-II и Virtex-IIPRO
Большинство основных характеристик семейства встраиваемых микропроцессорных ядер PicoBlaze, представленных в [1], справедливы также и для версии, которая предназначена для реализации на базе ПЛИС семейств Spartan-3, Virtex-II и Virtex-IIPRO. Поэтому далее приводятся только отличительные особенности рассматриваемой версии ядра PicoBlaze. В новой версии произошли следующие изменения (по сравнению с базовым вариантом микропроцессорного ядра [1]):
- увеличена разрядность шины адресов, которая составляет теперь 10 бит;
- разрядность шины команд расширена до 18 бит;
- в дополнение к блоку регистров общего назначения, включающему 16 восьмиразрядных регистров, предусмотрено наличие блока сверхоперативного запоминающего устройства емкостью 64 байт;
- увеличен объем встроенного ППЗУ микропрограмм, реализуемого на основе блочной памяти ПЛИС Block SelectRAM, который составляет 1024×18 разрядов;
- предусмотрена возможность формирования дополнительных признаков выполнения операции в арифметическо-логическом устройстве (АЛУ);
- модернизирована схема управления прерываниями;
- система команд расширена до 57 инструкций;
- глубина стека увеличена до 31 уровня;
- объем ресурсов кристалла, необходимых для реализации микропроцессорного ядра PicoBlaze в ПЛИС семейства Spartan-3, ограничивается 96 секциями (slices), что составляет 5% от полного объема логических ресурсов кристалла XC3S200 и менее 0,3% от логической емкости ПЛИС XC3S5000;
- возросла производительность; в зависимости от типа и класса быстродействия используемого кристалла, она достигает от 43 до 66 MIPS;
- разработан загрузчик программ JTAG Program Loader, позволяющий записывать новый программный код непосредственно в программную память ядра PicoBlaze через порт JTAG-интерфейса ПЛИС с помощью стандартного загрузочного кабеля;
- два варианта реализации компонентов ядра — в виде описаний на языках высокого уровня VHDL™ (VHSIC Hardware Description Language) и Verilog™.
Расширение функциональных возможностей новой версии микропроцессорного ядра привело к незначительному увеличению объема используемых ресурсов ПЛИС. По сравнению с базовым вариантом ядра PicoBlaze, объем требуемых ресурсов вырос на 26%, а по сравнению с версией, предназначенной для реализации в кристаллах семейств Virtex-II и Virtex-IIPRO [3], — на 14%.
Архитектура микропроцессорного ядра PicoBlaze, реализуемого на основе ПЛИС семейств Spartan-3, Virtex-II и Virtex-IIPRO
Архитектура микропроцессорного ядра PicoBlaze, предназначенного для применения в кристаллах семейств Spartan-3, Virtex-II и Virtex-IIPRO, показана на рис. 1. В структурном отношении она отличается от архитектуры базовой версии, рассмотренной в [1], наличием дополнительного сверхоперативного запоминающего устройства (СОЗУ). Остальные различия проявляются на уровне отдельных структурных элементов. Эти отличия обусловлены расширением функциональных возможностей элементов в новой версии микропроцессорного ядра PicoBlaze за счет использования преимуществ архитектуры ПЛИС семейств Spartan-3, Virtex-II и Virtex-IIPRO.
Архитектура микропроцессорного ядра PicoBlaze, реализуемого на основе ПЛИС семейств Spartan-3, Virtex-II и Virtex-IIPRO (Рис. 1)
Сверхоперативное запоминающее устройство в составе архитектуры создает предпосылки для существенного сокращения времени выполнения программы за счет исключения операций обращения к внешней (по отношению к микропроцессорному ядру) памяти. Содержимое каждого регистра общего назначения может быть передано в одну из ячеек СОЗУ и наоборот. Для обмена данными между блоком регистров общего назначения и СОЗУ предусмотрены специальные команды, время выполнения которых не превышает двух машинных циклов.
Восьмиразрядное арифметическо-логическое устройство (АЛУ) кроме логических функций, операций сложения, вычитания и сдвига, поддерживаемых базовой версией ядра, выполняет также операции поразрядного и арифметического сравнения двух операндов. В новой версии микропроцессорного ядра, кроме признаков нулевого результата ZERO Flag и переноса/заема CARRY Flag, АЛУ способно формировать признак четности/нечетности PARITY (при выполнении инструкции TEST), который отображается при помощи флага CARRY Flag.
Увеличение емкости программной памяти до 1024×18 разрядов повлекло за собой расширение шины адресов до десяти разрядов. Таким образом, верхняя граница адресного пространства памяти программ составляет 3FF. Изменение длины команд до 18 разрядов привело к соответствующему расширению шины команд.
Схема управления прерываниями, кроме внутренних управляющих сигналов, необходимых для выполнения процедуры обработки прерываний, формирует выходной сигнал interrupt_ack. Изменения в процедуре обработки прерываний коснулись также значения адреса, по которому указывается вектор процедуры обслуживания прерывания. В связи с расширением диапазона адресов программной памяти, в качестве адреса вектора прерывания, который в семействе микропроцессорных ядер PicoBlaze соответствует максимально допустимому значению адреса, используется значение 3FF.
В соответствии с увеличением ширины шины адресов также изменена разрядность тех элементов архитектуры микропроцессорного ядра PicoBlaze, которые участвуют в процессе формирования и хранения адресов команд. Разрядность программного счетчика, регистров стека и блока управления выбором адреса следующей команды в новой версии составляет 10 бит.
Модернизация блока дешифрации команд, обусловленная необходимостью учета рассмотренных выше особенностей элементов архитектуры, привела, в частности, к изменению формата команд, поддерживаемых микропроцессорным ядром PicoBlaze, предназначенным для применения в кристаллах семейств Spartan-3, Virtex-II и Virtex-IIPRO.
Структура проекта микропроцессорного ядра PicoBlaze, реализуемого на основе ПЛИС семейств Spartan-3, Virtex-II и Virtex-IIPRO
Обобщенная структура варианта ядра PicoBlaze, предназначенного для применения в составе встраиваемых микропроцессорных систем, реализуемых на базе ПЛИС семейств Spartan-3,Virtex-II и Virtex-IIPRO, приведена на рис. 2. Она отличается от обобщенной структуры базовой версии ядра, рассмотренной в [1], только типом и параметрами модулей, которые входят в ее состав.
Обобщенная структура микропроцессорного ядра PicoBlaze, реализуемого на основе ПЛИС семейств Spartan-3, Virtex-II и Virtex-IIPRO (Рис. 2)
Исполнительный модуль — основа ядра — выполнен в форме компонента KCPSM3, представляющего собой макрос с относительным размещением. Описание этого макроса на языке VHDL содержится в файле kcpsm3.vhd, а на языке Verilog — в файле kcpsm3.v. В этой статье основное внимание уделяется VHDL-описанию ядра PicoBlaze и его компонентов. Интерфейс компонента KCPSM3 имеет несколько отличий по сравнению с соответствующим компонентом KCPSM микропроцессорного ядра PicoBlaze, реализуемого на базе ПЛИС семейств Spartan-II, Spartan-IIE, Virtex, Virtex-E [1]. Во-первых, изменилась размерность векторов, представляющих шины адресов и команд. Во-вторых, в описании интерфейса компонента KCPSM3 добавлен выходной порт interrupt_ack, который соответствует одноименному выходу сигнала подтверждения прерывания. Для декларации компонента KCPSM3 в составе VHDL-описания проектируемой системы применяются следующие выражения.
В приведенных здесь и далее выражениях декларации используется система обозначений интерфейсных цепей компонентов, подробно она описана в [1] для базового варианта микропроцессорного ядра PicoBlaze. Чтобы добавить в состав структурного описания архитектуры проектируемой системы экземпляр компонента KCPSM3, представляющего собой исполнительный модуль, необходимо воспользоваться следующей ниже конструкцией, указав вместо inst_name_processor идентификатор соответствующего экземпляра компонента.
Для реализации программной памяти в новой версии микропроцессорного ядра PicoBlaze используется один модуль блочного ОЗУ Block SelectRAM, емкость которого в ПЛИС семейств Spartan-3, Virtex-II и Virtex-IIPRO составляет 18 кбит. Таким образом, максимальный объем загружаемой микропроцессорной программы вырос в четыре раза по сравнению с базовой версией ядра. Для описания модуля программной памяти в составе микропроцессорного ядра используется компонент с названием prog_rom, который представляет собой ППЗУ с информационной емкостью 1024718 разрядов, реализуемое на основе однопортового блочного ОЗУ с аналогичной организацией. Выражения декларации этого компонента в составе VHDL-описания разрабатываемой системы выглядят следующим образом.
Для создания экземпляра компонента, представляющего программную память, необходимо в состав VHDL-описания разрабатываемой системы включить оператор, который имеет следующий вид.
При практическом использовании выражений декларации и создания экземпляра компонента, соответствующего программной памяти, нужно вместо идентификатора prog_rom указать название компонента, совпадающее с идентификатором файла, в котором должен быть записан исходный текст загружаемой программы. Необходимость такой замены обусловлена особенностями функционирования ассемблера, который формирует описание содержимого ППЗУ программ на языках VHDL и Verilog в виде файлов с расширением vhd и v соответственно. Названия этих файлов описания содержимого программной памяти совпадают с идентификатором файла, содержащего исходный текст транслируемой программы.
Законченное описание встраиваемого микропроцессорного ядра PicoBlaze, состоящего из исполнительного модуля, сопряженного с программной памятью, выполнено в форме объекта EMBEDDED_KCPSM3. Ниже приведен полный текст описания объекта EMBEDDED_KCPSM3, который имеет ту же структуру, что и описание объекта EMBEDDED_KCPSM, представленное в [1].
Объект EMBEDDED_KCPSM3 может применяться автономно или в качестве входящего в состав разрабатываемой системы элемента. В последнем случае этот объект представляется в форме одноименного компонента, декларация которого выполняется следующим образом.
Создание экземпляра компонента EMBEDDED_KCPSM3 осуществляется с помощью оператора, который имеет следующий вид.
При использовании данного оператора следует вместо метки inst_name_embedded_processor указать идентификатор соответствующего экземпляра компонента EMBEDDED_KCPSM3.
Все компоненты микропроцессорного ядра PicoBlaze, представленные выше, полностью совместимы с любой конфигурацией средств проектирования фирмы Xilinx серии ISE™ (Integrated Synthesis Environment), в том числе и со свободно распространяемой версией WebPACK™ ISE [6].
Общая характеристика системы команд микропроцессорного ядра PicoBlaze, реализуемого на основе ПЛИС семейств Spartan-3, Virtex-II и Virtex-IIPRO
В отличие от других представителей семейства микропроцессорных ядер PicoBlaze, система команд новой версии ядра включает в себя 57 инструкций. При классификации по функциональному признаку команды подразделяются на семь групп. К шести уже известным группам (они подробно рассмотрены в [2]) добавляется группа команд обмена данными между регистрами общего назначения и СОЗУ.
Кроме появления новых инструкций изменения произошли также в формате стандартных команд, поддерживаемых всеми версиями микропроцессорного ядра PicoBlaze, и их мнемонической записи. Преобразование формата инструкций в первую очередь связано с архитектурными особенностями, рассмотренными в предыдущих разделах. Для новой версии ядра длина всех команд в двоичном представлении составляет 18 разрядов.
В большинстве инструкций поменялась длина полей и, соответственно, коды выполняемых операций. В некоторых командах изменилось взаимное расположение полей. В последующих разделах для каждой функциональной группы команд будут представлены соответствующие форматы и мнемоника инструкций микропроцессорного ядра PicoBlaze, предназначенного для использования в составе проектов, реализуемых на основе ПЛИС семейств Spartan-3, Virtex-II и Virtex-IIPRO. Процесс выполнения операций рассматривается подробно только для новых команд, которые не были представлены в [2].
Команды управления последовательностью выполнения операций в программе для ядра PicoBlaze, реализуемого на базе кристаллов семейств Spartan-3, Virtex-II и Virtex-IIPRO
В инструкциях безусловного и условных переходов JUMP изменилась структура поля кода операции и длина поля адреса перехода. В соответствии с разрядностью шины адресов и размером адресного пространства программной памяти, длина поля адреса перехода увеличена до десяти двоичных разрядов. При мнемонической форме записи команд передачи управления в программе значение параметра, определяющего адрес перехода, указывается в виде последовательности, состоящей из трех шестнадцатеричных символов. Форматы команд безусловного и условных переходов JUMP для новой версии микропроцессорного ядра PicoBlaze представлены в таблице 1.
Модификация команд обращения к подпрограммам CALL также затронула структуру поля кода операции и длину поля адреса вызываемой процедуры. В новой редакции поле адреса вызываемой подпрограммы включает в себя десять двоичных разрядов. При мнемонической форме записи команд обращения к подпрограммам значение параметра, указывающее начальный адрес вызываемой процедуры, представляется в виде трехзначного шестнадцатеричного числа. Новая редакция форматов команд безусловного и условных вызовов подпрограмм CALL приведена в таблице 2.
Изменения в формате инструкций возврата из подпрограммы RETURN проявились в структуре тех же полей, что и в командах вызова подпрограмм. Для всех вариантов команд завершения выполняемой подпрограммы и передачи управления основной программе или подпрограмме, из которой производился вызов данной процедуры, изменены коды выполняемой операции. Преобразование форматов команд возврата из подпрограммы не отразилось на мнемонической форме записи команд RETURN, которая сохранилась без изменений. В таблице 3 представлены модифицированные форматы команд безусловного и условного возвратов из подпрограммы RETURN.
Группа логических команд микропроцессорного ядра PicoBlaze, предназначенного для использования в кристаллах семейств Spartan-3, Virtex-II и Virtex-IIPRO
В группу логических команд кроме инструкций, представленных в [2], добавлена новая инструкция — TEST, которая будет подробно рассмотрена в конце этого раздела. В формате инструкций, относящихся к группе логических команд, произошли следующие изменения по сравнению с аналогичными инструкциями, поддерживаемыми базовой версией микропроцессорного ядра. Во-первых, длина поля кода операции увеличилась на два разряда и составляет 6 бит. Во-вторых, изменились коды логических операций.
В таблице 4 приведена новая редакция форматов команд поразрядных операций «Логическое И» (поразрядное умножение) AND, выполняемых над содержимым регистра общего назначения с номером N и константой kk, значение которой задается непосредственно в тексте инструкции, а также над содержимым двух регистров общего назначения с номерами N и M.
Форматы инструкций OR, предназначенных для выполнения операций поразрядного сложения двух операндов (поразрядное «Логическое ИЛИ») в рассматриваемой версии микропроцессорного ядра, определены в таблице 5 для двух вариантов. В первом случае операндами являются содержимое регистра общего назначения с номером N и константа kk, значение которой указывается в соответствующем поле команды, а во втором — содержимое двух регистров общего назначения с номерами N и M.
Новая редакция форматов команд XOR, используемых для выполнения поразрядной операции «Исключающее ИЛИ» с участием содержимого регистра общего назначения с номером N и константы kk или содержимого двух регистров с номерами N и M, представлена в таблице 6.
Таблица 7 представляет новую редакцию формата инструкций LOAD, предназначенных для загрузки константы или содержимого какого-либо регистра в выбранный регистр общего назначения.
Команда TEST предназначена для выполнения поразрядного сравнения двух операндов. Данная операция выполняется аналогично инструкции поразрядного умножения (поразрядное «Логическое И»). Различие заключается в том, что результат операции TEST не запоминается в регистре общего назначения, фиксируются только признаки (состояния флагов). Значение флагов ZERO Flag и CARRY Flag определяется полученным результатом. Если все разряды результирующего слова принимают значение логического нуля, то флаг нулевого результата ZERO Flag устанавливается в состояние, соответствующее логической единице. В противном случае (если хотя бы в одном разряде результата присутствует единичное значение) флаг нулевого результата ZERO Flag переключается в сброшенное состояние (логического нуля). Состояние флага CARRY Flag зависит от количества единичных разрядов в полученном результате. При нечетном количестве единичных бит в слове результата этот флаг устанавливается в состояние, соответствующее логической единице. В противном случае флаг CARRY Flag будет находиться в сброшенном состоянии.
Первым операндом в инструкциях поразрядного сравнения TEST всегда является содержимое регистра общего назначения, номер которого указан в виде значения первого параметра команды. В качестве второго операнда используется либо константа, значение которой указывается непосредственно в соответствующем поле команды, либо содержимое другого регистра общего назначения, номер которого задается в виде значения второго параметра инструкции. Команда TEST может использоваться для выделения требуемого разряда регистра и контроля его значения. В этом случае второй операнд исполняет роль маски. Форматы команд поразрядного сравнения двух операндов TEST приведены в таблице 8.
Команда TEST sN, kk выполняет операцию поразрядного сравнения содержимого регистра с номером N и константы kk. Для поразрядного сравнения содержимого двух регистров общего назначения с номерами N и M предназначена команда TEST sN, sM. Выполнение команд поразрядного сравнения иллюстрирует рис. 3.
Выполнение поразрядных операций TEST (Рис. 3)
Окончание в следующем номере