Моделируйте Проект для генерации AXI4 Master Interface

Для проектов, которые требуют доступа к большим наборам данных из внешней памяти, моделируйте ваш алгоритм с помощью упрощенного протокола AXI4 Master. Когда вы запускаете IP Core Generation рабочий процесс, HDL Coder™ генерирует IP-ядро с AXI4 интерфейсами Master. Интерфейс AXI4 Master может обмениваться данными между вашим проектом и IP-адресом внешнего контроллера памяти с помощью протокола AXI4 Master. Используйте интерфейс AXI4 Master, когда вы:

  • Проект предназначен для многокадровых приложений обработки видео. Можно хранить данные изображения во внешней памяти, например, DDR3 памяти на борту, а затем читать или записывать изображения в ваш проект пакетным способом для высокоскоростной обработки.

  • Алгоритм должен получить доступ к данным памяти в непотоковом произвольном шаблоне.

  • Ядро IP DUT должно управлять другими IP-адресами с AXI4 ведомым интерфейсом в системе. Эта возможность особенно полезна в автономных устройствах FPGA.

Упрощенный AXI4 Главный протокол - Запись в канал

Для сопоставления портов DUT с AXI4 интерфейсами Master используйте упрощенный протокол AXI4 Master. Вы не должны моделировать фактический протокол AXI4 Master, и вместо этого вы можете использовать упрощенный протокол. Когда вы запускаете IP Core Generation рабочий процесс, сгенерированный HDL-код содержит логику обертки, которая переводится между упрощенным протоколом и фактическим протоколом AXI4 Master. Упрощенный протокол требует, чтобы вы использовали меньше сигналов протокола, облегчает механизм квитирования между допустимыми и готовыми сигналами и поддерживает пакеты произвольных длин.

Используйте упрощенный протокол записи AXI4 Master для транзакции записи и упрощенный протокол чтения AXI4 Master для транзакции чтения. Этот рисунок показывает временную диаграмму для сигналов, которые вы моделируете во входном и выходном интерфейсах DUT для транзакции записи AXI4 Master.

DUT ждет wr_ready чтобы стать высоким, чтобы инициировать запрос на запись. Когда wr_ready становится высоким, DUT может отправить запрос на запись. Запрос на запись состоит из Data и Write Master to Slave bus сигналы. Эта шина состоит из wr_len, wr_addr, и wr_valid. wr_addr задает начальный адрес, по которому DUT хочет записать. The wr_len сигнал соответствует количеству элементов данных в этой транзакции записи. Data может быть отправлен до тех пор, пока wr_valid высоко. Когда wr_ready становится низким, DUT должен прекратить отправку данных в течение одного такта, и Data сигнал становится недопустимым. Если DUT продолжает отправлять данные после одного такта, данные игнорируются.

Выходные сигналы

Моделируйте Data и Write Master to Slave bus сигналы на выходном интерфейсе DUT.

  • Data: Данные, которые вы хотите перенести, действительны каждый цикл транзакции.

  • Write Master to Slave bus который состоит из:

    • wr_addr: Начальный адрес транзакции записи, выбранной в первом цикле транзакции. Адрес указан в байтах.

    • wr_len: Количество значений данных, которые вы хотите перенести, выбранных в первом цикле транзакции. The wr_len сигнал указан в словах. Это означает каждый модуль wr_len является полным элементом данных. Для примера, когда wr_len является 2, и битовая ширина данных 128 бит, два 128-битовые элементы данных записаны.

    • wr_valid: Когда этот сигнал управления становится высоким, это указывает, что Data сигнал, дискретизированный на выходе, действителен.

Входные сигналы

