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

 
 
 
Reply to this topicStart new topic
> Nios + DMA + SDRAM
Acvarif
сообщение May 2 2012, 12:32
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850



Задачка вроде не сложная но с наскоку не получается.
Пытаюсь подключить к Nios контроллер DMA который должен снимать (читать) данные фильтра (16 бит) (VHDL модуль) и запихивать их в SDRAM. Данные (каждое слово) предполагается снимать по фронту сигнала который формируется в модуле фильтра (очевидно читать данные в DMA нужно по прерыванию)

Почитал про Nios DMA и понял только как DMA подключить к SDRAM. Не пойму как состыковать с фильтром (или регистром где будут появляться данные фильтра) ту часть DMA которая должна читать данные.

Прикрепленное изображение

Если у кого был подобный опыт, направьте пожалуйста на правильный путь

Сообщение отредактировал Acvarif - May 2 2012, 12:35
Go to the top of the page
 
+Quote Post
alexPec
сообщение May 2 2012, 19:15
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Цитата(Acvarif @ May 2 2012, 16:32) *
Задачка вроде не сложная но с наскоку не получается.
Пытаюсь подключить к Nios контроллер DMA который должен снимать (читать) данные фильтра (16 бит) (VHDL модуль) и запихивать их в SDRAM. Данные (каждое слово) предполагается снимать по фронту сигнала который формируется в модуле фильтра (очевидно читать данные в DMA нужно по прерыванию)

Почитал про Nios DMA и понял только как DMA подключить к SDRAM. Не пойму как состыковать с фильтром (или регистром где будут появляться данные фильтра) ту часть DMA которая должна читать данные.

Прикрепленное изображение

Если у кого был подобный опыт, направьте пожалуйста на правильный путь


То есть данные у вас идут потоком, каждый клок? Тогда надо ставить не DMA, а SGDMA в режиме stream to memory. Сделайте фиктивный компонент Avalon ST source, чтоб вход стрима вывести из сопца. А там уж цепляйте свой фильтр. Там будут сигналы что-то типа data[], datavalid, SOP, EOP. Скорее всего фифо нужно еще будет между фильтром и SGDMA.
Go to the top of the page
 
+Quote Post
barabek
сообщение May 3 2012, 03:29
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 540
Регистрация: 16-08-07
Из: Владивосток
Пользователь №: 29 831



Цитата(Acvarif @ May 2 2012, 22:32) *
Почитал про Nios DMA и понял только как DMA подключить к SDRAM. Не пойму как состыковать с фильтром (или регистром где будут появляться данные фильтра) ту часть DMA которая должна читать данные.

Прикрепленное изображение

Если у кого был подобный опыт, направьте пожалуйста на правильный путь


Все просто. И можно обойтись без монстра SCDMA простым модулем DMA. Вы делаете у своего модуля с фильтром обычный интерфейс avalon MM slave. Канал read DMA соединяете с Вашим модулем. Все готово. Т.к. у Вас фильтр содержит фактически только один регистр, или другими словами адресное пространство у Вашего модуля 1, то в регистр управления DMA (control) Вы должны выставить в еденицу флаг RCON (Reads from a constant address). Логика работы будет такой. DMA будет постоянно опрашивать модуль фильтра. А модуль сигнализировать (вернее управлять передачей) о готовности данных своим выходом waitrequest. В более старых спецификациях (в 9-ой еще было) на авалон были дополнительные сигналы управления передачами (dataavailable, readyfordata), но они упразднены и на них лучше не расчитывать.
Go to the top of the page
 
+Quote Post
Acvarif
сообщение May 3 2012, 07:20
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850



Цитата(alexPec @ May 2 2012, 22:15) *
То есть данные у вас идут потоком, каждый клок? Тогда надо ставить не DMA, а SGDMA в режиме stream to memory. Сделайте фиктивный компонент Avalon ST source, чтоб вход стрима вывести из сопца. А там уж цепляйте свой фильтр. Там будут сигналы что-то типа data[], datavalid, SOP, EOP. Скорее всего фифо нужно еще будет между фильтром и SGDMA.

Спасибо. Надо почитать про это дело. Как сделать фиктивный компонент (в общих чертах)?

