Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Переход с AXI в обычный параллельный интерфейс
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
videoscan
Народ!

Вводные данные:
- проект на Xilinx UltraScale+ (боард VCU118);
- часть содержимого пишется на HLS, часть на VeryLog.

Имеется следующая проблема:
- в проекте реализована связь с SDRAM DDR4 с использованием интерфейса AXI (на самом деле пока не реализована, но IP такой функции в Vivado есть);
- после того, как мы получили данные с DDR4 нам нужно передать их в память BRAM с обычным внешним интерфейсом (адрес, данные, запись, клок);
- сразу скажу использовать в памяти, на которую надо передать данные, интерфейс AXI невозможно, по ряду причин.

Пролистал библиотеку IP с AXI - нужного перехода не нашел. Что делать? Есть ли какие мысли?
Как вообще данные, живущие в Xilinx на AXI переходят в обычные?
Одно решение вроде как есть - использовать в интерфейсе c DDR4 не AXI, а параллельный интерфейс, но в будущем в проект будет добавлен PCI-e, а он только на AXI и работает, так что эту проблему все равно решать надо.
RobFPGA
Приветствую!
Цитата(videoscan @ Aug 27 2018, 12:30) *
...
Пролистал библиотеку IP с AXI - нужного перехода не нашел. Что делать? Есть ли какие мысли?
Наверно быстро листали - не увидели AXI BRAM Controller.

Цитата(videoscan @ Aug 27 2018, 12:30) *
Как вообще данные, живущие в Xilinx на AXI переходят в обычные?
Да по разному - зависит от того как Вы эти данные получаете и что с ними делать собираетесь.
Вообще свой контролер чтения/записи на AXI не сложен (с некоторыми ограничениями) и легко пишется под свои хотелки.

Удачи! Rob.
videoscan
Цитата(RobFPGA @ Aug 27 2018, 09:40) *
Наверно быстро листали - не увидели AXI BRAM Controller.


Я же написал, что использовать AXI BRAM controller не могу.
Дело в том, что этих самых контроллеров на блоках BRAM в проекте очень много (около 200) и Vivado HLS не смог мне оттранслировать программу с памятью с интерфейсом AXI при таком их количестве.
RobFPGA
Приветствую!
Цитата(videoscan @ Aug 27 2018, 12:49) *
Я же написал, что использовать AXI BRAM controller не могу.
Дело в том, что этих самых BRAM в проекте очень много (около 200) и Vivado HLS не смог мне оттранслировать программу с памятью с интерфейсом AXI.
И что же у Вас торчит из HLS модуля ? На сколько я понял (после отпуска моя подсистема телепатии еще не протрезвела sm.gif )
Цитата(videoscan)
... память BRAM с обычным внешним интерфейсом (адрес, данные, запись, клок);
Так ведь? Ну и кто мешает прикрутить сюда выход блока AXI BRAМ снаружи HLS модуля? Естественно с доп дешифрацией адресов. Или использовать AXI Data Mover в обвязке простенькой FSM и счетчика слов на stream выходе как addr для BRAM. Или тот же AXI DMA ..., или ... и.т.д. и.т.п.

Удачи! Rob
videoscan
Цитата(RobFPGA @ Aug 27 2018, 09:59) *
Приветствую!
И что же у Вас торчит из HLS модуля ? На сколько я понял (после отпуска моя подсистема телепатии еще не протрезвела sm.gif )

ap_memory торчит. Сама память объявляется в внешнем VeryLog.

Цитата(RobFPGA @ Aug 27 2018, 09:59) *
Так ведь? Ну и кто мешает прикрутить сюда выход блока AXI BRAМ снаружи HLS модуля? Естественно с доп дешифрацией адресов.

С этим пока не разобрался.
Думал, может есть какой ip, который это делает или я что-то совсем не понимаю.
MegaVolt
А можно всё же узнать что за задача. Тогда будет проще предложить как её решать.
SFx
Цитата(videoscan @ Aug 27 2018, 13:06) *
ap_memory торчит. Сама память объявляется в внешнем Verilog.