Моделируйте Write Slave to Master bus который состоит из:

  • wr_complete (необязательный сигнал): Управляющий сигнал, который, когда остается высоким в течение одного такта, указывает, что транзакция записи завершена. Следующий пакет данных может быть отправлен после wr_complete утверждает. Раннее утверждение wr_complete делает среднюю задержку почти 3 синхроимпульсы между двумя пакетами, что делает операцию записи конвейерной и улучшает пропускную способность записи.

  • wr_ready: Этот сигнал соответствует заднему давлению от ведомого IP-ядра или внешней памяти. Когда этот сигнал управления становится высоким, это указывает, что данные могут быть sent. когда wr_ready низкий, DUT должен прекратить отправку данных в течение одного такта. Можно также использовать wr_ready сигнал для определения, может ли DUT послать второй сигнал пакетной передачи сразу после того, как первый сигнал пакетной передачи был отправлен. Поддерживаются несколько сигналов пакетной передачи, что означает, что wr_ready сигнал остается высоким, чтобы принять второй пакет сразу после принятия последнего элемента первого пакета. Использование wr_ready чтобы определить, когда начать следующий пакет, можно уменьшить среднюю задержку между двумя пакетами до менее 3 тактовые импульсы.

  • wr_bvalid (необязательный сигнал): Ответный сигнал от ведомого IP-ядра, который можно использовать в целях диагностики. The wr_bvalid сигнал становится высоким после того, как AXI4 соединитель принимает каждую пакетную транзакцию. Если wr_len больше 256модуль записи AXI4 Master разделяет сигнал большого пакета на пакеты 256 размера. wr_bvalid становится высоким для каждого пакета 256 размеров.

  • wr_bresp (необязательный сигнал): Ответный сигнал от ведомого IP-ядра, который можно использовать в целях диагностики. Используйте этот сигнал с wr_bvalid сигнал.

Протокол AXI4 Master поддерживает максимальный размер пакета 256. Когда у вас большая вспышка размера, больше 256Интерфейс AXI Master в сгенерированном IP-ядре HDL разделяет большой пакет на несколько меньших пакетов с размером 256. Поэтому даже для больших пакетов данных вы видите улучшенную пропускную способность записи.

Упрощенный AXI4 Главный Протокол - Чтение Канала

Этот рисунок показывает временную диаграмму для сигналов, которые вы моделируете во входном и выходном интерфейсах DUT для транзакции чтения AXI4 Master. Эти сигналы включают в себя Data, Read Master to Slave Bus, и Read Slave to Master Bus.

DUT ждет rd_aready чтобы стать высоким, чтобы инициировать запрос на чтение. Когда rd_aready высоко, DUT может послать вне запрос чтения. Запрос на чтение состоит из rd_addr, rd_len, и rd_avalid сигналы Read Master to Slave bus. Ведомый IP или внешняя память отвечают на запрос чтения, отправляя Data в каждом такте. The rd_len сигнал соответствует количеству считываемых значений данных. DUT может принимать Data пока rd_dvalid высоко.

Чтение запроса

Чтобы смоделировать запрос на чтение, в выходном интерфейсе DUT моделируйте Read Master to Slave bus который состоит из:

  • rd_addr: Начальный адрес для считанной транзакции, выбранной в первом цикле транзакции. Адрес указан в байтах.

  • rd_len: Количество значений данных, которые вы хотите считать, выбранных в первом цикле транзакции. The rd_len сигнал указан в словах. Это означает каждый модуль rd_len является полным элементом данных. Для примера, когда rd_len является 2, и битовая ширина данных 128 бит, два 128-битовые элементы данных считываются.

  • rd_avalid: Управляющий сигнал, который определяет, является ли запрос чтения допустимым.

На входном интерфейсе DUT реализуйте rd_aready сигнал. Этот сигнал является частью Read Slave to Master bus и указывает, когда принимать запросы на чтение. Можно контролировать rd_aready сигнал для определения, может ли DUT посылать последовательные пакетные запросы. Когда rd_aready становится высоким, это указывает, что DUT может послать запрос на чтение в следующем такте.

Чтение ответа

В входе DUT моделируйте Data и Read Slave to Master bus сигналы.

  • Data: Данные, которые возвращаются из запроса на чтение.

  • Read Slave to Master bus который состоит из:

    • rd_dvalid: Управляющий сигнал, который указывает, что Data возвращен из запроса на чтение.

    • rd_rvalid (необязательный сигнал): сигнал отклика от ведомого IP ядра, который можно использовать в целях диагностики.

    • rd_rresp (необязательный сигнал): Ответный сигнал от ведомого IP-ядра, который указывает на состояние считанной транзакции.

