Рабочий процесс генерации ядра IP без встроенного процессора ARM: Xilinx Kintex-7 KC705

Этот пример показывает, как использовать Рабочий процесс Генерации Ядра IP HDL Coder™, чтобы разработать исходный дизайн для частей Xilinx® без встроенного существующего процессора ARM®, но которые все еще используют сгенерированный интерфейс AXI HDL Coder™, чтобы управлять DUT. Этот пример будет использовать MATLAB в качестве Ведущего IP AXI от HDL Verifier™ и Xilinx, Ведущее устройство JTAG, чтобы получить доступ к HDL Coder™ сгенерировало регистры DUT. Для MATLAB как Ведущее устройство AXI можно получить доступ к регистрам DUT из MATLAB непосредственно. Для Ведущего устройства JTAG Xilinx можно получить доступ к использованию регистров DUT Консоль Vivado Tcl путем записи команд Tcl. Проект FPGA реализован на плате Xilinx Kintex-7 KC705.

Требования

  • Комплект Проекта Xilinx Vivado, с поддерживаемой версией, перечисленной в документации HDL Coder

  • Макетная плата Xilinx Kintex-7 KC705

  • Пакет поддержки HDL Coder™ для Советов FPGA Xilinx

  • (Необязательно) HDL Verifier™ поддерживает пакет для Советов FPGA Xilinx

Макетная плата Xilinx Kintex-7 KC705

Исходные проекты в качестве примера

Существует много проектов, которые извлекут выгоду из использования Рабочего процесса Генерации Ядра IP HDL Coder™, не используя или встроенный процессор ARM® или Пакет Поддержки Embedded Coder™, но которые все еще усиливают сгенерированные AXI4-облегченные регистры HDL Coder. Эти проекты включают:

  1. HDL Verifier™ MATLAB как ведущее устройство AXI + ядро IP HDL Coder™

  2. MicroBlaze™ + ядро IP HDL Coder™

  3. Конечная точка PCIe + ядро IP HDL Coder™

  4. Xilinx ведущее устройство JTAG + ядро IP HDL Coder™

Существует два исходных проекта, включенные в этот пример. Первый исходный проект, "Xilinx JTAG Ведущему устройству AXI", использует Вивадо ИП для JTAG Ведущему устройству AXI и поэтому требует, чтобы использование консоли Vivado Tcl выпустило чтения и записи. Второй исходный проект, "MATLAB как Ведущее устройство AXI", использует MathWorks IP и интерфейс командной строки MATLAB для издания чтений и записей. Обратите внимание на то, что версия MathWorks требует, чтобы лицензия HDL Verifier использовала.

Эти два исходных проекта почти идентичны, за исключением Основного IP JTAG, используемого в блок-схеме, показанной ниже::

Исходный проект, "Xilinx JTAG Ведущему устройству AXI", использует IP Vivado™ для JTAG Ведущему устройству AXI и поэтому требует, чтобы использование консоли Vivado™ Tcl выпустило чтения и записи:

plugin_rd.m для этого исходного проекта показывают ниже:

function hRD = plugin_rd()
% Reference design definition
%   Copyright 2014-2018 The MathWorks, Inc.
% Construct reference design object
hRD = hdlcoder.ReferenceDesign('SynthesisTool', 'Xilinx Vivado');
hRD.ReferenceDesignName = 'Xilinx JTAG to AXI Master';
hRD.BoardName = 'Xilinx Kintex-7 KC705 development board';
% Tool information
hRD.SupportedToolVersion = {'2017.2','2017.4'};
%% Add custom design files
% add custom Vivado design
hRD.addCustomVivadoDesign( ...
 'CustomBlockDesignTcl', 'system_top.tcl',...
 'VivadoBoardPart',      'xilinx.com:kc705:part0:1.1');
%% Add interfaces
% add clock interface
hRD.addClockInterface( ...
    'ClockConnection',      'system_0/clk_out1', ...
    'ResetConnection',      'system_0/peripheral_aresetn',...
    'DefaultFrequencyMHz',  125,...
    'MinFrequencyMHz',      10,...
    'MaxFrequencyMHz',      250,...
    'ClockNumber',          1,...
    'ClockModuleInstance',  'system_0/clk_wiz_0');
% add AXI4 and AXI4-Lite slave interfaces
hRD.addAXI4SlaveInterface( ...
    'InterfaceConnection', 'system_0/M_AXI', ...
    'BaseAddress',         '0x44A00000',...
    'MasterAddressSpace',  'system_0/jtag_axi_0/Data',...
    'InterfaceType',       'AXI4');
% Specify Embedded Coder Support Package to use for Software Interface
hRD.EmbeddedCoderSupportPackage = hdlcoder.EmbeddedCoderSupportPackage.None;  % [ None | Zynq | AlteraSoC ]

Соответствующий plugin_rd.m файл для MATLAB как ведущий исходный проект AXI расположен в: plugin_rd.m.

Выполните рабочий процесс ядра IP

Используя вышеупомянутый исходный проект вы сгенерируете Ядро IP HDL, которое мигает светодиодами на плате KC705. Следующие инструкции в этом разделе применяются к обоим исходным проектам. Файлы, используемые на следующей демонстрации, расположены в:

  • matlab/toolbox/hdlcoder/hdlcoderdemos/customboards/KC705

1. Добавьте JTAG в Основные файлы исходного проекта AXI к пути MATLAB с помощью команды:

>> addpath(fullfile(matlabroot,'toolbox','hdlcoder','hdlcoderdemos','customboards','KC705'));

2. Создайте путь к инструменту Xilinx Vivado™ при помощи следующей команды:

>> hdlsetuptoolpath('ToolName', 'Xilinx Vivado', 'ToolPath', 'C:\Xilinx\Vivado\2017.4\bin\vivado.bat');

