Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Еще раз о применении DMA+SDRAM без Nios
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
s.i.suprun
Доброго времени суток!!!
Товарищи специалисты помогите, пожалуйста.
Возникла задача по созданию системы которая будет получать изображение с КМОП-матрицы (матрица управляется через i2c), через связку DMA+SDRAM укладывать данные в динамическую память, а потом после небольшой обработки (блок который будет обеспечивать взаимодействие всех перечисленых блоков будет свой на VHDL), передавать через FTDI245 в PC.
Работаю я с QUARTUS 7.2, прочитав документацию на Avalon и существующие на этом сайте топики, разобрался,как экпортировать входы SDRAM на наружу(в целях эксперимента), но вот с DMA дело обстоит похуже. Если кто может подскажите как управлять DMA-каналом не програмно, а аппаратно, подавая на соответствующие вывоводы сигналы. Если это возможно, то какие выводы надо создать для всех троих портов (управления, чтения и записи)?
И попутно еще один вопрос, подскажите пожалуйста аналог упомянутой выше FTDI с паралельным входом,работа с которой на стороне компьютера похожа на FTDI( поскольку я не программист, а имеющиеся в наличии кадры в этих делах тоже не особо smile.gif ), которая поддерживает USB 2.0 HS много не надо, но чтобы было хотя бы 30 Мб/сек smile.gif .
Пожалуйста помогите, буду очень признателен!!!! help.gif
dinam
Похоже вы что-то делаете на матрице Micron smile.gif . Мы уже прошли этот путь и он оказался не совсем простым. В качестве заготовки я брал контроллер SDRAM от Аltera. Но там он сделал не оптимально, да и с ошибками вроде бы. Пришлось написать свой. В качестве альтернативы FTDI можете взять CY7C68013A. Мы на нем получили чуть более 40 мбайт/с (зависит от материнки). Может проще купить готовую камеру на этой матрице? Их много кто-делает. Если нужно что-то особое, то пишите в личку.
torik
Насчет USB2.0, присоединяюсь - CY7C68013A. Можно 1280*10240*30 гнать в реальном времени довольно легко. Но разбираться придется и в компьютерной программе и с контроллером и с USB, это самая сложная часть (на мой взгляд)...

Что же касается ПЛИС, все несколько проще:
в SOPC Builder (и не обязательно совсем, можно просто как модуль) ставите альтеровский контроллер SDRAM. Не соглашусь с вышесказанным, работает он нормально, для данной задачи подходит, не стоит городить свое...
DMA - вообще нафиг, просто делаете свой мастер в SOPC (фактически трансляция сигналов шины авалон), ставите FIFO, и пишете в память.
Про SOPC, мастер+SDRAM в этой ветке форума недавно все обсуждалось...
dinam
Цитата(torik @ Jul 9 2008, 13:27) *
Не соглашусь с вышесказанным, работает он нормально, для данной задачи подходит, не стоит городить свое...
Я упоминал примерно об этом
s.i.suprun
Спасибо Вам за ответы. Но возникли некоторые попутные вопросы и поправки ...
Во-первых,dinam прав камера действительно Micron smile.gif , но хотим сменить на что-нибудь другое, вследствие того, что ее характеристики уже не соответствуют предъявляемым требованиям sad.gif
Даная проектируемая система используется в флюрографической камере, последняя состоит из 4-х таких матриц через ЮСБ - хаб подключеных к ПК(он производит сшивку и обработку изображения). Даная система уже реально работающая , но работает она на связке Мега128+МАХ3000 (на последнем создано некое подобие ПДП и дополнительная логика). Память - статическая. Вот и возник вопрос перевести все это хозяйство на Cyclone и задействовать динамичезкую память.
Во-вторых, о передаче видео я пока не думал, хотя этот вопрос назревает (для рентгеноскопии) smile.gif , но сдесь я смотрю в сторону 1 Гб Эзернет, исходя из экономических показателей. Возникает дополнительная проблемма перенесения всех функций по считыванию и постообработке изображения с ПК на проектируемое устройство (товарищи из вражеской нам конторы smile.gif задействовали ресурсы ПК в результате - получилась машина работающая на 8-ми ядрах 07.gif ) . В этом случае предполагаю использовать АДСП БФ (товарищи админы извените, что чуток не в тот раздел), загрузив на него ядро Линукс, под ним и предполагается поднять Эзернет ( и использовать преимущества многопотоковой обработки даных ядром для обработки больших масивов даных), а дальше общение как между двумя машинами (Клиент-сервер), это будет более оптимально...
Сейчас хочу задействовать ЮСБ 2.0 HS, по той причине, что при теперешнем положении вещей, изображение с камер читается за 11 с.
В-третьих, на сколько я понимаю, фифо надо использовать как буфер между более низкоскоростной камерой и более быстрым ОЗУ? Если да, то я хочу использовать все составные блоки на одной частоте,частоте работы камеры 48 МГц, ну и задействовать корректировку с PLL для ОЗУ, если понадобиться (тем более CY7C68013A работает на этой частоте). Следовательно ФИФО мне не надо?
В-четвертых,пожалуйста подскажите хорошие источники по CY7C68013A, для роботы с нею как в железе так и со стороны ПК. Или какие нибудь самые элементарные примеры дайте посмотреть.
И еще, так на будущее, подскажите так все таки можно использовать ДМА в ручном режиме?
Буду очень признателен за ответы.
alexr22b
Схему подключения к 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, для роботы с нею как в железе так и со стороны ПК. Или какие нибудь самые элементарные примеры дайте посмотреть.
И еще, так на будущее, подскажите так все таки можно использовать ДМА в ручном режиме?
Буду очень признателен за ответы.
dinam
У нас тоже предполагается работа 4х камер в параллель smile.gif Одна работает мастером, остальные 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 получилось smile.gif . Также последнее FIFO необходимо для увеличения пропускной способности SDRAM. Я использую режим записи-чтения пакетами по 512 байт для 8 Мбайт SDRAM.
По поводу CY7C68013A - на сайте производителя есть примеры, да и в конфе про неё много написано.
torik
Ну, если без предобработки гнать видео с матрицы в комп по USB HS, то на самом деле ПЛИС вообще не нужна, в CY7C68013A быть фифо... У меня USB-камера так и сделана...

