Особенности микропроцессорного ядра PicoBIaze, предназначенного для применения в проектах, реализуемых на основе ПЛИС семейств Virtex-II
Микропроцессорное ядро PicoBIaze, предназначенное для применения в проектах, реализуемых на основе ПЛИС семейств Virtex-II, отличается от других представителей этого семейства наиболее широкими функциональными возможностями. Учитывая, что этот модуль является результатом дальнейшего развития микропроцессорного ядра PicoBIaze, реализуемого на основе кристаллов семейства Spartan-II, Spartan-IIE, Virtex, Virtex-E, то основное внимание в настоящей статье сосредоточено на отличиях его характеристик, архитектуры и системы команд по сравнению с базовым ядром, описание которого приведено в предыдущих статьях [1, 2].
Основные характеристики микропроцессорного ядра PicoBlaze для Virtex.II
Основные характеристики семейства встраиваемых микропроцессорных ядер PicoBlaze [1] в большинстве своем относятся ко всем представителям серии. Однако ядро, предназначенное для применения в кристаллах семейства Virtex-II, имеет ряд отличительных особенностей. К их числу относятследующие характеристики:
- разрядность шины адресов — 10 бит;
- разрядность шины команд — 18 бит;
- объем блока регистров общего назначения — восьмиразрядных регистра;
- объем встроенного ППЗУ микропрограмм, реализуемого на основе блочной памяти ПЛИС Block SelectRAM, составляет 1024(18 разрядов;
- объем ресурсов кристалла, необходимых для реализации микропроцессорного ядра PicoBlaze ПЛИС семейства Virtex-II, ограничивается 84 секциями (slices), что составляет 9% от полного объема логических ресурсов кристалла XC2V40E и 0,25% от логической емкости ПЛИС XC2V6000E;
- повышенная производительность, достигающая 40–70 MIPS (в зависимости от типа используемо-
го кристалла).
Структура проекта микропроцессорного ядра PicoBlaze для Virtex.II
Структура встраиваемого микропроцессорного ядра PicoBlaze, предназначенного для использования в составе проектов, реализуемых на базе кристаллов семейства Virtex-II, приведена на рис. 1.
Рис. 1. Структура микропроцессорного ядра PicoBlaze для Virtex-II
Она отличается от структуры, рассмотренной в одной из предыдущих публикаций [1], только типом и параметрами модулей, которые входят в ее состав. Исполнительный модуль выполнен в форме компонента KCPSM2, представляющего собой макрос с относительным размещением, описание которого на языке VHDL содержится в файле kcpsm2.vhd.
Отличия интерфейса этого компонента от макроса, который является основой микропроцессорного ядра PicoBlaze, реализуемого на базе ПЛИС семейств Spartan-II, Spartan-IIE, Virtex, Virtex-E [1], заключаются в размерности векторов, представляющих шины адресов и команд. Выражения декларации компонента KCPSM2 в составе VHDL-описания проектируемой системы выглядят следующим образом.
component kcpsm2
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;
reset : in std_logic;
clk : in std_logic
);
end component;
|
В приведенных здесь и далее выражениях декларации используется система обозначений интерфейсных цепей компонентов микропроцессорного ядра PicoBlaze, подробно описанная ранее [1]. Включение экземпляра компонента, представляющего исполнительный модуль, в состав структурного описания архитектуры проектируемой системы осуществляется с помощью соответствующей конструкции [1] для компонента KCPSM,
в которой следует изменить название компонента на kcpsm2.
Функции программной памяти, как и в ПЛИС семейств Spartan-II, Spartan-IIE, Virtex, Virtex-E, выполняет один модуль блочного ОЗУ Block SelectRAM. Но в отличие от кристаллов указанных семейств, информационная емкость одного модуля блочной памяти ПЛИС семейства Virtex-II составляет 18 Кбит, что позволило в четыре раза увеличить максимальный объем загружаемой микропроцессорной программы. Модуль программной памяти представлен в виде компонента с названием prog_rom, который фактически описывает ППЗУ с информационной
емкостью 1024(18 разрядов, реализуемое на основе однопортового блочного ОЗУ с аналогичной организацией. Для декларации этого компонента следует воспользоваться конструкцией, которая имеет следующий вид:
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;
|
Создание экземпляра компонента, представляющего программную память, выполняется с помощью оператора, который используется для аналогичного компонента, рассмотренного в первой статье цикла [1]. При включении выражений декларации и создания экземпляра компонента, соответствующего программной памяти, в состав описания проектируемой системы следует вместо идентификатора prog_rom указать название компонента, совпадающее с идентификатором файла, в котором должен быть записан исходный текст программы. Необходимость такой замены объясняется тем, что ассемблер формирует описание содержимого ППЗУ программ на языке VHDL в виде файла с расширением vhd, название которого совпадает с идентификатором файла, содержащего исходный текст программы.
Сопряжение основных компонентов микропроцессорного ядра PicoBlaze демонстрирует VHDL-описание объекта EMBEDDED_KCPSM2, структуру которого составляет исполнительный модуль и подключенный к нему модуль программной памяти.
Ниже приведен полный текст описания объекта EMBEDDED_KCPSM2, имеющий ту же структуру, что и описание объекта EMBEDDED_KCPSM [1].
-- EMBEDDED_KCPSM2.VHD
--
-----------------------------------------------------------------------------
--
-- 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_kcpsm2 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;
reset : in std_logic;
clk : in std_logic);
end embedded_kcpsm2;
--
-----------------------------------------------------------------------------
--
architecture connectivity of embedded_kcpsm2 is
--
-----------------------------------------------------------------------------
--
-- Declaration of KCPSM-II
--
component kcpsm2
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;
reset : in std_logic;
clk : in std_logic);
end component;
--
-- 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 KCPSM-II to program ROM
--
signal address : std_logic_vector(9 downto 0);
signal instruction : std_logic_vector(17 downto 0);
--
-----------------------------------------------------------------------------
--
-- Connection of macros
--
begin
processor: kcpsm2
port map( address => address,
instruction => instruction,
port_id => port_id,
write_strobe => write_strobe,
out_port => out_port,
read_strobe => read_strobe,
in_port => in_port,
interrupt => interrupt,
reset => reset,
clk => clk);
program: prog_rom
port map( address => address,
instruction => instruction,
clk => clk);
end connectivity ;
-----------------------------------------------------------------------------
--
-- END OF FILE EMBEDDED_KCPSM2.VHD
|
В случае применения объекта EMBEDDED_KCPSM2 в качестве элемента, входящего в состав разрабатываемой системы, следует воспользоваться выражениями декларации и создания экземпляра соответствующего компонента, которые приведены первой статье цикла [1] для макроса EMBEDDED_KCPSM.
В этих выражениях следует только изменить название компонента embedded_kcpsm на embedded_kcpsm2. Все рассмотренные компоненты полностью совместимы с любой из конфигураций средств проектирования фирмы Xilinx серии ISE (Integrated Synthesis Environment), включая свободно распространяемую — WebPACK ISE [3].
Архитектура микропроцессорного ядра PicoBlaze для Virtex-II
Архитектура микропроцессорного ядра PicoBlaze, предназначенного для применения в кристаллах семейства Virtex-II, изображена на рис. 2. В структурном отношении она практически не отличается от архитектуры встраиваемого микропроцессорного модуля [1]. Различия проявляются на уровне отдельных структурных элементов. Эти отличия обусловлены, прежде всего, тем, что преимущества архитектуры ПЛИС семейства Virtex-II, по сравнению с кристаллами серий Spartan-II, Spartan-IIE, Virtex, Virtex-E, позволили расширить функциональные возможности структурных элементов соответствующего микропроцессорного ядра из семейства PicoBlaze.
Рис. 2. Архитектура микропроцессорного ядра PicoBlaze для Virtex-II
Объем блока регистров общего назначения увеличен до тридцати двух восьмиразрядных регистров, которые обозначаются соответствующими порядковыми номерами s00 — s1F. Тем самым создаются предпосылки для повышения уровня оптимизации разрабатываемой микропроцессорной программы. Двукратное увеличение числа регистров общего назначения позволяет, прежде всего, сохранять больший объем промежуточных результатов вычислений, входных и выходных данных, не используя внешнего (по отношению к микропроцессорному ядру) ОЗУ. Замена обращений к внешней оперативной памяти обращениями к регистрам позволяет получить существенный выигрыш в быстродействии при выполнении программы за счет исключения операций перемещения данных между регистрами и ОЗУ и благодаря тому, что каждый из регистров общего назначения может выполнять функции аккумулятора.
Четырехкратное увеличение адресного пространства программной памяти потребовало расширения шины адресов до десяти разрядов. Тем самым обеспечивается возможность прямого обращения к любой ячейке ППЗУ, используемого для хранения микропроцессорных программ, в диапазоне адресов от 000 до 3FF. При этом длина команд возросла до восемнадцати разрядов, что повлекло за собой соответствующее расширение шины команд.
В соответствии с увеличением ширины шины адресов также изменена разрядность элементов архитектуры микропроцессорного ядра PicoBlaze, которые выполняют функции формирования и хранения адресов команд. Разрядность программного счетчика, регистров стека и блока управления выбором адреса следующей команды составляет десять бит.
Модернизация блока дешифрации команд, обусловленная необходимостью учета рассмотренных выше особенностей элементов архитектуры, привела, в частности, к изменению формата команд, поддерживаемых микропроцессорным ядром PicoBlaze, которое предназначено для применения в кристаллах семейства Virtex-II.
Изменения в процедуре обработки прерываний коснулись только значения адреса, по которому указывается вектор процедуры обслуживания прерывания. В связи с расширением диапазона адресов программной памяти в качестве адреса вектора прерывания, который в семействе микропроцессорных ядер PicoBlaze соответствует максимально допустимому значению адреса, используется значение 3FF.
Система команд микропроцессорного ядра PicoBlaze для Virtex-II
В состав системы команд микропроцессорного ядра PicoBlaze, встраиваемого в проекты, которые выполняются на основе ПЛИС семейства Virtex-II, входят те же 49 инструкций, что были подробно рассмотрены ранее [2].
При этом сохраняется классификация команд по функциональному признаку, в соответствии с которой они подразделяются на шесть уже известных групп. Изменения произошли в формате команд и их мнемонической записи. Необходимость преобразования формата инструкций обусловлена архитектурными особенностями, рассмотренными в предыдущем разделе. Как уже упоминалось, длина всех команд в двоичном представлении составляет восемнадцать разрядов. В большинстве инструкций поменялась длина полей и, соответственно, коды выполняемых операций. В некоторых командах изменилось взаимное расположение полей. В последующих разделах для каждой функциональной группы команд будут представлены соответствующие форматы и мнемоника инструкций рассматриваемого представителя семейства микропроцессорных ядер PicoBlaze.
Команды управления последовательностью выполнения операций в программе для ядра PicoBlaze для Virtex-II
В командах безусловного и условных переходов JUMP изменилась структура поля кода операции и длина поля адреса перехода. В соответствии с разрядностью шины адресов длина поля адреса перехода увеличена до десяти двоичных разрядов. При мнемонической форме записи команд передачи управления в программе параметр, определяющий адрес перехода, задается в виде последовательности, состоящей из трех шестнадцатеричных символов. Форматы команд безусловного и условных переходов JUMP в новой редакции представлены в таблице 1.
Таблица 1. Форматы команд переходов микропроцессорного ядра PicoBlaze для Virtex-II
Модификация команд обращения к подпрограммам CALL также затронула структуру поля кода операции и длину поля адреса вызываемой процедуры. В новой редакции поле адреса вызываемой подпрограммы включает в себя десять двоичных разрядов.
При мнемонической форме записи команд обращения к подпрограммам значение параметра, указывающее начальный адрес вызываемой процедуры, представляется в виде трехзначного шестнадцатеричного числа. Новые версии форматов команд безусловного и условных вызовов подпрограмм CALL приведены в таблице 2.
Таблица 2. Форматы команд вызова подпрограмм для микропроцессорного ядра PicoBlaze для Virtex-II
Преобразование инструкций возврата из подпрограммы RETURN коснулось тех же полей, что и в командах вызова подпрограмм. Для всех вариантов команд завершения выполняемой подпрограммы и передачи управления основной программе или подпрограмме, из которой производилось обращение к этой процедуре, изменены коды выполняемой операции. Мнемоническая форма записи команд RETURN сохранилась без изменений. В таблице 3 представлены модифицированные форматы команд безусловного и условного возврата из подпрограммы RETURN.
Таблица 3. Форматы команд безусловного и условного возврата из подпрограммы для микропроцессорного ядра PicoBlaze для Virtex-II
Группа логических команд микропроцессорного ядра PicoBlaze для Virtex-II
В формате инструкций, которые относятся к группе логических команд, следует обратить внимание на два основных отличия по сравнению с аналогичными инструкциями, представленными в прошлом номере журнала [2]. Во-первых, длина поля кода операции увеличилась на один разряд и составляет пять бит. Во-вторых, поля команд, предназначенные для определения номеров регистров, содержимое которых используется в качестве операндов, также содержат пять двоичных разрядов. Изменение длины полей, в которых указываются номера регистров, связано с двукратным увеличением объема блока регистров общего назначения.
В качестве номера регистра NN, который указывается в тексте инструкций, может использоваться любое число в диапазоне от 0 до 31, которое при мнемонической форме записи команд задается в виде последовательности из двух шестнадцатеричных символов (00-1F).
Новая редакция форматов команд поразрядных операций «Логическое И» (поразрядное умножение) AND, выполняемых над содержимым регистра общего назначения и константой kk, значение которой задается
непосредственно в тексте инструкции, а также над содержимым двух регистров общего назначения, приведена в таблице 4.
Таблица 4. Форматы команд поразрядных операций «Логическое И» микропроцессорного ядра PicoBlaze для Virtex-II
Модифицированные форматы инструкций OR, предназначенных для выполнения операций поразрядного сложения двух операндов (поразрядное «Логическое ИЛИ»), определены в таблице 5 для двух вариантов.
Таблица 5. Форматы команд поразрядных операций «Логическое ИЛИ» микропроцессорного ядра PicoBlaze для Virtex-II
В первом случае операндами является содержимое любого из тридцати двух регистров общего назначения и константа kk, значение которой указывается в соответствующем поле команды, а во втором — содержимое двух регистров с номерами NN и MM.
Новая редакция форматов команд XOR, используемых для выполнения поразрядной операции «Исключающее ИЛИ» с участием содержимого регистра общего назначения с номером NN и константы kk или содержимого двух регистров с номерами NN и MM, представлена в таблице 6.
Таблица 6. Форматы команд поразрядных операций «Исключающее ИЛИ» микропроцессорного ядра
PicoBlaze для Virtex-II
Форматы инструкций LOAD, предназначенных для загрузки константы или содержимого какого-либо регистра в выбранный регистр общего назначения, в новой редакции приведены в таблице 7.
Таблица 7. Форматы инструкции загрузки данных в регистр общего назначения микропроцессорного ядра PicoBlaze для Virtex-II
Группа арифметических команд микропроцессорного ядра PicoBlaze для Virtex-II
В структуре полей и мнемонической форме записи арифметических команд микропроцессорного ядра PicoBlaze, предназначенного для применения в кристаллах семейства Virtex-II, произошли те же изменения (по сравнению с форматами аналогичных команд, приведенными ранее [2]), что и в логических инструкциях, рассмотренных в предыдущем разделе. Модифицированные варианты форматов команд сложения ADD содержимого регистра с номером NN и константы kk или содержимого двух регистров общего назначения с номерами NN и MM без учета переноса представлены в таблице 8.
Таблица 8. Форматы команд сложения двух операндов без учета переноса для микропроцессорного ядра PicoBlaze для Virtex-II
Новая версия форматов инструкций ADDCY, предназначенных для вычисления суммы двух операндов с учетом значения флага переноса, полученного при выполнении предыдущей операции, приведена в таблице 9.
Таблица 9. Форматы команд сложения двух операндов с учетом переноса для микропроцессорного ядра PicoBlaze для Virtex-II
Форматы инструкций SUB, используемых для выполнения операции вычитания с участием тех же операндов, что и в командах сложения, без учета заема, в новой редакции представлены в таблице 10.
Таблица 10. Форматы команд вычитания без учета заема для микропроцессорного ядра PicoBlaze для Virtex-II
Модифицированные варианты форматов команд SUBCY, предназначенных для вычисления разности двух операндов с учетом значения заема, образовавшегося при выполнении предыдущей операции, приведены в таблице 11.
Таблица 11. Форматы инструкций вычитания с учетом заема для микропроцессорного ядра PicoBlaze для Virtex-II
Команды сдвига данных микропроцессорного ядра PicoBlaze для Virtex-II
В формате команд, предназначенных для выполнения операций сдвига данных, произошли те же изменения, что и в формате логических инструкций — длина полей кода операции и номера регистра увеличилась на один бит и составляет пять двоичных разрядов. Отличия в мнемонической форме записи команд сдвига от однотипных выражений, приведенных в предыдущей статье [2], заключаются только в форме представления параметра, определяющего номер регистра общего назначения, над содержимым которого выполняется соответствующая операция. Номер регистра, участвующего в операции сдвига, задается в виде последовательности, состоящей из двух шестнадцатеричных символов. Преобразованные форматы инструкций логического (арифметического) и циклического сдвига данных, находящихся в регистре общего назначения с указанным номером, представлены в таблице 12.
Таблица 12. Форматы команд логического или циклического сдвига данных микропроцессорного ядра PicoBlaze для Virtex-II
Команды ввода-вывода микропроцессорного ядра PicoBlaze для Virtex-II
Структура инструкций ввода-вывода, используемых для организации чтения данных из входного порта в заданный регистр общего назначения и передачи информации из указанного регистра в выходной порт, отличается от структуры аналогичных команд, приведенной ранее [2], длиной полей кода операции и номеров регистров, каждая из которых составляет по пять двоичных разрядов. Значения номеров регистров общего назначения, используемых в операциях ввода-вывода, при мнемонической форме записи указываются в виде двухразрядного шестнадцатеричного числа. Новые варианты форматов команд ввода-вывода с различными видами адресации приведены в таблице 13.
Таблица 13. Форматы команд ввода.вывода микропроцессорного ядра PicoBlaze для Virtex-II
Команды обслуживания прерываний микропроцессорного ядра PicoBlaze для Virtex-II
В формате инструкций обслуживания прерываний изменилось взаимное расположение поля кода операции и поля режима обработки прерываний. Кроме того, длина каж-дого из этих полей команды в двоичном представлении стала составлять девять разрядов. При этом мнемоника инструкций, используемых для обработки прерываний, осталась прежней.
Новая редакция форматов команд возврата из процедуры обслуживания прерываний RETURNI и установки режима обслуживания прерываний в программе ENABLE INTERRUPT и DISABLE INTERRUPT представлена в таблице 14.
Таблица 14. Форматы команд обслуживания прерываний микропроцессорного ядра PicoBlaze для Virtex-II
Завершая рассмотрение особенностей встраиваемого микропроцессорного модуля PicoBlaze, реализуемого в кристаллах серии Virtex-II, следует упомянуть о новой версии ассемблера, включенной в состав комплекта, предоставляемого пользователю. Новый вариант программы, формирующей файлы описания содержимого программной памяти, учитывает изменения в формате команд и параметры блочного ОЗУ используемых ПЛИС. В следующей статье цикла будут представлены отличительные особенности наиболее компактной версии микропроцессорного ядра PicoBlaze, предназначенной для использования в проектах, выполняемых на базе кристаллов семейства CoolRunner-II.
Литература
- Зотов В. PicoBlaze — семейство восьмиразрядных микропроцессорных ядер, реализуемых на основе ПЛИС фирмы Xilinx.// Компоненты и технологии" № 4 2003.
- Зотов В. Система команд микропроцессорного ядра PicoBlaze, реализуемого на основе ПЛИС семейств Spartan-II, Spartan-IIE, Virtex, Virtex-E // Компоненты и технологии" № 5 2003
- Зотов В. Проектирование цифровых устройств на основе ПЛИС фирмы Xilinx в САПР WebPack ISE. М.: Горячая линия —Телеком. 2003.
Валерий Зотов
|