Компоненты и технологии, № 5'2005
Особенности микропроцессорного ядра РкоВ^е,
предназначенного для применения в проектах,
реализуемых на основе ПЛИС семейств Браг1ап-3, МгТех-!! и У1г1ех-!!РРО
В представленных ранее публикациях цикла [1-5], посвященного рассмотрению встраиваемых восьмиразрядных микропроцессорных ядер семейства PicoBlaze™, реализуемых на основе ПЛИС фирмы Xilinx®, были приведены сведения о трех представителях этого семейства. После начала серийного выпуска кристаллов новой серии с архитектурой FPGA (Field Programmable Gate Array) Spartan™-3 [7] фирмой Xilinx была разработана соответствующая версия микропроцессорного ядра PicoBlaze, которая предназначена в первую очередь для применения в проектах, реализуемых на основе ПЛИС этого семейства. Кроме того, новая версия ядра PicoBlaze может успешно использоваться в качестве основы для проектирования «систем-на-кристалле» (System-on-Chip), выполняемых на базе ПЛИС семейств Virtex™-II и Virtex-IIPRO™.
Валерий Зотов
walerry@km.ru
Микропроцессорное ядро 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 бит;
180
• разрядность шины команд расширена до 18 бит;
• в дополнение к блоку регистров общего назначения, включающему 16 восьмиразрядных регистров, предусмотрено наличие блока сверхоперативного запоминающего устройства емкостью 64 байт;
• увеличен объем встроенного ППЗУ микропрограмм, реализуемого на основе блочной памяти ПЛИС Block SelectRAM, который составляет 1024x18 разрядов;
• предусмотрена возможность формирования дополнительных признаков выполнения операции в арифметическо-логическом устройстве (АЛУ);
• модернизирована схема управления прерываниями;
• система команд расширена до 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™. Расширение функциональных возможностей новой версии микропроцессорного ядра привело к незначительному увеличению объема используемых ресурсов ПЛИС. По сравнению с базовым вариан-
-------www.finestreet.ru-------------------------
Компоненты и технологии, № 5'2005
том ядра 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.
Сверхоперативное запоминающее устройство в составе архитектуры создает предпосылки для существенного сокращения времени выполнения программы за счет исключения операций обращения к внешней (по отношению к микропроцессорному ядру) памяти. Содержимое каждого регистра общего назначения может быть передано в одну из ячеек СОЗУ и наоборот. Для обмена данными между блоком регистров общего назначения и СОЗУ предусмотрены специальные команды, время выполнения которых не превышает двух машинных циклов.
Восьмиразрядное арифметическо-логичес-кое устройство (АЛУ) кроме логических функций, операций сложения, вычитания и сдвига, поддерживаемых базовой версией ядра, выполняет также операции поразрядного и арифметического сравнения двух операндов. В новой версии микропроцессорного ядра, кроме признаков нулевого результата ZERO Flag и переноса/заема CARRY Flag, АЛУ способно формировать признак четности/нечетности PARITY (при выполнении инструкции TEST), который отображается при помощи флага CARRY Flag.
Увеличение емкости программной памяти до 1024x18 разрядов повлекло за собой расширение шины адресов до десяти разрядов. Таким образом, верхняя граница адресного пространства памяти программ составляет 3FF. Изменение длины команд до 18 разрядов привело к соответствующему расширению шины команд.
Схема управления прерываниями, кроме внутренних управляющих сигналов, необходимых для выполнения процедуры обработки прерываний, формирует выходной сигнал interrupt_ack. Изменения в процедуре обработки прерываний коснулись также значения адреса, по которому указывается вектор процедуры обслуживания прерывания. В связи с расширением диапазона адресов программной памяти, в качестве адреса вектора прерывания, который в семействе микропроцессорных ядер PicoBlaze
---------------------www.finestreet.ru -
Входные данные IN_PORT[7:0]
Блок регистров общего назначения 16 регистров X разрядов
sF ,, ,,
sE s6
' ' sD ' ' 1 1 S51 11
sC ' ' s* ' '
sB s3 ,, ,,
sA
s9 " sV"
" sk"1 “stT'
Блок управления вводом/выводом
Адрес порта ввода/вывода
PORT_ID[7:0] READ_STROBE -► WRITE_STROBE Выходные данные OUT_PC>RT[7:0]
АЛУ
ZERO CARRY
PARITY Регистр фиксации
флагов при
гегистр прерываниях
статуса
Блок управления
INTERRUPT АСК
выбором *
Схема управления прерыванием следующего адреса ^ Стек
Г
Програмный
счетчик
Рис. 1. Архитектура микропроцессорного ядра PicoBlаze, реализуемого на основе ПЛИС семейств Spartan-3/ Virtex-II и Virtex-IIPRO
соответствует максимально допустимому значению адреса, используется значение 3FF.
В соответствии с увеличением ширины шины адресов также изменена разрядность тех элементов архитектуры микропроцессорного ядра РкоБ1аге, которые участвуют в процессе формирования и хранения адресов команд. Разрядность программного счетчика, регистров стека и блока управления выбором адреса следующей команды в новой версии составляет 10 бит.
Модернизация блока дешифрации команд, обусловленная необходимостью учета рассмотренных выше особенностей элементов архитектуры, привела, в частности, к изменению формата команд, поддерживаемых микропроцессорным ядром РкоБ1аге, предназначенным для применения в кристаллах семейств 8раЛап-3, У^ех-П и Уп^ех-ПРИО.
Структура проекта микропроцессорного ядра РкоВ!ахе, реализуемого на основе ПЛИС семейств БрагГап-3, УИех-М и УИех-МРРО
Обобщенная структура варианта ядра РкоЫаге, предназначенного для применения в составе встраиваемых микропроцессорных
систем, реализуемых на базе ПЛИС семейств 8раг1ап-3,У1г1ех-П и У^ех-ПРИО, приведена на рис. 2. Она отличается от обобщенной структуры базовой версии ядра, рассмотренной в [1], только типом и параметрами модулей, которые входят в ее состав.
Исполнительный модуль — основа ядра — выполнен в форме компонента КСРЗМ3, представляющего собой макрос с относительным размещением. Описание этого макроса на языке УИБЬ содержится в файле кср8ш3.уЬ^ а на языке Уег1^ — в файле кср8ш3.у. В этой статье основное внимание уделяется УИБЬ-описанию ядра РкоБ1аге и его компонентов. Интерфейс компонента КСРЗМ3 имеет несколько отличий по сравнению с соответствующим компонентом КСРвМ микропроцессорного ядра РкоБ1аге, реализуемого на базе ПЛИС семейств Зрайап-П, ЗраЛап-ПЕ, Уп!:ех, У1Лех-Е [1]. Во-первых, изменилась размерность векторов, представляющих шины адресов и команд. Во-вторых, в описании интерфейса компонента КСРЗМ3 добавлен выходной порт гПеггар^аск, который соответствует одноименному выходу сигнала подтверждения прерывания. Для декларации компонента КСРЗМ3 в составе УИБЬ-описания проектируемой системы применяются следующие выражения.
Модуль ЦПУ (исполнительный модуль) PicoBlaxe КСР5МЗ
Входные данные
Прерывание
Сброс Память программ
□
INSTRUCTION[l 7:0] ADDRESS[9:0]
> CLK
Тактовый сигнал 18
Шина команд
IN_PORT[7:0] OUT PORT[7:0]
INTERRUPT PORT ID[7:0]
READ STROBE
>CLK WRITE STROBE
INTFRRUPT ACX
INSTRUCTION!! 7:0] ADDRESS[9:0]
10
Выходные данные Адрес порта ввода/вывода Строб чтения Строб записи Подтверждение прерывания
Шина адреса
Рис. 2. Обобщенная структура микропроцессорного ядра PicoBlaze, реализуемого на основе ПЛИС семейств Spartan-3/ Virtex-II и Virtex-IIPRO
181
Компоненты и технологии, № 5'2005
component kcpsm3 Port (
address : out std_logic_vector(9 downto 0); instruction : in std_logic_vector(17 downto 0); port_id : out std_logic_vector(7 downto 0); write_strobe : out std_logic; out_port : out std_logic_vector(7 downto 0); read_strobe : out std_logic; in_port : in std_logic_vector(7 downto 0); interrupt : in std_logic; interrupt_ack : out std_logic; reset : in std_logic; clk : in std_logic );
end component; (или точка?)
В приведенных здесь и далее выражениях декларации используется система обозначений интерфейсных цепей компонентов, подробно она описана в [1] для базового варианта микропроцессорного ядра PicoBlaze. Чтобы добавить в состав структурного описания архитектуры проектируемой системы экземпляр компонента KCPSM3, представляющего собой исполнительный модуль, необходимо воспользоваться следующей ниже конструкцией, указав вместо inst_name_processor идентификатор соответствующего экземпляра компонента.
inst_name_processor: kcpsm3 port map(
address => address_signal, instruction => instruction_signal, port_id => port_id_signal, write_strobe => write_strobe_signal, out_port => out_port_signal, read_strobe => read_strobe_signal, in_port => in_port_signal, interrupt => interrupt_signal, interrupt_ack => interrupt_ack_signal, reset => reset_signal, clk => clk_signal
Для реализации программной памяти в новой версии микропроцессорного ядра PicoBlaze используется один модуль блочного ОЗУ Block SelectRAM, емкость которого в ПЛИС семейств Spartan-3, Virtex-II и Virtex-IIPRO составляет 18 кбит. Таким образом, максимальный объем загружаемой микропроцессорной программы вырос в четыре раза по сравнению с базовой версией ядра. Для описания модуля программной памяти в составе микропроцессорного ядра используется компонент с названием prog_rom, который представляет собой ППЗУ с информационной емкостью 1024x18 разрядов, реализуемое на основе однопортового блочного ОЗУ с аналогичной организацией. Выражения декларации этого компонента в составе VHDL-описания разрабатываемой системы выглядят следующим образом.
component prog_rom Port (
address : in std_logic_vector(9 downto 0); instruction : out std_logic_vector(17 downto 0); clk : in std_logic );
end component;
Для создания экземпляра компонента, представляющего программную память, необходимо в состав VHDL-описания разрабатываемой системы включить оператор, который имеет следующий вид.
program: prog_rom port map(
address => address_signal, instruction => instruction_signal, clk => clk_signal
При практическом использовании выражений декларации и создания экземпляра компонента, соответствующего программной памяти, нужно вместо идентификатора prog_rom указать название компонента, совпадающее с идентификатором файла, в котором должен быть записан исходный текст загружаемой программы. Необходимость такой замены обусловлена особенностями функционирования ассемблера, который формирует описание содержимого ППЗУ программ на языках VHDL и Verilog в виде файлов с расширением vhd и v соответственно. Названия этих файлов описания содержимого программной памяти совпадают с идентификатором файла, содержащего исходный текст транслируемой программы.
Законченное описание встраиваемого микропроцессорного ядра PicoBlaze, состоящего из исполнительного модуля, сопряженного с программной памятью, выполнено в форме объекта EMBEDDED_KCPSM3. Ниже приведен полный текст описания объекта EMBEDDED_KCPSM3, который имеет ту же структуру, что и описание объекта EMBEDDED_KCPSM, представленное в [1].
-- EMBEDDED_KCPSM3.VHD
-- This file instantiates the KCPSM3 processor macro and connects the -- program ROM.
-- NOTE: The name of the program ROM will probably need to be changed to
-- reflect the name of the program (PSM) file applied to the assembler.
-- Standard IEEE libraries library IEEE;
use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity embedded_kcpsm3 is
Port ( port_id : out std_logic_vector(7 downto 0); write_strobe : out std_logic; read_strobe : out std_logic;
out_port : out std_logic_vector(7 downto 0);
in_port : in std_logic_vector(7 downto 0); interrupt : in std_logic; interrupt_ack : out std_logic; reset : in std_logic; clk : in std_logic); end embedded_kcpsm3;
-- Start of test achitecture
-- Start of test circuit description begin
architecture connectivity of embedded_kcpsm3 is
- declaration of KCPSM3
component kcpsm3 Port ( address instruction port_id : write_strobe : out_port read_strobe in_port interrupt interrupt_ack reset clk
end component;
out std_logic_vector(9 downto 0) in std_logic_vector(17 downto 0) out std_logic_vector(7 downto 0) out std_logic;
out std_logic_vector(7 downto 0) out std_logic;
in std_logic_vector(7 downto 0); in std_logic; out std_logic; in std_logic; in std_logic);
-- declaration of program ROM
component prog_rom
Port ( address : in std_logic_vector(9 downto 0);
instruction : out std_logic_vector(17 downto 0); clk : in std_logic);
end component;
-- Signals used to connect KCPSM3 to program ROM
signal address : std_logic_vector(9 downto 0); signal instruction : std_logic_vector(17 downto 0);
processor: kcpsm3 port map( address instruction port_id write_strobe out_port read_strobe in_port interrupt interrupt_ack reset clk
> address,
> instruction,
> port_id,
> write_strobe,
> out_port,
> read_strobe,
> in_port,
> interrupt,
> interrupt_ack,
> reset,
:> clk);
program: prog_rom
port map( address => address,
instruction => instruction, clk => clk);
end connectivity;
-- END OF FILE EMBEDDED_KCPSM3.VHD
Объект EMBEDDED_KCPSM3 может применяться автономно или в качестве входящего в состав разрабатываемой системы элемента. В последнем случае этот объект представляется в форме одноименного компонента, декларация которого выполняется следующим образом.
component embedded_kcpsm3 Port (
port_id : out std_logic_vector(7 downto 0); write_strobe : out std_logic; read_strobe : out std_logic; out_port : out std_logic_vector(7 downto 0); in_port : in std_logic_vector(7 downto 0); interrupt : in std_logic; interrupt_ack : out std_logic; reset : in std_logic; clk : in std_logic); end component;
Создание экземпляра компонента EMBED-DED_KCPSM3 осуществляется с помощью оператора, который имеет следующий вид.
inst_name_embedded_processor: embedded_kcpsm3 port map(
port_id => port_id_signal, write_strobe => write_strobe_signal, read_strobe => read_strobe_signal, out_port => out_port_signal, in_port => in_port_signal, interrupt => interrupt_signal, interrupt_ack => interrupt_ack_signal, reset => reset_signal, clk => clk_signal
При использовании данного оператора следует вместо метки inst_name_embedded_proces-sor указать идентификатор соответствующего экземпляра компонента EMBEDDED_KCPSM3.
Все компоненты микропроцессорного ядра PicoBlaze, представленные выше, полностью совместимы с любой конфигурацией средств проектирования фирмы Xilinx серии ISE™ (Integrated Synthesis Environment), в том числе и со свободно распространяемой версией WebPACK™ ISE [6].
Общая характеристика системы команд микропроцессорного ядра PicoBlaze, реализуемого на основе ПЛИС семейств Spartan-3, Virtex-II и Virtex-IIPRO
В отличие от других представителей семейства микропроцессорных ядер PicoBlaze, система команд новой версии ядра включает в себя 57 инструкций. При классификации по функ-
- www.finestreet.ru----------------------
Компоненты и технологии, № 5'2005
циональному признаку команды подразделяются на семь групп. К шести уже известным группам (они подробно рассмотрены в [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 проявились в структуре тех же полей, что и в командах вы---------------------www.finestreet.ru -
Таблица 1. Форматы команд переходов микропроцессорного ядра PicoBlaze, реализуемого на основе ПЛИС семейств Spartan-3, Virtex-II и Virtex-IIPRO
Поле кода операции Поле адреса перехода Мнемоника Выполняемая операция
1 1 0 1 0 0 X X A A A A A A A A A A JUMP aaa Безусловный переход
1 1 0 1 0 1 0 0 A A A A A A A A A A JUMP Z,aaa Переход при условии, что флаг ZERO Flag находится в установленном состоянии
1 1 0 1 0 1 0 1 A A A A A A A A A A JUMP NZ,aaa Переход при условии, что флаг ZERO Flag находится в сброшенном состоянии
1 1 0 1 0 1 1 0 A A A A A A A A A A JUMP C,aaa Переход при условии, что флаг CARRY Flag находится в установленном состоянии
1 1 0 1 0 1 1 1 A A A A A A A A A A JUMP NC,aaa Переход при условии, что флаг CARRY Flag находится в сброшенном состоянии
17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Номер разряда микрокоманды
Таблица 2. Форматы команд вызова подпрограмм для микропроцессорного ядра PicoBlaze, реализуемого на основе ПЛИС семейств Spartan-3, Virtex-II и Virtex-IIPRO
Поле кода операции Поле адреса подпрограммы Мнемоника Выполняемая операция
1 1 0 0 0 0 X X A A A A A A A A A A CALL aaa Безусловный вызов подпрограммы
1 1 0 0 0 1 0 0 A A A A A A A A A A CALL Z,aaa Вызов подпрограммы при условии, что флаг ZERO Flag находится в установленном состоянии
1 1 0 0 0 1 0 1 A A A A A A A A A A CALL NZ,aaa Вызов подпрограммы при условии, что флаг ZERO Flag находится в сброшенном состоянии
1 1 0 0 0 1 1 0 A A A A A A A A A A CALL C,aaa Вызов подпрограммы при условии, что флаг CARRY Flag находится в установленном состоянии
1 1 0 0 0 1 1 1 A A A A A A A A A A CALL NC,aaa Вызов подпрограммы при условии, что флаг CARRY Flag находится в сброшенном состоянии
17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Номер разряда микрокоманды
Таблица 3. Форматы команд безусловного и условного ядра PicoBlaze, реализуемого на основе ПЛИС семейств
возвратов из подпрограммы для микропроцессорного Spartan-3, Virtex-II и Virtex-IIPRO
Поле кода операции Нулевые разряды Мнемоника Выполняемая операция
1 0 1 0 1 0 X X 0 0 0 0 0 0 0 0 0 0 RETURN Безусловный возврат из подпрограммы
1 0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 RETURN Z Возврат из подпрограммы при условии, что флаг ZERO Flag находится в установленном состоянии
1 0 1 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 RETURN NZ Возврат из подпрограммы при условии, что флаг ZERO Flag находится в сброшенном состоянии
1 0 1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 RETURN C Возврат из подпрограммы при условии, что флаг CARRY Flag находится в установленном состоянии
1 0 1 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 RETURN NC Возврат из подпрограммы при условии, что флаг CARRY Flag находится в сброшенном состоянии
17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Номер разряда микрокоманды
зова подпрограмм. Для всех вариантов команд завершения выполняемой подпрограммы и передачи управления основной программе или подпрограмме, из которой производился вызов данной процедуры, изменены коды выполняемой операции. Преобразование форматов команд возврата из подпрограммы не отразилось на мнемонической форме записи команд RETURN, которая сохранилась без изменений. В таблице 3 представлены модифицированные форматы команд безусловного и условного возвратов из подпрограммы RETURN.
Группа логических команд микропроцессорного ядра PicoBlaze, предназначенного для использования в кристаллах семейств Spartan-3, Virtex-II и Virtex-IIPRO
В группу логических команд кроме инструкций, представленных в [2], добавлена новая инструкция — TEST, которая будет подробно рассмотрена в конце этого раздела.
В формате инструкций, относящихся к группе логических команд, произошли следующие изменения по сравнению с аналогичными инструкциями, поддерживаемыми базовой версией микропроцессорного ядра. Во-первых, длина поля кода операции увеличилась на два разряда и составляет 6 бит. Во-вторых, изменились коды логических операций.
В таблице 4 приведена новая редакция форматов команд поразрядных операций «Логическое И» (поразрядное умножение) AND, выполняемых над содержимым регистра общего назначения с номером N и константой kk, значение которой задается непосредственно в тексте инструкции, а также над содержимым двух регистров общего назначения с номерами N и M.
Форматы инструкций OR, предназначенных для выполнения операций поразрядного сложения двух операндов (поразрядное «Логическое ИЛИ») в рассматриваемой версии микропроцессорного ядра, определены в таблице 5 для двух вариантов. В первом случае операн-
Таблица 4. Форматы команд поразрядных операций «Логическое И» микропроцессорного ядра PicoBlaze, реализуемого на основе ПЛИС семейств Spartan-3, Virtex-II и Virtex-IIPRO
Поле кода операции Поле номера регистра Поле константы Мнемоника Выполняемая операция
0 0 1 0 1 0 n n n n K K K K K K K K AND sN, kk Поразрядное «Логическое И» содержимого регистра sN и константы kk
Поле кода операции Поле номера первого регистра Поле номера второго регистра Нулевые разряды Мнемоника Выполняемая операция
0 0 1 0 1 1 n n n n m m m m 0 0 0 0 AND sN,sM Поразрядное «Логическое И» содержимого регистров sN и sM
17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Номер разряда микрокоманды
18З
Компоненты и технологии, № 5'2005
Таблица 5. Форматы команд поразрядных операций «Логическое ИЛИ» микропроцессорного ядра PicoBlaze, предназначенного для реализации на основе ПЛИС семейств Spartan-3, Virtex-II и Virtex-IIPRO
Поле кода операции Поле номера регистра Поле константы Мнемоника Выполняемая операция
0 0 1 1 0 0 n n n n K K K K K K K K OR sN, kk Поразрядное «Логическое ИЛИ» содержимого регистра sN и константы кк
Поле кода операции Поле номера первого регистра Поле номера второго регистра Нулевые разряды Мнемоника Выполняемая операция
0 0 1 1 0 1 n n n n m m m m 0 0 0 0 OR sN, sM Поразрядное «Логическое ИЛИ» содержимого регистров sN и sM
17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Номер разряда микрокоманды
Таблица. б. Форматы команд поразрядных операций «Исключающее ИЛИ» микропроцессорного ядра PicoBlaze, предназначенного для реализации на основе ПЛИС семейств Spartan-3, Virtex-II и Virtex-IIPRO
Поле кода операции Поле номера регистра Поле константы Мнемоника Выполняемая операция
0 0 1 1 1 0 n n n n K K K K K K K K XOR sN, kk Поразрядное «Исключающее ИЛИ» содержимого регистра sN и константы кк
Поле кода операции Поле номера первого регистра Поле номера второго регистра Нулевые разряды Мнемоника Выполняемая операция
0 0 1 1 1 1 n n n n m m m m 0 0 0 0 XOR sN, sM Поразрядное «Исключающее ИЛИ» содержимого регистров sN и sM
17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Номер разряда микрокоманды
Таблица 7. Форматы инструкции загрузки данных в регистр общего назначения для микропроцессорного ядра PicoBlaze, реализуемого на основе ПЛИС семейств Spartan-3, Virtex-II и Virtex-IIPRO
Поле кода операции Поле номера регистра Поле константы Мнемоника Выполняемая операция
0 0 0 0 0 0 n n n n K K K K K K K K LOAD sN, kk Загрузка константы кк в регистр sN
Поле кода операции Поле номера первого регистра Поле номера второго регистра Нулевые разряды Мнемоника Выполняемая операция
0 0 0 0 0 1 n n n n m m m m 0 0 0 0 LOAD sN, sM Загрузка содержимого регистра sM в регистр sN
17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Номер разряда микрокоманды
Таблица S. Форматы команд поразрядного сравнения двух операндов для микропроцессорного ядра PicoBlaze, реализуемого на основе ПЛИС семейств Spartan-3, Virtex-II и Virtex-IIPRO
Поле кода операции Поле номера регистра Поле константы Мнемоника Выполняемая операция
0 1 0 0 1 0 n n n n K K K K K K K K TEST sN, kk Проверка на четность результата операции поразрядное «Логическое И» содержимого регистра sN и константы кк
Поле кода операции Поле номера первого регистра Поле номера второго регистра Нулевые разряды Мнемоника Выполняемая операция
0 1 0 0 1 1 n n n n m m m m 0 0 0 0 TESTsN,sM Проверка на четность результата операции поразрядное «Логическое И» содержимого регистров sN и sM
17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Номер разряда микрокоманды
TEST sN,klc
Содержимое регистра sN
Константа, указанная в команде
Результат
& & & && && &
Результат содержит четное
число бит Результатно
CARRY ГГІ А------------------------------------0 ZERO ПЛ *----------------------------0
Flaa I-----1 "W . і Flag —® ________________i
Результат содержит нечетное число бит
TEST sN,sM
Результат=0
Содержимое регистра sN
Содержимое регистра sM
Результат
& & & && && &
Результат содержит четное число бит
CARRY [7] Flaa I——II
-0 ZERO m Ar-
\ Finn І—І Ж.
Результатно
Результат содержит нечетное число бит
Рис. 3. Выполнение поразрядных операций TEST
Результат=0
1S4
дами являются содержимое регистра общего назначения с номером 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.
Окончание в следующем номере
- www.finestreet.ru------------------