Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Чтение ядром PL данных из DDR PS Zynq
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
svedach
Здравствуйте!
Столкнулся с проблемой чтения данных из DDR, подключенной к Zynq. Т.е. работа предполагается такая: при старте системы процессор из флешки копирует определенный массив значений, эти значения используются кастомным ядром в PL. При этом выборка значений случайная (массив большой)...
Писать поток (тоже надо) в DDR через DMA я умею и прекрасно с этим справляюсь, но вот чтение да еще не поточное а по случайным адресам пока толком не понимаю как сделать...
Есть предположение использовать CDMA, при этом к порту S_AXI_LITE подключается моя корка и генерит запросы чтения по нужным адресам (или пишет в регистры CDMA что и откуда прочитать...???)... Это будет работать? Или это не правильный путь?
Может есть способ проще?
svedach
Кажется нащупал верный путь: DataMover!!!
Буду пробовать...
Alexey_Rostov
Цитата(svedach @ Sep 30 2017, 18:39) *
Здравствуйте!
Столкнулся с проблемой чтения данных из DDR, подключенной к Zynq. Т.е. работа предполагается такая: при старте системы процессор из флешки копирует определенный массив значений, эти значения используются кастомным ядром в PL. При этом выборка значений случайная (массив большой)...
Писать поток (тоже надо) в DDR через DMA я умею и прекрасно с этим справляюсь, но вот чтение да еще не поточное а по случайным адресам пока толком не понимаю как сделать...
Есть предположение использовать CDMA, при этом к порту S_AXI_LITE подключается моя корка и генерит запросы чтения по нужным адресам (или пишет в регистры CDMA что и откуда прочитать...???)... Это будет работать?
Может есть способ проще?

Посмотри SG DMA. Там создаёшь лист дескрипторов с указателями на данные для чтения/записи. Когда нужно быстро было переключаться между разными адресами ддр я его использовал

Цитата(svedach @ Oct 1 2017, 10:47) *
Кажется нащупал верный путь: DataMover!!!
Буду пробовать...


Датамувер это движок sg dma.
svedach
Алексей, привет!
Проясни "Датамувер это движок sg dma"... Что значит движок?
Датамувер вроде неплохо подходит - кенеришь ему команды и на выходе получаешь поток данных, если я правильно понял...
Alexey_Rostov
Цитата(svedach @ Oct 1 2017, 15:57) *
Алексей, привет!
Проясни "Датамувер это движок sg dma"... Что значит движок?
Датамувер вроде неплохо подходит - кенеришь ему команды и на выходе получаешь поток данных, если я правильно понял...

Привет ) Датамувер входит в состав SG DMA и выполняет транзакции на шине данных. Для обмена с ДДР датамувер подходит, но тебе каждый раз прийдется записывать указатели и стартовать датамувер заново, плюс ко всему, насколько я помню, интерфейс для записи указателей у датамувера не акси: я записывал адреса для обмена из логики, а не из СНК. Если ты при обмене для работы с указателями используешь процессор, то SG DMA очень удобное решение с точки зрения работы с указателями на массивы данных в ддр
svedach
Я тоже генерирую команды датамуверу из логики, почитал доки - структура команд простаяsm.gif + есть фифо команд. Он кстати удобно перекладывает прочитанные данные в АКСИ Стрим + можно указывать последний запрос - по нему будет генериться tlast. По этому стробу удобно запускать обработку принятых данных...
Делаю автомат состояний для генерации команд, попробую - отпишусь что да как...
Alexey_Rostov
Цитата(svedach @ Oct 1 2017, 17:44) *
Я тоже генерирую команды датамуверу из логики, почитал доки - структура команд простаяsm.gif + есть фифо команд. Он кстати удобно перекладывает прочитанные данные в АКСИ Стрим + можно указывать последний запрос - по нему будет генериться tlast. По этому стробу удобно запускать обработку принятых данных...
Делаю автомат состояний для генерации команд, попробую - отпишусь что да как...


Из логики тоже автомат делал и в качестве сигнала об успешной транзакции использовал статусный сигнал датамувера.
svedach
Алексей, привет!
Наблюдаю следующую картину:


Это первый запрос пачки данных, после того, как MM2S_CMD_Ready упал последний раз - больше не поднимается... Не могу понять, что не так...
svedach
Все, разобрался, оказывается шину статуса тоже обязательно надо читать (или хотя бы установить *_sts_tready в "1")...
Alexey_Rostov
Цитата(svedach @ Oct 2 2017, 12:52) *
Все, разобрался, оказывается шину статуса тоже обязательно надо читать (или хотя бы установить *_sts_tready в "1")...


Статусный реади я вообще в 1 поставил и не трогал больше, только отслеживал sts_tvalid.
svedach
У меня сейчас sts_tdata периодически становится 0x40 - ошибка от слейва...
Не сталкивался с таким?



При чем после того, как восстанавливается 0x80 (в конце времянки) дальше всегда вроде 0x80. Похоже на то, что какой-то регион памяти недоступен для чтения, или я не правильно понимаю?
P.S. Адреса чтения пока - просто последовательность о 0 до 2621440, заданы только для теста....
Alexey_Rostov
Цитата(svedach @ Oct 2 2017, 14:14) *
У меня сейчас sts_tdata периодически становится 0x40 - ошибка от слейва...
Не сталкивался с таким?



При чем после того, как восстанавливается 0x80 (в конце времянки) дальше всегда вроде 0x80. Похоже на то, что какой-то регион памяти недоступен для чтения, или я не правильно понимаю?
P.S. Адреса чтения пока - просто последовательность о 0 до 2621440, заданы только для теста....


У меня была DDR на ML605 и там была проблема записи в определенный регион памяти. я просто исключил его из работы.
svedach
В общем это действительно был какой-то специфический регион... Задал смещение в распределенную в SDK память и всегда 0x80.
Alexey_Rostov
Цитата(svedach @ Oct 2 2017, 16:44) *
В общем это действительно был какой-то специфический регион... Задал смещение в распределенную в SDK память и всегда 0x80.

А что значит "распределённая в SDK память "?
svedach
Я по AXI в регистр в своей корке пишу адрес статического массива (это и есть распределенная память sm.gif) и с этого адреса начинаю читать...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.