Оригинал статьи: http://www.xilinx.com/publications/xcellonline/xcell_46/xc_freesw46.htm
        Перевод взят с сайта: http://www3.elphel.com/ru/articles/xc_freesw46_r.html
перевод статьи
"How to Use Free Software in FPGA Embedded Designs"
,
опубликованной в в онлайновом журнале
Xilinx Xcell
Стремясь принести достижения движений свободного ПО и ПО с открытым кодом в обиход разработчиков электронной аппаратуры, Андрей Филиппов создал недорогую высокопроизводительную сетевую камеру, используя ПЛИС Spartan-IIE и бесплатное ПО фирмы Xilinx. Недавно Гордон Мур «продлил» свой закон еще на десять лет, предсказывая, что плотность микросхем будет продолжать удваиваться каждые полтора года. Чем разработчик может ответить на вызов все усложняющейся электроники? Один из возможных ответов - эффективно использовать то, что другие уже создали, концентрируя усилия на действительно новых аспектах. Возрастающее число успешных применений принципов свободного ПО и ПО с открытым кодом (FS/OSS) подтверждает эффективность использования наработок других при создании программных продуктов. Программируемые микросхемы Xilinx представляют собой границу между «мирами» программного обеспечения и аппаратуры, предоставляя уникальную возможность для применения аналогичного подхода при проектировании электронных устройств. Я уверен, что потенциал для подхода FS/OSS при разработке аппаратуры даже выше, чем при создании программ - ведь доход можно получать с продаж изделий. В настоящей статье я хочу показать, как такой метод помог мне создать высокоскоростную сетевую камеру высокого разрешения (сетевые камеры не требуют дополнительных компьютеров для передачи цифровых изображений и видео по локальной сети или через Интернет). Введение Впервые я познакомился с GNU/Linux менее двух лет назад, когда я осознал, что мне самому придется программировать камеру, которую я создал на основе процессора ETRAX100LX. Этот процессор, созданный фирмой Axis Communications AB, оптимизирован для GNU/Linux. Имея опыт разработки микропроцессорных устройств, которые, в основном, программировались на ассемблере, я был изумлен, что всего через пару недель камера была способна передавать JPEG изображения через локальную сеть по HTTP протоколу - для управления можно использовать любой стандартный браузер. Та камера (модель 303) совместила ПО из различных источников - самой GNU/Linux, специфического ПО для платформы ETRAX и многих, многих других. Мне пришлось лишь добавить поддержку моей аппаратуры и модифицировать некоторые из программ. Больше всего меня поразила легкость навигации в больших системах, возможность находить места, где небольшие изменения кода приводят к желаемым изменениям функциональности. Будучи, в основном, разработчиком аппаратуры я стал думать над аналогичным увеличением продуктивности в аппаратной (включая ПЛИС) части камеры. Цели разработки Начиная проектирование новой камеры я преследовал следующие цели:
В то время, когда я начинал работать над проектом камеры, мой опыт работы с ПЛИС ограничивался однократно программируемыми микросхемами размером до 60 тыс. вентилей. Поэтому я был готов рассмотреть возможность применения различных типов ПЛИС, которые соответствовали целям разработки. На тот момент я даже не был уверен, что мой проект вообще осуществим. Вскоре я нашел подходящую микросхему - ей оказался самый большой (на то время) член семейства Spartan-IIE фирмы Xilinx - XS300E объемом 300 тыс. вентилей Чтобы определить, можно ли осуществить JPEG-сжатие изображений размером 1,3 мегапикселя со скоростью 15 кадров в секунду, я стал искать коммерческие IP, которые выполняют аналогичные задачи. Такие продукты нашлись, и, из приведенных параметров, было видно, что оставшихся ресурсов мне хватит для контроллера SDRAM (для буфера кадров), коррекции неоднородности чувствительности ячеек, преобразования цветового пространства и интерфейса ЦПУ. Однако я не мог воспользоваться найденным IP, так как это помешало бы мне держать открытым свой исходный код. Так что я воспользовался найденной информацией, как временной заменой собственного опыта работы с устройствами Xilinx. Убедившись, что возможности выбранной ПЛИС позволяют осуществить задуманное, я загрузил и установил бесплатное ПО WebPACK 4.2i с веб-сайта Xilinx, чтобы его попробовать - мне нужно было проверить, что средства разработки также отвечают моим целям. Чтобы приобрести начальные навыки работы как с ПО, так и с устройствами Xilinx, я прочитал их заметку по применению XAPP610 и решил реализовать описанный там двумерный алгоритм ДКП (DCT) размером 8х8 точек, который необходим для JPEG-сжатия. Статья содержала исходный код на языке Verilog, что позволило мне осуществить синтез, размещение и разводку. Проблемы появились, когда я попытался промоделировать работу схемы. Оказалось, что "облегченная" версия симулятора, производимого сторонней компанией и включенного в бесплатный пакет WebPACK, имеет встроенные ограничения на сложность проекта, такие, как предел размера исходного текста, установленный в 500 строк. Даже один алгоритм ДКП занимал больше, но мне все же удалось его промоделировать, убрав строки комментариев и соединив по несколько строк в одну Так что хотя "облегченный" симулятор и заработал для одного модуля, но для моего проекта его возможностей явно не хватало, и мне пришлось искать другие средства моделирования. Остальные компоненты WebPACK меня полностью устроили - в окончательном варианте мне удалось использовать более 98% ресурсов кристалла, результат удовлетворял всем наложенным условиям по временам прохождения сигналов. Архитектура системы После того, как я убедился, что микросхема Spartan-IIE обладает достаточными возможностями для осуществления проекта, я занялся разработкой схемы и печатных плат. Камера модели 313 состоит из двух печатных плат. Меньшая плата предназначена для приемника изображений и связанных с ним компонентов. Основная четырехслойная плата размером 38 х 89мм содержит следующие основные компоненты:
Код ПЛИС Основная часть функциональности камеры реализована внутри ПЛИС Spartan-IIE фирмы Xilinx. Код написан на языке Verilog и опубликован на веб-сайте Elphel на условиях лицензии GNU/GPL. Он разработан вокруг 4-х канального контроллера SDRAM, который использует встроенные в ПЛИС блоки памяти в качестве буферов для обеспечения квази-одновременного доступа четырех следующих источников и потребителей данных:
Кодировщик JPEG занимает около двух третей ресурсов ПЛИС. Он состоит из цепи модулей, некоторые из которых используют встроенные блоки памяти для буферизации данных и хранения таблиц:
Выходные данные передаются в системную память по каналу ПДП, реализованном в микросхеме ЦПУ. Результаты После того, как реконфигурируемая сетевая камера высокого разрешения Elphel модель 313 была впервые описана в онлайн журнале LinuxDevices 3 декабря 2002 г. (и позднее, 4 декабря в Slashdot), значительная часть запросов, которые я получал, была непосредственно связана с открытостью платформы, ее удобством для модификации пользователем. Возможны четыре уровня модификации камеры. Три из них унаследованы от предыдущей камеры (модель 303) и связаны с открытостью программного обеспечения:
Однако, только использование реконфигурируемой ПЛИС Xilinx, поддерживаемой бесплатной системой разработки ISE WebPACK, увеличило производительность камеры почти в 100 раз и сделало возможным еще один, наиболее мощный уровень: В настоящее время в ПЛИС камеры реализован только алгоритм сжатия baseline JPEG, который позволяет получать как отдельные изображения в формате JPEG, так и видео клипы в формате Apple Quicktime, состоящие из последовательности кадров, сжатых по алгоритму JPEG. Путем добавления программного обеспечения камеры или HDL кода в ПЛИС, вы можете экспериментировать с другими алгоритмами сжатия изображений и видео - как, например, JPEG 2000 для оптимизации соотношения качество-размер файла для неподвижных изображений или MPEG (-1, 2, 4) для видео. Дополнительно можно запрограммировать процессор и ПЛИС для обнаружения движения, распознавания образов, дискриминации частиц или еще чего-нибудь, что вы можете придумать. Выводы Так как же все-таки подход FS/OSS помог мне в создании камеры Elphel модель 313? Возможно, он не смог сократить время разработки ПЛИС в такой же пропорции, как он сделал это для разработки программного обеспечения - областью, где он развился. Но, в целом, этот метод оказался вполне работоспособным:
Не раз меня спрашивали: «А это не страшно открывать вашу разработку? Что если кто-нибудь воспользуется ей и получит все деньги?»
|