|
|
  |
Чтение ядром PL данных из DDR PS Zynq, Проясните, как правильно организовать... |
|
|
|
Oct 1 2017, 11:42
|
Местный
  
Группа: Свой
Сообщений: 236
Регистрация: 28-06-13
Из: Минск, Беларусь
Пользователь №: 77 312

|
Цитата(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.
Сообщение отредактировал Alexey_Rostov - Oct 1 2017, 11:44
|
|
|
|
|
Oct 1 2017, 13:35
|
Местный
  
Группа: Свой
Сообщений: 236
Регистрация: 28-06-13
Из: Минск, Беларусь
Пользователь №: 77 312

|
Цитата(svedach @ Oct 1 2017, 15:57)  Алексей, привет! Проясни "Датамувер это движок sg dma"... Что значит движок? Датамувер вроде неплохо подходит - кенеришь ему команды и на выходе получаешь поток данных, если я правильно понял... Привет ) Датамувер входит в состав SG DMA и выполняет транзакции на шине данных. Для обмена с ДДР датамувер подходит, но тебе каждый раз прийдется записывать указатели и стартовать датамувер заново, плюс ко всему, насколько я помню, интерфейс для записи указателей у датамувера не акси: я записывал адреса для обмена из логики, а не из СНК. Если ты при обмене для работы с указателями используешь процессор, то SG DMA очень удобное решение с точки зрения работы с указателями на массивы данных в ддр
|
|
|
|
|
Oct 1 2017, 14:44
|
Частый гость
 
Группа: Свой
Сообщений: 135
Регистрация: 8-01-12
Из: Беларусь
Пользователь №: 69 226

|
Я тоже генерирую команды датамуверу из логики, почитал доки - структура команд простая  + есть фифо команд. Он кстати удобно перекладывает прочитанные данные в АКСИ Стрим + можно указывать последний запрос - по нему будет генериться tlast. По этому стробу удобно запускать обработку принятых данных... Делаю автомат состояний для генерации команд, попробую - отпишусь что да как...
|
|
|
|
|
Oct 1 2017, 14:49
|
Местный
  
Группа: Свой
Сообщений: 236
Регистрация: 28-06-13
Из: Минск, Беларусь
Пользователь №: 77 312

|
Цитата(svedach @ Oct 1 2017, 17:44)  Я тоже генерирую команды датамуверу из логики, почитал доки - структура команд простая  + есть фифо команд. Он кстати удобно перекладывает прочитанные данные в АКСИ Стрим + можно указывать последний запрос - по нему будет генериться tlast. По этому стробу удобно запускать обработку принятых данных... Делаю автомат состояний для генерации команд, попробую - отпишусь что да как... Из логики тоже автомат делал и в качестве сигнала об успешной транзакции использовал статусный сигнал датамувера.
|
|
|
|
|
Oct 2 2017, 08:29
|
Частый гость
 
Группа: Свой
Сообщений: 135
Регистрация: 8-01-12
Из: Беларусь
Пользователь №: 69 226

|
Алексей, привет! Наблюдаю следующую картину:  Это первый запрос пачки данных, после того, как MM2S_CMD_Ready упал последний раз - больше не поднимается... Не могу понять, что не так...
|
|
|
|
|
Oct 2 2017, 10:23
|
Местный
  
Группа: Свой
Сообщений: 236
Регистрация: 28-06-13
Из: Минск, Беларусь
Пользователь №: 77 312

|
Цитата(svedach @ Oct 2 2017, 12:52)  Все, разобрался, оказывается шину статуса тоже обязательно надо читать (или хотя бы установить *_sts_tready в "1")... Статусный реади я вообще в 1 поставил и не трогал больше, только отслеживал sts_tvalid.
Сообщение отредактировал Alexey_Rostov - Oct 2 2017, 10:24
|
|
|
|
|
Oct 2 2017, 11:14
|
Частый гость
 
Группа: Свой
Сообщений: 135
Регистрация: 8-01-12
Из: Беларусь
Пользователь №: 69 226

|
У меня сейчас sts_tdata периодически становится 0x40 - ошибка от слейва... Не сталкивался с таким?  При чем после того, как восстанавливается 0x80 (в конце времянки) дальше всегда вроде 0x80. Похоже на то, что какой-то регион памяти недоступен для чтения, или я не правильно понимаю? P.S. Адреса чтения пока - просто последовательность о 0 до 2621440, заданы только для теста....
Сообщение отредактировал svedach - Oct 2 2017, 11:53
|
|
|
|
|
Oct 2 2017, 12:34
|
Местный
  
Группа: Свой
Сообщений: 236
Регистрация: 28-06-13
Из: Минск, Беларусь
Пользователь №: 77 312

|
Цитата(svedach @ Oct 2 2017, 14:14)  У меня сейчас sts_tdata периодически становится 0x40 - ошибка от слейва... Не сталкивался с таким?  При чем после того, как восстанавливается 0x80 (в конце времянки) дальше всегда вроде 0x80. Похоже на то, что какой-то регион памяти недоступен для чтения, или я не правильно понимаю? P.S. Адреса чтения пока - просто последовательность о 0 до 2621440, заданы только для теста.... У меня была DDR на ML605 и там была проблема записи в определенный регион памяти. я просто исключил его из работы.
|
|
|
|
|
Oct 2 2017, 13:49
|
Местный
  
Группа: Свой
Сообщений: 236
Регистрация: 28-06-13
Из: Минск, Беларусь
Пользователь №: 77 312

|
Цитата(svedach @ Oct 2 2017, 16:44)  В общем это действительно был какой-то специфический регион... Задал смещение в распределенную в SDK память и всегда 0x80. А что значит "распределённая в SDK память "?
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|