реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Переход с AXI в обычный параллельный интерфейс, Надо перейти с AXI в параллельный интерфейс для записи в BRAM
videoscan
сообщение Aug 27 2018, 09:30
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 57
Регистрация: 16-09-14
Из: Москва
Пользователь №: 82 826



Народ!

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

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

Пролистал библиотеку IP с AXI - нужного перехода не нашел. Что делать? Есть ли какие мысли?
Как вообще данные, живущие в Xilinx на AXI переходят в обычные?
Одно решение вроде как есть - использовать в интерфейсе c DDR4 не AXI, а параллельный интерфейс, но в будущем в проект будет добавлен PCI-e, а он только на AXI и работает, так что эту проблему все равно решать надо.
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Aug 27 2018, 09:40
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643



Приветствую!
Цитата(videoscan @ Aug 27 2018, 12:30) *
...
Пролистал библиотеку IP с AXI - нужного перехода не нашел. Что делать? Есть ли какие мысли?
Наверно быстро листали - не увидели AXI BRAM Controller.

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

Удачи! Rob.
Go to the top of the page
 
+Quote Post
videoscan
сообщение Aug 27 2018, 09:49
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 57
Регистрация: 16-09-14
Из: Москва
Пользователь №: 82 826



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


Я же написал, что использовать AXI BRAM controller не могу.
Дело в том, что этих самых контроллеров на блоках BRAM в проекте очень много (около 200) и Vivado HLS не смог мне оттранслировать программу с памятью с интерфейсом AXI при таком их количестве.

Сообщение отредактировал videoscan - Aug 27 2018, 09:52
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Aug 27 2018, 09:59
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643



Приветствую!
Цитата(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
Go to the top of the page
 
+Quote Post
videoscan
сообщение Aug 27 2018, 10:06
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 57
Регистрация: 16-09-14
Из: Москва
Пользователь №: 82 826



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

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

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

С этим пока не разобрался.
Думал, может есть какой ip, который это делает или я что-то совсем не понимаю.
Go to the top of the page
 
+Quote Post
MegaVolt
сообщение Aug 27 2018, 18:10
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 779
Регистрация: 3-01-05
Из: Минск
Пользователь №: 1 783



А можно всё же узнать что за задача. Тогда будет проще предложить как её решать.
Go to the top of the page
 
+Quote Post
SFx
сообщение Aug 28 2018, 02:48
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 758
Регистрация: 11-07-05
Из: Понаехал (Мск)
Пользователь №: 6 688



Цитата(videoscan @ Aug 27 2018, 13:06) *
ap_memory торчит. Сама память объявляется в внешнем Verilog.

так поменяйте в HLS интерфейс на m_axi.
Go to the top of the page
 
+Quote Post
videoscan
сообщение Aug 29 2018, 07:22
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 57
Регистрация: 16-09-14
Из: Москва
Пользователь №: 82 826



Цитата(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).

Сообщение отредактировал videoscan - Aug 29 2018, 07:37
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Aug 29 2018, 08:07
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643



Приветствую!

Цитата(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.

Go to the top of the page
 
+Quote Post
videoscan
сообщение Aug 29 2018, 08:16
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 57
Регистрация: 16-09-14
Из: Москва
Пользователь №: 82 826



Цитата(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 - Aug 29 2018, 14:03
Go to the top of the page
 
+Quote Post
videoscan
сообщение Sep 3 2018, 11:07
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 57
Регистрация: 16-09-14
Из: Москва
Пользователь №: 82 826



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


Вы совершенно правы! Этот AXI BRAM Controller решает нашу проблему. Спасибо!
Прошу прощения за дальнейший поток сознания.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 03:58
Рейтинг@Mail.ru


Страница сгенерированна за 0.01475 секунд с 7
ELECTRONIX ©2004-2016