В выходном интерфейсе DUT можно опционально реализовать rd_dready сигнал. Этот сигнал является частью Read Master to Slave bus и указывает, когда DUT может начать принимать данные. По умолчанию, если вы не сопоставляете этот сигнал с интерфейсом чтения AXI4 Master, сгенерированное ядро HDL IP связывает rd_dready к логике высокий.

Вычисление регистра базовых адресов

Для генерируемых IP-ядер HDL Coder включает регистр базовых адресов для поддержки разработки драйверов для каналов чтения и записи AXI4 Master. Регистр базовых адресов добавляется к адресу, который задан DUT ADDR порт для формирования адреса AXI4 Master. Эта возможность позволяет драйверу использовать режим адресации, который программирует фиксированный адрес регистра с базовым адресом буфера. Запрограммированный адрес вместе со DUT ADDR порт используется для индексации буфера. По умолчанию регистры берут значение нуля, если вы их не используете.

Задайте начальное значение AXI4 Master Read and Write Основы адреса

Когда вы запускаете IP Core Generation рабочий процесс или Simulink Real-Time FPGA I/O рабочий процесс, можно задать начальное значение для AXI4 регистров основных данных для чтения и записи базовых адресов. По умолчанию начальное значение равно нулю. Чтобы задать ненулевое значение:

  1. В таблице интерфейса целевой платформы при сопоставлении входного порта DUT с портом данных AXI4 Master Read или выходного порта DUT с интерфейсом порта данных AXI4 Master Write в столбце Interface Options появляется кнопка Options.

  2. Нажмите кнопку Options, а затем укажите DefaultReadBaseAddress или DefaultWriteBaseAddress.

Моделирование для AXI4 интерфейсов Master

Можно смоделировать алгоритм с сигналами протокола Data and AXI4 Master в портах DUT, а затем сопоставить сигналы с интерфейсами AXI4 Master.

Чтобы узнать, как смоделировать алгоритм DUT для отображения интерфейса AXI4 Master, откройте эту модель Simulink ®. Подсистема DUT содержит простой алгоритм, который считывает данные из DDR и записывает данные обратно в другой адрес в памяти DDR.

Дважды кликните Подсистему DUT. Подсистема DDR_Access_Controller моделирует каналы чтения и записи AXI Master и имеет оперативную память простого двойного порта, которая вычисляет сигнал wr_data. Если вы дважды кликните DDR_Access_Controller Subsystem, то увидите два блока Edge Detection Subsystem, которые генерируют два стартовых импульса как вход к каждому блоку MATLAB Function. Одна Подсистема Обнаружения Ребер и Контроллер Чтения DDR Функция MATLAB моделируют считанную транзакцию. Другая Подсистема Обнаружения Ребер и Контроллер Записи DDR Функция MATLAB моделируют транзакцию записи. Можно изменить этот проект, чтобы смоделировать только транзакцию записи или транзакцию чтения с помощью одной Подсистемы Обнаружения Ребер и соответствующего блока MATLAB Function.

Чтение канала

Контроллер чтения DDR моделируется как конечный автомат с четырьмя состояниями: INIT, IDLE, READ_BURST_START и DATA_COUNT. Состояние INIT инициализирует считанные сигналы и входные сигналы ОЗУ. Когда стартовый сигнал становится высоким, конечный автомат переключается в состояние IDLE, а затем ожидает rd_aready сигнал стать высоким. Когда rd_aready становится высоким, конечный автомат переходит в READ_BURST_START состояние и DUT начинает считывать данные. Конечный автомат затем безоговорочно переключается в DATA_COUNT состояние и продолжает считать данные до rd_avalid идет низко.

Запись канала

Контроллер записи DDR моделируется аналогично каналу Read как конечный автомат с четырьмя состояниями: IDLE, WRITE_BURST_START, DATA_COUNT и ACK_WAIT. DUT находится в состоянии IDLE, а затем переключается в WRITE_BURST_START состояние, где он ожидает wr_ready сигнал. Когда wr_ready становится высоким, конечный автомат переключается в DATA_COUNT состояние и начинает запись данных. Данные действительны, когда wr_valid высоко. DUT продолжает записывать данные при wr_ready высоко. Как wr_ready становится низким, конечный автомат переключается в ACK_WAIT состояние и затем ожидает сигнала готовности, чтобы инициировать следующую транзакцию записи.

