Проект модели для ведомой интерфейсной генерации AXI4

Чтобы выполнить легкую передачу данных или к регистрам управления доступом, используйте ведомые интерфейсы 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 и Процессор.

Сопоставьте скалярные порты с ведомым интерфейсом AXI4

Когда вы используете скалярные типы данных в интерфейсных портах 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-облегченными интерфейсами.

Чтобы узнать больше об этом примере, см.:

Сопоставьте векторные порты с ведомым интерфейсом 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.

Считайте Обратное значение ведомых интерфейсов AXI4

Когда вы запускаете 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 Обратная логика

Когда ваша модель содержит несколько выходных регистров, и вы хотите считать назад данные из нескольких ведомых регистров 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');

Похожие темы