Цитата
И еще, так на будущее, подскажите так все таки можно использовать ДМА в ручном режиме?


Дык также, как обращаться к любому другому устройству (в том числе к памяти) на шине авалон. Просто по своим адресам. Но, по-моему, это неудобно...
dinam
Цитата(torik @ Jul 10 2008, 11:54) *
Ну, если без предобработки гнать видео с матрицы в комп по USB HS, то на самом деле ПЛИС вообще не нужна, в CY7C68013A быть фифо... У меня USB-камера так и сделана...

Можно чуть поподробнее, как вы умудряетесь такой поток завести в компьютер без потерь и без FIFO 07.gif ? Какой режим используете? Ведь при bulk, который я применяю это невозможно.
torik
Ну как так невозможно. Настраиваем одну точку bulk, 4-ех кратная буферизация через встроенное ФИФО. Матрица в режиме мастера, данные на PORTB (ну и еще пара сигналов, в т.ч. тактовая). Все, в режиме bulk раскачивается до ~40 МБайт/с (ну если честно, у меня матрица болье ~30 не дает). На компьютере используем драйвер от сайпрас без изменений. Немного подправили программу из примеров и вперед...
Все про это можно прочитать в соответсвующей ветке форума:
http://electronix.ru/forum/index.php?showforum=48

Еще точку для управления режимами матрицы. Изохронный режим слишком запарно...
dinam
Ну у меня камера расчитана на использование четырех разных типов сенсоров, поэтому без SDRAM ну никак smile.gif
Но по существу для варианта, если матрица работает на 48МГЦ и нам нужны только 8 бит. Драйверы у нас не кипарисовкие. И что я вижу (пишу по памяти). Сначала примерно 2кБайт в комп уходят сразу, потом следует пауза 200-800 микросекунд, потом в комп начинает лится поток примерно 39Мбайт/сек без всяких пауз. Это если комп больше ничем не занимается. У вас нет этой первоначальной паузы? Потом если происходит сбой в передаче по USB, то передача этого пакета повторяется. А матрица, то выдёт данные и куда их писать?
А если, например, подключаться через контроллер USB портов (плата PCI), то у меня вообще выходило не больше 25Мбайт/сек. Тогда как?
torik
USB при сбое повторяет сравнительно небольшой пакет, т.е. не вызовет сбоя (уложится в кадр). Если все же сбой - пусть кадр теряется тогда... Если все же быть предобработка, в т.ч. просто 4 матрицы, то да - ставьте SDRAM, это будет как большой FIFO.
Опишите подробнее - разрешение, частота кадров...
Например при 4-ёх камерах по 640*480*30 будет ~37МБайт/с, вполне можно в реальном времени передать по USB. На ПЛИСе тогда делать временное уплотнение, может попробовать обойтись внутренней памятью (запомнили по паре кБайт от камер, пока передаем поочереди в сайпрас, запоминаем следующие пару кБайт).
dinam
Цитата(torik @ Jul 10 2008, 16:35) *
USB при сбое повторяет сравнительно небольшой пакет, т.е. не вызовет сбоя (уложится в кадр). Если все же сбой - пусть кадр теряется тогда... Опишите подробнее - разрешение, частота кадров...
Для примера - разрешение 1280x1024 30 кадов/сек. Я не совсем понял, про какие кадры вы говорите? Как пусть кадр теряется? Т.е. у вас нет гарантированной доставки кадра, выданного сенсором? Если так, то тогда всё понятно. У нас разные задачи. И у нас каждая камера подключена к своему USB, поэтому общий поток может быть для 4х камер до 39*4 = 156 мбайт/сек. Правда реальный конечно поменьше, т.к. мы используем не весь кадр да и матрицу притормаживаем smile.gif
torik
Ну если 4 USB камеры, тогда вообще все нормально должно работать без ПЛИС...
s.i.suprun
Цитата(torik @ Jul 10 2008, 07:54) *
Дык также, как обращаться к любому другому устройству (в том числе к памяти) на шине авалон. Просто по своим адресам. Но, по-моему, это неудобно...


