|
|
  |
Кольцевой буфер с ДМА в Cyclone-III, Как сделать? |
|
|
|
Dec 11 2011, 20:59
|
Частый гость
 
Группа: Участник
Сообщений: 88
Регистрация: 28-10-08
Из: Днепропетровск
Пользователь №: 41 263

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

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)?
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Dec 12 2011, 06:10
|
Частый гость
 
Группа: Участник
Сообщений: 88
Регистрация: 28-10-08
Из: Днепропетровск
Пользователь №: 41 263

|
Сильно углубился в проблему и все показалось само собой разумеющиеся Цитата Какой тип ОЗУ - статика или динамика, или DDR2? SDRAM - 133MHz но больше 125МГц тактовой дать не получается Цитата Если это реальное устройство и должно делать что-то еще, то лучше увеличить разрядность вдвое и также вдвое понизить частоту обращений. Собственно это эксперименты с уже готовым устройством от Вей-Куна: http://kazus.ru/forums/showthread.php?t=34251 Разрядность уже увеличена вдвое, но кроме АЦП к ОЗУ еще имеет доступ и процессор. Для увеличения доступной полосы ОЗУ хочу выделить часть памяти на кристалле под те модули программы, которые будут контролировать состояние буфера и момент окончания записи. Хочется кардинально увеличить объем памяти семплов.
|
|
|
|
|
Dec 13 2011, 11:02
|
Частый гость
 
Группа: Участник
Сообщений: 88
Регистрация: 28-10-08
Из: Днепропетровск
Пользователь №: 41 263

|
Процессор NIOS-II/s. С целью максимально разгрузить SDRAM хочу сделать часть памяти программ в накристальном ОЗУ и на время захвата данных процессор будет работать только с этой областью памяти, ожидая окончания ввода. Интерфейс с ФИФО думаю сделать на основе CFI и использовать сигналы адресной шины для захвата события синхронизации. Структура системы во вложении. Буду признателен за указание моих ошибок.
Эскизы прикрепленных изображений
|
|
|
|
|
Mar 15 2012, 10:59
|
Группа: Участник
Сообщений: 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
|
|
|
|
|
Mar 16 2012, 08:33
|
Группа: Участник
Сообщений: 13
Регистрация: 10-12-10
Из: RND
Пользователь №: 61 523

|
Спасибо Wic что откликнулись. Эзернет и процессор с DDR2 уже есть и Слава Богу работает. осталось прикрутить АЦП AD9254 и заставить данные пихатся (или запихивать) в DDR2 по определенному адресу. Процессор выполняет только диспетчерские функции, формирует Эзернет пакеты, CRC и берет из памяти данные по 1024 отсчета и запихивает в Эзернет фрейм. Это и имелось ввиду, что произвольным образом берутся данные из этой памяти, вернее даже сказать, что пакетно, из памяти, подряд по 1024 отсчета и напрямую в Фрейм. Данные пишутся в выделенную область памяти по кругу т. е в принципе бы подошло ФИФО с двумя указателями записи и чтения, но с объемом в 1- 16 МБ. (Задачка из курсовой с реализацией в железе на макете). У меня пока что затык с интерфейсом, как правильнее к NIOS прикрутить АЦП и что бы это работало. (Не знаю, правильно ли было бы использовать tristate CFI как предложил выше MisterDi).
|
|
|
|
|
Mar 19 2012, 12:54
|
Группа: Участник
Сообщений: 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. Причем если запускаю тест памяти (пишутся данные по адресам памяти и после читаются) все проходит на ура. Просто при чтении читаются предидущие данные и все... Раскритикуйте и направьте на путь истинный, что переделать или как реализовать аппаратную запись в память по необходимым адресам, с возможностью четния из Nios данных памяти.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|