Pull to refresh

Слово о DSP Builder'е

Reading time 6 min
Views 13K
К моему удивлению на «Хабре» я не нашёл ни одной статьи, посвящённой DSP Builder’у (может, плохо искал?). А странно, ибо DSP Builder – это почти незамеченная никем настоящая революция в области ПЛИСостроения. На мой взгляд, такая ситуация создалась по двум причинам.

Первая – это несколько презрительное отношение суровых плисоводов к этому продукту. Почему-то считается, что DSP Builder – это «для студентов». Ситуация прямо как с Delphi. Причём особенно непонятно такое отношение к DSP Builder’у на фоне восторженных отзывов в сторону оболочек типа Active HDL. Правда, отчасти это может быть видимо объяснено тем фактом, что довольно редко встречаются специалисты хорошо разбирающиеся и в плисоводстве и в обработке сигналов. Такие специалисты штучны и имеют трёхзначные зп. Остальные – либо в том, либо в том. И первые не могут понять, зачем им этот «билдер» (а тут ещё и Симулинк какой-то!), а вторые ваяют алгоритмы и заявляют «а их реализация – не моё дело!» (реальная картина из одной известной отечественной конторы).

Вторая причина – это связка трёх весьма разнородных программ и сред. С вытекающими отсюда танцами с несовместимостью версий и каких-то совершенно странных нестыковок. Особенно умиляет, когда DSP Builder ну в упор не замечает установленного Матлаба и хоть ты что делай!

Но автор для себя нашёл весьма стабильную связку. Поэтому я буду говорить только о той версии, что идёт с 11.0ым Квартусом. Она, к счастью, без проблем находит и цепляется к нежно любимой автором версии 7.9 Матлаба (на взгляд автора, самая лучшая после знаменитой версии 6.5). После успешной установки в Симулинке должны появиться две библиотеки: Altera DSP Builder Blockset и Altera DSP Builder Advanced Blockset. И соответствующий раздел в справке Матлаба и ссылки на примеры. Примеры, надо сказать очень наглядны и охватывают практически все типовые задачи, встречающиеся плисоводам.

Если у вас DSP Builder ставился в комплекте с Квартусом и перед установкой мегафункций (а это – наверняка так), то мегафункции стоит подхватить. Набираем команду alt_dspbuilder_setup_megacore в командном окне Матлаба и получаем:

"

Команда однозначно отработает с ошибкой, это связано с тем, что крайне ограниченное число мегафункций поддерживают (и при этом правильно поддерживают) цепляние к Симулинку. Скорее всего, кроме шести показанных на рис. блоков, ничего другого подцепить и не удастся. Если всё-таки есть ощущение, что кто-то ещё поддерживает Симулинк, то можно просто вручную переносить файлы во временную директорию из подкаталога <где установлен Квартус>\libraries и снова и снова запускать alt_dspbuilder_setup_megacore. Есть шанс, что ещё чего-нибудь прицепится.

Использование этих блоков несколько специфично для Симулинка. Дело в том, что по началу Симулинк не знает какие же параметры вы изволите выбрать для используемой мегафункции, поэтому сначала она в вашей модели будет выглядеть как «черный ящик»:

После этого вы щёлкаете по ней и выпадает стандартное для данной мегафункции окно настройки, которое вы сотню раз видели в Mega Wizard Plug-In Manager. Но теперь, после выбора параметров, «Манагер» знает, что вы ещё и желаете сгенерить файлы для Симулинка. И, о чудо, теперь ваш блочок превращается в нормальный симулинковский блок:

DSPbuilder изначально поддерживает некоторое число «стартер китов». Поддержка эта сводится к тому, что DSPbuilder «знает» где у вас подключены лампочки, где кнопочки, а где (даже!) висит sma. К удивлению автора в списке даже есть знакомая плата с 4ым Stratix’ом. Но список крайне ограничен. Например, автор сейчас работает с платой DE2-115 с камнем из серии Cyclone IVE. А она, увы, этой версией не поддерживается.



Возникает вопрос: а можно ли руками добавить описание своей платы? Ответим. Ну, во-первых, это никому не нужно. А, во-вторых, делается это очень просто.

Залезаем в каталог <где_стоит_DSPbuilder>\lib\boardsupport\boards и видим файлики с расширением .board. Далее копируем какой-нибудь из файлов, который описывает наиболее родственную нам плату (в моём случае – это Cyclone_III_EP3C120.board), открываем и правим его. Формат файла понятен настолько, что даже смешно. Но если всё-таки не понятно, то открываем DSP Builder Handbook, Volume 2: DSP Builder Standard Blockset с.137 и читаем.

Несмотря на то, что всё понятно, делать описание новой платы надо весьма внимательно, что бы потом не строчить сообщения в конференциях типа: «помогите, dspbuilder выдаёт ошибку…». Можно даже в этом же каталоге поменять картинку платы. Далее о новой плате надо сообщить DSPbuilder’у. Делается это командой alt_dspbuilder_createComponentLibrary. После её отработки (а она наверняка вылетит с ошибкой, но на это надо забить) вы радостно увидите свою плату в подбиблиотеке «boards». Кстати, аналогичным способом к плате можно прикрутить и новый двоичный компонент. Например, нестандартный индикатор, кнопку-джойстик, релюшку, внешнюю шину и т.д.

Основное преимущество DSP Builder’а – это не только подготовка проектов для FPGA, но и возможность их заливать и проверять в «живом железе» не выходя из Симулинка. К этому же имеют отношение способ подготовки начального содержимого ОЗУ и ПЗУ прямо из переменных Матлаба, а не с помощью криво написанных утилит, путаясь в разрядностях и кодировках. И, что немаловажно, проверять работу проекта с помощью весьма удобного графического инструментария Симулинка, а не строча текстовые «верстаки» на десятки страниц для постоянно падающего «Моделлсима» (хотя и такая возможность в DSP Builder’е есть).

Для проверки DSP Builder предлагает два инструмента. Первый – это «HIL» (Hardware-in-the-loop, что на русский по смыслу можно перевести как «реальное железо внутри модели»). Здесь нужно сначала собрать проект исследуемой системы, а затем создать «накрывающую» модель, где ваша система будет являться HIL-подсистемой, отделённой от модельного пространства входами и выходами, input и output, соответственно. Звучит сложно, но откройте пример FreqSweep из Tutorials и всё станет ясно.



Кстати, некоторые плисоводы думают, что HIL использует SignalTap. На самом деле, SignalTap никакого отношения к HIL-методологии не имеет. Но SignalTap также можно использовать с DSP Builder’ом и это – второй способ. Для того, что бы задействовать SignalTap нужно использовать блок «SignalTap II Logic Analyzer» из подбиблиотеки «AltLab». Имеется ограничение при использовании SignalTap’а – только один тактовый сигнал (остальные воспринимаются как обычные входы). Но, положа руку на сердце, как часто мы используем в SignalTap’е несколько тактовых областей?

По поводу оптимальности генерируемого кода. DSPbuilder – это, по-сути, переводчик из графики Simulink’а в выбранный HDL-код. Откройте сгенерённый проект и посмотрите главный файл. Вы увидите, что DSPbuilder просто словесно «описал» соединение блоков в вашем симулинковском проекте. Точно также сделали бы и вы при ручном переносе в HDL-код. Отсюда следует, что уровень оптимальности проекта зависит только от вас. Используете мегафункцию для, например, CIC-фильтра – один результат, лень читать описание, или не хотите связываться с коммерческой корой и решили писать руками – другой результат. Всё то же самое!

В заключении кратко о подключении своих блоков. Как автор уже упоминал в начале, по его мнению DSPbuilder – это незамеченная никем революция. Хорошим тоном, поэтому, считается стиль, когда вы вообще не вылезаете из DSPbuilder’а и постепенно забываете, что вообще существуют какие-то там AHDL'и и Verilog'и, Quartus’ы и Synplicity. При таком подходе, в теории, созданием firmware смогут заниматься даже убогие математики (а у нас же руководители IT-контор упорно считают, что алгоритмами должны заниматься исключительно люди после Матмеха, хотя, по опыту автора, как раз математики ни разу не в состоянии заниматься алгоритмами!), которые микросхемы только на картинке до этого видели.

Кстати DSPbuilder позволяет из симулинковского обрамления полностью контролировать настройки проекта. Для этого имеются соответствующие блочки в подбиблиотеке AltLab. Из DSPbuilder’а прекрасно можно работать и с SOPC Builder’ом (ну если кому нравится вставлять в дорогую плисину процессор с весьма хиленькими характеристиками). Но, автор слышит правильный вопрос: ну как же совсем не выходить из среды, когда ведь нужно же стыковаться с внешним миром? С тем же Азернетом Ethernet’ом, com-портом и т.д. и т.п. На самом деле, для этого нужно самому написать соответствующий компонент. Здесь можно действовать тремя путями.

Первый, самый сложный и почти невыполнимый, создать свою мегафункцию, пройти процесс IP Certifications (по-моему за не бесплатно, кто знает – поправьте), а дальше – читайте выше. Кстати, не такой уж фантастический способ. Автор некоторое время занимался созданием новой мегафункции для одного из производителей САПР для ПЛИС. Но тогда заниматься придётся только этим и ничем другим.

Второй способ – это написать новый блок средствами Симулинка. Но, истинный плисовод презрительно фыркнет на такой метод.

Ну а третий способ – это втащить свой HDL-код в рамки Симулинка. Для этого дела в DSPbuilder’е предусмотрен блок «HDL Import». Это – целый процесс, который автор может быть опишет потом в отдельном посте, но это – самый реальный путь, на который, поверьте, стоит один раз потратить время.
Tags:
Hubs:
+2
Comments 5
Comments Comments 5

Articles