GCC для FPGA

 

После прочтения статьи Уничтожить монополию Америки в EDA. Иннополис делает первый шаг, мне захотелось погрузиться больше в EDA тематику и изучить, что есть в opensource на данный момент для этого. Начнем с SymbiFlow.

SymbiFlow – это инструмент для FPGA с открытым исходным кодом для стремительных инноваций. SymbiFlow предназначен для обеспечения новых инноваций, а также для оптимизации и автоматизации рабочих процессов разработки под FPGA, чтобы помочь сделать FPGA более доступной для широкого сообщества разработчиков программного обеспечения, а так же сделать разработку под FPGA не зависимой от среды разработки и от вендора. SymbiFlow – это непрерывный процесс синтеза FPGA FOSS (Free/Libre and Open-Source Software – свободное программное обеспечение с общедоступными (открытыми) исходными кодами) Verilog-to-Bitstream (сквозное проектирование), в настоящее время предназначенный для FPGA серий Xilinx 7 серии, Lattice iCE40 и Lattice ECP5. Данное решение можно представить как GCC для FPGA.

Цели проекта

SymbiFlow направлен на создание инструментов FPGA, которые:

  • Полностью с открытым исходным кодом
  • Мультиплатформенные
  • Встраиваемые или обладают заменяемыми свойствами

EDA инструментарий экосистемы

Для инструментов EDA (electronic design automation – автоматизация проектирования электронных устройств), ориентированных как на ASIC, так и на FPGA, существует три основных области, которые должен охватывать рабочий процесс: описание оборудования, внешний и внутренний интерфейсы.

Языки описания аппаратных средств, как правило, открыты, как с устоявшимися HDL языками, такими как Verilog и VHDL, так и с новыми парадигмами языков на основе программного обеспечения, такими как Chisel, SpinalHDL или Migen. Однако основная проблема заключается во внешних и внутренних компонентах, где ранее не было установленного стандартного, независимого от производителя инструмента, который охватывал бы все необходимые компоненты для прохождения всех этапов от HDL языка до Bitstream.

Это относится как к рабочим процессам ASIC, так и к FPGA, хотя SymbiFlow фокусируется на последнем (некоторые части SymbiFlow также будут полезны и для ASIC).

Структура проекта SymbiFlow

Для достижения цели SymbiFlow по созданию полного набора инструментов FOSS FPGA необходим ряд инструментов и проектов для обеспечения всех необходимых компонентов для создания Bitstream. Таким образом, SymbiFlow служит агрегационным проектом для нескольких действий по созданию bitstream, центральная часть которого относится к созданию так называемых «определения архитектуры» FPGA, то есть документации того, как конкретные FPGA работают внутри.

Эти определения и служат в качестве входных данных для бэкэнд-инструментов, таких как nextpnr и Verilog to Routing (трассировка), и для инструментов внешнего интерфейса, таких как Yosys. Они создаются в рамках отдельных совместных проектов, ориентированных на разные ПЛИС – Проект X-Ray для Xilinx 7-й серии, Проект IceStorm для Lattice iCE40 и Проект Trellis для Lattice ECP5 FPGA.

Yosys является основой для синтеза Verilog RTL. В настоящее время он имеет обширную поддержку Verilog-2005 и предоставляет базовый набор алгоритмов синтеза для различных областей применения. Основные особенности и базовое применение:

  • Обработать практически любой синтезируемый дизайн Verilog-2005
  • Преобразование Verilog в BLIF / EDIF / BTOR / SMT-LIB / простой RTL Verilog / и т. п.
  • Встроенные формальные методы для проверки свойств и эквивалентности
  • Сопоставление со стандартными библиотеками ячеек ASIC (в формате файлов Liberty)
  • Сопоставление с FPGA Xilinx 7-й серии и Lattice iCE40
  • Основание и / или интерфейс для пользовательских потоков

nextpnr – портативный FPGA инструмент для определения местоположения и маршрутизации, nextpnr стремится быть независимым от производителя, ориентированным на время, быть частью FOSS FPGA  и инструментом маршрутизации.

В настоящее время nextpnr поддерживает:

  • Устройства Lattice iCE40, поддерживаются проектом IceStorm (Arachne-pnr – трассировщик для FPGA семейства iCE40)
  • Устройства Lattice ECP5, поддерживаемые проектом Trellis
  • Проект X-Ray направлен на создании bitstream для Xilinx 7 серии, что является обязательным условием для создания инструментов с открытым исходным кодом для генерации bitstream для этих устройств.

Yosys может быть адаптирован для выполнения любой задачи синтеза путем объединения существующих проходов (алгоритмов) с использованием сценариев синтеза и добавления дополнительных проходов по мере необходимости путем расширения базы кода Yosys C++.

И еще пару слов про инструментарий.

Icarus Verilog — компилятор языка описания аппаратуры Verilog. Он поддерживает версии 1995, 2001 и 2005, частично SystemVerilog и некоторые расширения. Используется для симуляции и верификации проектов. Кроме того, в версиях с 0.2 по 0.8 мог использоваться для синтеза (в формат XNF), для ПЛИС-ов Xilinx.

Icarus Verilog – это инструмент для моделирования и синтеза Verilog. Он работает как компилятор, компилируя исходный код, написанный на Verilog (IEEE-1364), в некоторый целевой формат. Для пакетного моделирования компилятор может генерировать промежуточную форму, называемую сборкой vvp. Эта промежуточная форма выполняется командой “vvp. Для синтеза компилятор генерирует списки соединений в желаемом формате.

Собственно компилятор предназначен для анализа и разработки описаний конструкций, написанных в соответствии со стандартом IEEE IEEE std 1364-2005. Это довольно большой и сложный стандарт, поэтому заполнение всех темных переулков стандарта займет некоторое время, но это цель.

Основной ОС портирования является Linux, хотя данный инструмент хорошо работает на многих похожих операционных системах. Различные люди предоставили предварительно скомпилированные двоичные файлы стабильных выпусков для различных платформ. Эти релизы портируются добровольцами. Вы также можете скомпилировать его полностью с помощью бесплатных инструментов, хотя существуют предварительно скомпилированные двоичные файлы стабильных выпусков.