Цитата
Все просто. И можно обойтись без монстра SCDMA простым модулем DMA. Вы делаете у своего модуля с фильтром обычный интерфейс avalon MM slave. Канал read DMA соединяете с Вашим модулем. Все готово. Т.к. у Вас фильтр содержит фактически только один регистр, или другими словами адресное пространство у Вашего модуля 1, то в регистр управления DMA (control) Вы должны выставить в еденицу флаг RCON (Reads from a constant address). Логика работы будет такой. DMA будет постоянно опрашивать модуль фильтра. А модуль сигнализировать (вернее управлять передачей) о готовности данных своим выходом waitrequest. В более старых спецификациях (в 9-ой еще было) на авалон были дополнительные сигналы управления передачами (dataavailable, readyfordata), но они упразднены и на них лучше не расчитывать.

Спасибо. Где-то так себе и мыслил. Проблема в том, что совершенно не представляю как к своему VHDL фильтру добавить интерфейс avalon MM slave. Я так понимаю он после этого может быть присоединен как компонент в библиотеку SOPS? А иначе как соединить сигнал read (DMA) с фильтром?
Go to the top of the page
 
+Quote Post
alexPec
сообщение May 3 2012, 10:08
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Цитата(Acvarif @ May 3 2012, 11:20) *
Спасибо. Надо почитать про это дело. Как сделать фиктивный компонент (в общих чертах)?


В сопц-билдере в темплейтах есть avalon-st source. Надо только задать параметры и создать компонент. Потом к нему прицепить SGDMA.
Go to the top of the page
 
+Quote Post
barabek
сообщение May 3 2012, 10:24
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 540
Регистрация: 16-08-07
Из: Владивосток
Пользователь №: 29 831



Цитата(Acvarif @ May 3 2012, 17:20) *
Спасибо. Где-то так себе и мыслил. Проблема в том, что совершенно не представляю как к своему VHDL фильтру добавить интерфейс avalon MM slave. Я так понимаю он после этого может быть присоединен как компонент в библиотеку SOPS? А иначе как соединить сигнал read (DMA) с фильтром?

Да, Вы правильно мыслите. После создания интерфейса добавляете модуль в библиотеку IP модулей. Иначе никак. План действий. Качаете спецификацию на авалон с сайта альтеры. Читаете первые 3 (ну можете и 4-й раздел про прерывания) раздела. Это 30 страниц. С учетом альтеровской воды это совсем не много. Далее читаете про создание своего компонента в ... К черту читать, открываете SOPC, открываете file->new component. Указываете свой файл. Во вкладке интерфейсов настраиваете интерфейс (-сы). Если сигналы назвали с умом, то на вкладке сигналы все станет ровно, нет - поправите. Что непонятно - ищите "SOPC Builder. User guide" и читаете раздел "Chapter 6. Component Editor", это еще 8 страничек. В общем все просто.

UPD. Кстати, а какая скорость выдачи сигнала с Вашего модуля? Может действительно большие скорости и нужно воспользоваться советом alexPec. А может и нет.
Go to the top of the page
 
+Quote Post
Acvarif
сообщение May 3 2012, 11:12
Сообщение #7


Знающий
****

Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850



Цитата(barabek @ May 3 2012, 13:24) *
UPD. Кстати, а какая скорость выдачи сигнала с Вашего модуля? Может действительно большие скорости и нужно воспользоваться советом alexPec. А может и нет.

Скорости действительно большие. Фильтр готовит данные (16 бит) за 8 мкс (время между выборками). Получается, что за это время нужно с пом. DMA одно слово разместить в памяти и быть готовым получить следующее.
Go to the top of the page
 
+Quote Post
barabek
сообщение May 3 2012, 21:23
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 540
Регистрация: 16-08-07
Из: Владивосток
Пользователь №: 29 831



Цитата(Acvarif @ May 3 2012, 21:12) *
Скорости действительно большие. Фильтр готовит данные (16 бит) за 8 мкс (время между выборками). Получается, что за это время нужно с пом. DMA одно слово разместить в памяти и быть готовым получить следующее.


Не, ну это разве скорости ! 125 кГц. Если ниос у Вас, к примеру, работает на 50 МГц то отношение частот 400. Я не вижу смысла связываться со стримом. Это имеет смысл когда у Вас скорости соизмеримые.Да и то, как мне видится, я со стримом не работал, зависит от используемой памяти. Так что мой совет выше в силе.


