Программирование ПЛИС (FPGA) Xilinx. Языки проектирования ПЛИС и СнК

1,1K прочитали

«Программирование» ПЛИС 

Первые ПЛИС можно было сконфигурировать, просто задав положение всех электронных ключей вручную. (Сомнительно, что так делали даже тогда, но теоретически это было возможно). Сейчас же разработка конфигурационной прошивки для ПЛИС, настраивающей ее на выполнение требуемой заказчику функциональности - процесс сложный и многоэтапный. Начинается он, как правило, с описания функциональности устройства на языке высокого уровня. Чаще всего это Verilog либо VHDL, но в последнее время это может быть и C/C++, а так же результаты работы таких программ, как Matlab/Simulink либо LabView.

Слово «программирование» взято в кавычки, т.к. под ним понимается процесс, приводящий в конечном этапе к некоторой функциональной конфигурации ПЛИС, в отличие от программирования для процессорных систем, где программирование – это задание на некотором языке последовательности выполнения действий. Соответственно, основные языки, используемые для задания функциональности ПЛИС – Verilog/SystemVerilog и VHDL, в строгом смысле не являются языками программирования и их называют «языками проектирования аппаратуры» (HDL – Hardware Design Language).

Языки проектирования аппаратуры

Несмотря на явный сдвиг в сторону высокоуровневого проектирования, полностью потенциал программируемой логики можно раскрыть только на классических языках проектирования аппаратуры. Таковых существует всего два – Verilog/SystemVerilog (разработан 1984/2002 гг.) и VHDL (разработан 1983 г.). Эти языки полностью функционально эквивалентны, но имеют абсолютно различный синтаксис. Общие черты HDL-языков:

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

Проектирование на языках HDL является стандартным классическим подходом к проектированию, но этот подход отнюдь не единственный. Сейчас получает широкое распространение и популярность т.н. «высокоуровневое проектирование», т.е. разработка аппаратной части системы на высокоуровневых языках программирования, прежде всего – на языках C/C++. Ниже будут рассмотрены несколько широко применяемых при проектировании ПЛИС и СнК маршрутов проектирования.

Экологическая система ПЛИС и СнК

Чтобы эффективно использовать ПЛИС, кроме самой микросхемы, требуется много дополнительных средств, составляющих экосистему разработки и применения ПЛИС.

Прежде всего, к экосистеме ПЛИС относятся программные средства разработки, но также в нее входят jtag-кабели для прошивки и отладки ПЛИС (иногда их называют «программаторами»), отладочные платы и средства, документация и демодезайны, различные форумы разработчиков, производство коммерческих и свободных IP-ядер и многое другое. Так же с 1988 года и по сей день Xilinx издает бесплатный виртуальный XCell Journal, доступный для скачивания в виде pdf-файла.

Средства разработки

Средства разработки для ПЛИС и СнК являются неотъемлемой частью инфраструктуры ПЛИС и в этой области Xilinx удерживает лидерство, постоянно развивая и улучшая свои программные продукты.

Первые релизы средств разработки Xilinx уже мало кто помнит, но в первом выпуске Xcell Journal они упомянуты – это XACT и XACTOR:

«Программирование» ПЛИС  Первые ПЛИС можно было сконфигурировать, просто задав положение всех электронных ключей вручную. (Сомнительно, что так делали даже тогда, но теоретически это было возможно).

Далее, в 1996 году был создан САПР Foundation, в котором можно было вести разработку как в графическом редакторе, так и на языке VHDL. Ниже приведен анонс из Xcell Journal #21, а те читатели, которые считают цены на ПО высокими, могут ознакомиться с тогдашним прайс-листом.

«Программирование» ПЛИС  Первые ПЛИС можно было сконфигурировать, просто задав положение всех электронных ключей вручную. (Сомнительно, что так делали даже тогда, но теоретически это было возможно).-2

Среда разработки ISE появилась в конце 2000 г. под названием «Xilinx Foundation Series ISE Software». Ниже приведена страничка из Xcell Journal #38 об этом событии:

«Программирование» ПЛИС  Первые ПЛИС можно было сконфигурировать, просто задав положение всех электронных ключей вручную. (Сомнительно, что так делали даже тогда, но теоретически это было возможно).-3

САПР ISE получился очень удачным и, в том числе, даже по личному опыту, могу сказать, что разработчики его любили. Завершающей версией ISE стал релиз 14.7 от октября 2013 года, когда разработка была прекращена, а проект был заморожен. Однако микросхемы, для которых требуется ISE, все еще серийно выпускаются, поэтому ISE используется даже сейчас. Возможно (но это неточно), что это рекорд продолжительности жизни для САПР!

Следующим САПР от Xilinx стал пакет Vivado, выпущенный в 2014 г., интерфейс которого был создан на базе оболочки PlanAhead из ISE. Данный САПР завершил свою активную фазу в 2019г., когда был выпущен релиз под номером 2019.1.

