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

 
 
 
Reply to this topicStart new topic
> Кольцевой буфер с ДМА в Cyclone-III, Как сделать?
MisterDi
сообщение Dec 11 2011, 20:59
Сообщение #1


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

Группа: Участник
Сообщений: 88
Регистрация: 28-10-08
Из: Днепропетровск
Пользователь №: 41 263



Есть задача организовать высокоскоростной (100 Мбайт/с) кольцевой буфер большого объема (1Мбайт) во внешнем 16-разрядном ОЗУ. Подскажите в какую сторону копать? Представляется вариант с перезагрузкой стандартного котроллера DMA по достижении конца буфера, но не понятно как обеспечить непрерывность потока. Нужно ставить ФИФО, но не пойму как это правильно делается. Ткните ссылкой где про это можно почитать. Эту http://electronix.ru/forum/index.php?showtopic=97111 книжку уже читаю.

Сообщение отредактировал MisterDi - Dec 11 2011, 21:01
Go to the top of the page
 
+Quote Post
Alex11
сообщение Dec 11 2011, 22:53
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 106
Регистрация: 23-10-04
Из: С-Петербург
Пользователь №: 965



А кто будет рассказывать все остальное? Какой тип ОЗУ - статика или динамика, или DDR2? Какая скорость самой памяти, что кроме циклической записи нужно еще? Если только запись и в быструю статику - нужен только счетчик адреса, который будет считать по кольцу до Вашего мегабайта и формирователь времянки аккуратный. Если это реальное устройство и должно делать что-то еще, то лучше увеличить разрядность вдвое и также вдвое понизить частоту обращений. Остальное только после ответов. Телепаты все в отпуске.
Go to the top of the page
 
+Quote Post
dxp
сообщение Dec 12 2011, 03:38
Сообщение #3


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(MisterDi @ Dec 12 2011, 03:59) *
Есть задача организовать высокоскоростной (100 Мбайт/с) кольцевой буфер большого объема (1Мбайт) во внешнем 16-разрядном ОЗУ. Подскажите в какую сторону копать? Представляется вариант с перезагрузкой стандартного котроллера DMA по достижении конца буфера, но не понятно как обеспечить непрерывность потока. Нужно ставить ФИФО, но не пойму как это правильно делается. Ткните ссылкой где про это можно почитать. Эту http://electronix.ru/forum/index.php?showtopic=97111 книжку уже читаю.

Почему бы не использовать готовое решение из представленных тут или тут или у других производителей (Alliance, Samsung, Micron, ISSI)?


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
MisterDi
сообщение Dec 12 2011, 06:10
Сообщение #4


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

Группа: Участник
Сообщений: 88
Регистрация: 28-10-08
Из: Днепропетровск
Пользователь №: 41 263



Сильно углубился в проблему и все показалось само собой разумеющиеся sm.gif
Цитата
Какой тип ОЗУ - статика или динамика, или DDR2?
SDRAM - 133MHz но больше 125МГц тактовой дать не получается
Цитата
Если это реальное устройство и должно делать что-то еще, то лучше увеличить разрядность вдвое и также вдвое понизить частоту обращений.

Собственно это эксперименты с уже готовым устройством от Вей-Куна: http://kazus.ru/forums/showthread.php?t=34251 Разрядность уже увеличена вдвое, но кроме АЦП к ОЗУ еще имеет доступ и процессор. Для увеличения доступной полосы ОЗУ хочу выделить часть памяти на кристалле под те модули программы, которые будут контролировать состояние буфера и момент окончания записи. Хочется кардинально увеличить объем памяти семплов.
Go to the top of the page
 
+Quote Post
Alex11
сообщение Dec 12 2011, 13:54
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 106
Регистрация: 23-10-04
Из: С-Петербург
Пользователь №: 965



Я не сумел посмотреть на Казусе какой там проц, но в любом случае, организация DMA приведет к большим потерям времени на арбитраж. И надо внимательно смотреть, как предоставляется DMA, какая максимальная задержка от запроса до предоставления шины. Отсюда рассчитываете цикл записи так, чтобы прошло одно обращение от процессора, затем сколько-то Ваших записей. При этом общее максимальное время цикла деленное на количество переданных байт не должно превышать Ваших 10 нс. Размер FIFO в циклоне должен быть не меньше размера данных в цикле.
Go to the top of the page
 
+Quote Post
MisterDi
сообщение Dec 13 2011, 11:02
Сообщение #6


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

Группа: Участник
Сообщений: 88
Регистрация: 28-10-08
Из: Днепропетровск
Пользователь №: 41 263



Процессор NIOS-II/s. С целью максимально разгрузить SDRAM хочу сделать часть памяти программ в накристальном ОЗУ и на время захвата данных процессор будет работать только с этой областью памяти, ожидая окончания ввода. Интерфейс с ФИФО думаю сделать на основе CFI и использовать сигналы адресной шины для захвата события синхронизации. Структура системы во вложении. Буду признателен за указание моих ошибок.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
avacs
сообщение Mar 15 2012, 10:59
Сообщение #7





Группа: Участник
Сообщений: 13
Регистрация: 10-12-10
Из: RND
Пользователь №: 61 523



Посмотрел топики по NIOSII + АЦП и не нашел ничего с большей конкретикой... а если ближе к телу, аналогичный осциллограф, на базе DK 3C120 DSP kit +HSMC ADC AD9254... Вопрос в лоб, как правильнее сделать интерфейс, чтобы с минимальным участием процессора (или полностью аппаратно), из АЦП брались отсчеты 8бит на постоянной частоте выборок (с переключением частоты выборок от 5 МГц до 50 МГц) и данные переправлялись напрямую в выделенную область памяти в DDR2 ОЗУ (8МБ (с определнного адреса) из 64МБ, 133МГц), а позже произвольно из этой памяти будут братся и отправлятся в Эзернет.... Подскажите, обязательно ли использовать ДМА или можно организовать аппартный контроллер, который бы по кругу инкрементировал бы адреса из диапазона нужных в памяти и автоматом все будет работать или я грубо ошибаюсь??? Подскажите и направьте на путь истинный...

Сообщение отредактировал avacs - Mar 15 2012, 12:25
Go to the top of the page
 
+Quote Post
Wic
сообщение Mar 16 2012, 06:19
Сообщение #8


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

Группа: Свой
Сообщений: 183
Регистрация: 16-03-08
Из: Новосибирск
Пользователь №: 35 954



avacs, можно сделать как с процессором, так и без него.
Вариант с процессором делается через ДМА, чтобы понапрасну не тратить время процессора. Для этого варианта есть готовый модуль езернета. Останется только написать код для процессора.
Можно обойтись без процессора, но тогда придется брать самописные модули езернета и ДДР2. И руками писать всю логику обработки. Возможно будет потреблять меньше ресурсов, но придется потратить время на создание схемы управления.
Не совсем понятно что значит "произвольно из этой памяти будут братся".
На вид ваша задача очень похожа на курсовую, что когда то приходилось делать в универе.
Go to the top of the page
 
+Quote Post
avacs
сообщение Mar 16 2012, 08:33
Сообщение #9





Группа: Участник
Сообщений: 13
Регистрация: 10-12-10
Из: RND
Пользователь №: 61 523



Спасибо Wic что откликнулись. Эзернет и процессор с DDR2 уже есть и Слава Богу работает. осталось прикрутить АЦП AD9254 и заставить данные пихатся (или запихивать) в DDR2 по определенному адресу. Процессор выполняет только диспетчерские функции, формирует Эзернет пакеты, CRC и берет из памяти данные по 1024 отсчета и запихивает в Эзернет фрейм. Это и имелось ввиду, что произвольным образом берутся данные из этой памяти, вернее даже сказать, что пакетно, из памяти, подряд по 1024 отсчета и напрямую в Фрейм. Данные пишутся в выделенную область памяти по кругу т. е в принципе бы подошло ФИФО с двумя указателями записи и чтения, но с объемом в 1- 16 МБ. (Задачка из курсовой с реализацией в железе на макете). У меня пока что затык с интерфейсом, как правильнее к NIOS прикрутить АЦП и что бы это работало. (Не знаю, правильно ли было бы использовать tristate CFI как предложил выше MisterDi).
Go to the top of the page
 
+Quote Post
avacs
сообщение Mar 19 2012, 12:54
Сообщение #10





Группа: Участник
Сообщений: 13
Регистрация: 10-12-10
Из: RND
Пользователь №: 61 523



Вот SOPC моей системы:
Прикрепленное изображение


Я нашел элемент Avalon custom Master, позволяющий по идее иметь прямой доступ к памяти в Nios. Прикрепленный файл  Avalon_MM_Masters_Readme.pdf ( 129.63 килобайт ) Кол-во скачиваний: 2488
Прикрепленный файл  Avalon_cust_master.zip ( 26.42 килобайт ) Кол-во скачиваний: 86


на входы с аппаратного контроллера поступают данные и инкрементируются адреса, Sygnal Tap показывает что все работает как задумано... но в память не пишется...
Прикрепленное изображение

Память проверяю с тестовой программы из Nios. Причем если запускаю тест памяти (пишутся данные по адресам памяти и после читаются) все проходит на ура. Просто при чтении читаются предидущие данные и все... sad.gif
Раскритикуйте и направьте на путь истинный, что переделать или как реализовать аппаратную запись в память по необходимым адресам, с возможностью четния из Nios данных памяти.
Go to the top of the page
 
+Quote Post

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

 


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


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