Go to the top of the page
 
+Quote Post
Orochi
сообщение May 4 2012, 01:05
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 46
Регистрация: 6-07-11
Из: Кострома
Пользователь №: 66 096





По сути есть та же задача: написать модуль, получающий данные с частотой от 0 до 100MHz (частота константа и определяется в зависимости от состояния регистров в модуле), пишет их в FIFO (меняем клоковый домен/буфер) и далее в DMA/SGDMA и в память (SDRAM).
На картинке примерно изобразил то как я себе представляю структуру модуля:
На входе conduit так как данные получаем из вне.
На выходе Avalon-ST Source, т.к. в спеификации по интерфейсам было написано что этот интерфейс для потоковой передачи данных.
Управления внутренними регистрами модуля осущетвляется через интерфейт Avalon-MM.

Остались вопросы по Avalon-ST как видно на картинке (внизу) есть пропуски циклов, когда данные не пишутся. Подскажите как сконфигурировать Avalon-ST что бы можно было писать в FIFO 1 пачку (32 бита) за 1 такт в течении всего промежутка времени получения данных с интерфейса conduit.

И тема про DMA тоже интересна, прошу выкладывать результаты "трудов" если не жалко на форум, будем учиться вместе)
Go to the top of the page
 
+Quote Post
alexPec
сообщение May 4 2012, 07:42
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Цитата(Orochi @ May 4 2012, 05:05) *
Остались вопросы по Avalon-ST как видно на картинке (внизу) есть пропуски циклов, когда данные не пишутся. Подскажите как сконфигурировать Avalon-ST что бы можно было писать в FIFO 1 пачку (32 бита) за 1 такт в течении всего промежутка времени получения данных с интерфейса conduit.

И тема про DMA тоже интересна, прошу выкладывать результаты "трудов" если не жалко на форум, будем учиться вместе)


Как я понял, valid - сигнал с Вашего устройства на avalon st, а ready - сигнал готовности avalon-st на Ваше устройство. Там где Вы выделили по-моему пропуск обусловлен тем, что источник (Ваше устройство) не готово отдать данные.

Вообще схему я вижу такую: Ваше устройство - FIFO - avalonst. Ваше устройство работает со своим клоком и пишет в фифо когда ему нужно. Avalonst считывает из фифо когда ему нужно, независимо от Вашего устройства, лишь бы данные в фифо были. Непонятен вопрос, поскольку устройство в этом случае пишет в фифо независимо от того читает из фифо авалон или нет. Лишь бы переполнений не было

Цитата(barabek @ May 4 2012, 01:23) *
Не, ну это разве скорости ! 125 кГц. Если ниос у Вас, к примеру, работает на 50 МГц то отношение частот 400. Я не вижу смысла связываться со стримом. Это имеет смысл когда у Вас скорости соизмеримые.Да и то, как мне видится, я со стримом не работал, зависит от используемой памяти. Так что мой совет выше в силе.

Согласен, скорость ни о чем, можно наверно и через прерывания без всякого DMA.
Go to the top of the page
 
+Quote Post
Orochi
сообщение May 4 2012, 10:50
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 46
Регистрация: 6-07-11
Из: Кострома
Пользователь №: 66 096





Удалил сигнал ready. То что получилось видно на картинке. Вопрос такой: например, в момент времени "1" мы имеем перепад valid 0->1. Как видно из диаграммы пока valid не станет 0 передаются 2 "пачки" данных D1,D2.
Так вот если я установлю valid=1 перед 1 посылкой и сброшу только после последней, не получится ли тот эффект которого я добиваюсь? (а имеенно передача 1 отсчёта данных за 1 цикл clk в течении всего времени получения данных от интерфейса conduit).
Go to the top of the page
 
+Quote Post
gosu-art
сообщение May 22 2012, 04:53
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 555
Регистрация: 14-10-09
Пользователь №: 52 939



Здравствуйте Acvarif!
Можно немного поинтересоваться о вашей системе. Я смотрю вы используете eth_ocm. Какой скорости удалось достигнуть?
Go to the top of the page
 
+Quote Post

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

 


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


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