|
Еще раз о применении DMA+SDRAM без Nios, Помогите разобраться |
|
|
|
Jul 8 2008, 16:57
|
Участник

Группа: Validating
Сообщений: 71
Регистрация: 24-06-08
Из: Харьков
Пользователь №: 38 521

|
Доброго времени суток!!! Товарищи специалисты помогите, пожалуйста. Возникла задача по созданию системы которая будет получать изображение с КМОП-матрицы (матрица управляется через i2c), через связку DMA+SDRAM укладывать данные в динамическую память, а потом после небольшой обработки (блок который будет обеспечивать взаимодействие всех перечисленых блоков будет свой на VHDL), передавать через FTDI245 в PC. Работаю я с QUARTUS 7.2, прочитав документацию на Avalon и существующие на этом сайте топики, разобрался,как экпортировать входы SDRAM на наружу(в целях эксперимента), но вот с DMA дело обстоит похуже. Если кто может подскажите как управлять DMA-каналом не програмно, а аппаратно, подавая на соответствующие вывоводы сигналы. Если это возможно, то какие выводы надо создать для всех троих портов (управления, чтения и записи)? И попутно еще один вопрос, подскажите пожалуйста аналог упомянутой выше FTDI с паралельным входом,работа с которой на стороне компьютера похожа на FTDI( поскольку я не программист, а имеющиеся в наличии кадры в этих делах тоже не особо  ), которая поддерживает USB 2.0 HS много не надо, но чтобы было хотя бы 30 Мб/сек  . Пожалуйста помогите, буду очень признателен!!!!
|
|
|
|
|
Jul 9 2008, 06:27
|

Гуру
     
Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359

|
Насчет USB2.0, присоединяюсь - CY7C68013A. Можно 1280*10240*30 гнать в реальном времени довольно легко. Но разбираться придется и в компьютерной программе и с контроллером и с USB, это самая сложная часть (на мой взгляд)...
Что же касается ПЛИС, все несколько проще: в SOPC Builder (и не обязательно совсем, можно просто как модуль) ставите альтеровский контроллер SDRAM. Не соглашусь с вышесказанным, работает он нормально, для данной задачи подходит, не стоит городить свое... DMA - вообще нафиг, просто делаете свой мастер в SOPC (фактически трансляция сигналов шины авалон), ставите FIFO, и пишете в память. Про SOPC, мастер+SDRAM в этой ветке форума недавно все обсуждалось...
--------------------
Быть. torizin-liteha@yandex.ru
|
|
|
|
|
Jul 9 2008, 17:38
|
Участник

Группа: Validating
Сообщений: 71
Регистрация: 24-06-08
Из: Харьков
Пользователь №: 38 521

|
Спасибо Вам за ответы. Но возникли некоторые попутные вопросы и поправки ... Во-первых, dinam прав камера действительно Micron  , но хотим сменить на что-нибудь другое, вследствие того, что ее характеристики уже не соответствуют предъявляемым требованиям  Даная проектируемая система используется в флюрографической камере, последняя состоит из 4-х таких матриц через ЮСБ - хаб подключеных к ПК(он производит сшивку и обработку изображения). Даная система уже реально работающая , но работает она на связке Мега128+МАХ3000 (на последнем создано некое подобие ПДП и дополнительная логика). Память - статическая. Вот и возник вопрос перевести все это хозяйство на Cyclone и задействовать динамичезкую память. Во-вторых, о передаче видео я пока не думал, хотя этот вопрос назревает (для рентгеноскопии)  , но сдесь я смотрю в сторону 1 Гб Эзернет, исходя из экономических показателей. Возникает дополнительная проблемма перенесения всех функций по считыванию и постообработке изображения с ПК на проектируемое устройство (товарищи из вражеской нам конторы  задействовали ресурсы ПК в результате - получилась машина работающая на 8-ми ядрах  ) . В этом случае предполагаю использовать АДСП БФ (товарищи админы извените, что чуток не в тот раздел), загрузив на него ядро Линукс, под ним и предполагается поднять Эзернет ( и использовать преимущества многопотоковой обработки даных ядром для обработки больших масивов даных), а дальше общение как между двумя машинами (Клиент-сервер), это будет более оптимально... Сейчас хочу задействовать ЮСБ 2.0 HS, по той причине, что при теперешнем положении вещей, изображение с камер читается за 11 с. В-третьих, на сколько я понимаю, фифо надо использовать как буфер между более низкоскоростной камерой и более быстрым ОЗУ? Если да, то я хочу использовать все составные блоки на одной частоте,частоте работы камеры 48 МГц, ну и задействовать корректировку с PLL для ОЗУ, если понадобиться (тем более CY7C68013A работает на этой частоте). Следовательно ФИФО мне не надо? В-четвертых,пожалуйста подскажите хорошие источники по CY7C68013A, для роботы с нею как в железе так и со стороны ПК. Или какие нибудь самые элементарные примеры дайте посмотреть. И еще, так на будущее, подскажите так все таки можно использовать ДМА в ручном режиме? Буду очень признателен за ответы.
Сообщение отредактировал s.i.suprun - Jul 9 2008, 17:40
|
|
|
|
|
Jul 9 2008, 19:56
|
Частый гость
 