Чтобы увидеть действующий упрощенный протокол AXI4 Master, симулируйте модель. Если установлены DSP System Toolbox™, можно просмотреть и проанализировать результаты в Logic Analyzer.

Можно использовать рабочий процесс генерации ядра IP для генерации ядра IP HDL с интерфейсом AXI4 Master. Если у вас HDL Verifier™ установлен, а вы используете ZC706 плату Xilinx Zynq, то можно интегрировать IP-ядро в Систему по умолчанию с DDR3 доступа к памяти External исходного проекта.

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

Чтобы интегрировать ваше ядро IP HDL в большие исходные проекты и достичь большей пропускной способности, когда вы используете порт AXI4 Master для доступа к внешней памяти DDR, вы можете использовать большие ширины битов на Data порт. Шина главного интерфейса AXI4 поддерживает максимальную битовую ширину 1024 биты.

Simulink® поддерживает типы данных с фиксированной точкой, которые имеют размер слова до 128 биты. Чтобы смоделировать свои порты DUT с размерами слова, больше 128 биты, используйте типы векторных данных. Если вы используете векторный порт, такой что объединенная битовая ширина всех элементов вектора больше 1024 биты, в Set Target Interface задаче отображается ошибка.

Для примера, в hdlcoder_axi_master модель, чтобы расширить битовую ширину axim_rd_data порт в 512 биты, измените ddr_data параметр внутри DDR, чтобы fi(([40:-1:1]),0,128,0) и затем объедините 128-битовый вход четыре раза, чтобы сгенерировать выход 512 бит. Можно использовать блок Vector Concatenate, чтобы вывести комбинированную битовую ширину 512 бит. Чтобы симулировать модель, замените Simple Dual Port RAM блок внутри подсистемы DUT на Simple Dual port RAM System.

Concatenating scalar input at data port of hdlcoder_axi_master model to convert 128-bit scalar input to a 512-bit vector input.

Затем можно сопоставить эти порты данных DUT с AXI4 Master Read или AXI Master Write порты в таблице интерфейсов целевой платформы, генерируют HDL-ядро IP и интегрируют IP-ядро в Vivado® или Qsys исходных проектов. В сгенерированном HDL-коде для IP-ядра DUT Data порты сопоставлены с 512- битовые интерфейсы. Сгенерированы несколько блоков FIFO, соответствующих каждому элементу векторного входа.

ENTITY DUT_ip IS
  PORT( IPCORE_CLK            :   IN    std_logic;  -- ufix1
        IPCORE_RESETN         :   IN    std_logic;  -- ufix1
        AXI4_Master_Rd_RDATA  :   IN    std_logic_vector(511 DOWNTO 0);  -- ufix256
        
        ...
        ...

        AXI4_Master_Wr_WDATA  :   OUT   std_logic_vector(511 DOWNTO 0);  -- ufix256
        
        ...

        );
END DUT_ip;

Этот рисунок иллюстрирует порядок, в котором векторные данные записываются и считываются.

The endianness of data written to and read from an external memory such as DDR when using vector ports.

В HDL-коде для IP-ядра DUT можно увидеть, как AXI4_Master_Rd_RDATA и AXI4_master_Wr_WDATA интерфейсы сопоставляются с портами DUT и порядком записи данных в интерфейс AXI4 Master, а затем считываются.

...
...
--------------------------------------------------------------------
AXI4 Master Read Sequence
--------------------------------------------------------------------
AXI4_Master_Rd_RDATA_0 <= AXI4_Master_Rd_RDATA_unsigned(127 DOWNTO 0);

AXI4_Master_Rd_RDATA_1 <= AXI4_Master_Rd_RDATA_unsigned_1(255 DOWNTO 128);

AXI4_Master_Rd_RDATA_2 <= AXI4_Master_Rd_RDATA_unsigned_7(383 DOWNTO 256);

AXI4_Master_Rd_RDATA_3 <= AXI4_Master_Rd_RDATA_unsigned_7(511 DOWNTO 384);

