Перейти к содержанию
    

ряд вопросов от ламера

Здравствуйте.

Сначала написал этот пост в другой ветке форума, для новичков. Там посоветовали обратиться сюда. :)

 

Я только начинаю осваивать FPGA, причем FPGA фирмы Altera. Осваивать их начинаю приминительно к проекту, который нужно сделать. Суть проекта - на пины поступает картинка попиксельно в rgb, эту картинку нужно считать, записать в память, определенным образом обработать, закодировать в jpeg и записать либо на CF, либо на SD.

Из всего этого я пока могу только ее обработать (там специальный алгоритм, поиск образов и всякое прочее, к сути дела отношения не имеет). Причем алгоритм обработки делать буду под ниосом. Мой начальный уровень в FPGA можно считать нулевым, но я стараюсь быстро учиться. smile.gif В распоряжении имеются Nios II Development Board Cyclon edition и Cyclon II starting board.

 

Теперь, вопросы:

1) Можно рассчитывать на консультации по ниосу в рамках этого форума?

2) Если мне с пинов нужно прочитать в память, то как это лучше сделать? Память общая с ниосом, соединять пины с памятью вне ниоса кажется не совсем удобным. Как лучше - програмно читать пины по синхроимпульсу и скидывать в память в самом ниосе или сделать элемент для SOPC, решающий эту задачу? Если второе, то как это вообще делается?

3) Что-то мне подсказывает, что ни сжатие в jpeg, ни чтение/запись в CF/SD самому с нуля делать не надо - наверняка есть готовые библиотеки. Так? Эти библиотеки идут как элементы для SOPC/Nios или как схемные устройства, которые нужно будет подключать через custom instructions?

4) Где можно найти эти библиотеки и где/как вообще вести поиск готовых решений для подобных задач?

5) Можно ли где-то/как-то раскриптовать IP Megafunctions Altera, есть ли универсальный дешифратор?

6) Вообще-то, я програмирую на C. Была наивная надежда, что хватит этих знаний плюс рисование схем в Quartus. Сейчас чувствую, что без знания/владения HDL не обойтись. Прав ли я? :)

 

Заранее спасибо за любые ответы/советы/комментарии/пожелания. Буду очень признателен за помощь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Уверенно могу ответить только на последний вопрос - "без знания/владения HDL не обойтись".

 

Вообще Ваша задача мне представляется весьма нетривиальной особенно при реализации на FPGA и для новичка (как Вы себя позиционируете).

Возможно будет проще использовать DSP (Blackfin).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Теперь, вопросы:

1) Можно рассчитывать на консультации по ниосу в рамках этого форума?

2) Если мне с пинов нужно прочитать в память, то как это лучше сделать? Память общая с ниосом, соединять пины с памятью вне ниоса кажется не совсем удобным. Как лучше - програмно читать пины по синхроимпульсу и скидывать в память в самом ниосе или сделать элемент для SOPC, решающий эту задачу? Если второе, то как это вообще делается?

3) Что-то мне подсказывает, что ни сжатие в jpeg, ни чтение/запись в CF/SD самому с нуля делать не надо - наверняка есть готовые библиотеки. Так? Эти библиотеки идут как элементы для SOPC/Nios или как схемные устройства, которые нужно будет подключать через custom instructions?

4) Где можно найти эти библиотеки и где/как вообще вести поиск готовых решений для подобных задач?

5) Можно ли где-то/как-то раскриптовать IP Megafunctions Altera, есть ли универсальный дешифратор?

6) Вообще-то, я програмирую на C. Была наивная надежда, что хватит этих знаний плюс рисование схем в Quartus. Сейчас чувствую, что без знания/владения HDL не обойтись. Прав ли я? :)

 

Заранее спасибо за любые ответы/советы/комментарии/пожелания. Буду очень признателен за помощь.

1)да

2)ниос не успеет потому элемент для SOPC придётся делать, читайте мануал как