По адресам, которые я в СОПСе указываю? А какие выводы шины использовать? write_n, writedata, read_n, readdata? или еще какие-то дополнительные сигнальные выводы? help.gif

Цитата(dinam @ Jul 10 2008, 04:39) *
У нас тоже предполагается работа 4х камер в параллель smile.gif Одна работает мастером, остальные 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 получилось smile.gif . Также последнее FIFO необходимо для увеличения пропускной способности SDRAM. Я использую режим записи-чтения пакетами по 512 байт для 8 Мбайт SDRAM.
По поводу CY7C68013A - на сайте производителя есть примеры, да и в конфе про неё много написано.


Вопрос того-же плана smile.gif А у фифо в СОПСе тоже стандартный набор выводов мастера на Авалоне, или есть что-то специфическое?
а на счет Blackfin я дома поищу, где-то ссылка была там что-то по поводу 1 Гб МАС на Blackfin и применения с ним uClinux было...
s.i.suprun
И еще один вопрос: хотел вчера промоделировать в Квартусе СДРМ - контроллер, все служебные сигналы (рас, кас) генерит, но проблема в следующем:
запись:
выставляю на мастере: write_n в 0 на шине даных - то чего хочу записать ну и адрес понятно, а на выходе контроллера получаю непонятно что: адреса на выыходе отстают от мастера на 3 такта (ну тут понятно - настройки контроллера в СОПС smile.gif ), адреса на выходе контроллера в 2 раза меньше чем на входе но тут вроде тоже понятно(пишу по 16 бит), но вот адреса контроллер коректно понимает лишь когда входные адреса не выходят за пределы 512, если больше,то на выходе какой-то бред(Выставлял на мастере FFF, в результате на выходе СДРАМ - FF 07.gif )? Может я не правильно адресацию делаю или ысчо что-то подскажите, плз!!!! Второй прикол - на вывод мастера readdata, пролазят сигналы с выводов DQ и при чтении (понятно smile.gif ) , но и при записи в память 07.gif , причем при чтении данные начинают поступать сразу же, не внимая обращение на задержку при включении и значение сигнала read_n.... wacko.gif
Пожалуйста подскажите правильный порядок при чтении и записи СДРАМ, плз crying.gif
dinam
Цитата(s.i.suprun @ Jul 13 2008, 16:38) *
но вот адреса контроллер коректно понимает лишь когда входные адреса не выходят за пределы 512, если больше,то на выходе какой-то бред(Выставлял на мастере FFF, в результате на выходе СДРАМ - FF 07.gif )? Может я не правильно адресацию делаю или ысчо что-то подскажите, плз!!!!
Похоже на нормальную работу с банками. Вообще почитайте как работает SDRAM, ну например, здесь
s.i.suprun
Спасибо Всем за ответы.
Проблема была с СДРАМ когтроллером в Квартусе. Некоторое время назад скачал 8-ю версию, запустил там, все работает как Швейцарские часы 08.gif . На счет ФИФО поступил следующим образом: взял в СОПСЕ "Крос клок мост" и согласовал в нем по частотам входной поток сосбно камера и СДРАМ. В том мосте поняное дело своя ФИФА есть. Все замечательно, но хочется пойти дальше smile.gif , и возникает следующий вопрос, уж сколь раньше обговаривалась тема передачи через ЮСБ типа CY7C68013A. На сколько я понял она со входным UTMI интерфейсом, дак вот в 8-м Квартусе есть ядро высокоскоросного ЮСБ с выходным интерфейсом такого типа, а вход - Avalon. Ядро это представлено конторой SLS, но требует лицензии от последней, вроде как можно получить и фришную лицензию, я уже сколько не делал реквест - нифига (авторизировался на ихнем сайте), пишут через 24 часа будет, а уже 4 дня ничего не видно sad.gif , я в ихнюю службу поддержки уже и телегу накатал - молчат буржуи проклятые 07.gif smile.gif , может кто-то пробовал это ядро (ну и понятное дело лицензию получил) , поделитесь опытом как, энто дело провернуть beer.gif , ну и как оно (ядро) в обчем катает. Я так понимаю что в случае использования последнего ПЛИС мона напрямую с CY7C68013A использовать без дополнительных наворотов ... И есче одно хотел на том же родимом сайте скачать контроллер i2c c шиной Авалон, но там обратная беда лицензию прислали, а ядро контроллера слить не дают. sad.gif . Товарищи, большая просьба если у кого нибудь есть поделитесь плз. beer.gif Просто очень быстро надо, я уже начал сам писать протокол, но это просто время. На опенкоре нашел, все замечательно, компилится, но вот промоделировать его не могу, вылетают ошибки моделирования, а бросать на кристал "кота в мешке" особо не хочется...
Postoroniy_V
Цитата(s.i.suprun @ Jul 29 2008, 00:56) *
Спасибо Всем за ответы.
Проблема была с СДРАМ когтроллером в Квартусе. Некоторое время назад скачал 8-ю версию, запустил там, все работает как Швейцарские часы 08.gif . На счет ФИФО поступил следующим образом: взял в СОПСЕ "Крос клок мост" и согласовал в нем по частотам входной поток сосбно камера и СДРАМ. В том мосте поняное дело своя ФИФА есть. Все замечательно, но хочется пойти дальше smile.gif , и возникает следующий вопрос, уж сколь раньше обговаривалась тема передачи через ЮСБ типа CY7C68013A. На сколько я понял она со входным UTMI интерфейсом, дак вот в 8-м Квартусе есть ядро высокоскоросного ЮСБ с выходным интерфейсом такого типа, а вход - Avalon. Ядро это представлено конторой SLS, но требует лицензии от последней, вроде как можно получить и фришную лицензию, я уже сколько не делал реквест - нифига (авторизировался на ихнем сайте), пишут через 24 часа будет, а уже 4 дня ничего не видно sad.gif , я в ихнюю службу поддержки уже и телегу накатал - молчат буржуи проклятые 07.gif smile.gif , может кто-то пробовал это ядро (ну и понятное дело лицензию получил) , поделитесь опытом как, энто дело провернуть beer.gif , ну и как оно (ядро) в обчем катает. Я так понимаю что в случае использования последнего ПЛИС мона напрямую с CY7C68013A использовать без дополнительных наворотов ... И есче одно хотел на том же родимом сайте скачать контроллер i2c c шиной Авалон, но там обратная беда лицензию прислали, а ядро контроллера слить не дают. sad.gif . Товарищи, большая просьба если у кого нибудь есть поделитесь плз. beer.gif Просто очень быстро надо, я уже начал сам писать протокол, но это просто время. На опенкоре нашел, все замечательно, компилится, но вот промоделировать его не могу, вылетают ошибки моделирования, а бросать на кристал "кота в мешке" особо не хочется...

