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

 
 
 
Reply to this topicStart new topic
> Чтение ядром PL данных из DDR PS Zynq, Проясните, как правильно организовать...
svedach
сообщение Sep 30 2017, 15:39
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 135
Регистрация: 8-01-12
Из: Беларусь
Пользователь №: 69 226



Здравствуйте!
Столкнулся с проблемой чтения данных из DDR, подключенной к Zynq. Т.е. работа предполагается такая: при старте системы процессор из флешки копирует определенный массив значений, эти значения используются кастомным ядром в PL. При этом выборка значений случайная (массив большой)...
Писать поток (тоже надо) в DDR через DMA я умею и прекрасно с этим справляюсь, но вот чтение да еще не поточное а по случайным адресам пока толком не понимаю как сделать...
Есть предположение использовать CDMA, при этом к порту S_AXI_LITE подключается моя корка и генерит запросы чтения по нужным адресам (или пишет в регистры CDMA что и откуда прочитать...???)... Это будет работать? Или это не правильный путь?
Может есть способ проще?

Сообщение отредактировал svedach - Sep 30 2017, 16:58
Go to the top of the page
 
+Quote Post
svedach
сообщение Oct 1 2017, 07:47
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 135
Регистрация: 8-01-12
Из: Беларусь
Пользователь №: 69 226



Кажется нащупал верный путь: DataMover!!!
Буду пробовать...
Go to the top of the page
 
+Quote Post
Alexey_Rostov
сообщение Oct 1 2017, 11:42
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
svedach
сообщение Oct 1 2017, 12:57
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 135
Регистрация: 8-01-12
Из: Беларусь
Пользователь №: 69 226



Алексей, привет!
Проясни "Датамувер это движок sg dma"... Что значит движок?
Датамувер вроде неплохо подходит - кенеришь ему команды и на выходе получаешь поток данных, если я правильно понял...

Сообщение отредактировал svedach - Oct 1 2017, 12:58
Go to the top of the page
 
+Quote Post
Alexey_Rostov
сообщение Oct 1 2017, 13:35
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 236
Регистрация: 28-06-13
Из: Минск, Беларусь
Пользователь №: 77 312



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

Привет ) Датамувер входит в состав SG DMA и выполняет транзакции на шине данных. Для обмена с ДДР датамувер подходит, но тебе каждый раз прийдется записывать указатели и стартовать датамувер заново, плюс ко всему, насколько я помню, интерфейс для записи указателей у датамувера не акси: я записывал адреса для обмена из логики, а не из СНК. Если ты при обмене для работы с указателями используешь процессор, то SG DMA очень удобное решение с точки зрения работы с указателями на массивы данных в ддр
Go to the top of the page
 
+Quote Post
svedach
сообщение Oct 1 2017, 14:44
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 135
Регистрация: 8-01-12
Из: Беларусь
Пользователь №: 69 226



Я тоже генерирую команды датамуверу из логики, почитал доки - структура команд простаяsm.gif + есть фифо команд. Он кстати удобно перекладывает прочитанные данные в АКСИ Стрим + можно указывать последний запрос - по нему будет генериться tlast. По этому стробу удобно запускать обработку принятых данных...
Делаю автомат состояний для генерации команд, попробую - отпишусь что да как...
Go to the top of the page
 
+Quote Post
Alexey_Rostov
сообщение Oct 1 2017, 14:49
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 236
Регистрация: 28-06-13
Из: Минск, Беларусь
Пользователь №: 77 312



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


Из логики тоже автомат делал и в качестве сигнала об успешной транзакции использовал статусный сигнал датамувера.
Go to the top of the page
 
+Quote Post
svedach
сообщение Oct 2 2017, 08:29
Сообщение #8


Частый гость
**

Группа: Свой
Сообщений: 135
Регистрация: 8-01-12
Из: Беларусь
Пользователь №: 69 226



Алексей, привет!
Наблюдаю следующую картину:


Это первый запрос пачки данных, после того, как MM2S_CMD_Ready упал последний раз - больше не поднимается... Не могу понять, что не так...
Go to the top of the page
 
+Quote Post
svedach
сообщение Oct 2 2017, 09:52
Сообщение #9


Частый гость
**

Группа: Свой
Сообщений: 135
Регистрация: 8-01-12
Из: Беларусь
Пользователь №: 69 226



Все, разобрался, оказывается шину статуса тоже обязательно надо читать (или хотя бы установить *_sts_tready в "1")...
Go to the top of the page
 
+Quote Post
Alexey_Rostov
сообщение Oct 2 2017, 10:23
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
svedach
сообщение Oct 2 2017, 11:14
Сообщение #11


Частый гость
**

Группа: Свой
Сообщений: 135
Регистрация: 8-01-12
Из: Беларусь
Пользователь №: 69 226



У меня сейчас sts_tdata периодически становится 0x40 - ошибка от слейва...
Не сталкивался с таким?



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

Сообщение отредактировал svedach - Oct 2 2017, 11:53
Go to the top of the page
 
+Quote Post
Alexey_Rostov
сообщение Oct 2 2017, 12:34
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 236
Регистрация: 28-06-13
Из: Минск, Беларусь
Пользователь №: 77 312



Цитата(svedach @ Oct 2 2017, 14:14) *
У меня сейчас sts_tdata периодически становится 0x40 - ошибка от слейва...
Не сталкивался с таким?



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


У меня была DDR на ML605 и там была проблема записи в определенный регион памяти. я просто исключил его из работы.
Go to the top of the page
 
+Quote Post
svedach
сообщение Oct 2 2017, 13:44
Сообщение #13


Частый гость
**

Группа: Свой
Сообщений: 135
Регистрация: 8-01-12
Из: Беларусь
Пользователь №: 69 226



В общем это действительно был какой-то специфический регион... Задал смещение в распределенную в SDK память и всегда 0x80.
Go to the top of the page
 
+Quote Post
Alexey_Rostov
сообщение Oct 2 2017, 13:49
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 236
Регистрация: 28-06-13
Из: Минск, Беларусь
Пользователь №: 77 312



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

А что значит "распределённая в SDK память "?
Go to the top of the page
 
+Quote Post
svedach
сообщение Oct 2 2017, 14:42
Сообщение #15


Частый гость
**

Группа: Свой
Сообщений: 135
Регистрация: 8-01-12
Из: Беларусь
Пользователь №: 69 226



Я по AXI в регистр в своей корке пишу адрес статического массива (это и есть распределенная память sm.gif) и с этого адреса начинаю читать...
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 15th June 2025 - 13:17
Рейтинг@Mail.ru


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