Далее, с версии 2019.2, представленной в ноябре 2019 г., Xilinx перешел на САПР Vitis, а Vivado вошел в него составной частью.

Таким образом, на данный момент мы имеем уже пятое поколение средств разработки от Xilinx.

Маршруты проектирования ПЛИС

Классический маршрут

«Программирование» ПЛИС  Первые ПЛИС можно было сконфигурировать, просто задав положение всех электронных ключей вручную. (Сомнительно, что так делали даже тогда, но теоретически это было возможно).-4

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

Расширением данного маршрута является проектирование с применением IP-ядер. IP-ядро можно сравнить с API в программировании. Это ранее разработанная и отлаженная часть проекта, выполняющая определенную функциональность. IP-ядра можно хранить отдельно в специальных репозиториях и включать в свои проекты по мере необходимости. Данный маршрут можно считать основным в САПР Vivado:

«Программирование» ПЛИС  Первые ПЛИС можно было сконфигурировать, просто задав положение всех электронных ключей вручную. (Сомнительно, что так делали даже тогда, но теоретически это было возможно).-5

Соответственно, маршрут проектирования с использованием IP-ядер немного меняется:

«Программирование» ПЛИС  Первые ПЛИС можно было сконфигурировать, просто задав положение всех электронных ключей вручную. (Сомнительно, что так делали даже тогда, но теоретически это было возможно).-6

Именно этот маршрут проектирования реализован в среде проектирования Vivado.

Визуальное проектирование с использованием IP-репозитория

Этот способ проектирования наиболее распространен для проектирования систем на кристалле (т.е. систем с процессорными ядрами), но может применяться и для обычных ПЛИС. В Vivado этот способ широко применяется, причем можно создавать иерархические графические диаграммы и заполнять их из репозиториев различными компонентами. Собственные модули на языках Verilog и VHDL также можно вставлять в эти диаграммы.

«Программирование» ПЛИС  Первые ПЛИС можно было сконфигурировать, просто задав положение всех электронных ключей вручную. (Сомнительно, что так делали даже тогда, но теоретически это было возможно).-7

Высокоуровневое проектирование

Следующий маршрут проектирования – так называемое «высокоуровневое проектирование», ниже показана диаграмма для этого маршрута. Здесь алгоритм, описываемый на C/C++, реализуется в программируемой логике в виде IP-ядра. Затем это IP-ядро может быть включено в любой проект. А весь проект имплементирован по классическому маршруту.

«Программирование» ПЛИС  Первые ПЛИС можно было сконфигурировать, просто задав положение всех электронных ключей вручную. (Сомнительно, что так делали даже тогда, но теоретически это было возможно).-8

Имеется еще один высокоуровневый маршрут проектирования, применяемый для систем на кристалле. Данный маршрут проектирования является стандартным в новейшем САПР Vitis.

«Программирование» ПЛИС  Первые ПЛИС можно было сконфигурировать, просто задав положение всех электронных ключей вручную. (Сомнительно, что так делали даже тогда, но теоретически это было возможно).-9

Этот маршрут проектирования начинается с написания программы на C/C++. Затем производится профилирование программного кода и определение функций, замедляющих работу системы. С целью повышения скорости работы этих функций они реализуются в программируемой логике и, при необходимости, подвергаются дальнейшей оптимизации.

«Программирование» ПЛИС  Первые ПЛИС можно было сконфигурировать, просто задав положение всех электронных ключей вручную. (Сомнительно, что так делали даже тогда, но теоретически это было возможно).-10

Новейшая среда разработки Vitis предназначена для проектирования на самых современных системах на кристалле Xilinx, включая выводимое на рынок семейство Versal, а также для ускорительных платформ Alveo. Vitis позволяет решать самые сложные задачи в различных предметных областях, включая разработку систем искусственного интеллекта.

«Программирование» ПЛИС  Первые ПЛИС можно было сконфигурировать, просто задав положение всех электронных ключей вручную. (Сомнительно, что так делали даже тогда, но теоретически это было возможно).-11

Анализируя маршруты проектирования, можно сделать вывод, что проектирование для программируемой логики движется в сторону сближения с классическим программированием. Это позволяет расширить применение программируемой логики за счет привлечения программистов, которым не нужно разбираться в тонкостях архитектуры ПЛИС.

Отметим также, что классические маршруты проектирования реализуют методику «снизу-вверх», т.е. сначала разрабатывалась аппаратная часть, производилась ее верификация сначала на уровне блоков и модулей, а затем полностью собранная система. Затем для этой системы можно было разрабатывать программное обеспечение. В то же время методология высокоуровневого проектирования наиболее эффективна при реализации метода «сверху вниз», т.е разработка начинается с создания и отладки программного обеспечения, а аппаратная часть конфигурируется уже под требования разработанного программного продукта.

Автор: Викулин Владимир, инженер по применению Xilinx компании Макро Групп.

ССЫЛКИ