Группа: Свой
Сообщений: 102
Регистрация: 11-10-04
Пользователь №: 849

|
Схему подключения к FPGA можно посмотреть здесь. http://www.philcovington.com/QuickSilver/Насчёт 1240x1024x30 = 38mb/s по USB 2.0 это получается только при достаточном болшом FIFO со стороны FPGA. Цитата(s.i.suprun @ Jul 9 2008, 20:38)  Сейчас хочу задействовать ЮСБ 2.0 HS, по той причине, что при теперешнем положении вещей, изображение с камер читается за 11 с. В-третьих, на сколько я понимаю, фифо надо использовать как буфер между более низкоскоростной камерой и более быстрым ОЗУ? Если да, то я хочу использовать все составные блоки на одной частоте,частоте работы камеры 48 МГц, ну и задействовать корректировку с PLL для ОЗУ, если понадобиться (тем более CY7C68013A работает на этой частоте). Следовательно ФИФО мне не надо? В-четвертых,пожалуйста подскажите хорошие источники по CY7C68013A, для роботы с нею как в железе так и со стороны ПК. Или какие нибудь самые элементарные примеры дайте посмотреть. И еще, так на будущее, подскажите так все таки можно использовать ДМА в ручном режиме? Буду очень признателен за ответы.
|
|
|
|
|
Jul 10 2008, 01:39
|
Профессионал
    
Группа: Свой
Сообщений: 1 415
Регистрация: 10-06-05
Из: Наукоград Кольцово(Новосибирск)
Пользователь №: 5 898

|
У нас тоже предполагается работа 4х камер в параллель  Одна работает мастером, остальные 3 ведомые - снимаем одновременно объект с 4х сторон. Изображение без всякой обработки гоним на компьютер (благо скорости USB 2.0 HS пока хватает), сшиваем и обрабатываем. Насколько я сейчас в теме Blackfin имеет только 100мбит MAC. По поводу FIFO. Количество используемых FIFO в моей камере зависит от типа матрицы, точнее на какой скорости она работает. У меня выходит 3-4 включенных последовательно. Первое FIFO нужно для согласования скоростей между матрицей и FIFO, сделанной на SDRAM. Также оно ещё необходимо, т.к. в некоторые моменты в SDRAM писать нельзя, точнее можно, но это надо серъёзно усложнять контроллер SDRAM, поэтому проще ещё одно FIFO поставить. Второе FIFO сделано на SDRAM, оно основное в котором хранится изображение. Третье для согласования скоростей между SDRAM и CY7C68013A, которая тоже работает в режиме slave FIFO. Т.е. уже можно сказать 4 FIFO получилось  . Также последнее FIFO необходимо для увеличения пропускной способности SDRAM. Я использую режим записи-чтения пакетами по 512 байт для 8 Мбайт SDRAM. По поводу CY7C68013A - на сайте производителя есть примеры, да и в конфе про неё много написано.
|
|
|
|
|
Jul 10 2008, 07:56
|
Профессионал
    