3)не видел ничего 1)готового 2)бесплатного 3)безглюков.. ниос оставте в сторонке...не успеет он сжать в Jpeg и одновремеено читать и скаладывать в/из ram..

4) гуглить пробовали? есть http://www.opencores.com и http://www3.elphel.com/ru

5)ищите по форуму

6) О да!

и Andr2I вам хороший совет дал касательно BlackFin :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Хочу добавить к предидущему постингу. Работа с ПЛИС часто может доставлять массу интелектуального удовольствия когда Вы сами создаете "integrated system on chip" своими "руками" :biggrin: , но это не обязательно единственное решение, особенно когда Вашей схеме требуется "стандартные" блоки. JPEG encoding, CF/SD интерфайс, итд. все реализовано или в специализированых ИС, или легко кодируется на Си в стандартном МК и дастается с инета удостоверенным и готовиньким. Напремер, AD ADV212 совместно с видео декодером и 32-битовым МК легко справется с JPEG2000 compression, a это не тривиальная задача если делать самому на ПЛИС, и ядра для этого дорогие. Плюс, к готовым ИС есть документация и поддержка которые неоценимы для начинающего. Для более простых задач, типа digitizing JPEG/MPEG2 легко подойдет вышеупамятый DSP типа Blackfin или TMS320CXXXX от TI.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасбо за ответы.

 

