Для проектов, которые требуют доступа к большим наборам данных из внешней памяти, моделируйте ваш алгоритм с помощью упрощенного протокола AXI4 Master. Когда вы запускаете IP Core Generation
рабочий процесс, HDL Coder™ генерирует IP-ядро с AXI4 интерфейсами Master. Интерфейс AXI4 Master может обмениваться данными между вашим проектом и IP-адресом внешнего контроллера памяти с помощью протокола AXI4 Master. Используйте интерфейс AXI4 Master, когда вы:
Проект предназначен для многокадровых приложений обработки видео. Можно хранить данные изображения во внешней памяти, например, DDR3 памяти на борту, а затем читать или записывать изображения в ваш проект пакетным способом для высокоскоростной обработки.
Алгоритм должен получить доступ к данным памяти в непотоковом произвольном шаблоне.
Ядро IP DUT должно управлять другими IP-адресами с AXI4 ведомым интерфейсом в системе. Эта возможность особенно полезна в автономных устройствах FPGA.
Для сопоставления портов 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
. Поэтому даже для больших пакетов данных вы видите улучшенную пропускную способность записи.
Этот рисунок показывает временную диаграмму для сигналов, которые вы моделируете во входном и выходном интерфейсах 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
порт используется для индексации буфера. По умолчанию регистры берут значение нуля, если вы их не используете.
Когда вы запускаете IP Core Generation
рабочий процесс или Simulink Real-Time FPGA I/O
рабочий процесс, можно задать начальное значение для AXI4 регистров основных данных для чтения и записи базовых адресов. По умолчанию начальное значение равно нулю. Чтобы задать ненулевое значение:
В таблице интерфейса целевой платформы при сопоставлении входного порта DUT с портом данных AXI4 Master Read или выходного порта DUT с интерфейсом порта данных AXI4 Master Write в столбце Interface Options появляется кнопка Options.
Нажмите кнопку Options, а затем укажите DefaultReadBaseAddress или DefaultWriteBaseAddress.
Можно смоделировать алгоритм с сигналами протокола 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 исходного проекта.
Чтобы интегрировать ваше ядро 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.
Затем можно сопоставить эти порты данных 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;
Этот рисунок иллюстрирует порядок, в котором векторные данные записываются и считываются.
В 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
игнорируются.
Использование нестандартных битовых ширин может оказать влияние на эффективность, поскольку вся полоса пропускания главного интерфейса AXI4 не используется. Чтобы избежать попаданий в эффективность, используйте стандартные битовые ширины AXI.
Программное обеспечение HDL Coder поддерживает проекты с несколькими скоростями дискретизации, когда вы запускаете рабочий процесс генерации ядра IP. Когда вы сопоставляете порты интерфейса с интерфейсами AXI4 Master, чтобы использовать несколько частот дискретизации, убедитесь, что порты DUT, которые сопоставлены с этими AXI4 интерфейсами, работают с самой быстрой скоростью проекта после генерации HDL-кода.
Для получения дополнительной информации смотрите Multirate IP Core Generation.
Можно интегрировать сгенерированное ядро 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
режим.