Группа: Свой
Сообщений: 1 415
Регистрация: 10-06-05
Из: Наукоград Кольцово(Новосибирск)
Пользователь №: 5 898

|
Ну у меня камера расчитана на использование четырех разных типов сенсоров, поэтому без SDRAM ну никак Но по существу для варианта, если матрица работает на 48МГЦ и нам нужны только 8 бит. Драйверы у нас не кипарисовкие. И что я вижу (пишу по памяти). Сначала примерно 2кБайт в комп уходят сразу, потом следует пауза 200-800 микросекунд, потом в комп начинает лится поток примерно 39Мбайт/сек без всяких пауз. Это если комп больше ничем не занимается. У вас нет этой первоначальной паузы? Потом если происходит сбой в передаче по USB, то передача этого пакета повторяется. А матрица, то выдёт данные и куда их писать? А если, например, подключаться через контроллер USB портов (плата PCI), то у меня вообще выходило не больше 25Мбайт/сек. Тогда как?
|
|
|
|
|
Jul 10 2008, 09:35
|

Гуру
     
Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359

|
USB при сбое повторяет сравнительно небольшой пакет, т.е. не вызовет сбоя (уложится в кадр). Если все же сбой - пусть кадр теряется тогда... Если все же быть предобработка, в т.ч. просто 4 матрицы, то да - ставьте SDRAM, это будет как большой FIFO. Опишите подробнее - разрешение, частота кадров... Например при 4-ёх камерах по 640*480*30 будет ~37МБайт/с, вполне можно в реальном времени передать по USB. На ПЛИСе тогда делать временное уплотнение, может попробовать обойтись внутренней памятью (запомнили по паре кБайт от камер, пока передаем поочереди в сайпрас, запоминаем следующие пару кБайт).
--------------------
Быть. torizin-liteha@yandex.ru
|
|
|
|
|
Jul 13 2008, 08:32
|
Участник

Группа: Validating
Сообщений: 71
Регистрация: 24-06-08
Из: Харьков
Пользователь №: 38 521

|
Цитата(torik @ Jul 10 2008, 07:54)  Дык также, как обращаться к любому другому устройству (в том числе к памяти) на шине авалон. Просто по своим адресам. Но, по-моему, это неудобно... По адресам, которые я в СОПСе указываю? А какие выводы шины использовать? write_n, writedata, read_n, readdata? или еще какие-то дополнительные сигнальные выводы?  Цитата(dinam @ Jul 10 2008, 04:39)  У нас тоже предполагается работа 4х камер в параллель  Одна работает мастером, остальные 3 ведомые - снимаем одновременно объект с 4х сторон. Изображение без всякой обработки гоним на компьютер (благо скорости USB 2.0 HS пока хватает), сшиваем и обрабатываем. Насколько я сейчас в теме Blackfin имеет только 100мбит MAC. По поводу FIFO. Количество используемых FIFO в моей камере зависит от типа матрицы, точнее на какой скорости она работает. У меня выходит 3-4 включенных последовательно. Первое FIFO нужно для согласования скоростей между матрицей и FIFO, сделанной на SDRAM. Также оно ещё необходимо, т.к. в некоторые моменты в SDRAM писать нельзя, точнее можно, но это надо серъёзно усложнять контроллер SDRAM, поэтому проще ещё одно FIFO поставить. Второе FIFO сделано на SDRAM, оно основное в котором хранится изображение. Третье для согласования скоростей между SDRAM и CY7C68013A, которая тоже работает в режиме slave FIFO. Т.е. уже можно сказать 4 FIFO получилось  . Также последнее FIFO необходимо для увеличения пропускной способности SDRAM. Я использую режим записи-чтения пакетами по 512 байт для 8 Мбайт SDRAM. По поводу CY7C68013A - на сайте производителя есть примеры, да и в конфе про неё много написано. Вопрос того-же плана  А у фифо в СОПСе тоже стандартный набор выводов мастера на Авалоне, или есть что-то специфическое? а на счет Blackfin я дома поищу, где-то ссылка была там что-то по поводу 1 Гб МАС на Blackfin и применения с ним uClinux было...
Сообщение отредактировал s.i.suprun - Jul 13 2008, 08:37
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|