Jump to content

    
Sign in to follow this  
svedach

Чтение ядром PL данных из DDR PS Zynq

Recommended Posts

Здравствуйте!

Столкнулся с проблемой чтения данных из DDR, подключенной к Zynq. Т.е. работа предполагается такая: при старте системы процессор из флешки копирует определенный массив значений, эти значения используются кастомным ядром в PL. При этом выборка значений случайная (массив большой)...

Писать поток (тоже надо) в DDR через DMA я умею и прекрасно с этим справляюсь, но вот чтение да еще не поточное а по случайным адресам пока толком не понимаю как сделать...

Есть предположение использовать CDMA, при этом к порту S_AXI_LITE подключается моя корка и генерит запросы чтения по нужным адресам (или пишет в регистры CDMA что и откуда прочитать...???)... Это будет работать? Или это не правильный путь?

Может есть способ проще?

Edited by svedach

Share this post


Link to post
Share on other sites
Здравствуйте!

Столкнулся с проблемой чтения данных из DDR, подключенной к Zynq. Т.е. работа предполагается такая: при старте системы процессор из флешки копирует определенный массив значений, эти значения используются кастомным ядром в PL. При этом выборка значений случайная (массив большой)...

Писать поток (тоже надо) в DDR через DMA я умею и прекрасно с этим справляюсь, но вот чтение да еще не поточное а по случайным адресам пока толком не понимаю как сделать...

Есть предположение использовать CDMA, при этом к порту S_AXI_LITE подключается моя корка и генерит запросы чтения по нужным адресам (или пишет в регистры CDMA что и откуда прочитать...???)... Это будет работать?

Может есть способ проще?

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

 

Кажется нащупал верный путь: DataMover!!!

Буду пробовать...

 

Датамувер это движок sg dma.

Edited by Alexey_Rostov

Share this post


Link to post
Share on other sites

Алексей, привет!

Проясни "Датамувер это движок sg dma"... Что значит движок?

Датамувер вроде неплохо подходит - кенеришь ему команды и на выходе получаешь поток данных, если я правильно понял...

Edited by svedach

Share this post


Link to post
Share on other sites
Алексей, привет!

Проясни "Датамувер это движок sg dma"... Что значит движок?

Датамувер вроде неплохо подходит - кенеришь ему команды и на выходе получаешь поток данных, если я правильно понял...

Привет ) Датамувер входит в состав SG DMA и выполняет транзакции на шине данных. Для обмена с ДДР датамувер подходит, но тебе каждый раз прийдется записывать указатели и стартовать датамувер заново, плюс ко всему, насколько я помню, интерфейс для записи указателей у датамувера не акси: я записывал адреса для обмена из логики, а не из СНК. Если ты при обмене для работы с указателями используешь процессор, то SG DMA очень удобное решение с точки зрения работы с указателями на массивы данных в ддр

Share this post


Link to post
Share on other sites

Я тоже генерирую команды датамуверу из логики, почитал доки - структура команд простая:) + есть фифо команд. Он кстати удобно перекладывает прочитанные данные в АКСИ Стрим + можно указывать последний запрос - по нему будет генериться tlast. По этому стробу удобно запускать обработку принятых данных...

Делаю автомат состояний для генерации команд, попробую - отпишусь что да как...

Share this post


Link to post
Share on other sites
Я тоже генерирую команды датамуверу из логики, почитал доки - структура команд простая:) + есть фифо команд. Он кстати удобно перекладывает прочитанные данные в АКСИ Стрим + можно указывать последний запрос - по нему будет генериться tlast. По этому стробу удобно запускать обработку принятых данных...

Делаю автомат состояний для генерации команд, попробую - отпишусь что да как...

 

Из логики тоже автомат делал и в качестве сигнала об успешной транзакции использовал статусный сигнал датамувера.

Share this post


Link to post
Share on other sites

Алексей, привет!

Наблюдаю следующую картину:

image.png

 

Это первый запрос пачки данных, после того, как MM2S_CMD_Ready упал последний раз - больше не поднимается... Не могу понять, что не так...

 

Share this post


Link to post
Share on other sites
Все, разобрался, оказывается шину статуса тоже обязательно надо читать (или хотя бы установить *_sts_tready в "1")...

 

Статусный реади я вообще в 1 поставил и не трогал больше, только отслеживал sts_tvalid.

Edited by Alexey_Rostov

Share this post


Link to post
Share on other sites

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

Не сталкивался с таким?

 

image.png

 

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

P.S. Адреса чтения пока - просто последовательность о 0 до 2621440, заданы только для теста....

Edited by svedach

Share this post


Link to post
Share on other sites
У меня сейчас sts_tdata периодически становится 0x40 - ошибка от слейва...

Не сталкивался с таким?

 

image.png

 

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

P.S. Адреса чтения пока - просто последовательность о 0 до 2621440, заданы только для теста....

 

У меня была DDR на ML605 и там была проблема записи в определенный регион памяти. я просто исключил его из работы.

Share this post


Link to post
Share on other sites
В общем это действительно был какой-то специфический регион... Задал смещение в распределенную в SDK память и всегда 0x80.

А что значит "распределённая в SDK память "?

 

Share this post


Link to post
Share on other sites

Я по AXI в регистр в своей корке пишу адрес статического массива (это и есть распределенная память :)) и с этого адреса начинаю читать...

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this