ПЛИС (Программируемая Логическая Интегральная Схема) — это интегральная схема, предназначенная для построения цифровых цепей из описания на специальном языке программирования. Другими словами, ПЛИС представляет собой чип, как бы содержащий в себе кучу элементов наподобие 74HCxx. Какие именно это будут логические элементы, какие между ними будут связи, и какие связи будет иметь получившаяся схема с внешним миром, определяется на этапе программирования ПЛИС.
Примечание: Насколько я смог выяснить, в русском языке на сегодняшний день термины ПЛИС и FPGA (Field-Programmable Gate Array, Программируемая Пользователем Вентильная Матрица), принято считать взаимозаменяемыми, что будет использовано далее по тексту. Однако стоит знать о существовании и альтернативной точки зрения, согласно которой FPGA (ППВМ) является одной из разновидностей ПЛИС (PLD, Programmable Logic Device).
Для программирования FPGA используются языки описания аппаратуры (HDL, Hardware Description Language). Среди них наибольшей популярностью пользуются Verilog (и его диалекты, в частности SystemVerilog), а также VHDL. Языки во многом похожи, но имеют разный синтаксис и различаются в некоторых деталях. Если Verilog — это такой C мира описания аппаратуры, то VHDL — соответственно, Pascal. Насколько мне известно, VHDL несколько менее популярен, в частности, из-за его многословности по сравнению с Verilog. Из преимуществ VHDL (или недостатков, кому как) можно назвать
На данный момент лидирующими производителями FPGA являются компании Altera (сейчас принадлежит Intel) и Xilinx. По информации из разных источников, вместе они контролируют не менее 80% рынка. Из других игроков стоит отметить Actel (куплена Microsemi), Lattice Semiconductor, Quicklogic и SiliconBlue. С железом от Xilinx можно работать только из среды разработки от Xilinx (называется Vivado), а среда разработки от Altra (называетя Quartus) понимает только железо от Altera. То есть, полный вендор лок, и выбирая конкретную FPGA для своего проекта, вы автоматически выбираете и инструменты разработки соответствующего производителя, их техническую поддержку, документацию, условия лицензирования софта, политику касаемо прекращения поддержки железа, и так далее.
FPGA часто используются в задачах, где некие вычисления хочется существенно ускорить, реализовав их прямо в железе. Например, FPGA нашли широкое применение в области обработки сигналов, скажем, в осциллографах, логических анализаторах, генераторах сигналов, Software Defined Radio и даже некоторых мониторах. В частности, в LimeSDR используется Altera Cyclone IV, а в осциллографе Rigol DS1054Z стоит Xilinx Spartan-6, а также ProASIC 3 от компании Actel. Еще из применений, о которых я слышал, могу назвать компьютерное зрение, распознавание речи и биоинформатику. Есть и другие проекты, в частности по разработке веб-серверов и СУБД, работающих на FPGA [PDF]. Но, насколько мне известно, это направление все еще остается сильно экспериментальным.
Как говорится, лучший Linux тот, который использует ваш знакомый гуру по Linux.
Мой знакомый гуру по FPGA в лице Дмитрия Олексюка посоветовал начать с девборды Arty Artix-7 от компании Digilent. Используемой в ней FPGA является Artix-7 от Xilinx. Сам Digilent не производит доставку в Россию, но устройство доступно и на AliExpress, хотя и с заметной наценкой (официальная цена составляет 99$). Также его продают на eBay. Это довольно мощная плата, которая, тем не менее, стоит вполне адекватных денег.
Fun fact! Если вам просто хочется попрограммировать на Verilog или VHDL, строго говоря, покупать какую-либо плату с FPGA не требуется. Первое время можно ограничиться симулятором, работа с которым будет рассмотрена далее.
Из интересных особенностей платы можно назвать расположение гнезд совместимым с Arduino-шилдами способом. Также в комплекте с платой идет вкладыш, по которому можно получить лицензию на Vivado, открывающую все его возможности. Лицензия действует один год с момента активации, а также привязана к одному компьютеру по типу ОС и MAC-адресу.
По доставке. Я слышал, что устройства с FPGA на борту имеют большие шансы не пройти таможню. Магазин на AliExpress, ссылку на который я привел выше, доставляет платы в Россию через курьерскую службу СПСР. Для прохождения таможни потребовалось заполнить онлайн-форму с паспортными данными (только данные, без фото) и контактным телефоном, как этого требует текущее российское законодательство. После этого плата была доставлена курьером прямо до двери без каких-либо вопросов.
Среда разработки Vivado доступна для скачивания на сайте Xilinx. Будьте морально готовы к тому, что перед скачиванием вам придется пройти регистрацию и заполнить довольно подробную форму о себе. Скачиваем архив под названием «Vivado HLx 2017.2: All OS installer Single-File Download». Не перепутайте случайно с каким-нибудь «Vivado Lab Solutions», это совершенно не то, что нужно. Архив весит более 20 Гб, поэтому запасаемся терпением.
Распаковываем архив, запускаем инсталлятор. Ставим Vivado HL System Edition. Полная его версия займет на диске 47 Гб. Лично я снял галочку напротив Software Development Kit и оставил поддержку только 7 Series устройств, что уменьшило размер до 12 Гб. Забегая немного вперед отмечу, что такой конфигурации оказалось вполне достаточно.
Перед запуском Vivado нужно добавить в него поддержку Arty Artix-7, так как из коробки он ничего об этой плате не знает. Делается это как-то так:
cd ~/opt/xilinx/Vivado/2017.2/data/boards/board_files
wget https://github.com/Digilent/vivado-boards/archive/master.zip
unzip master.zip
Также скачиваем отсюда и сохраняем куда-нибудь файл Arty_Master.xdc. Он понадобится нам далее. Файл содержит описание находящихся на плате светодиодов, переключателей и так далее. Без него поморгать светодиодами на Verilog будет непросто.
В Vivado говорим File → New Project… В качестве типа проекта выбираем RTL Project, ставим галочку Do not specify sources at this time. В диалоге выбора типа платы находим в списке Arty.
Первым делом добавляем к проекту скачанный ранее XDC файл. Копируем его в каталог с проектом. Затем говорим File → Add Sources… → Add or create constraints → Add Files, находим копию файла, жмем Finish. В дереве файлов проекта (Sources) в группе Constraints появится файл Arty_Master.xdc, или как вы там назвали копию. Открываем его и раскомментируем все строчки в группах Clock signal, Switches и LEDs.
Далее говорим File → Add Sources… → Add or create design sources → Create File. В типе файла выбираем SystemVerilog, в имени файла вводим что-нибудь вроде hello. Говорим Finish. Далее появится диалог Define Module, который предложит накликать интерфейс модуля. Диалог довольно бесполезный, потому что то же самое удобнее сделать прямо в коде, так что жмем Cancel.
В дереве исходников находим новый файл hello.sv, он будет в группе Design Sources. Открываем и пишем следующий код:
`timescale 1ns / 1psmodule hello(
input logic CLK100MHZ,
input logic [3:0] sw,
output logic [3:0] led
);
always @(posedge CLK100MHZ)
begin
if(sw[0] == 0)
begin
led <= 4’b0001;
end
else
begin
led <= 4’b0000;
end
end
endmodule
Если все было сделано правильно, на этом этапе Vivado у вас будет выглядеть как-то так (кликабельно, PNG, 71 Кб):
Компиляция программы осуществляется в два этапа — синтез (synthesis) и имплементация (implementation). На этапе синтеза программа транслируется в абстрактную цепь из логических вентилей и прочих элементов. На этапе имплементации принимается решение о том, как прошить эту цепь в конкретную железку.
Запустим синтез, сказав Flow → Run Synthesis, или просто нажав F11. В правом верхнем углу вы увидите индикацию того, что процесс идет. Он может занимать довольно много времени, в зависимости от вашего компьютера и сложности программы. На моем ноутбуке синтез приведенной выше программы выполнился где-то секунд за 10. Если теперь сказать Flow → Open Synthesized Design, то можно увидеть красивую картинку вроде такой:
Настало время прошить нашу плату. Говорим Flow → Run Imlementation, затем Flow → Generate Bitstream. Подключаем плату к компьютеру по USB, в Vivado говорим Flow → Open Hardware Manager → Open target → Auto Connect → Program device. Потребуется указать путь к bit-файлу. У меня он был следующим:
./first-project.runs/impl_1/hello.bit
Говорим Program. Теперь на плате горит светодиод LD4, если переключатель SW0 опущен (см приведенную выше фотографию платы). Если же переключатель поднят, светодиод не горит. Простенько, конечно, но это же «hello, world», чего вы ожидали? 🙂
Симуляция — это виртуальное выполнение кода на Verilog или VHDL прямо на вашем компьютере, безо всяких там ПЛИС’ов. Это одновременно и отладочный инструмент, и своего рода фреймворк для покрытия кода тестами.
При знакомстве с симуляцией первое, что я обнаружил, было то, что она у меня не работает. В логах было просто:
ERROR: [XSIM 43-3409] Failed to compile generated C file […]xsim_1.c.
Google по этой ошибке находил только всякую ерунду в стиле «попробуйте отключить антивирус». В итоге решить проблему помогло добавление флага -v 2
в скрипт ~/opt/xilinx/Vivado/2017.2/bin/xelab. С его помощью я выяснил, что Clang, бинарник которого Vivado таскает за собой, падает со следующей ошибкой:
/a/long/path/to/clang: error while loading shared libraries:
libncurses.so.5: cannot open shared object file: No such file or
directory
А эта ошибка и ее решение уже описаны на Arch Wiki. Лично я просто скопировал уже существующий файл из каталога Vivado_HLS:
cp ~/opt/xilinx/Vivado_HLS/2017.2/lnx64/tools/gdb_v7_2/libncurses.so.5\
~/opt/xilinx/Vivado/2017.2/lib/lnx64.o/libncurses.so.5
… после чего все заработало. Итак, а теперь, собственно, пример симуляции.
По аналогии с тем, как ранее мы создавали hello.sv, создаем новый файл hello_sim.sv в группе Simulation Sources. В файле пишем следующий код:
`timescale 1ns / 1psmodule hello_sim();
logic clck_t;
logic [3:0] sw_t;
logic [3:0] led_t;
hello hello_t(clck_t, sw_t, led_t);
initial begin
clck_t <= 0;
sw_t <= 4’b0000; #1; clck_t <= 1; #1; clck_t <= 0; #1;
assert(led_t === 4’b0001);
sw_t <= 4’b0001; #1; clck_t <= 1; #1; clck_t <= 0; #1;
assert(led_t === 4’b0000);
end
endmodule
В дереве исходников делаем правый клик по файлу, выбираем Source Node Properties. В секции Used In снимаем галочки Synthesis и Implementation. Мы же не хотим, чтобы какие-то там тесты засоряли нашу далеко не резиновую FPGA?
Теперь говорим Flow → Run Simulation → Run Behavioral Simulation. В итоге вы увидите что-то примерно такого плана:
Можно видеть, что когда sw[0] равен нулю, led[0] равен единице, и наоборот. При этом все изменения происходят по фронту тактового сигнала. Похоже, что программа работает корректно. Ну и на ассертах ничего не свалилось, что как бы намекает.
Архив с описанным выше проектом можно скачать здесь. В качестве дополнительных источников информации я бы рекомендовал следующие:
А пишите ли вы под FPGA? Если да, то на каком языке и какого производителя предпочитаете?
Дополнение: Также вас могут заинтересовать статьи Головоломка с логическими вентилями и решение на HDL и Знакомимся с iCEstick и полностью открытым ПО для разработки под FPGA.
Метки: FPGA, Электроника.
eax.me
До недавнего времени моя работа с ПЛИС (FPGA, PLD) касалась лишь работы с микросхемами серии MAX7000 Altera (Intel), на тот момент времени мне казалось, что хуже Altera ничего нет из-за изобилия недостатков их ПО (Quartus), например:
Мое мнение об превосходной отвратительности ПО Altera прожило ровно до того момента, пока я не погрузился в чудесный мир от Xilinx с Vivado. Начал я с последней, на тот момент времени (осень 2016), версией — 2016.2 Сам перенос проекта на другую версию Vivado сопряжен с рядом проблем, о которых я напишу позднее, поэтому до полной реализации устройства я не решился переносить проект и продолжил работу с 2016.2.
Сказать ужасно значит вовсе не описать качества продуктов Xilinx.
1. Документация по софтовым продуктам, чипам, проектированию и т.п. доступна в разных документах с именами UGXXX, где XXX — номер документа. Документация временами и правда UG, многие вещи необходимо искать в многостраничным pdf, в которых на зерно информации тонна воды, документы не всегда актуальны (созданы для более ранних версий Vivado).
3. Работа Vivado: сотни предупреждений на собственные IP-ядра (ядра от Xilinx) при синтезе.
4. Дизайн: ориентирован на IP-ядра, а не на модули. Я не думаю, что на легковесные модули типа таблицы преобразований или инвертора нужно создавать IP-ядро, однако Vivado сильно параноит при использовании модулей.
5. Ресурсы. Очень долго выполняется синтез и имплементация проекта занимающего процентов 10-20% всех ресурсов от Zynq-7020. Например на 4-ядерном E2-6110 (слабенький 1,5 ГГц и TDP всего 15 Вт) полный цикл — 1 час. На топовых процессорах летает (на моем i7 — 1-2 минуты). По ощущениям Quartus на слабых машинах работал в разы быстрее. На аппаратной виртуальной машине, созданной на KVM с 4 ядрами и 5 Гб оперативки может упасть с Out Of Memory Exception (даже жирный своп не помогает от этой болезни).
6. Кривые и забагованные Vivado и Xilinx SDK, которые могут вылететь и закончить работу по абсолютно любым причинам с потерей всех результатов работы (на практике я не решился использовать частичный результат работы синтеза или имплементации при вылете на одном из шагов для продолжения с этого шага).
7. Отсутствие средств для инверсии логических сигналов на блок-дизайне (да мне пришлось создать модуль инвертора с телом в 3 строчки verilog кода)
8. Куча других более мелких причин…
Использование СКВ (системы контроля версий) для работы с проектом
Наиважнейший момент при разработке на ПЛИС. Отдельную функциональность/фичу я реализую в отдельной ветке и потом уже объединяю с основной ветвью (как правило, это master). На мой взгляд, идеальный выбор это git, для ряда своих проектов я использую github. У меня была ситуация когда по непонятным причинам код в двух ветках оказался полностью нерабочим, я не мог ничего сделать несмотря на массу попыток и относительно простых изменений в дизайне, поэтому пришлось откатиться на ветку, от которой я создал ранее обе эти ветви. Если бы у меня не было СКВ или СКВ с неудобной работой с ветками (CVS, Subversion) я бы попал в неприятное положение (получил бы нерабочий дизайн в trunk) и, возможно, мне пришлось бы создать весь дизайн заново.
Для всех своих проектов я использую следующие правила размещения создаваемых мною файлов:
./src — директория с моими HDL — исходниками, если использовать %ProjectName%.srcs/sources_1/…, то, во-первых, это выглядит ужасно, а, во-вторых, мы получим кашу из генерируемых Vivado файлов и собственных HDL-исходников, сама же Vivado любит на каждый чих делать толпу изменений в файлах. Если вы что-то поменяли в одном из модулей и желаете сделать коммит изменений одного конкретного модуля, то такой подходя позволяет быстрее находить измененные модули в списке измененных файлов .
/tests — файлы тестбенчей на HDL-модули
/constraints — директория для сохранения файлов ограничений (как временных, так и физических), здесь ситуация аналогичная с src
/app — рабочее пространство (воркспэйс) С/С++ Xilinx SDK-проектов (софтина, созданная на базе Eclipse, но с бОльшим числом проблем, чем у Eclipse.
/config — файлы аппаратной конфигурация SoC.
/ip — каталог моих IP-ядер.
Чтобы в коммите не было по 1000+ изменений файлов (я не шучу их реально несколько сотен минимум), нужно правильно настроить .gitignore (список не отслеживаемых файлов/директорий с возможностью задания имен по шаблону). Например, в качестве образца можно использовать такой шаблон: https://github.com/OpticalMeasurementsSystems/2DImageProcessing/blob/master/.gitignore
А вот и сами проблемы
Описания самих проблем будет значительно меньше по объему, чем всей предыстории. Если мне удастся записать видео в момент наступления проблемы и ее решения, то позднее я добавлю ссылку и на видео. Список при обнаружении проблем и решения будет обновляться.
1. Синтез/имплементация падают с генерацией исключения и демонстрацией мессадж бокса — проблема в кэше, для лучшего эффекта стоит удалить директории %ProjectName%.hw, %ProjectName%.cache, %ProjectName%.runs.
2. Синтез/имплементация зависли на длительное время — некоторые проблемы, когда Vivado падает не отображаются в виде мессадж боксом, но они видны в окне Log. Решение сбросить синтез имплементацию (нажать на кнопку Cancel в правом верхнем углу), прибить директорию %ProjectName%.runs.
3. На блок дизайне не обновляется размер некоторых портов, например, Concat IP-ядро. Для этого можно попробовать сначала сбросить Output Products (Reset Output Products при клике правой кнопкой мыши по экземпляру HDL Wrapper’а в иерархии исходных файлов модулей), а затем сгенерировать их заново (Generate Output Products).
5. Неожиданно перестал собираться BSP, вероятно, в воркспеэйсе появился доп. хардварный проект, а BSP связан с другим железом, для решения этой проблемы удаляем все лишние hardware проекты и обновляем железный проект через правый клик по проекту -> Change Hardware Description File (выбираем экспортированный hdf) и вуаля, после этого можно собрать BSP и приложение.
6. Не открывается репозиторий одним из гит клиентов (GitKraken и т.п.) — это связано с запущенным SDK, который блокирует доступ к скрытой директории .git, решение — закрыть SDK.
Почему все так ужасно?
Можно сказать, что это болезнь всего ПО, заточенного под Embed-проектирование, оно все, как правило, ужасно и изобилует большим количеством багов, а современные тенденции к генерации HDL-кода из ПО для моделирования типа Matlab + SimuLink приводят к разрастанию самого кода ввиду неоптимальных подходов, плохой поддержке этого кода, к созданию «одноразового (write only)» кода и т.п., уменьшают порог вхождения и увеличивают степень энтропии создаваемого продукта людьми далекими от какого-либо понимания принципов работы цифровой электроники и программирования.
easyhwsw.blogspot.com
Описание курса
Этот курс является вводным тренингом по проектированию в среде Vivado, позволяющим понять маршрут проектирования на FPGA. Он поможет начинающим разработчикам ознакомиться с основами проектирования на FPGA: созданием проекта в Vivado Design Suite с исходными файлами, моделированием, назначением контактов ввода/вывода, наложением базовых временных ограничений, синтезом, реализацией и отладкой проекта и, наконец, созданием и загрузкой файла прошивки в отладочную плату.
Продолжительность
3 дня
Кому будет полезен курс?
Разработчикам цифровой аппаратуры, желающим получить базовые знания по основам разработки на FPGA в среде проектирования Vivado Design Suite.
Что нужно знать заранее?
Иметь базовые знания по языку VHDL или Verilog
Иметь опыт разработки цифровых систем
Программное обеспечение
Vivado Design Suite
Аппаратные ресурсы
Архитектура: UltraScale и 7 серия
Отладочная плата: Kintex UltraScale FPGA KCU105 или Kintex-7 FPGA KC705
По завершении курса вы будете иметь все необходимые навыки для того чтобы:
С помощью мастера создания проекта (Project Wizard) уметь разработать Vivado IDE проект
Описывать поддерживаемые маршруты проектирования Vivado IDE
Создавать отчеты DRC для обнаружения ошибок на раннем этапе проектирования
Использовать Vivado IDE I/O Planning для распределения контактов ввода/вывода
Синтезировать и реализовать HDL проект
Учитывать временные ограничения, накладываемые на тактовый сигнал и контакты ввода/вывода и выполнять временной статический анализ
Уметь описать процесс «baselining», необходимый для достижения требуемых параметров быстродействия
Использовать схемотехнический и иерархический средства просмотра для анализа проекта
Применять логический анализатор Vivado и маршруты отладки для доработки проекта
Структура курса
День 1
Введение в архитектуру FPGA, 3D IC, SoC — Введение в архитектуру FPGA, технологию SSI, и архитектуру SoC (Лекция)
Введение в методологию проектирования UltraFast, — методические рекомендации и контрольный лист UltraFast (Лекция, Демонстрация)
Введение в маршруты проектирования Vivado – Введение в проектный и непроектный режимы (Лекция)
Маршрут проектирования в Vivado Designe Suit в проектном режиме – создание проекта, добавление файлов в проект, обзор графического интерфейса Vivado IDE, моделирование проекта (Лекция, Лабораторная работа)
Введение в правила описания цифровых схем – рассматриваются базовые методические рекомендации по созданию цифровых схем в FPGA (Лекция)
Синтез и реализация – задание временных ограничений в соответствии со сценарием проекта, синтез и реализация. Необязательная опция: Генерация bit-файла и его загрузка в отладочную плату (Лекция, Лабораторная работа)
Введение в конфигурирование FPGA – Описание процесса конфигурирования FPGA
Правила проверки в Vivado корректности проекта – запуск отчета DRC до синтеза для выявления ошибок в проекте на ранней стадии. Устранение нарушений DRC (Лабораторная работа)
Мастер задания временных ограничений – использование мастера задания временных ограничений для определения недостающих временных ограничений в проекте (Лекция, Лабораторная работа)
День 2
Редактор временных ограничений – введение в редактор временных ограничений (Лабораторная работа)
Отчет по тактовым цепям – использование отчета report_clock_networks для просмотра первичных и сгенерированных тактовых сигналов (Лекция, Демонстрация)
Ограничения по тактовым сигналам (основные сведения) – задание ограничений для тактовых сигналов и выполнение временного статического анализа (Лекция, Лабораторная работа, Демонстрация)
Распределение контактов ввода/вывода в Vivado Design Suite – использование инструмента I/O Planning для привязки портов ввода/вывода к контактам микросхемы и определения электрических параметров (Лекция, Лабораторная работа)
Временные ограничения по входам/выходам и виртуальные тактовые сигналы – задание временных ограничений для интерфейсов ввода/вывода и выполнение статического временного анализа (Лекция, Лабораторная работа)
Основные сведения по анализу проекта в Vivado — использование различных средств для анализа проекта в среде разработки Vivado (Лекция, Демонстрация)
Анализ параметров Setup и Hold Time – описание временного анализа по Setup и Hold (Лекция)
Введение во временные отчеты в среде разработки Vivado – генерирование и использование Vivado отчетов для выявления маршрутов, не удовлетворяющих требованиям по временным ограничениям (Лекция, Демонстрация)
Маршрут проектирования с IP – Задание параметров IP, интеграция IP в проект, проверка иерархии проекта (Лекция, Лабораторная работа, Демонстрация)
День 3
Таблица оценки потребляемой мощности для Xilinx – оценка количества логических ресурсов и частоты работы в проекте, оценка потребляемой мощности с помощью Xilinx Power Estimator (Лекция, Лабораторная работа)
Введение в логический анализатор Vivado – Рассмотрение логического анализатора Vivado для отладки проекта (Лекция, Демонстрация)
Интеграция логического анализатора в HDL код – Рассматриваются маршрут интеграции IP VIO (виртуальные входы/выходы) в HDL код и контроль поведения с помощью логического анализатора Vivado (Лекция, Лабораторная работа)
Основные сведения по запуску логического анализатора – рассматриваются базовые возможности по запуску логического анализатора Vivado (Лекция)
Интеграция логического анализатора в Netlist — рассматриваются маршрут интеграции IP ILA (интегрированный логический анализатор) в Netlist проекта и использование средств отладки для устранения типичных проблем (Лекция, Лабораторная работа)
Модули отладки – изучение использования IP Debug Hub для соединения модулей отладки VIO и ILA в проекте (Лекция)
Введение в среду Tcl – основные сведения по Tcl (Лекция, Лабораторная работа)
Использование Tcl команд в режиме проекта в Vivado Design Suite – рассмотрение того, как исполняются Tcl команды в проектном режиме Vivado DS (Лекция, Демонстрация)
Синтаксис и структура Tcl — Изучаются базовый синтаксис и структура Tcl (Лекция)
plis2.ru
Большинство любительских проектов FPGA, опубликованных на Хабре, сделаны на оборудовании фирмы Altera (теперь Intel). Давайте для разнообразия посмотрим, что можно сделать на продукции его основного конкурента – Xilinx. Мы возьмём и сделаем достаточно большой и сложный проект, в процессе реализации которого нам понадобится:
Характеристика | Значение |
---|---|
CPU | 3 MHz, количество транзисторов около 18000 (n-МОП) |
RAM | 32 KB |
ROM | 8-32 KB |
Для себя я остановился на Zybo. Эта плата одна из самых дешевых ($189, а если вы убедите Digilent, что удовлетворяете требованиям Academic Discount Program, то $125), у неё есть выходы как VGA так и HDMI, много портов PMOD, 512MB RAM. Да, эта плата основана на SoC, а возможности процессорного ядра я в этом проекте использовать не планирую. Но никто не мешает использовать эту плату просто как FPGA. У платы отсутствуют отладочные семисегментные индикаторы и нет возможности подключения PS2 либо USB клавиатуры к FPGA-части (в отличие от более дорогой Nexus 4 DDR), но разница в цене между этими двумя платами существенно больше, чем стоимость модулей PMOD, на которых эту функциональность можно получить.
Итак, в сухом остатке, для проекта нам понадобятся следующее оборудование:
Zybo
Можно и так, но есть некоторые сложности.
На Zybo есть USB Host, но он подключен к PS-части. Если планируется PL-проект, то потребуется подключить к плате отдельный USB host.
Полная спецификация протокола USB (с поддержкой HOST и всех типов устройств) очень сложна для реализации на FPGA, к тому же интерфейс USB довольно высокочастотен. Разумным компромиссом является подключение внешнего конвертера физического уровня например по интерфейсу ULPI, для работы с ULPI можно найти готовый IP-модуль на Verilog/VHDL. Можно также подобрать другую плату, на которой уже есть USB host для работы с клавиатурами и мышками (у Digilent это, например, Nexus 4 DDR).
В основном это RAM. Для Zybo с трудом, но хватает 8GB, для более мощных чипов надо больше.
Также понадобится файл ресурсов, в котором описано соответствие контактов чипа номерам выводов разъёмов платы. Находим нашу плату, в данном случае Zybo на GitHub/Digilent и скачиваем.
И напоследок сделаем первый проект на Verilog. Этот проект нам в дальнейшем потребуется для создания контроллера клавиатуры БК-0010.
У меня есть вот такая раритетная клавиатура Mitsumi с интерфейсом PS/2:
ishevchuk в своём проекте использовал вот этот контроллер для работы с PS/2 клавиатурой.
Возьмём его и мы и слегка переделаем. Контроллер всем хорош кроме того, что в нём жестко зашита тактовая частота 50 MHz. Такой частоты у нас в проекте БК-0010 не будет, кроме того, хардкодить такие вещи нехорошо. Создаём новый проект в Vivado, скачиваем файлы контроллера и задаём тактовую частоту в виде параметра:
Заголовок модуля с формуламиmodule Altera_UP_PS2_Command_Out #
(
parameter CLOCK = 100,
// Timing info for initiating Host-to-Device communication
// when using a 50MHz system clock
parameter CLOCK_CYCLES_FOR_101US = (CLOCK * 101), // 5050;
parameter NUMBER_OF_BITS_FOR_101US = $clog2(CLOCK_CYCLES_FOR_101US),
parameter COUNTER_INCREMENT_FOR_101US = 1,
// Timing info for start of transmission error
// when using a 50MHz system clock
parameter CLOCK_CYCLES_FOR_15MS = (CLOCK * 15000), // 750000;
parameter NUMBER_OF_BITS_FOR_15MS = $clog2(CLOCK_CYCLES_FOR_15MS),
parameter COUNTER_INCREMENT_FOR_15MS = 1,
// Timing info for sending data error
// when using a 50MHz system clock
parameter CLOCK_CYCLES_FOR_2MS = (CLOCK * 2000), // 100000;
parameter NUMBER_OF_BITS_FOR_2MS = $clog2(CLOCK_CYCLES_FOR_2MS),
parameter COUNTER_INCREMENT_FOR_2MS = 1
)
Кроме того, изменим полярность сигнала RESET, у стандартных IP Xilinx сброс происходит при подаче 0 на вход RESET.
Для удобства работы оформим проект в виде IP. В Vivado есть встроенный инструмент, который это делает, он вызывается через Tools->Create and Package new IP. Входы и выходы головного файла проекта станут входами и выходами нашего нового IP. Vivado пытается сама определить тип портов, анализируя их название. В данном случае нам придётся вмешаться в этот процесс и исключить порт PS2_CLK из числа Clock and Reset Signals, чтобы уменьшить число Warnings при дальнейшей сборке проекта. PS2_CLK нельзя назвать полноценным синхросигналом, поскольку его частота лишь несколько десятков килогерц.
Инструмент весьма гибкий, мы можем не только задавать тип портов, но и управлять различными параметрами, задавать опции условной компиляции, менять внешний вид IP в зависимости от параметров. В данном проекте у нас есть два параметра — Initialize Mouse (выбор устройства — клавиатура или мышь) и Clock (тактовая частота в мегагерцах). Вопросы условной компиляции мы рассмотрим позже, когда будем писать модуль для работы с шиной MPI.
В IP Integrator создаём новый блочный дизайн, добавляем в него IP и соединяем их, пока не получится вот такая схема:
Здесь были использованы следующие IP:
Clocking wizard Модуль создания синхросигналов. Предназначен для создания синхросигналов (до 6 штук) с различной частотой и скважностью (в данном случае одного меандра 100MHz). На вход ему подаётся системный клок (125 MHz). Использует ресурс PLL, выходные синхросигналы распространяются через соответствующие ресурсы кристалла. Стандартный модуль Xilinx.
Binary Counter. Настраиваемый делитель, в данном случае 8-битный. Стандартный модуль Xilinx.
Slice. Делитель шины, в данном случае вытаскивает старший бит из Binary Counter, образуя таким образом делитель на 256. Стандартный модуль Xilinx.
Вообще с синхросигналом такие вещи делать нельзя, нужно брать ещё один выход из Clocking Wizard и корректно настраивать Clock Domain Crossing. Но в данном случае для работы SSD_pmod годится любая частота от сотни герц до сотен килогерц, не синхронизированная вообще ни с чем.
SSD_pmod. Модуль, выводящий байт в шестнадцатеричном виде на двухзначный семисегментный индикатор Digilent PMOD-SSD. Байт поступает на вход модуля. Исходный текст модуль выложен на GitHub.
PMOD_GPIO. Модуль, описывающий работу с сигналами в разъёмах PMOD. В зависимости от типа модуля, подключенного к разъёму, используются различные протоколы — GPIO, SPI, I2C, UART. Я взял за основу модуль написанный Digilent для поддержки своих PMOD, и слегка изменил его. Исходный текст модуль выложен на GitHub.
Модуль Constant. Это просто константа 0 или 1. Мы не используем в данном случае передачу в сторону клавиатуры, так что на входы send_command и the_command подан 0, а на вход reset подана 1 (в окончательном проекте у нас будет полноценная схема сброса).
Наконец PS2_controller, модуль, который мы создали на предыдущем шаге. Не забудьте указать путь к нему в свойствах проекта, чтобы его возможно было добавить.
У нас используются следующие внешние соединения:
sys_clock Синхросигнал 125MHz от внешнего генератора на плате (пин L16). Используется для запуска PLL.
PMOD_C К порту C подключена клавиатура, используются биты JC2 (W15) и JC4 (T10)
PMOD_D К порту D подключен семисегментный индикатор, используются все 8 бит.
Сохраняем блочный дизайн, генерируем враппер на Verilog (Generate HDL Wrapper…), компилируем проект (Generate Bitstream), заливаем его через JTAG в плату (Open Hardware Manager, Open Target, Program Device). Теперь при нажатии кнопок на клавиатуре их скан-коды будут выводиться на семисегментном индикаторе:
8’h5E — это ‘-‘
→ Враппер для работы с Git из Vivado
Кроме этого потребуется установить:
→ Описание интерфейсов и плат Digilent, в том числе Zybo
→ Раз и два — вспомогательные модули для вывода шестнадцатеричных чисел на семисегментный индикатор
→ Контроллер PS2-клавиатуры
→ Модуль в котором всё это соединяется вместе
Для установки модуля необходимо скачать его с Github и запустить .tcl файл, лежащий в корне, из под Vivado
habr.com
Описание курса
Данный курс является введением в среду разработки Vivado Design Suite. Он предназначен для опытных пользователей ПО ISE, которые хотели бы в полной мере использовать возможности Vivado Design Suite. На занятиях слушатели получат представление о проектах Vivado Design Suite, маршруте проектирования, проектных ограничениях, и базовых временных отчетах.
Продолжительность
2 дня
Кому будет полезен курс?
Разработчикам проектов на FPGA, использующим ПО Xilinx ISE Design Suite.
Что нужно знать заранее?
Базовое владение языком VHDL или Verilog
Иметь опыт цифрового проектирования
Программное обеспечение
Vivado Design Suite
Аппаратные ресурсы
Архитектура: UltraScale и FPGA 7 серии
Отладочная плата: Kintex UltraScale FPGA KCU105 или плата Kintex-7 FPGA KC705
*В данном курсе основное внимание уделяется архитектуре FPGA серий UltraScale и 7
По завершении курса вы будете иметь все необходимые навыки для того чтобы:
С помощью Project Manager запускать новый проект
Правильно выбирать маршруты проектирования Vivado IDE (проектный и непроектный режимы)
Определять наборы файлов (HDL, XDC, simulation)
Уметь анализировать проект с помощью возможности перекрёстного выбора объектов, Schematic viewer, и Hierarchical viewer
Синтезировать и реализовывать HDL проект
Уметь применять системный подход для введения временных ограничений и достижения требуемых временных характеристик
Использовать доступные отчеты по синтезу и имплементации для анализа проекта (использование аппаратных ресурсов, временные характеристики, энергопотребление и т.п.)
Уметь использовать базовые Tcl отчеты (check_timing, report_clock_interaction, report_clock_networks и report_timing_summary)
Структура курса
День 1
Методология проектирования UltraFast — Планирование: Введение в методические рекомендации по планированию и контрольный список методологии проектирования UltraFast
Методология проектирования UltraFast – Создание и анализ проекта: Обзор методических рекомендаций по созданию и анализу проекта
Технологии кодирования на HDL: Основные рекомендации по цифровому кодированию проектов на FPGA
Сброс: Изучение влияния асинхронных сбросов в проекте
Дублирование регистров: Использование дублирования регистров для уменьшения количества высоконагруженных цепей в проекте
Технология синхронного проектирования: Рассмотрение технологии синхронного проектирования, используемой в проектах на FPGA
Введение в Vivado Design Suite: Ознакомление с Vivado Design Suite
Введение в режимы проектирования: Ознакомление с режимами проектирования: проектный и непроектный режимы
Маршрут проектирования в Vivado Designe Suit в проектном режиме: Создание проекта, добавление файлов в проект, обзор графического интерфейса Vivado IDE, моделирование проекта
Синтез и имплементация: Задание временных ограничений в соответствии со сценарием проекта, синтез и реализация
Базовый анализ проекта в Vivado IDE: Использование различных средств для анализа проекта в среде разработки Vivado
Распределение контактов ввода/вывода в Vivado Design Suite: Использование инструмента I/O Planning для привязки портов ввода/вывода к контактам микросхемы и определения электрических параметров
День 2
Маршрут проектирования с IP: Задание параметров IP, интеграция IP в проект, проверка иерархии проекта
Проектирование с IP интегратором: Использование Vivado IP интегратора для создания подсистемы uart_led
Маршрут проектирования в Vivado Designe Suit в непроектном режиме: Создание проекта
Введение в среду Tcl Оновные сведения по Tcl (командному языку инструментов)
Анализ проекта с использованием Tcl команд: Рассмотрение процесса анализа проекта с использованием Tcl команд
Написание скриптов для проектного режима среды проектирования Vivado: Использование Tcl команд в проектном режиме
Написание скриптов для непроектного режима среды проектирования Vivado: Использование Tcl команд в непроектном режиме
plis2.ru
Описание курса
Данный курс поможет опытным пользователям ПО ISE овладеть работой в среде проектирования Vivado Design Suite. На занятиях студенты изучат механизмы работы с исходными базами данных и статического временного анализа (STA). В программу курса включены такие аспекты, как применение Tcl для навигации по проекту, использование проектных ограничений формата XDC и создание временных отчетов. Также изучаются вопросы определения временных ограничений для входных/выходных регистров в режиме SDR, DDR, интерфейсов source-synchronous и system-synchronous.Помимо этого, слушатели научатся задавать path-specific, false path, и min/max временные ограничения, а также узнают о приоритетах временных ограничений. На занятиях изучаются средства создания скриптов в Vivado Design Suite и демонстрируется использование скриптов в проектном режиме.
Кроме того, студенты смогут освоить наиболее современные приёмы проектирования на FPGA и получат опыт, гарантирующий успешную работу в Vivado Design Suite. Полученные на занятиях навыки позволят повысить производительность и надежность разрабатываемых проектов. В этом аспекте рассматриваются такие вопросы, как системный перезапуск проекта, цепи синхронизации, оптимальное кодирование на HDL и технологии оптимизации временных параметров в среде разработки Vivado. Информация этого курса входит в состав темы под общим названием “Методология проектирования UltraFast”. Также приводится контрольный список методологии проектирования UltraFast.
Продолжительность
3 дня
Кому будет полезен курс?
Действующим разработчикам на Xilinx ISE Design Suite
Что нужно знать заранее?
Настоятельно рекомендуется пройти обучение по курсу «Vivado для пользователей ISE Project Navigator»
Владение HDL (VHDL или Verilog)
Опыт цифрового проектирования
Программное обеспечение
Vivado Design Suite
Аппаратные ресурсы
Архитектура: UltraScale и FPGA 7 серии
*В данном курсе основное внимание уделяется архитектуре FPGA серий UltraScale и 7
По завершении курса вы будете иметь все необходимые навыки для того чтобы:
Используя списки фильтров объектов, осуществить доступ к исходным объектам из базы данных проекта
С помощью параметров setup и hold проверить и описать компоненты временного отчета
Задавать соответствующие ограничения по входу и выходу и создавать временные отчеты, включающие в себя входные и выходные маршруты
Понимать, как вариации процесса производства влияют на временной анализ, а также иметь представление о том, каким образом min/max информация временного анализа отображается во временном отчете
Описывать все доступные опции команд: report_timing и report_timing_summary
Применять и модифицировать в проекте соответствующие временные ограничения на входные/выходные пути для интерфейсов source-synchronous и system-synchronous
Осуществлять анализ временного отчета для определения центрального положения фронта тактового сигнала в окне данных
Создавать скрипты для маршрутов в проектном и непроектном режимах
Описать контрольный список методологии проектирования UltraFast
Определить ключевые области оптимизации вашего проекта для обеспечения его соответствия поставленным задачам и реализации требуемых параметров функционирования
Определять проект с корректно заданными временными ограничениями
Оптимизировать HDL код для эффективного использования ресурсов FPGA и обеспечения требований к параметрам быстродействия
Уметь реализовывать функцию сброса, без ухудшения надежности и снижения быстродействия проекта
Создавать более надежный проект, менее уязвимый в части метастабильности и в последующем требующий меньше времени на отладку
Уметь использовать технологию достижения требуемых временных параметров в среде проектирования Vivado Design Suite
На базе изученного материала и опыта, полученного в процессе выполнения лабораторных работ, эффективно использовать приёмы методологии проектирования UltraFast
Структура курса
День 1
Методология проектирования: UltraFast: Обзор — введение в методологию проектирования UltraFast
Методология проектирования: UltraFast: Современные технологии – методические рекомендации по использованию современных технологий
Мастер задания временных ограничений: использование мастера задания временных ограничений для определения недостающих временных ограничений в проекте
Редактор временных ограничений – обзор средств редактирования временных ограничений
Обзор временных отчётов в среде разработки Vivado – генерация и использование отчётов для выявления путей, не удовлетворяющих требованиям по временным ограничениям
Ограничения по тактовым сигналам (основные сведения) – задание ограничений для тактовых сигналов и выполнение временного анализа
Отчёт о взаимодействии тактовых доменов – Применение отчета report_clock_interaction для определения взаимодействия между тактовыми доменами
Отчёт по тактовым цепям – использование отчёта report_clock_networks для просмотра первичных и сгенерированных тактовых сигналов
День 2
Временные ограничения по входам/выходам и виртуальные тактовые сигналы – задание временных ограничений для интерфейсов ввода/вывода и выполнение статического временного анализа
Отчёт Timing Summary: Использование отчета timing_summary_report после имплементации для определения параметров быстродействия
Анализ параметров Setup и Hold Time – описание временного анализа по Setup и Hold
Сгенерированные тактовые сигналы — Использование отчета report_clock_networks для выявления наличия сгенерированных тактовых сигналов
Ограничения Clock Group – Применение ограничения set_clock_groups для асинхронных тактовых доменов
Основные сведения по Timing Exception – ограничения Timing Exception и использование их для тонкой настройки временных параметров проекта
Цепи синхронизации – Применение цепей синхронизации для передачи сигналов между тактовыми доменами
Отчёт Report Datasheet – Использование отчета report_datasheet для определения оптимального запаса времени по Setup и Hold для входных/выходных интерфейсов
День 3
Работа с временными ограничениями «baselining» — Рекомендуемый Xilinx порядок работы с процедурами baselining для последовательного достижения требуемых временных характеристик проекта
Конвейеризация – Использование конвейеризации для повышения быстродействия проекта
Сценарии для входных/выходных временных параметров – Обзор различных сценариев для входных/выходных временных параметров, таких как интерфейсы source-synchronous и system-synchronous, прямой и MMCM захват, выравнивание данных по центру или фронту
Source-Synchronous интерфейс – Применение ограничений на задержу по входу/выходу и выполнение статического временного анализа для source-synchronous, (DDR) интерфейса
System-Synchronous интерфейс — Применение ограничений на задержу по входу/выходу и выполнение статического временного анализа для входного system-synchronous интерфейса
Приоритет временных ограничений – Определение приоритета временных ограничений
Анализ «что если?» — Разъяснение процесса временного анализа при использовании мультиплексора тактовых частот
Введение в Floorplanning — Введение в Floorplanning и использование Pblock при Floorplanning Оптимизация на физическом уровне – применение оптимизации на физическом уровне для достижения требуемых временных параметров
plis2.ru
Доступна для скачивания новая версия Vivado® Design Suite 2017.4. Что нового? I. Model Composer В релиз Vivado® Design Suite 2017.4 включён новый инструмент, который получил название Model Composer, построенный на основе абстрактных моделей (блоков). Model Composer работает на основе MathWorks Simulink и обладает следующими возможностями:
1. Высокий уровень абстракции: Пользователь имеет в своём распоряжении специализированные блоки, предназначенные для работы с векторами и матрицами. Пользователь может создавать проекты (алгоритмы), которые относятся к т.н. frame-based алгоритмам (поточные, кадровые), сохраняя время, затрачиваемое на имплементацию алгоритма в FPGA. 2. Специализированная библиотека блоков, оптимизированная по производительности: Библиотеки Computer Vision (xfOpenCV), Math, Linear Algebra теперь доступны в качестве блоков, что позволят выполнять разработку и моделирование алгоритма в графической среде Simulink 3. Импорт пользовательских блоков: Пользователь может импортировать свои собственные разработки, написанные на HLS C/C++ в виде пользовательских блоков, что позволяет достигнуть гибкости проектирования пользовательских алгоритмов 4. Автоматическая генерация кода: Автоматически генерирование HDL синтезируемого описания оптимизировано с учётом микроархитектуры целевой FPGA. Пользователь может синтезировать разработанный алгоритм в одном из трех вариантов экспорта проекта: Package RTL IP, System Generator for DSP и Vivado HLS. 5. Поддерживаемые версии MATLAB: R2016a, R2016b, R2017a and R2017b. Больше информации можно найти на странице Model Composer: www.xilinx.com/modelcomposer
II. Добавлена поддержка следующих устройств:
III. Известные ограничения и ошибки Список известных ошибок и ограничений Vivado ® Design Suite доступен на странице Answer Record 68923
IV. Список поддерживаемых операционных систем:
Больше информации по текущему релизу Вы можете найти на странице Vivado и в UG973 Release Notes, Installation, and Licensing Остались вопросы? Оставьте их в комментариях на www.fpga-systems.ru |
fpga-systems.ru