по поводу и2ц с опенкор - работает, конечно же с небольшой модификацией smile.gif, так что это не кот в мешке
по поводу юсб кипарис68013, сделайте ему фифо интерфейс и у себя к авалану подключите, это тоже
работает отлично. читайте про фифо режим у 68013
s.i.suprun
Цитата(Postoroniy_V @ Jul 28 2008, 19:02) *
по поводу и2ц с опенкор - работает, конечно же с небольшой модификацией smile.gif, так что это не кот в мешке
по поводу юсб кипарис68013, сделайте ему фифо интерфейс и у себя к авалану подключите, это тоже
работает отлично. читайте про фифо режим у 68013


А что Вы скажете по поводу USB3300, не пробовали ее в работе? Я все-таки у товарищей с SLS выпросил лицензию на ядро ЮСБ 2.0 с UTMI интерфейсом, так вот это вроде не сложная (на первый взгляд, тем более имея готовую корку) штуковина тем более,что она есть на складе да и стоит в 4 раза дешевле CY7c68013A, что и понятно поскольку последний - контроллер. smile.gif
Maverick
Цитата(dinam @ Jul 14 2008, 04:13) *
Похоже на нормальную работу с банками. Вообще почитайте как работает SDRAM, ну например, здесь


А есть у кого то эта статья в PDF у меня не все картинки отображаются crying.gif
Postoroniy_V
Цитата(s.i.suprun @ Jul 29 2008, 18:01) *
А что Вы скажете по поводу USB3300, не пробовали ее в работе? Я все-таки у товарищей с SLS выпросил лицензию на ядро ЮСБ 2.0 с UTMI интерфейсом, так вот это вроде не сложная (на первый взгляд, тем более имея готовую корку) штуковина тем более,что она есть на складе да и стоит в 4 раза дешевле CY7c68013A, что и понятно поскольку последний - контроллер. smile.gif

про USB3300 ничего сказать не могу не пользовал
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.