К сожалению (или не к сожалению), но так получилось, что делать надо именно на плис, прием именно на Cyclon. Вообще-то, мне казалось, что задача как сжатия в jpeg, так и записи на карту памяти - достаточно тривиальные. Жаль, что не так. :(

Что ниос не сможет сам читать и складывать в память - я уже понял. :( Но обработка изображения в ниосе так же быть должна. Так как же мне быть? Мое видение таково:

Поступают 10-ти битные коды пикселей с пинов. Частота примерно 2-3 мегапикселя в секунду. Кто-то должен эти пиксели скинуть в память (хочется использовать SDRAM). Кто это может быть? Либо какой-то контроллер памяти внешний относительно ниоса, либо ниос с SOPC модулем*. Если внешний контроллер памяти, то он должен как-то корректно эту память делить с самим ниосом.** Если ниос с SOPC, то, как я понял, это должен быть ниос, запараллеленый с тем ниосом, который будет обрабатывать и жать. Правильно ли я понимаю, и получится ли так сделать?

После того, как текущий кадр записан в память, мы можем приостоновить поступление следующих кадров на несколько секунд - пока не разрешим, поступать они не начнут. Значит, после записи кадра в память, ниос должен его считать, обработать, сжать и скинуть на карту памяти, после чего разрешить поступление следующего кадра. Тут очень хочется разрешить параллельное считывание следующего кадра во время обработки текущего, но это потом, пока надо хоть как-то сделать.

Если не затруднит, то не могли бы Вы прокоменнтировать мое видение вопроса и указать на возможные ошибки и заблуждения? Заранее спасибо!

 

* А где найти инструкцию по созданию SOPC модулей? Она в той главе HandBooka по квартусу, в которой SOPC Builder описывается?

 

**Получил на руки плату CyclonII Starting Development Kit. Начинаю с ней разибраться. На плате есть SDRAM. как подступиться к ней из ниоса я заню. Но вот возникает задача - записать в память извне ниоса, а прочитать потом эти данные ниосом. И вот тут я в ступоре - как подступиться к SDRAM извне и как согласовать потом это с ноиосом, чтоб они не кофликтовали? Пытался найти какую-нибудь мегафункцию контроллера SDRAM - не нашел.

Подскажите, плиз!

 

PS: А на какие вообще задачи ориентирован ниос?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сделать нужно свой модуль для SOPC, а чтоб согласовать с ниосом, так он должен сообжить вашему модля по какому адресу данные писать.Можно с альтеры скачать какие-нибудь примеры, работающие с памятью.

 

Модуль пишет в фифо, а потом из фифо дма контроллер в память.

Изменено пользователем Пушкин

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сделать нужно свой модуль для SOPC, а чтоб согласовать с ниосом, так он должен сообжить вашему модля по какому адресу данные писать.Можно с альтеры скачать какие-нибудь примеры, работающие с памятью.

 

Модуль пишет в фифо, а потом из фифо дма контроллер в память.

 

А модуль сам в память скидывать не может? Т.е. вся информация копится в фифо, а потом дма вызывается ниосом? К сожалению, у меня опыта в таких вопросах нет, как оно по времени будет? Какого размера должно быть фифо (оно, я так понимаю, на M4K делаться будет?). Будет ли успевать загонять в память 2-3 мегапикселя? Лучше бы 5.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Модуль не может...Во-первых имеет смысл писать сразу по много байт, во-вторых память может быть занята в момент прихода пикселя.Дма вызывается наполненным фифо, а ниос сообщеает куда писать.Если нужно, чтоб пока ниос или еще что-то будет обсчитывать прошлую картинку, новая загружалась, то нужно чтоб ниос сообщал новый адрес для записи новой картинки.

Размер хз, это сразу не определишь, но в любом случае не много.

Да, М4К.

Будет, хоть все 50.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

 

Может не подойти лицензия. Наш код - только под GNU/GPL

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Модуль не может...Во-первых имеет смысл писать сразу по много байт, во-вторых память может быть занята в момент прихода пикселя.

Если нужно, чтоб пока ниос или еще что-то будет обсчитывать прошлую картинку, новая загружалась, то нужно чтоб ниос сообщал новый адрес для записи новой картинки.

Да не, память занята быть не должна. Новый кадр поступать не будет пока плата не даст отмашку наружу. Один кадр поступает с высокой скоростью, а время между соседними кадрами варьируется произвольно самой системой и может достигать нескольких секунд. Но это все детали, с этим можно будет и потом разобраться.

 

Дма вызывается наполненным фифо, а ниос сообщеает куда писать.

Размер хз, это сразу не определишь, но в любом случае не много.

Будет, хоть все 50.

А какие вообще данные о скорости дма, пересылающего между фифо и SDRAM? Кстати, а с какой частотой вообще SDRAM работает? ДМА должен вызываться полным фифо? Или, может, лучше будет вызывать при каком-то проценте заполнения, сажем, 2/3?

И еще один вопрос: элементы для SOPC пишутся на xHDL? Или как они вообще разрабатываются? Можно где-нибудь посмотреть пример, чтоб порты были подключены к фифо, а фифо через SOPC к nios?

Большое спасибо за помощь и советы!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да не, память занята быть не должна. Новый кадр поступать не будет пока плата не даст отмашку наружу. Один кадр поступает с высокой скоростью, а время между соседними кадрами варьируется произвольно самой системой и может достигать нескольких секунд. Но это все детали, с этим можно будет и потом разобраться.

А какие вообще данные о скорости дма, пересылающего между фифо и SDRAM? Кстати, а с какой частотой вообще SDRAM работает? ДМА должен вызываться полным фифо? Или, может, лучше будет вызывать при каком-то проценте заполнения, сажем, 2/3?

И еще один вопрос: элементы для SOPC пишутся на xHDL? Или как они вообще разрабатываются? Можно где-нибудь посмотреть пример, чтоб порты были подключены к фифо, а фифо через SOPC к nios?

Большое спасибо за помощь и советы!

вся инфа что вам нужна как ни страно здесь :glare:

http://www.altera.com/literature/quartus2/lit-qts-sopc.jsp

 

данные по скорости по работе DMA зависят от частоты на которой вся ваша система будет работать

скажем 50 мгц. сдрам скажем у вас будет 32 бита значит можно будет "лить" не выше чем скорость 200 мб/с.

елементы sopc пишутся на vhdl, verilog или ещё можно "скармливать" sopc builder-у edif.

есть форум на англ там можно взять бесплатно кучу примеров для ниоса

http://www.niosforum.com

 

Имхо заморочки у вас только начались...а по большому счёту ничего не сделано :)

я бы взял как вам советовали либо blackfin или что гораздно лучше ADV202 (212)

да и подкючил его к процу который вам хорошо известен и вы с ним работали...ну или к ниосу подключить adv -ку :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Теоретический предел ширина авалона(32 бит) на частоту или тоже самое с памятью, что медленнее.

Разная бывает память с разными частотами. А так до 166мгц по-моему.

Ясное дело что не полным, а достаточным для записи некоторого пакета байтов(чтоб не терять на всяких служебных пересылках лишнее).

На xHDL, я на верилоге пишу. Ну скачайте с альтеры auto graphics reference design например, там это есть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Имхо заморочки у вас только начались...а по большому счёту ничего не сделано :)

