|
|
  |
Переход с AXI в обычный параллельный интерфейс, Надо перейти с AXI в параллельный интерфейс для записи в BRAM |
|
|
|
Aug 27 2018, 09:30
|
Участник

Группа: Участник
Сообщений: 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 и работает, так что эту проблему все равно решать надо.
|
|
|
|
|
Aug 27 2018, 09:40
|
Профессионал
    
Группа: Свой
Сообщений: 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.
|
|
|
|
|
Aug 27 2018, 09:49
|
Участник

Группа: Участник
Сообщений: 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
|
|
|
|
|
Aug 27 2018, 09:59
|
Профессионал
    
Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643

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

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

|
Цитата(RobFPGA @ Aug 27 2018, 09:59)  Приветствую! И что же у Вас торчит из HLS модуля ? На сколько я понял (после отпуска моя подсистема телепатии еще не протрезвела  ) ap_memory торчит. Сама память объявляется в внешнем VeryLog. Цитата(RobFPGA @ Aug 27 2018, 09:59)  Так ведь? Ну и кто мешает прикрутить сюда выход блока AXI BRAМ снаружи HLS модуля? Естественно с доп дешифрацией адресов. С этим пока не разобрался. Думал, может есть какой ip, который это делает или я что-то совсем не понимаю.
|
|
|
|
|
Aug 29 2018, 07:22
|
Участник

Группа: Участник
Сообщений: 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
|
|
|
|
|
Aug 29 2018, 08:07
|
Профессионал
    
Группа: Свой
Сообщений: 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 модуль. И всех делов то. А если еще сделать BRAM разной ширины по портам (со стороны DDR шире) то можно с экономить время на загрузку данных. Удачи! Rob.
|
|
|
|
|
Aug 29 2018, 08:16
|
Участник

Группа: Участник
Сообщений: 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 модуль. И всех делов то. А если еще сделать BRAM разной ширины по портам (со стороны DDR шире) то можно с экономить время на загрузку данных. Удачи! Rob. Пошли разбираться. Спасибо!
Сообщение отредактировал videoscan - Aug 29 2018, 14:03
|
|
|
|
|
Sep 3 2018, 11:07
|
Участник

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

|
Цитата(RobFPGA @ Aug 27 2018, 10:40)  Приветствую! Наверно быстро листали - не увидели AXI BRAM Controller. Вы совершенно правы! Этот AXI BRAM Controller решает нашу проблему. Спасибо! Прошу прощения за дальнейший поток сознания.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|