svedach 0 30 сентября, 2017 Опубликовано 30 сентября, 2017 (изменено) · Жалоба Здравствуйте! Столкнулся с проблемой чтения данных из DDR, подключенной к Zynq. Т.е. работа предполагается такая: при старте системы процессор из флешки копирует определенный массив значений, эти значения используются кастомным ядром в PL. При этом выборка значений случайная (массив большой)... Писать поток (тоже надо) в DDR через DMA я умею и прекрасно с этим справляюсь, но вот чтение да еще не поточное а по случайным адресам пока толком не понимаю как сделать... Есть предположение использовать CDMA, при этом к порту S_AXI_LITE подключается моя корка и генерит запросы чтения по нужным адресам (или пишет в регистры CDMA что и откуда прочитать...???)... Это будет работать? Или это не правильный путь? Может есть способ проще? Изменено 30 сентября, 2017 пользователем svedach Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
svedach 0 1 октября, 2017 Опубликовано 1 октября, 2017 · Жалоба Кажется нащупал верный путь: DataMover!!! Буду пробовать... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aleksei_Rostov 0 1 октября, 2017 Опубликовано 1 октября, 2017 (изменено) · Жалоба Здравствуйте! Столкнулся с проблемой чтения данных из DDR, подключенной к Zynq. Т.е. работа предполагается такая: при старте системы процессор из флешки копирует определенный массив значений, эти значения используются кастомным ядром в PL. При этом выборка значений случайная (массив большой)... Писать поток (тоже надо) в DDR через DMA я умею и прекрасно с этим справляюсь, но вот чтение да еще не поточное а по случайным адресам пока толком не понимаю как сделать... Есть предположение использовать CDMA, при этом к порту S_AXI_LITE подключается моя корка и генерит запросы чтения по нужным адресам (или пишет в регистры CDMA что и откуда прочитать...???)... Это будет работать? Может есть способ проще? Посмотри SG DMA. Там создаёшь лист дескрипторов с указателями на данные для чтения/записи. Когда нужно быстро было переключаться между разными адресами ддр я его использовал Кажется нащупал верный путь: DataMover!!! Буду пробовать... Датамувер это движок sg dma. Изменено 1 октября, 2017 пользователем Alexey_Rostov Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
svedach 0 1 октября, 2017 Опубликовано 1 октября, 2017 (изменено) · Жалоба Алексей, привет! Проясни "Датамувер это движок sg dma"... Что значит движок? Датамувер вроде неплохо подходит - кенеришь ему команды и на выходе получаешь поток данных, если я правильно понял... Изменено 1 октября, 2017 пользователем svedach Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aleksei_Rostov 0 1 октября, 2017 Опубликовано 1 октября, 2017 · Жалоба Алексей, привет! Проясни "Датамувер это движок sg dma"... Что значит движок? Датамувер вроде неплохо подходит - кенеришь ему команды и на выходе получаешь поток данных, если я правильно понял... Привет ) Датамувер входит в состав SG DMA и выполняет транзакции на шине данных. Для обмена с ДДР датамувер подходит, но тебе каждый раз прийдется записывать указатели и стартовать датамувер заново, плюс ко всему, насколько я помню, интерфейс для записи указателей у датамувера не акси: я записывал адреса для обмена из логики, а не из СНК. Если ты при обмене для работы с указателями используешь процессор, то SG DMA очень удобное решение с точки зрения работы с указателями на массивы данных в ддр Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
svedach 0 1 октября, 2017 Опубликовано 1 октября, 2017 · Жалоба Я тоже генерирую команды датамуверу из логики, почитал доки - структура команд простая:) + есть фифо команд. Он кстати удобно перекладывает прочитанные данные в АКСИ Стрим + можно указывать последний запрос - по нему будет генериться tlast. По этому стробу удобно запускать обработку принятых данных... Делаю автомат состояний для генерации команд, попробую - отпишусь что да как... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aleksei_Rostov 0 1 октября, 2017 Опубликовано 1 октября, 2017 · Жалоба Я тоже генерирую команды датамуверу из логики, почитал доки - структура команд простая:) + есть фифо команд. Он кстати удобно перекладывает прочитанные данные в АКСИ Стрим + можно указывать последний запрос - по нему будет генериться tlast. По этому стробу удобно запускать обработку принятых данных... Делаю автомат состояний для генерации команд, попробую - отпишусь что да как... Из логики тоже автомат делал и в качестве сигнала об успешной транзакции использовал статусный сигнал датамувера. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
svedach 0 2 октября, 2017 Опубликовано 2 октября, 2017 · Жалоба Алексей, привет! Наблюдаю следующую картину: Это первый запрос пачки данных, после того, как MM2S_CMD_Ready упал последний раз - больше не поднимается... Не могу понять, что не так... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
svedach 0 2 октября, 2017 Опубликовано 2 октября, 2017 · Жалоба Все, разобрался, оказывается шину статуса тоже обязательно надо читать (или хотя бы установить *_sts_tready в "1")... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aleksei_Rostov 0 2 октября, 2017 Опубликовано 2 октября, 2017 (изменено) · Жалоба Все, разобрался, оказывается шину статуса тоже обязательно надо читать (или хотя бы установить *_sts_tready в "1")... Статусный реади я вообще в 1 поставил и не трогал больше, только отслеживал sts_tvalid. Изменено 2 октября, 2017 пользователем Alexey_Rostov Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
svedach 0 2 октября, 2017 Опубликовано 2 октября, 2017 (изменено) · Жалоба У меня сейчас sts_tdata периодически становится 0x40 - ошибка от слейва... Не сталкивался с таким? При чем после того, как восстанавливается 0x80 (в конце времянки) дальше всегда вроде 0x80. Похоже на то, что какой-то регион памяти недоступен для чтения, или я не правильно понимаю? P.S. Адреса чтения пока - просто последовательность о 0 до 2621440, заданы только для теста.... Изменено 2 октября, 2017 пользователем svedach Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aleksei_Rostov 0 2 октября, 2017 Опубликовано 2 октября, 2017 · Жалоба У меня сейчас sts_tdata периодически становится 0x40 - ошибка от слейва... Не сталкивался с таким? При чем после того, как восстанавливается 0x80 (в конце времянки) дальше всегда вроде 0x80. Похоже на то, что какой-то регион памяти недоступен для чтения, или я не правильно понимаю? P.S. Адреса чтения пока - просто последовательность о 0 до 2621440, заданы только для теста.... У меня была DDR на ML605 и там была проблема записи в определенный регион памяти. я просто исключил его из работы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
svedach 0 2 октября, 2017 Опубликовано 2 октября, 2017 · Жалоба В общем это действительно был какой-то специфический регион... Задал смещение в распределенную в SDK память и всегда 0x80. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aleksei_Rostov 0 2 октября, 2017 Опубликовано 2 октября, 2017 · Жалоба В общем это действительно был какой-то специфический регион... Задал смещение в распределенную в SDK память и всегда 0x80. А что значит "распределённая в SDK память "? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
svedach 0 2 октября, 2017 Опубликовано 2 октября, 2017 · Жалоба Я по AXI в регистр в своей корке пишу адрес статического массива (это и есть распределенная память :)) и с этого адреса начинаю читать... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться