Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Кольцевой буфер с ДМА в Cyclone-III
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
MisterDi
Есть задача организовать высокоскоростной (100 Мбайт/с) кольцевой буфер большого объема (1Мбайт) во внешнем 16-разрядном ОЗУ. Подскажите в какую сторону копать? Представляется вариант с перезагрузкой стандартного котроллера DMA по достижении конца буфера, но не понятно как обеспечить непрерывность потока. Нужно ставить ФИФО, но не пойму как это правильно делается. Ткните ссылкой где про это можно почитать. Эту http://electronix.ru/forum/index.php?showtopic=97111 книжку уже читаю.
Alex11
А кто будет рассказывать все остальное? Какой тип ОЗУ - статика или динамика, или DDR2? Какая скорость самой памяти, что кроме циклической записи нужно еще? Если только запись и в быструю статику - нужен только счетчик адреса, который будет считать по кольцу до Вашего мегабайта и формирователь времянки аккуратный. Если это реальное устройство и должно делать что-то еще, то лучше увеличить разрядность вдвое и также вдвое понизить частоту обращений. Остальное только после ответов. Телепаты все в отпуске.
dxp
Цитата(MisterDi @ Dec 12 2011, 03:59) *
Есть задача организовать высокоскоростной (100 Мбайт/с) кольцевой буфер большого объема (1Мбайт) во внешнем 16-разрядном ОЗУ. Подскажите в какую сторону копать? Представляется вариант с перезагрузкой стандартного котроллера DMA по достижении конца буфера, но не понятно как обеспечить непрерывность потока. Нужно ставить ФИФО, но не пойму как это правильно делается. Ткните ссылкой где про это можно почитать. Эту http://electronix.ru/forum/index.php?showtopic=97111 книжку уже читаю.

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

Собственно это эксперименты с уже готовым устройством от Вей-Куна: http://kazus.ru/forums/showthread.php?t=34251 Разрядность уже увеличена вдвое, но кроме АЦП к ОЗУ еще имеет доступ и процессор. Для увеличения доступной полосы ОЗУ хочу выделить часть памяти на кристалле под те модули программы, которые будут контролировать состояние буфера и момент окончания записи. Хочется кардинально увеличить объем памяти семплов.
Alex11
Я не сумел посмотреть на Казусе какой там проц, но в любом случае, организация DMA приведет к большим потерям времени на арбитраж. И надо внимательно смотреть, как предоставляется DMA, какая максимальная задержка от запроса до предоставления шины. Отсюда рассчитываете цикл записи так, чтобы прошло одно обращение от процессора, затем сколько-то Ваших записей. При этом общее максимальное время цикла деленное на количество переданных байт не должно превышать Ваших 10 нс. Размер FIFO в циклоне должен быть не меньше размера данных в цикле.
MisterDi
Процессор NIOS-II/s. С целью максимально разгрузить SDRAM хочу сделать часть памяти программ в накристальном ОЗУ и на время захвата данных процессор будет работать только с этой областью памяти, ожидая окончания ввода. Интерфейс с ФИФО думаю сделать на основе CFI и использовать сигналы адресной шины для захвата события синхронизации. Структура системы во вложении. Буду признателен за указание моих ошибок.
avacs
Посмотрел топики по NIOSII + АЦП и не нашел ничего с большей конкретикой... а если ближе к телу, аналогичный осциллограф, на базе DK 3C120 DSP kit +HSMC ADC AD9254... Вопрос в лоб, как правильнее сделать интерфейс, чтобы с минимальным участием процессора (или полностью аппаратно), из АЦП брались отсчеты 8бит на постоянной частоте выборок (с переключением частоты выборок от 5 МГц до 50 МГц) и данные переправлялись напрямую в выделенную область памяти в DDR2 ОЗУ (8МБ (с определнного адреса) из 64МБ, 133МГц), а позже произвольно из этой памяти будут братся и отправлятся в Эзернет.... Подскажите, обязательно ли использовать ДМА или можно организовать аппартный контроллер, который бы по кругу инкрементировал бы адреса из диапазона нужных в памяти и автоматом все будет работать или я грубо ошибаюсь??? Подскажите и направьте на путь истинный...
Wic
avacs, можно сделать как с процессором, так и без него.
Вариант с процессором делается через ДМА, чтобы понапрасну не тратить время процессора. Для этого варианта есть готовый модуль езернета. Останется только написать код для процессора.
Можно обойтись без процессора, но тогда придется брать самописные модули езернета и ДДР2. И руками писать всю логику обработки. Возможно будет потреблять меньше ресурсов, но придется потратить время на создание схемы управления.
Не совсем понятно что значит "произвольно из этой памяти будут братся".
На вид ваша задача очень похожа на курсовую, что когда то приходилось делать в универе.
avacs
Спасибо Wic что откликнулись. Эзернет и процессор с DDR2 уже есть и Слава Богу работает. осталось прикрутить АЦП AD9254 и заставить данные пихатся (или запихивать) в DDR2 по определенному адресу. Процессор выполняет только диспетчерские функции, формирует Эзернет пакеты, CRC и берет из памяти данные по 1024 отсчета и запихивает в Эзернет фрейм. Это и имелось ввиду, что произвольным образом берутся данные из этой памяти, вернее даже сказать, что пакетно, из памяти, подряд по 1024 отсчета и напрямую в Фрейм. Данные пишутся в выделенную область памяти по кругу т. е в принципе бы подошло ФИФО с двумя указателями записи и чтения, но с объемом в 1- 16 МБ. (Задачка из курсовой с реализацией в железе на макете). У меня пока что затык с интерфейсом, как правильнее к NIOS прикрутить АЦП и что бы это работало. (Не знаю, правильно ли было бы использовать tristate CFI как предложил выше MisterDi).
avacs
Вот SOPC моей системы: Нажмите для просмотра прикрепленного файла

Я нашел элемент Avalon custom Master, позволяющий по идее иметь прямой доступ к памяти в Nios. Нажмите для просмотра прикрепленного файлаНажмите для просмотра прикрепленного файла

на входы с аппаратного контроллера поступают данные и инкрементируются адреса, Sygnal Tap показывает что все работает как задумано... но в память не пишется...
Нажмите для просмотра прикрепленного файла
Память проверяю с тестовой программы из Nios. Причем если запускаю тест памяти (пишутся данные по адресам памяти и после читаются) все проходит на ура. Просто при чтении читаются предидущие данные и все... sad.gif
Раскритикуйте и направьте на путь истинный, что переделать или как реализовать аппаратную запись в память по необходимым адресам, с возможностью четния из Nios данных памяти.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.