--------------------------------------------------------------------
AXI4 Master Write Sequence
--------------------------------------------------------------------
AXI4_Master_Wr_WDATA_tmp <= unsigned(AXI4_Master_Wr_WDATA_Vec_3) & 
                            unsigned(AXI4_Master_Wr_WDATA_Vec_2) &
                            unsigned(AXI4_Master_Wr_WDATA_Vec_1) &
                            unsigned(AXI4_Master_Wr_WDATA_Vec_0);


AXI4_Master_Wr_WDATA <= std_logic_vector(AXI4_Master_Wr_WDATA_tmp);

...
...

Если вы используете нестандартную битовую ширину для AXI4 Master Data порт, Data порт обновляется до стандартного контейнера битовой ширины, который имеет больший размер. Стандартные ширины битов включают 32, 64, 128, 256, 512, и 1024 биты. Для примера, если вы используете вектор, который имеет четыре 35-битовые элементы, получившаяся битовая ширина 140 биты (35x4) сопоставлен с 256-bit AXI4 Главный интерфейс. В канале Write Data порт, биты 255 на 141 заполнены нулями. На канале Read Data порт, биты 255 на 141 игнорируются.

zero padding logic in writing data and how they are ignored when reading the data.

Использование нестандартных битовых ширин может оказать влияние на эффективность, поскольку вся полоса пропускания главного интерфейса AXI4 не используется. Чтобы избежать попаданий в эффективность, используйте стандартные битовые ширины AXI.

Моделируйте проекты с несколькими скоростями дискретизации

Программное обеспечение HDL Coder поддерживает проекты с несколькими скоростями дискретизации, когда вы запускаете рабочий процесс генерации ядра IP. Когда вы сопоставляете порты интерфейса с интерфейсами AXI4 Master, чтобы использовать несколько частот дискретизации, убедитесь, что порты DUT, которые сопоставлены с этими AXI4 интерфейсами, работают с самой быстрой скоростью проекта после генерации HDL-кода.

Для получения дополнительной информации смотрите Multirate IP Core Generation.

Исходные проекты для интегрирования ядер IP

Можно интегрировать сгенерированное ядро IP HDL с интерфейсами AXI4 Master в следующие исходные проекты HDL Coder:

  • Default System with External DDR3 Memory Access: Когда ваша целевая платформа Xilinx Zynq ZC706 evaluation kit.

  • Default System with External DDR4 Memory Access: Когда ваша целевая платформа Altera Arria10 SoC development kit.

Для использования этих исходных проектов необходимо установить HDL Verifier™. Этот рисунок показывает высокоуровневую диаграмму блока архитектуры исходного проекта.

В этой архитектуре HDL DUT IP блок соответствует IP-ядру, которое генерируется из IP Core Generation рабочий процесс. Другие блоки архитектуры представляют предопределённый исходный проект, которая состоит из MATLAB® на основе JTAG AXI Master IP который предоставляется HDL Verifier. После запуска проекта FPGA на плате, используя JTAG AXI Master IPможно использовать входные данные в MATLAB для инициализации встроенной DDR3 внешней памяти. The HDL DUT IP ядро считывает входные данные из внешней памяти через интерфейс AXI4 Master. Затем IP-ядро выполняет расчет алгоритма и записывает результат в DDR3 память через интерфейс AXI4 Master. The JTAG AXI Master IP можно считать результат из DDR3 памяти и затем проверить результат в MATLAB.

Использование addAXI4MasterInterface метод hdlcoder.ReferenceDesign можно интегрировать IP-ядро с AXI4 Master Interface в собственные пользовательские исходные проекты.

Ограничения

  • Synthesis tool: Должен быть Xilinx Vivado или Altera QUARTUS II. Xilinx ISE не поддерживается.

  • Target workflow: Используйте IP Core Generation рабочий процесс. Чтобы запустить рабочий процесс, откройте HDL Workflow Advisor из алгоритма DUT в Simulink. Рабочий процесс от MATLAB до HDL не поддерживается.

  • Processor/FPGA synchronization: Должен быть Free running режим.

Похожие примеры

Подробнее о