Продолжение. Начало в КиТ№ 7'2006
Валерий ЗОТОВ
walerry@km.ru
Пример сквозного проектирования встраиваемой восьмиразрядной микропроцессорной системы
на базе ядра семейства PicoBlaze, реализуемой на основе ПЛИС фирмы Xilinx
Разработка аппаратной части контроллера, проектируемого на основе микропроцессорного ядра PicoBlaze и реализуемого в ПЛИС семейства Spartan-3
Проектирование аппаратной части разрабатываемого контроллера осуществляем в соответствии с последовательностью операций, представленной в [13, 14, 8]. Для этого, прежде всего, активизируем управляющую оболочку средств проектирования серии Xilinx ISE Навигатор проекта и запускаем «мастер» формирования нового проекта New Project Wizard, выполнив команду New Project из всплывающего меню File. В стартовой диалоговой панели «мастера» New Project Wizard в поле редактирования Project Location указываем название каталога, используемого для хранения проектов C:\Project (рис. 4). В поле редактирования Project name с помощью клавиатуры вводим название создаваемого проекта контроллера sampled_data_controller. При этом данное название автоматически добавляется в поле редактирования Project Location, определяя тем самым имя рабочего каталога проекта. Так как модуль верхнего уровня иерархии проекта будет представлять собой VHDL-описание разрабатываемой системы, то в поле выбора Top-Level Module Type оставляем значение HDL, предлагаемое по умолчанию.
Завершив ввод исходных данных, необходимых для создания нового проекта контроллера, после нажатия кнопки Далее в стартовой панели «мастера» New Project Wizard (рис. 4) переходим к диалоговой панели выбора ПЛИС для реализации проекта. В этой панели поочередно выбираем семейство ПЛИС — Spartan-3, тип кристалла — xc3s200, тип корпуса — FT256, класс быстродействия — 4 (рис. 5). Именно такой кристалл установлен на отладочной плате из инструментального комплекта Xilinx Spartan-3 Starter Kit [12].
:Гш щГ* ■ Цч—ч
^TL. ■ I
г i4 ill _* i“
-.НА
_________________ I *— J "1 I
Рис. 5. Диалоговая панель выбора ПЛИС, средств
синтеза и моделирования проектируемого контроллера
В качестве средств синтеза и моделирования разрабатываемого контроллера выбираем встроенные инструменты синтеза и моделирования САПР серии Xilinx ISE — Xilinx Synthesis Technology (XST) и ISE Simulator соответственно. Для формирования моделей проектируемой системы будем использовать язык VHDL. После этого, воспользовавшись кнопкой Далее в панели выбора ПЛИС, средств синтеза и моделирования проектируемого контроллера (рис. 5), переключаемся на диалоговую панель создания нового исходного модуля проекта, вид которой показан на рис. 6.
С помощью этой панели создадим модуль исходного описания проектируемой микропроцессорной системы верхнего уровня иерархии, нажав кнопку New Source. В появившейся на экране диалоговой панели уста-
J:
3
____________________ I I I
Рис. 4. Вид стартовой диалоговой панели «мастера» New Project Wizard при создании проекта контроллера в САПР серии Xilinx ISE
гг“-1 г 1^
________________ 1_—:~1 *—> I I
Рис. 6. Диалоговая панель создания нового исходного модуля проекта
новки параметров создаваемого исходного модуля в качестве типа модуля выбираем VHDL Module. В поле редактирования названия формируемого модуля File Name указываем имя, совпадающее с названием проекта, — sampled_data_controller.
После нажатия кнопки Далее в этой диалоговой панели (рис. 7) открывается панель определения исходных данных для создания шаблона VHDL-описания. В этой панели оставим имя описываемого объекта Entity Name, предлагаемое по умолчанию, — sampled_data_controller, а имя архи-
^ й]
I I Ни ■ i I Сщш I I
Рис.7. Вид диалоговой панели параметров для создаваемого исходного модуля описания контроллера верхнего уровня иерархии
" Г Ч" ш
Рэт | 1*4 мни І ич | *<■ .
НЦИМ Г 1 »
т • *
.mijm* -м Т V
5S 2 Н
» 1
і«« *
.і г
* т
і
t« f 1« 1 31 | п.*-.
Рис. 8. Диалоговая панель исходных данных для создания шаблона VHDL-описания верхнего уровня иерархии проекта контроллера
тектурного тела Architecture Name изменим на structural, указывая на то, что оно содержит структурное описание объекта. Затем поочередно внесем в таблицу описания портов названия, тип и разрядность интерфейсных портов объекта sampled_data_controller, как показано на рис. 8.
Ввод исходных данных, необходимых для автоматического создания основы VHDL-описания верхнего уровня иерархии проекта контроллера, завершается нажатием кнопки Далее, после чего на экране отображается информационная панель, в которой представлены установленные значения параметров формируемого модуля (рис. 9).
■,штщг С‘*1ИИ ■#>—
■ь— I- w I 31--.1
Рис. 9. Информационная панель «мастера» подготовки шаблона VHDL-описания, отображающая параметры создаваемого модуля верхнего уровня иерархии для проекта контроллера
Подтверждаем выбранные значения нажатием кнопки Готово (Finish) в нижней части информационной панели. После этого на экран повторно выводится диалоговая панель создания нового исходного модуля проекта, в которой представлено название сформированного файла и его тип (рис. 10).
Нажав кнопку Далее, расположенную в этой панели, переходим к диалоговой панели включения существующих модулей в состав проекта. Воспользовавшись кноп-
Рис. 10. Вид диалоговой панели создания нового исходного модуля после формирования VHDL-описания верхнего уровня иерархии для проекта контроллера
кой Add Source и стандартной панелью открытия файла, поочередно добавляем в состав проекта контроллера модули исходного описания компонентов ядра семейства PicoBlaze [1, 2, 4-6] embedded_kcpsm3.vhd и kcpsm3.vhd, а также файл VHDL-описания содержимого программной памяти prog_rom.vhd (рис. 11).
Процесс формирования таблицы модулей, добавляемых в состав проекта, завершаем нажатием кнопки Далее, после чего на экран выводится информационная панель, в которой отображаются установленные значения основных параметров создаваемого проекта контроллера (рис. 12).
Нажатием кнопки Готово (Finish) в нижней части информационной панели (рис. 12) подтверждаем установленные значения основных параметров создаваемого проекта контроллера.
и
Рис. 11. Вид диалоговой панели включения существующих модулей исходного описания в состав создаваемого проекта контроллера
■ ■ ■ і ■ - - ■
Рис. 12. Информационная панель «мастера» формирования нового проекта контроллера
После этого в рабочей области Навигатора проекта автоматически открывается сформированный проект sampled_data_controller (рис. 13). При этом в области расположения
Рис. 13. Вид основного окна Навигатора проекта после создания нового проекта контроллера
рабочих окон открыто две страницы. Первая содержит подробную информацию о новом проекте Design Summary. На второй странице представлен текст шаблона VHDL-описания верхнего уровня иерархии для проекта контроллера sampled_data_controller.vhd, который был автоматически сформирован «мастером» и должен быть дополнен вручную.
Прежде чем вносить дополнения в представленный текст шаблона, создадим модули исходного описания входных и выходных параллельных портов контроллера. Для этого воспользуемся кнопкой на оперативной панели или выберем команду New Source из раздела Project основного меню Навигатора проекта. В появившейся диалоговой панели параметров нового исходного модуля (рис. 7) выберем тип создаваемого файла — VHDL Module. В поле редактирования названия формируемого модуля File Name указываем идентификатор in_port8x2 для создания шаблона VHDL-описания входных портов. Затем, нажав кнопку Далее, переходим к диалоговой панели ввода исходных данных, в которую заносим информацию об интерфейсе описываемого объекта, как показано на рис. 14. Имя архитектурного тела Architecture Name изменим на structur.
Рис. 15. Информационная панель «мастера» подготовки VHDL-шаблона, отображающая параметры создаваемого модуля описания входных портов контроллера
- Target Device:
- Tool versions:
- Description:
- Dependencies:
- Revision:
- Revision 0.01 — File Created
- Additional Comments:
Рис. 16. Рабочее окно HDL-редактора, содержащее автоматически сформированный шаблон УИОЬ-описания входных портов контроллера
Закончив ввод исходных данных и воспользовавшись кнопкой Далее, проверяем установленные значения параметров в открывшейся информационной панели «мастера» подготовки VHDL-описания (рис. 15).
Убедившись в отсутствии ошибок, нажатием кнопки Готово (Finish) в информационной панели завершаем процесс создания шаблона исходного модуля VHDL-описания входных портов для разрабатываемого контроллера. После этого название созданного файла in_port8x2.vhd отображается в окне исходных модулей Навигатора проекта. Одновременно автоматически открывается новое рабочее окно HDL-редактора, в котором отображается сформированный шаблон VHDL-описания входных портов контроллера. Вид этого окна приведен на рис. 16.
В этом шаблоне прежде всего убираем символы комментариев в строках, содержащих директивы включения библиотеки UNISIM. Затем в описание интерфейса объекта in_port8x2 добавляем оператор generic, определяющий разрядность входных портов. Далее между строкой с названием архитектурного тела architecture structur of in_port8x2 is и ключевым словом begin включаем выражения декларации внутренних сигналов. Сразу после ключевого слова begin добавляем выражения структурного описания объекта in_port8x2. В результате выполненных операций редактирования VHDL-описание входных портов должно выглядеть следующим образом.
-- Company:
-- Engineer:
-- Create Date: 18:40:18 06/20/06 -- Design Name:
-- Module Name: in_port8x2 — structur -- Project Name:
-- Используемые библиотеки library IEEE;
use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;
library UNISIM;
use UNISIM.VComponents.all;
entity in_port8x2 is
generic (N: natural :=8); Port ( port_idn : in std_logic; write_en in_date1 in_date2 out_date
in std_logic;
in std_logic_vector(7 downto 0); in std_logic_vector(7 downto 0); out std_logic_vector(7 downto 0);
clk : in std_logic); end in_port8x2;
-- Структурное описание объекта in_port8x2 architecture structur of in_port8x2 is
-- Внутренние сигналы
signal out_date1 signal out_date2 signal out_dateS
begin
std_logic_vector(7 downto 0) std_logic_vector(7 downto 0) std_logic_vector(7 downto 0)
-- Описание схемы соединения компонентов gen_port: for i in 1 to N generate
port_inn: fdce port map(
q => out_date1(i-1), c => clk, ce => write_en, clr => '0', d => in_date1(i-1)
port_inm: fdce port map(
q => out_date2(i-1), c => clk, ce => write_en, clr => '0', d => in_date2(i-1)
MUXF5_n : MUXF5 port map (
O => out_dateS(i-1),
10 => out_date1(i-1),
11 => out_date2(i-1), S => port_idn
port_in: fdce
port map(
q => out_date(i-1), c => clk, ce => write_en, clr => '0', d => out_dateS(i-1)
);
end generate gen_port; end structur;
Закончив редактирование файла in_port8x2.vhd, сохраняем его на диске. После этого повторим рассмотренную выше последовательность операций формирования нового исходного модуля для создания VHDL-описания выходного порта out_port8.vhd.
Рис. 17. Вид диалоговой панели исходных данных для создания шаблона VHDL-описания выходного порта проектируемого контроллера
При этом диалоговая панель исходных данных для создания шаблона VHDL-описания выходного порта должна выглядеть так, как показано на рис. 17.
На основе указанных исходных данных формируется шаблон VHDL-описания выходного порта контроллера out_port8, который автоматически открывается в окне встроенного HDL-редактора Навигатора проекта после нажатия кнопки Готово (Finish) в соответствующей информационной панели. Вид окна редактирования, содержащего автоматически сформированный шаблон VHDL-описания выходного порта контроллера, представлен на рис. 18.
Рис. 18. Рабочее окно HDL-редактора, содержащее автоматически сформированный шаблон VHDL-описания выходного порта разрабатываемого контроллера
В текст шаблона описания объекта out_port8 вносим те же изменения и дополнения, что и при создании VHDL-описания входного порта in_port8x2, после чего сохраняем его на диске в файле out_port8.vhd. В окончательном виде содержимое этого файла должно выглядеть следующим образом.
-- Company:
-- Engineer:
-- Create Date: 19:33:05 06/20/06 -- Design Name:
-- Module Name: out_port8 — structur -- Project Name:
-- Target Device:
-- Tool versions:
-- Description:
-- Dependencies:
-- Revision:
-- Revision 0.01 — File Created -- Additional Comments:
-- Используемые библиотеки library IEEE;
use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;
library UNISIM;
use UNISIM.VComponents.all;
entity out_port8 is generic (N: natural :=8);
Port ( port_idn : in std_logic;
write_en : in std_logic;
in_date : in std_logic_vector(7 downto 0);
out_date : out std_logic_vector(7 downto 0);
clk : in std_logic);
end out_port8;
-- Структурное описание объекта out_port8 architecture structur of out_port8 is
-- Внутренние сигналы signal write_enable : std_logic;
begin
-- Описание схемы
write_enable <= port_idn and write_en; gen_port: for i in 1 to N generate
port_outn: fdce port map(
q => out_date(i-1), c => clk,
ce => write_enable, clr => '0', d => in_date(i-1)
);
end generate gen_port;
end structur;
U * * * !r*
N Jlfci M r HUi
M м. »fl|
і® im иттШ' muí1
ir —- РГП *Г» ,—ЧЇІ, ЧІІвРІ» kl I
Рис. 19. Рабочее окно HDL-редактора, содержащее автоматически сформированный шаблон VHDL-описания модуля верхнего уровня иерархии проекта
После создания описаний входных и выходных портов приступаем к редактированию шаблона VHDL-описания модуля верхнего уровня иерархии проекта. Для этого вернемся к рабочему окну HDL-редактора с заголовком sampled_data_controller.vhd (рис. 19).
В текст этого шаблона между строкой с названием архитектурного тела architecture Structural of sampled_data_controller is и ключевым словом begin добавим выражения декларации используемых компонентов микропроцессорного ядра PicoBlaze embedded_kcpsm3 и портов ввода/вывода in_port8x2, out_port8. Между ключевыми словами begin и end Structural помещаем VHDL-код структурного описания контроллера. Закончив редактирование модуля исходного описания верхнего уровня иерархии проекта, сохраняем его в виде файла sampled_data_controller.vhd, содержимое которого должно выглядеть следующим образом:
-- Company:
-- Engineer:
-- Create Date: 22:28:40 06/20/06 -- Design Name:
-- Module Name: sampled_data_controller — Structural -- Project Name:
-- Target Device:
-- Tool versions:
-- Description:
-- Dependencies:
-- Revision:
-- Revision 0.01 — File Created -- Additional Comments:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;
--- Uncomment the following library declaration if instantiating
--- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;
entity sampled_data_controller is Port (
in_port1 : in std_logic_vector(7 downto O); in_port2 : in std_logic_vector(7 downto O); out_port1 : out std_logic_vector(7 downto O); out_port2 : out std_logic_vector(7 downto O); out_port3 : out std_logic_vector(7 downto O); out_port4 : out std_logic_vector(7 downto O); interrupt : in std_logic; interrupt_ack : out std_logic; reset : in std_logic; clk : in std_logic );
end sampled_data_controller; architecture Structural of sampled_data_controller is
-- declaration of embedded_kcpsm3
component embedded_kcpsm3 Port (
port_id : out std_logic_vector(7 downto O); write_strobe : out std_logic; read_strobe : out std_logic; out_port : out std_logic_vector(7 downto O); in_port : in std_logic_vector(7 downto O); interrupt : in std_logic; interrupt_ack : out std_logic; reset : in std_logic; clk : in std_logic );
end component;
component in_port8x2 Port (
port_idn : in std_logic; write_en : in std_logic; in_date1 : in stdjogi^vector^ downto 0); in_date2 : in std_logic_vector(7 downto 0); out_date : out stdjogi^vector^ downto 0); clk : in std_logic );
end component;
-- declaration of out_port8
component out_port8 Port (
port_idn : in std_logic; write_en : in std_logic; in_date : in stdjogi^vector^ downto 0); out_date : out stdjogi^vector^ downto 0); clk : in std_logic );
end component;
signal input_dat : std_logic_vector(7 downto 0); signal out_dat : std_logic_vector(7 downto 0); signal port_addr : stdjogi^vector^ downto 0); signal write_str : std_logic; signal read_str : std_logic;
begin
processor: embedded_kcpsm3 port map(
port_id => port_addr, write_strobe => write_str, out_port => out_dat, read_strobe => read_str, in_port => input_dat, interrupt => interrupt, interrupt_ack => interrupt_ack, reset => reset, clk => clk );
in_prt12: in_port8x2 port map (
port_idn => port_addr(0), write_en => '1', in_date1 => in_port1, in_date2 => in_port2, out_date => input_dat, clk => clk );
out_prt1: out_port8 port map(
port_idn => port_addr(0), write_en => write_str, in_date => out_dat, out_date => out_port1, clk => clk );
out_prt2: out_port8 port map(
port_idn => port_addr(1), write_en => write_str, in_date => out_dat, out_date => out_port2, clk => clk );
out_prt3: out_port8 port map(
port_idn => port_addr(2), write_en => write_str, in_date => out_dat, out_date => out_port3, clk => clk );
out_prt4: out_port8 port map(
port_idn => port_addr(3), write_en => write_str, in_date => out_dat, out_date => out_port4, clk => clk );
end Structural;
Окончание следует
1. Зотов В. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС фирмы Xilinx. М.: Горячая линия — Телеком 2006.
2. Зотов В. PicoBlaze — семейство восьмиразрядных микропроцессорных ядер, реализуемых на основе ПЛИС фирмы Xilinx // Компоненты и технологии. 2003. № 4.
3. Зотов В. Система команд микропроцессорного ядра PicoBlaze, реализуемого на основе ПЛИС семейств Spartan-II, Spartan-IIE, Virtex, Virtex-E // Компоненты и технологии. 2003. № 5.
4. Зотов В. Особенности микропроцессорного ядра PicoBlaze, предназначенного для применения в проектах, реализуемых на основе ПЛИС семейства Virtex-II // Компоненты и технологии. 2003. № 6.
5. Зотов В. Особенности микропроцессорного ядра PicoBlaze, предназначенного для применения в проектах, реализуемых на основе ПЛИС семейства CoolRunner-II // Компоненты и технологии. 2003. № 7.
6. Зотов В. Особенности микропроцессорного ядра PicoBlaze, предназначенного для применения в проектах, реализуемых на основе ПЛИС семейств Spartan-3, Virtex-II и Virtex-IIPRO // Компоненты и технологии. 2005. № 5-6.
7. Зотов В. Разработка программ на языке ассемблера для семейства микропроцессорных ядер PicoBlaze // Компоненты и технологии. 2003. № 8.
8. Зотов В. Программирование конфигурационной памяти встраиваемой системы, реализуемой на основе микропроцессорного ядра семейства PicoBlaze в ПЛИС фирмы Xilinx // Компоненты и технологии. 2006. № 2.
9. Зотов В. pBlaze IDE — интегрированная среда разработки и отладки программного обеспечения встраиваемых восьмиразрядных микропроцессорных систем, реализуемых на основе ПЛИС фирмы Xilinx // Компоненты и технологии. 2006. № 3-4.
10. Зотов В. Директивы и сообщения об ошибках интегрированной среды разработки и отладки программного обеспечения встраиваемых восьмиразрядных микропроцессорных систем, реализуемых на основе ПЛИС фирмы Xilinx, pBlaze IDE // Компоненты и технологии. 2006. № 5.
11. Зотов В. Разработка и отладка программного обеспечения встраиваемых восьмиразрядных микропроцессорных систем, реализуемых на основе ПЛИС фирмы Xilinx, в среде pBlaze IDE // Компоненты и технологии. 2006. № 6.
12. Зотов В. Инструментальный комплект Spartan-3 Starter Kit для практического освоения методов проектирования встраиваемых микропроцессорных систем на основе ПЛИС семейств FPGA фирмы Xilinx // Компоненты и технологии. 2005. № 7.
13. Зотов В. Создание проекта встраиваемой системы на основе микропроцессорного ядра семейства PicoBlaze // Компоненты и технологии.
2005. № 8-9.
14. Зотов В. Реализация проекта встраиваемой системы на основе микропроцессорного ядра семейства PicoBlaze // Компоненты и технологии.
2006. № 1.