Особенности микропроцессорного ядра PicoBIaze, предназначенного для применения в проектах, реализуемых на основе ПЛИС семейства CoolRunner-II
В предыдущих публикациях данного цикла [1-3] были рассмотрены элементы семейства микропроцессорных ядер PicoBIaze, предназначенное для использования в проектах, которые выполняются на базе ПЛИС серий FPGA фирмы Xilinx. Не смотря на то, что кристаллы серий CPLD обладают значительно меньшими функциональными возможностями по сравнению с представителями семейств FPGA, некоторые из них могут применяться для реализации встраиваемых микропроцессорных систем. Для этих целей фирма Xilinx предлагает наиболее компактную версию микропроцессорного ядра PicoBlaze, которая предназначена для применения в проектах, реализуемых на основе ПЛИС семейства CoolRunner-II.
Встраиваемый микропроцессорный модуль для ПЛИС семейства CoolRunner-II разработан на основе микропроцессорного ядра PicoBlaze, предназначенного для реализации на базе кристаллов семейств Spartan-II, Spartan-IIE, Virtex, Virtex-E. Поэтому в настоящей статье при рассмотрении характеристик, архитектуры и системы команд микропроцессорного ядра PicoBlaze для ПЛИС семейства CoolRunner-II представлены только его отличительные особенности по сравнению с базовым ядром, описание которого было опубликовано ранее [1–2].
Данное семейство кристаллов отличается от других серий ПЛИС CPLD, выпускаемых фирмой Xilinx, высоким быстродействием, низкой потребляемой мощностью и наличием микросхем с достаточно большим объемом логических ресурсов. Более подробно характеристики кристаллов семейства CoolRunner-II представлены в отдельной статье [4].
Основные характеристики ядра PicoBlaze, реализуемого на основе ПЛИС семейства CoolRunner-II
Микропроцессорное ядро PicoBlaze, предназначенное для разработки систем на основе кристаллов семейства CoolRunner-II, обладает основными техническими характеристиками, схожими с характеристиками базового модуля, представленными в первой публикации цикла [1]. Наиболее существенные различия проявляются в вопросе применения встроенного ППЗУ микропрограмм, объеме блока регистров общего назначения и производительности. Рассматриваемый представитель семейства PicoBlaze отличается от микропроцессорного ядра для ПЛИС семейств Spartan-II, Spartan-IIE, Virtex, Virtex-E следующими особенностями:
- возможность применения в проектах, выполняемых на основе кристаллов CoolRunner-II с числом макроячеек 256 и более (XC2C256, XC2C384, XC2C512);
- объем блока регистров общего назначения — восемь регистров по восемь разрядов;
- отсутствие встроенного ППЗУ микропрограмм;
- четырехуровневый стек;
- объем ресурсов кристалла, необходимых для реализации микропроцессорного ядра PicoBlaze в ПЛИС CoolRunner-II, составляет 212 макроячеек, что соответствует 83% от полного объема логических ресурсов кристалла XC2C256 (при этом используется 155 регистров и 53 пользовательских выводов ПЛИС, что составляет 61 и 45% от полного объема этих ресурсов).
Структура проекта ядра PicoBlaze, реализуемого на основе ПЛИС семейства CoolRunner-II
В кристаллах семейства CoolRunner-II, как и в ПЛИС CPLD других серий, отсутствуют ресурсы выделенной блочной памяти. Использование же основных логических ресурсов ПЛИС (триггеров, входящих в состав макроячеек) для формирования программной памяти встраиваемого процессорного модуля крайне неэффективно. Поэтому в версии микропроцессорного ядра PicoBlaze, предназначенной для реализации в кристаллах семейства CoolRunner-II, исключен модуль встроенного ППЗУ микропрограмм. Таким образом, структура рассматриваемого варианта встраиваемого микропроцессорного ядра PicoBlaze, в отличие от рассмотренных ранее представителей этого семейства, содержит только исполнительный модуль.
Комплект микропроцессорного ядра PicoBlaze, предназначенного для семейства CoolRunner-II, содержит три группы файлов, упакованных в архив.
Каждая из этих групп расположена в отдельном каталоге (разделе) архива. Первая группа содержит файлы всех необходимых модулей описаний на языке VHDL. Файлы этой группы расположены в разделе VHDL. Вторая группа включает в себя исполняемый программный модуль ассемблера asm.exe и файл его исходного описания на языке С.
В эту же группу включен файл, содержащий тестовую программу на языке ассемблера, и файлы, полученные в результате обработки этой программы ассемблером. Данная группа файлов находится в разделе C. Третья группа файлов, расположенная в разделе DEMO_TEST, представляет собой тестовый проект, иллюстрирующий использование компонентов ядра. Демонстрационный проект и все компоненты ядра полностью совместимы с любой из конфигураций средств проектирования фирмы Xilinx серии ISE (Integrated Synthesis Environment), включая свободно распространяемую — WebPACK ISE [3].
Исполнительный модуль выполнен в форме компонента picoblaze, представляющего собой макрос с относительным размещением, описание которого на языке VHDL содержится в файле picoblaze.vhd. В этом описании используется ряд компонентов следующего (более низкого) уровня иерархии, которые в большинстве своем соответствуют элементам архитектуры микропроцессорного ядра PicoBlaze. Описания этих компонентов находятся в соответствующих файлах, которые расположены в том же разделе, что и файл описания компонента верхнего уровня иерархии picoblaze. Названия файлов, содержащих описания компонентов нижнего уровня
иерархии, как правило, совпадают с именами этих компонентов. Выражения декларации компонента picoblaze в составе VHDL-описания проектируемой системы выглядят следующим образом.
component picoblaze
Port (
address : out std_logic_vector(7 downto 0);
instruction : in std_logic_vector(15 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]. Включение экземпляра компонента, представляющего исполнительный модуль picoblaze, в состав структурного описания архитектуры проектируемой системы осуществляется с помощью следующей конструкции.
inst_name_processor: picoblaze
port map(
address => address_name,
instruction => instruction_name,
port_id => port_id_name,
write_strobe => write_strobe_name,
out_port => out_port_name,
read_strobe => read_strobe_name,
in_port => in_port_name,
interrupt => interrupt_event,
reset => reset_name,
clk => clk_name
);
|
В приведенном шаблоне следует вместо идентификатора inst_name_processor задать метку, которая, как правило, соответствует позиционному обозначению создаваемого экземпляра компонента. Кроме того, в операторе port map нужно указать названия сигналов, которые используются в описании проектируемого устройства.
Для отладки разрабатываемой программы методом моделирования ядра в составе создаваемого проекта с помощью системы ModelSim XE [5–8] можно использовать компонент виртуального ПЗУ микропрограмм.
Этот компонент представляет ПЗУ информационной емкостью 4 Кбит с организацией 256U16 разрядов. В качестве шаблона для декларации и создания экземпляра компонента виртуального ПЗУ микропрограмм можно использовать соответствующие выражения, приведенные для модуля программной памяти ядра PicoBlaze, реализуемого на базе ПЛИС семейств Spartan-II, Spartan-IIE, Virtex, Virtex-E [1]. Название компонента виртуального ПЗУ микропрограмм должно совпадать с именем файла, в котором содержится текст отлаживаемой программы на языке ассемблера.
Тестовый проект, включенный в состав комплекта микропроцессорного ядра PicoBlaze, можно использовать в качестве образца VHDL-описания отладочной системы. Основу этой системы образует VHDL-описание объекта DEMO, в структуру которого входит исполнительный модуль и подключенный к нему модуль виртуальной программной памяти. Ниже приведен полный текст описания тестовой системы, который также демонстрирует методику применения компонента picoblaze в составе проектируемого устройства.
-- Standard IEEE libraries
--
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
-----------------------------------------------------------------------------
entity demo is
Port (output : out std_logic_vector(7 downto 0);
reset : in std_logic;
clk : in std_logic);
end demo;
-----------------------------------------------------------------------------
-- Start of test achitecture
--
architecture Behavioral of demo is
-----------------------------------------------------------------------------
component picoblaze
Port (
address : out std_logic_vector(7 downto 0);
instruction : in std_logic_vector(15 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 demo_test
Port (
address : in std_logic_vector(7 downto 0);
dout : out std_logic_vector(15 downto 0);
clk : in std_logic
);
end component;
-----------------------------------------------------------------------------
-- Signals used to connect picoblaze to program ROM and I/O logic
--
signal address : std_logic_vector(7 downto 0);
signal instruction : std_logic_vector(15 downto 0);
signal port_id : std_logic_vector(7 downto 0);
signal out_port : std_logic_vector(7 downto 0);
signal in_port : std_logic_vector(7 downto 0);
signal write_strobe : std_logic;
signal read_strobe : std_logic;
signal interrupt_event : std_logic;
--signal reset : std_logic;
--
-----------------------------------------------------------------------------
-- Start of circuit description
--
begin
-- Inserting picoblaze and the program memory
--
processor: picoblaze
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_event,
reset => reset,
clk => clk
);
program: demo_test
port map(
address => address,
dout => instruction,
clk => clk);
--
-- Unused inputs on processor
--
in_port <= «00000000»;
interrupt_event <= '0';
-- reset <= '0';
--
-- adding the output registers to the processor
IO_registers: process(clk)
begin
-- waveform register at address 01
if clk'event and clk='1' then
if port_id(0)='1' and write_strobe='1' then
output <= out_port;
end if;
end if;
end process IO_registers;
end Behavioral;
-----------------------------------------------------------------------------
-- END OF FILE demo.VHD
--
|
В структуре представленного описания можно выделить три раздела. В первом разделе описания указаны ссылки на используемые стандартные библиотеки и пакеты. Следующий раздел содержит операторы, описывающие интерфейс объекта DEMO. В третьем разделе приводится структурное описание архитектуры этого объекта. Этот раздел состоит из пяти секций. Первая секция содержит выражения декларации используемых компонентов. Во второй секции представлены выражения декларации внутренних сигналов устройства. В третьей секции описывается собственно структура объекта DEMO. Четвертая секция содержит выражения, которые определяют значения сигналов на неиспользуемых входах микропроцессорного ядра. Пятая секция описывает процесс формирования выходных сигналов объекта DEMO.
Архитектура проекта ядра PicoBlaze, реализуемого на основе ПЛИС семейства CoolRunner-II
Архитектура микропроцессорного ядра PicoBlaze, предназначенного для применения в кристаллах семейства CoolRunner-II, изображена на рисунке. В структурном отношении она отличается от архитектуры базового микропроцессорного модуля [1] только отсутствием встроенного блока программной памяти. Кроме того, имеются различия, которые проявляются уже на уровне отдельных структурных элементов. Эти отличия обусловлены, прежде всего, ограниченным объемом ресурсов ПЛИС семейства CoolRunner-II по сравнению с кристаллами серий Spartan-II, Spartan-IIE, Virtex, Virtex-E. Поэтому одной из основных задач при разработке рассматриваемого варианта микропроцессорного ядра PicoBlaze являлась минимизация ресурсов кристалла, необходимых для его реализации. Решение этой задачи достигнуто за счет сокращения функциональных возможностей отдельных структурных элементов.
Рисунок. Архитектура микропроцессорного ядра PicoBlaze, реализуемого на основе ПЛИС семейства CoolRunner-II
Вдвое уменьшен объем блока регистров общего назначения, который в новой версии содержит восемь восьмиразрядных регистров, обозначаемых соответствующими порядковыми номерами s0–s7. Почти в четыре раза (с пятнадцати уровней до четырех) сокращена глубина стека программного счетчика. Тем самым накладывается более жесткое ограничение на количество вложенных вызовов процедур в разрабатываемой программе.
Модернизация блока дешифрации команд, обусловленная необходимостью снижения объема используемых ресурсов ПЛИС, привела, в частности, к изменению формата команд, поддерживаемых микропроцессорным ядром PicoBlaze, которое предназначено для применения в кристаллах семейства CoolRunner-II.
Система команд ядра PicoBlaze, реализуемого на основе ПЛИС семейства CoolRunner-II
Базовая система команд микропроцессорного ядра PicoBlaze, встраиваемого в проекты, выполняемые на основе ПЛИС семейства CoolRunner-II, включает в себя 49 инструкций [2]. При классификации команд по функциональному признаку они подразделяются на шесть уже известных групп. Изменения произошли только в формате команд. В ряде инструкций поменялась длина полей и коды выполняемых операций. При этом полная длина команд не изменилась и по-прежнему составляет шестнадцать двоичных разрядов. В некоторых командах изменилось взаимное расположение полей. Мнемоническая форма записи инструкций сохранилась без изменений.
При необходимости разработчик может расширить существующую систему команд, дополнив ее собственными инструкциями. Для этого нужно внести соответствующие изменения в файлы исходного описания микропроцессорного ядра picoblaze.vhd и ассемблера asm.cpp.
В последующих разделах будут представлены соответствующие форматы инструкций для каждой функциональной группы, которые входят в базовую систему команд рассматриваемого представителя семейства микропроцессорных ядер PicoBlaze.
Команды управления последовательностью выполнения операций в программе для ядра PicoBlaze, реализуемого на основе ПЛИС семейства CoolRunner-II
В командах безусловного и условных переходов JUMP изменились значения и структура поля кода операции. Форматы команд безусловного и условных переходов JUMP в новой редакции представлены в таблице 1.
Таблица 1. Форматы команд переходов ядра PicoBlaze, реализуемого на основе CoolRunner-II
Модификация команд обращения к подпрограммам CALL также затронула структуру поля кода операции. Поле адреса вызываемой подпрограммы осталось без изменений. Новые версии форматов команд безусловного и условных вызовов подпрограмм CALL приведены в таблице 2.
Таблица 2. Форматы команд вызова подпрограмм для ядра PicoBlaze, реализуемого на основе CoolRunner-II
Преобразование инструкций возврата из подпрограммы RETURN проявилось в изменении структуры полей и значений кода выполняемой операции. В таблице 3. представлены модифицированные форматы команд безусловного и условного возврата из подпрограммы RETURN.
Таблица 3. Форматы команд безусловного и условного возврата из подпрограммы для ядра PicoBlaze, реализуемого на основе CoolRunner-II
Группа логических команд ядра PicoBlaze, реализуемого на основе ПЛИС семейства CoolRunner-II
В формате инструкций, относящихся к группе логических команд, произошли следующие изменения по сравнению с аналогичными инструкциями, представленными ранее [2]. Во-первых, все команды этой группы имеют одинаковую длину поля кода операции. В новой редакции это поле включает в себя пять двоичных разрядов. Во-вторых, длина полей команд, в которых указываются номера регистров, используемых при выполнении операции, уменьшилась на один бит и составляет три двоичных разряда. Изменение длины полей, предназначенных для определения номеров регистров, обусловлено двукратным сокращением объема блока регистров общего назначения. В качестве номеров регистров N иM, которые указываются при мнемонической форме записи инструкций, могут использоваться любые числа в диапазоне от 0 до 7.
Новая редакция форматов команд поразрядных операций «Логическое И» (поразрядное умножение) AND, выполняемых над содержимым одного из регистров общего назначения и константой kk, значение которой
задается непосредственно в тексте инструкции, а также над содержимым двух регистров общего назначения, приведена в таблице 4.
Таблица 4. Форматы команд поразрядных операций «Логическое И» ядра PicoBlaze,
реализуемого на основе CoolRunner-II
Модифицированные форматы инструкций OR, предназначенных для выполнения операций поразрядного сложения двух операндов (поразрядное «Логическое ИЛИ»), определены в таблице 5 для двух вариантов.
Таблица 5. Форматы команд поразрядных операций «Логическое ИЛИ» ядра PicoBlaze,
реализуемого на основе CoolRunner-II
В первом случае операндами является содержимое любого из восьми регистров общего назначения и константа kk, значение которой указывается в соответствующем поле команды, а во втором — содержимое двух регистров с номерами N и M.
Новая редакция форматов команд XOR, используемых для выполнения поразрядной операции «Исключающее ИЛИ» с участием содержимого регистра общего назначения с номером N и константы kk или содержимого двух регистров с номерами N и M, представлена в таблице 6.
Таблица 6. Форматы команд поразрядных операций «Исключающее ИЛИ» ядра PicoBlaze,
реализуемого на основе CoolRunner-II
Форматы инструкций LOAD, предназначенных для загрузки константы или содержимого какого-либо регистра в выбранный регистр общего назначения, в новой редакции приведены в таблице 7.
Таблица. 7. Форматы инструкции загрузки данных в регистр общего назначения ядра PicoBlaze,
реализуемого на основе CoolRunner-II
Группа арифметических команд ядра PicoBlaze, реализуемого на основе ПЛИС семейства CoolRunner-II
В структуре полей арифметических команд ядра PicoBlaze, предназначенного для применения в кристаллах CoolRunner-II, произошли те же изменения (по сравнению с форматами аналогичных команд, приведенными ранее [2]), что и в логических инструкциях, рассмотренных в предыдущем разделе. Модифицированные варианты форматов команд сложения ADD содержимого регистра с номером N и константы kk или содержимого двух регистров общего назначения с номерами N и M без учета переноса представлены в таблице 8.
Таблица 8. Форматы команд сложения двух операндов без учета переноса для ядра PicoBlaze,
реализуемого на основе CoolRunner-II
Новая версия форматов инструкций ADDCY, предназначенных для вычисления суммы двух операндов с учетом значения флага переноса, полученного при выполнении предыдущей операции, приведена в таблице 9.
Таблица 9. Форматы команд сложения двух операндов с учетом переноса для ядра PicoBlaze,
реализуемого на основе CoolRunner-II
Форматы инструкций SUB, используемых для выполнения операции вычитания с участием тех же операндов, что и в командах сложения, без учета заема, в новой редакции представлены в таблице 10.
Таблица 10. Форматы команд вычитания без учета заема для ядра PicoBlaze,
реализуемого на основе CoolRunner-II
Модифицированные варианты форматов команд SUBCY, предназначенных для вычисления разности двух операндов с учетом значения заема, образовавшегося при выполнении предыдущей операции, приведены в таблице 11.
Таблица 11. Форматы инструкций вычитания с учетом заема для ядра PicoBlaze,
реализуемого на основе CoolRunner-II
Команды сдвига данных для ядра PicoBlaze, реализуемого на основе ПЛИС семейства CoolRunner-II
В формате команд, предназначенных для выполнения операций сдвига данных, изменилась длина полей кода операции и номера регистра. Преобразованные форматы инструкций логического (арифметического) и циклического сдвига данных, находящихся в регистре общего назначения с указанным номером, представлены в таблице 12.
Таблица 12. Форматы команд логического или циклического сдвига данных ядра PicoBlaze,
реализуемого на основе CoolRunner-II
Команды ввода-вывода ядра PicoBlaze, реализуемого на основе ПЛИС семейства CoolRunner-II
Структура инструкций ввода-вывода, используемых для организации чтения данных из входного порта в заданный регистр общего назначения и передачи информации из указанного регистра в выходной порт, отличается от структуры аналогичных команд, приведенной ранее [2], длиной полей кода операции и номеров регистров. В новой редакции команд ввода-вывода указанные поля содержат соответственно пять и три двоичных разряда.Новые варианты форматов команд ввода-вывода с различными видами адресации входных и выходных портов приведены в таблице 13.
Таблица 13. Форматы команд ввода.вывода ядра PicoBlaze, реализуемого на основе CoolRunner-II
Команды обслуживания прерываний ядра PicoBlaze, реализуемого на основе ПЛИС семейства CoolRunner-II
В формате инструкций обслуживания прерываний изменилось взаимное расположение и длина поля кода операции и поля режима обработки прерываний. Новая редакция форматов команд возврата из процедуры обслуживания прерываний RETURNI и установки режима обработки прерываний в программе ENABLE INTERRUPT и DISABLE INTERRUPT представлена в таблице 14.
Таблица 14. Форматы команд обслуживания прерываний ядра PicoBlaze, реализуемого на основе CoolRunner-II
Для практического освоения рассмотренного варианта микропроцессорного ядра PicoBlaze и для аппаратной отладки проектов, включающих это ядро, можно воспользоваться инструментальным комплектом CoolRunner-II Design Kit, возможности которого были рассмотрены на страницах «КиТ» [9].
На этом завершается рассмотрение характеристик, архитектуры и системы команд встраиваемых восьмиразрядных микропроцессорных модулей семейства PicoBlaze. В следующей публикации цикла будут обсуждаться вопросы использования ассемблера для данного семейства микропроцессорных ядер.
Литература
- Зотов В. PicoBlaze — семейство восьмиразрядных микропроцессорных ядер, реализуемых на основе ПЛИС фирмы Xilinx.// Компоненты и технологии" № 4 2003.
- Зотов В. Система команд микропроцессорного ядра PicoBlaze, реализуемого на основе ПЛИС семейств Spartan-II, Spartan-IIE, Virtex, Virtex-E // Компоненты и технологии" № 5 2003
- Зотов В. Проектирование цифровых устройств на основе ПЛИС фирмы Xilinx в САПР WebPack ISE. М.: Горячая линия —Телеком. 2003.
Валерий Зотов
|