Угу. Что есть, то есть. А как подумаю сколько еще впереди - страшно становится.

 

я бы взял как вам советовали либо blackfin или что гораздно лучше ADV202 (212)

да и подкючил его к процу который вам хорошо известен и вы с ним работали...ну или к ниосу подключить adv -ку :)

Я бы тоже. :) Но есть команда - делать на fpga. Как я понимаю, там в нее хотят еще что-то запихать. :( Вообщем, в выборе чипа я ограничен до выбора между Cyclon I - Cyclon II. :)

 

 

 

 

На самом деле, ответы опытных людей на мои вопросы меня порядком растраивают. Мне как-то казалось, что это все более простая задача. :( Даже возникают мысли о том, справлюсь ли я. Если не трудно, то не могли бы Вы прикинуть время, которое потребуется, чтоб изучить все сопутствующее, а потом решить задачу? Хотя бы примерно - месяц, полгода, год, пожизненно?

 

Набросал тут себе порядок изучения:

1) Сначала хочу закончить разбираться с платой Cyclon II Starter, - там есть в комплекте туториалы по разным темам + что-то вроде "лабораторных" к этой плате, завязаных, к тому же, на верилог. Хоть ознакомлюсь с ним.

2) Изучить главу, посвященную SOPC. Где-то здесь же спецификация Авалоновской шины.

3) Ближе ознакомиться с верилогом, потыкаться с ним, научиться писать модули к SOPC.

4) Сделать тот самый модуль, что будет входные данные гнать порт->фифо->дма->память. Потом ругнуться и переделать в рабочий вид. :)

5) Далее уже ближе к самому ниосу. Подключить в виде custom instruction JPEG-кодер. Если такого не найду, то хотя бы подключить быстрое ДКП и гнать кадр из памяти в jpeg програмно.

6) Сделать запись на карточку. Как именно - пока не знаю.

7) Засунуть в ниос обработку кадра, все это скомпоновать, собрать, отладить и пойти отмечать.

 

Примерно так мне это все видется. Вы уж не серчайте, что глупые вопросы задаю и занудствую, все ведь когда-то с нуля начинали. :)

Плохо, что на работе единственный человек, который занимался подобными вещами, уволился. Я там теперь в гордом одиночестве с поставленной задачей. :help:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На самом деле, ответы опытных людей на мои вопросы меня порядком растраивают. Мне как-то казалось, что это все более простая задача. :( Даже возникают мысли о том, справлюсь ли я. Если не трудно, то не могли бы Вы прикинуть время, которое потребуется, чтоб изучить все сопутствующее, а потом решить задачу? Хотя бы примерно - месяц, полгода, год, пожизненно?

 

Ну месяц на изучения всего этого хозяйства надо.Пару месяцев на написание проекта надо.

Но это так, мое мнение, а на самом деле все от вас зависит, может кто-то быстрее управится, а кому и всей жизни не хватит :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...