Используйте свой собственный путь к установке Xilinx Vivado™ при выполнении команды.

3. Откройте модель Simulink, которая реализует мигание LED с помощью команды:

open_system('hdlcoder_led_blinking')

4. Запустите HDL Workflow Advisor от подсистемы hdlcoder_led_blinking/led_counter путем щелчка правой кнопкой по подсистеме led_counter и выбора HDL Code> HDL Workflow Advisor.

5. Выберите один из исходных проектов от выпадающего на шаге 1.2

6. Присвойте порты регистра "Интерфейсу JTAG AXI". Они затем будут доступны при шестнадцатеричном смещении, показанном в таблице.

7. Запустите остающиеся шаги в рабочем процессе, чтобы сгенерировать поток битов и программировать целевое устройство.

Заметьте, что различающийся находящийся в Zynq исходный проект, существует не, 'Генерируют задачу' Модели Программного интерфейса. В исходном проекте "plugin_rd.m", можно отключить эту задачу с помощью следующей команды:

% Disable 'Generate Software Interface Model' task
hRD.EmbeddedCoderSupportPackage = hdlcoder.EmbeddedCoderSupportPackage.None;  %None

Определение адресов из отчета ядра IP

Базовый адрес для Ядра IP HDL Coder™ задан в исходном проекте plugin_rd.m со следующей командой:

% add AXI4 and AXI4-Lite slave interfaces
hRD.addAXI4SlaveInterface( ...
    'InterfaceConnection', 'system_0/M_AXI', ...
    'BaseAddress',         '0x44A00000',...
    'MasterAddressSpace',  'system_0/jtag_axi_0/Data',...
    'InterfaceType',       'AXI4');

Для этого проекта базовым адресом является 0x44A0_0000. Смещения могут быть найдены в таблице IP Core Report Register Address Mapping:

Vivado Tcl управляет для чтения AXI и записи

Прежде чем вы откроете консоль Vivado™, позволяет взгляду на основные команды, чтобы выпустить чтения и записи. Интерфейс Vivado™ AXI является двумя процессами шага. Во-первых, необходимо создать транзакцию AXI (или серия транзакции AXI), затем вы выполняете их на заданном Ведущем устройстве AXI:

  1. create_hw_axi_txn

  2. run_hw_axi

Например, примите, что требуется записать шестнадцатеричное значение на 32 бита '0x12345678' в регистр Ядра IP, заданный смещением '0x100', вы сначала создадите транзакцию:

Vivado% create_hw_axi_txn axi_write_0x100 [get_hw_axis hw_axi_1] -address 44a0_0100 -data 1234_5678 -type write

Для получения дополнительной информации об этих командах можно просмотреть справку в любое время через следующие команды Tcl:

Vivado% create_hw_axi_txn -help
Vivado% run_hw_axi -help

или см. документацию Vivado pg174-jtag-axi для получения дополнительной информации.

К консоли Vivado™ Tcl можно получить доступ в нижней части графический интерфейса пользователя Vivado™ или запустить непосредственно в одиноком режиме. Этот пример будет использовать одинокую консоль Tcl.

Следующие команды могут использоваться, чтобы открыть устройство JTAG и установить 'разрешение' и 'отключить' запись к DUT. Они могут быть введены непосредственно в консоль Vivado Tcl или сохраненные в файле Tcl и получили. Для простоты, копия следующие команды Tcl в файл "open_jtag.tcl":

  # Open connection to the JTAG Master
  open_hw
  connect_hw_server
  open_hw_target
  refresh_hw_device [lindex [get_hw_devices] 0]
  # Create some reads/writes
  create_hw_axi_txn wr_enable [get_hw_axis hw_axi_1] -address 44a0_0004 -data 0000_0001 -type write
  create_hw_axi_txn wr_disable [get_hw_axis hw_axi_1] -address 44a0_0004 -data 0000_0000 -type write

Теперь запустите консоль Vivado™ Tcl, получив файл, который вы только создали:

>> system('vivado -mode tcl -source open_jtag.tcl&')

По окончании с помощью Ведущего устройства JTAG, закрываете связь с помощью следующих команд Tcl:

  # Close and disconnect from the JTAG Master
  close_hw_target;
  disconnect_hw_server;

Интерфейс командной строки HDL Verifier

Если пакет поддержки HDL Verifier для плат FPGA Xilinx установлен и исходный проект "MATLAB, когда Ведущий исходный проект" AXI выбран, то простой интерфейс командной строки MATLAB может быть использованием, чтобы получить доступ к ядру IP, сгенерированному HDL Coder.

Во-первых, создайте объект шаблона AXI

  >> h = aximaster('Xilinx')

Затем можно выпустить простое чтение и записать команды. Например, чтобы отключить DUT

  >> h.writememory('44a00004', 0)

Чтобы повторно включить DUT, используйте следующую команду записи

  >> h.writememory('44a00004', 1)

Считать текущее встречное значение:

  >> h.readmemory('44a00108',1)

Наконец, удалите объект, когда сделано, чтобы освободить ресурс JTAG. Если объект не будет удален, другие операции JTAG, такие как программирование FPGA перестанут работать.

  >> delete(h)

Сводные данные

Используя JTAG Ведущему устройству AXI простой способ взаимодействовать через интерфейс с регистрами ядра IP HDL Coder™ в системах, которые не имеют встроенного процессора ARM®, такого как Kintex-7. Это может использоваться в качестве первого шага, чтобы отладить одинокие ядра IP HDL Coder™, используемые до программного обеспечения кодирования руки для мягких процессоров, таких как MicroBlaze™, или как простой способ к настройкам параметров в рабочей системе.