Чтобы выполнить легкую передачу данных или к регистрам управления доступом, используйте ведомые интерфейсы AXI4. Ведомые интерфейсы AXI4 включают AXI4 и AXI4-облегченные интерфейсы. С программным обеспечением HDL Coder™ вы не должны реализовывать AXI4 или AXI4-облегченный протокол в вашей модели. Программное обеспечение генерирует AXI4 или AXI4-облегченные интерфейсы в ядре IP HDL.
Когда вы моделируете свой проект, задаете порты данных, которые вы хотите сопоставить с ведомыми интерфейсами AXI4. HDL Coder затем сопоставляет порты данных с ведомым устройством AXI4 с отображенной памятью, соединяет интерфейсом и выделяет смещения адреса для портов.
Когда вы сопоставляете свои порты DUT с AXI4 или AXI4-облегченными интерфейсами:
Можно сопоставить все скалярные или векторные порты в проекте или к AXI4 или к AXI4-облегченным интерфейсам. Вы не можете сопоставить некоторые порты DUT с интерфейсами AXI4 и другие порты DUT к AXI4-облегченным интерфейсам для того же проекта.
Можно использовать односкоростной проект или проект с несколькими частотами дискретизации без каких-либо ограничений при отображении портов DUT с ведомыми интерфейсами AXI4 при помощи Free Running
режим синхронизации для Processor/FPGA Synchronization.
Можно использовать Coprocessing-Blocking
режим для Processor/FPGA Synchronization при отображении с AXI4 или AXI-облегченными интерфейсами. Другие интерфейсные типы, такие как AXI4-поток и Ведущее устройство AXI4 не поддерживают этот режим. См. также Синхронизация FPGA и Процессор.
Когда вы используете скалярные типы данных в интерфейсных портах DUT, можно сопоставить интерфейсные порты непосредственно с AXI4 или AXI4-облегченными интерфейсами. Генератор кода присваивает уникальный адрес каждому порту данных, который вы хотите сопоставить с интерфейсом AXI4.
Для примера, который показывает, как сопоставить скалярные порты с AXI4-облегченными интерфейсами, открыть модель hdlcoder_led_blinking
.
open_system('hdlcoder_led_blinking')
В этой модели, подсистема led_counter
аппаратная подсистема. Это моделирует счетчик, который мигает светодиодами на плате FPGA. Два входных порта, Blink_frequency
и Blink_direction
, порты управления, которые определяют частоту мигания LED и направление. Все блоки за пределами подсистемы led_counter
для реализации программного обеспечения.
В Simulink® можно использовать блок Slider Gain или блок Manual Switch, чтобы настроить входные значения аппаратной подсистемы. Во встроенном программном обеспечении это означает, что процессор ARM управляет сгенерированным ядром IP путем записи в интерфейс AXI доступных регистров. Выходной порт аппаратной подсистемы связывает с оборудованием LED. Можно использовать выходной порт Read_back
считывать данные назад в процессор.
Когда вы запускаете IP Core Generation
рабочий процесс, в задаче Set Target Interface, вы видите что порты Blink_frequency
, Blink_direction
, и Read_back
сопоставьте с AXI4-облегченными интерфейсами.
Чтобы узнать больше об этом примере, см.:
Когда вы используете векторные типы данных в интерфейсных портах DUT, можно сопоставить интерфейсные порты непосредственно с AXI4 или AXI4-облегченными интерфейсами. Генератор кода присваивает уникальный адрес для каждого порта данных, который вы хотите сопоставить с интерфейсом AXI4.
Когда вы сопоставляете векторные порты, HDL Coder использует дополнительные регистры строба для каждого порта, чтобы обеспечить синхронизацию с логикой основного алгоритма IP. Для входных портов регистры строба управляют разрешать сигналами для набора теневых регистров, который заставляет логику основного алгоритма IP видеть обновленные векторные элементы одновременно. Для выходных портов регистры строба убеждаются, что векторные данные, которые будут считаны, собраны синхронно.
Для примера, который показывает, как сопоставить векторные порты с AXI4-облегченными интерфейсами, открыть модель hdlcoder_led_vector
.
open_system('hdlcoder_led_vector')
В этой модели, подсистема DUT
реализует LED мигающий алгоритм и имеет векторные выходные порты. Когда вы запускаете IP Core Generation
рабочий процесс, в задаче Set Target Interface, вы видите, что входные порты и выходные порты сопоставляют с AXI4-облегченными интерфейсами.
Чтобы узнать больше, смотрите Рабочий процесс Генерации Ядра IP с процессором MicroBlaze: Xilinx Kintex-7 KC705.
Когда вы запускаете IP Core Generation
рабочий процесс или Simuilnk Real-Time FPGA I/O
рабочий процесс, можно задать начальное значение для ведомых регистров AXI4. Можно задать начальное значение при отображении скалярных и векторных портов ввода и вывода с этими целевыми интерфейсами.
AXI4
AXI4-облегченный
PCIe
По умолчанию начальное значение является нулем. Задавать ненулевое значение:
В таблице интерфейса целевой платформы, когда вы сопоставляете порт DUT с ведомым интерфейсом AXI4, кнопка Options появляется в столбце Interface Options.
Нажмите кнопку Options и затем задайте RegisterInitialValue.
Заданное значение сохранено на Inport DUT и блоках Outport как свойство IOInterfaceOptions блока HDL во вкладке Target Specification. Например, если вы сопоставляете входной порт DUT с интерфейсом AXI4-Lite, устанавливаете RegisterInitialValue на 5
, и затем запустите эту задачу, свойство IOInterfaceOptions того входного порта сохранено со значением {'RegisterInitialValue','5'}
.
Просмотреть IOInterfaceOptions
значение, если полным путем к вашему порту DUT является hdlcoder_led_blinking/led_counter/LED
, Введите:
hdlget_param('hdlcoder_led_blinking/led_counter/LED',... 'IOInterfaceOptions')
В этом примере показано, как вы задаете начальное значение для векторных портов.
hdlset_param('sfir_fixed_stream/DUT/In2', ... 'IOInterfaceOptions', {'RegisterInitialValue','[3.5 3.5 3.5]'});
Когда вы запускаете IP Core Generation
рабочий процесс, можно считать назад значение, которое записано в ведомые регистры AXI4 при помощи ведомого интерфейса AXI4. Например, можно считать назад значения, которые записаны в ведомые регистры AXI4 при помощи devmem
команда в консоли Linux процессора ARM. Если вам установили HDL Verifier™, можно использовать MATLAB в качестве Ведущего IP AXI, чтобы считать назад значения.
Использовать эту возможность, в задаче Generate RTL Code and IP Core IP Core Generation
рабочий процесс, установите флажок Enable read back on AXI4 slave write registers, и затем запустите эту задачу.
Когда вы запускаете эту задачу, HDL Coder сохраняет чтение назад настройка, которую вы включили на модели. В HDL Block Properties Подсистемы DUT, на разделе IP Core Parameter вкладки Target Specification, вы видите параметр набор AXI4RegisterReadback к on
. Если вы экспортируете HDL Workflow Advisor, запущенный в скрипт, вы видите, что эта установка экономила на модели при помощи hdlset_param
.
hdlset_param('hdlcoder_led_vector/DUT', 'AXI4RegisterReadback', 'on');
Эти примеры показывают, как можно считать назад значения при помощи devmem
команда в консоли Linux с программой, такой как PuTTy™.
Чтобы считать назад значения при отображении скалярных портов с интерфейсами AXI4, вы сначала пишете значения в регистры AXI4, и затем читаете назад значения. Вы видите адрес памяти регистров AXI4 в отчете Генерации Ядра IP.
Чтобы считать назад значения при отображении векторных портов с интерфейсами AXI4, вы сначала пишете в регистры AXI4, затем пишете адрес регистра строба с 0x1
, и затем считайте назад значения. Вы видите адрес памяти регистров AXI4 и регистра строба в отчете Генерации Ядра IP.
Когда ваша модель содержит несколько выходных регистров, и вы хотите считать назад данные из нескольких ведомых регистров AXI4, чтение назад логика становится длинной цепью мультиплексора, которая может уменьшить частоту синтеза. Если вы выбираете Enable readback на ведомых регистрах записи AXI4, начинающихся Сгенерировать Код RTL и задача Ядра IP, HDL Coder добавляет мультиплексор для каждого регистра AXI4 в логике Дешифратора адреса. Как количество ведомых увеличений регистров AXI4, цепь мультиплексора становится более длинной, который далее уменьшает частоту синтеза.
Можно оптимизировать readback логику и достигнуть целевой частоты, которую вы хотите. Когда вы запускаете IP Core Generation
рабочий процесс, в задаче Generate RTL Code and IP Core, вы видите установку AX4 slave port to pipeline register ratio. Значением по умолчанию этой установки является auto
. Эта установка указывает, для скольких ведомых регистров AXI4 вставляется конвейерный регистр. Например, AX4 slave port to pipeline register ratio 20
средние значения, что один конвейерный регистр вставляется для каждого 20
Ведомые регистры AXI. auto
установка средних значений, что генератор кода вставляет определенное число конвейеров для ведомых портов AXI4 в зависимости от количества портов и инструмента синтеза, который вы задаете. Можно отключить эту установку или выбрать номер между 5
и 50
для этого отношения.
Когда вы запускаете эту задачу, HDL Coder сохраняет значение, которое вы задали для установки на модели. В HDL Block Properties Подсистемы DUT, на разделе IP Core Parameter вкладки Target Specification, вы видите параметр набор AX4SlavePortToPipelineRegisterRatio к значению, которое вы задали. Если вы экспортируете HDL Workflow Advisor, запущенный в скрипт, вы видите, что эта установка экономила на модели при помощи hdlset_param
.
hdlset_param('hdlcoder_led_vector/DUT', ... 'AXI4SlavePortToPipelineRegisterRatio', '20');