так поменяйте в HLS интерфейс на m_axi.
videoscan
Цитата(MegaVolt @ Aug 27 2018, 19:10) *
А можно всё же узнать что за задача. Тогда будет проще предложить как её решать.

Имеется 6 буферов памяти 256*256 слов по 2 байта. Каждый из этих буферов делится директивой ARRAY_PARTITION на 32 куска (с опцией cyclic).
В эту память нужно очень быстро принимать данные из DDR4.
Обработка данных производится на модуле, написанном на HLS.
Память организована с внешним интерфейсом ap_memory.
На уровне ощущений мне кажется, что использование AXI в интерфейсе памяти затормозит работу вычислителя (а это для нас критично). Однако мы попробовали.
При попытке организовать интерфейс этой памяти как AXI (директивами INTERFACE с опцией s_axi) Synthesis делается очень долго (реально я не дождался его конца, ждал 4 часа).
С использованием ap_memory Synthesis проекта делается за 2-5 минут.


Вот и получается, что нам нужно прочесть данные с DDR4 (они идут на AXI) и записать их в память (ap_memory).
RobFPGA
Приветствую!

Цитата(videoscan @ Aug 29 2018, 10:22) *
Имеется 6 буферов памяти 256*256 слов по 2 байта. Каждый из этих буферов делится директивой ARRAY_PARTITION на 32 куска (с опцией cyclic).
В эту память нужно очень быстро принимать данные из DDR4.
Получается из HLS модуля торчит 6 * 32 ap_memoty интерфейсов 2Kx16 каждый
которые цепляются к одному из портов BRAM объявленых снаружи HLS?

Цитата(videoscan @ Aug 29 2018, 10:22) *
Вот и получается, что нам нужно прочесть данные с DDR4 (они идут на AXI) и записать их в память (ap_memory).
Цепляем wr_data всех вторых портов BRAM параллельно к выходу например AXI Data Mover (если не хочется свою реализацию AXI read делать). Все адреса BRAM параллельно на младшие биты счетчика, старшими битами этого счетчика выбираем wr_en требуемой BRAM, счетчик считает принятые слова на выходе Data Mover. FSM программируем Data Mover на чтение 128K байт - по окончанию запускаем Ваш HSL модуль. И всех делов то. sm.gif
А если еще сделать BRAM разной ширины по портам (со стороны DDR шире) то можно с экономить время на загрузку данных.

Удачи! Rob.

videoscan
Цитата(RobFPGA @ Aug 29 2018, 09:07) *
Приветствую!

Получается из HLS модуля торчит 6 * 32 ap_memoty интерфейсов 2Kx16 каждый
которые цепляются к одному из портов BRAM объявленых снаружи HLS?

Получается из HLS модуля торчит 6 * 32 ap_memoty интерфейсов 2Kx16 каждый
из которых цепляется к своему модулю BRAM объявленному снаружи HLS.


Цитата(RobFPGA @ Aug 29 2018, 09:07) *
Цепляем wr_data всех вторых портов BRAM параллельно к выходу например AXI Data Mover (если не хочется свою реализацию AXI read делать). Все адреса BRAM параллельно на младшие биты счетчика, старшими битами этого счетчика выбираем wr_en требуемой BRAM, счетчик считает принятые слова на выходе Data Mover. FSM программируем Data Mover на чтение 128K байт - по окончанию запускаем Ваш HSL модуль. И всех делов то. sm.gif
А если еще сделать BRAM разной ширины по портам (со стороны DDR шире) то можно с экономить время на загрузку данных.

Удачи! Rob.

Пошли разбираться. Спасибо!
videoscan
Цитата(RobFPGA @ Aug 27 2018, 10:40) *
Приветствую!
Наверно быстро листали - не увидели AXI BRAM Controller.


Вы совершенно правы! Этот AXI BRAM Controller решает нашу проблему. Спасибо!
Прошу прощения за дальнейший поток сознания.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.