Этот пример показывает, как использовать Рабочий процесс Генерации Ядра IP HDL Coder™, чтобы разработать исходный дизайн для частей Intel® без встроенного существующего процессора ARM®, но которые все еще используют сгенерированный интерфейс AXI HDL Coder™, чтобы управлять DUT. Этот пример использует MATLAB в качестве Ведущего IP AXI от HDL Verifier™ или Intel Qsys™, JTAG к IP Авэлон Мэстер-Бридж, чтобы получить доступ к HDL Coder™ сгенерировал регистры. MATLAB как Ведущее устройство AXI обеспечивает доступ к регистрам FPGA из MATLAB непосредственно. Когда вы используете Intel Qsys™ JTAG для IP Авэлон Мэстер-Бридж, можно получить доступ к использованию регистров FPGA команды Tcl в Системной Консоли Qsys. Проект FPGA реализован на Стрелке ДЕКА МАКС 10 оценочных комплектов FPGA.
Intel Куарт Прайм, с поддерживаемой версией, перечисленной в документации HDL Coder
Стрелка ДЕКА МАКС 10 оценочных комплектов FPGA
Пакет поддержки HDL Coder™ для Советов FPGA Intel
Пакет поддержки HDL Verifier™ для Советов FPGA Intel (Необязательно)
Пакет Поддержки HDL Coder™ для Устройств Intel SoC (Дополнительный: интегрировать ядро IP в ваш собственный исходный проект.)
Существует много проектов, которые извлекут выгоду из использования Рабочего процесса Генерации Ядра IP HDL Coder™, не используя или встроенный процессор ARM® или Пакет Поддержки Embedded Coder™, но которые все еще усиливают сгенерированные регистры AXI4 HDL Coder™. Эти проекты включают:
HDL Verifier™ MATLAB как ведущее устройство AXI + ядро IP HDL Coder™
Ядро Nios® II + HDL Coder™ IP
Ядро PCIe® Endpoint + HDL Coder™ IP
Ведущее устройство JTAG + ядро IP HDL Coder™
Существует два исходных проекта, включенные в этот пример. Первый исходный проект, "Altera JTAG Ведущему устройству AXI", использует Куарт ИП для JTAG Ведущему устройству AXI и поэтому требует, чтобы использование консоли Quartus Tcl выпустило чтения и записи. Второй исходный проект, "MATLAB как Ведущее устройство AXI", использует MathWorks IP и интерфейс командной строки MATLAB для издания чтений и записей. Обратите внимание на то, что версия MathWorks требует, чтобы лицензия HDL Verifier использовала.
Эти два исходных проекта почти идентичны, за исключением Основного IP JTAG, показанного в блок-схеме.
Исходный проект, "Altera JTAG Ведущему устройству AXI", использует IP Qsys™ для JTAG Ведущему устройству AXI и поэтому требует, чтобы использование Altera® System Console выпустило чтения и записи:
plugin_rd.m для этого исходного проекта показывают ниже:
function hRD = plugin_rd() % Reference design definition
% Copyright 2016-2018 The MathWorks, Inc.
% Construct reference design object hRD = hdlcoder.ReferenceDesign('SynthesisTool', 'Altera QUARTUS II');
hRD.ReferenceDesignName = 'Altera JTAG to AXI Master'; hRD.BoardName = 'Arrow DECA MAX 10 FPGA evaluation kit';
% Tool information hRD.SupportedToolVersion = {'15.1','16.0','16.1','17.0','17.1'};
%% Add custom design files % add custom Qsys design hRD.addCustomQsysDesign('CustomQsysPrjFile', 'system_soc.qsys'); hRD.CustomConstraints = {'system_soc.sdc','system_setup.tcl'};
%% Add interfaces % add clock interface hRD.addClockInterface( ... 'ClockConnection', 'altpll_0.c0', ... 'ResetConnection', 'clk_0.clk_reset',... 'DefaultFrequencyMHz', 100);
% add AXI4 slave interfaces hRD.addAXI4SlaveInterface( ... 'InterfaceConnection', 'master_0.master', ... 'BaseAddress', '0x0000_0000',... 'InterfaceType', 'AXI4',... % [ 'AXI4-Lite'| 'AXI4' ] 'InterfaceID', 'JTAG AXI4 Interface'); % string name in interface table
% 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 HDL, которое мигает светодиодами на плате DECA. Следующие инструкции применяются к обоим исходным проектам. Файлы, используемые на следующей демонстрации, расположены в:
matlab/toolbox/hdlcoder/hdlcoderdemos/customboards/DECA
1. Добавьте JTAG в Основные файлы исходного проекта AXI к пути MATLAB:
>> addpath(fullfile(matlabroot,'toolbox','hdlcoder','hdlcoderdemos','customboards','DECA'));
2. Создайте путь к инструменту Intel Quartus™. Замените путь к установке Quartus™ на свою локальную установку
>> hdlsetuptoolpath('ToolName', 'Altera QUARTUS II', 'ToolPath', 'C:\intelFPGA\17.1\quartus\bin64\quartus.exe');
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 AXI4". Таблица показывает, шестнадцатеричное число сместило вас, может использовать, чтобы получить доступ к регистру.
7. Запустите остающиеся шаги в рабочем процессе, чтобы сгенерировать поток битов и программировать целевое устройство.
Заметьте, что различающийся Intel находящийся в SoC исходный проект, существует не, 'Генерируют задачу' Модели Программного интерфейса. В исходном проекте "plugin_rd.m", можно отключить эту задачу с помощью следующей команды:
% Disable 'Generate Software Interface Model' task hRD.EmbeddedCoderSupportPackage = hdlcoder.EmbeddedCoderSupportPackage.None; %None
Базовый адрес для Ядра IP HDL Coder™ задан в исходном проекте plugin_rd.m со следующей командой:
% add AXI4 slave interfaces hRD.addAXI4SlaveInterface( ... 'InterfaceConnection', 'master_0.master', ... 'BaseAddress', '0x0000_0000',... 'InterfaceType', 'AXI4',... 'InterfaceID', 'JTAG AXI4 Interface');
Для этого проекта базовым адресом является 0x0000_0000
. Смещения могут быть найдены в таблице IP Core Report Register Address Mapping:
Прежде чем мы откроем Системную Консоль, позволяет взгляду на основные команды, чтобы выпустить чтения и записи. Существует много разновидностей чтения Ксиса и методов записи, но мы будем использовать следующее, поскольку сгенерированные регистры Ядра IP всего HDL Coder™ - в настоящее время 32 бита:
% master_write_32 <service-path> <start-address> <list-of-32-bit-values> % master_read_32 <service-path> <start-address> <size-in-multiples-of-32-bits>
Например, примите, что мы хотели бы записать шестнадцатеричное значение на 32 бита '0x12345678' в регистр Ядра IP, заданный смещением '0x100' использование ранее заданного сервисного пути, сохраненного в переменной $jtag
:
% master_write_32 $jtag 0x100 0x12345678
Для получения дополнительной информации об этих командах можно просмотреть справку в любое время через следующие команды Tcl:
% help master_write_32 % help master_read_32
или см. документацию Intel ug_system_console.pdf
для получения дополнительной информации.
Прежде чем можно будет сгенерировать чтения и записи, необходимо сначала запустить Системную Консоль и открыть связь с Ведущим устройством JTAG, которое выпустит чтения регистра и записи. Обратитесь снова к системной схеме ниже:
Чтобы открыть связь с Ведущим устройством JTAG, сначала установите переменную, которая хранит сервисный путь (в этом случае, существует только одно ведущее устройство):
% set jtag [lindex [get_service_paths master] 0]
Затем используйте переменную, чтобы открыть Ведущее устройство JTAG в привилегированном режиме.
% open_service master $jtag
Теперь запустите Altera® System Console и введите команды, чтобы открыть jtag ведущее устройство:
>> system('C:\intelFPGA\17.1\quartus\sopc_builder\bin\system-console&')
Когда вы будете сделаны с помощью Ведущего устройства JTAG, убедитесь, что закрыли связь с помощью следующей команды Tcl:
close_service master $jtag
Если пакет поддержки HDL Verifier для плат FPGA Intel установлен и исходный проект "MATLAB, когда Ведущий исходный проект" AXI выбран, то простой интерфейс командной строки MATLAB может быть использованием, чтобы получить доступ к ядру IP, сгенерированному HDL Coder.
Во-первых, создайте объект шаблона AXI:
>> h = aximaster('Altera')
Затем можно выпустить простое чтение и записать команды. Например, чтобы отключить DUT:
>> h.writememory('4', 0)
Чтобы повторно включить DUT, используйте следующую команду записи:
>> h.writememory('4', 1)
Считать текущее встречное значение:
>> h.readmemory('108', 1)
Наконец, вы сделаны с помощью Ведущего устройства JTAG. Удалите объект освободить ресурс JTAG. Если объект не будет удален, другие операции JTAG, такие как программирование FPGA перестанут работать.
>> delete(h)
Используя JTAG Ведущему устройству AXI простой способ взаимодействовать через интерфейс с регистрами ядра IP HDL Coder™ в системах, которые не имеют встроенного процессора ARM®, такого как MAX 10. Это может использоваться в качестве первого шага, чтобы отладить автономные ядра IP HDL Coder™, используемые до кодирующего руку программного обеспечения для мягких процессоров, таких как Nios® II, или как простой способ к настройкам параметров в рабочей системе.