Продолжение. Начало в КиТ№ 7'2006
Валерий ЗОТОВ
Пример сквозного проектирования встраиваемой восьмиразрядной микропроцессорной системы
на базе ядра семейства 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.