Языки реализации FPGA: от VHDL и Verilog к высокоуровневому C/C++
Примечание редактора: Продвинутые алгоритмы в умных продуктах требуют встраиваемых систем, способных справляться с тяжёлыми вычислительными нагрузками. FPGA обеспечивают нужную производительность, но многие разработчики считают FPGA-дизайн доменом специалистов. Современное железо в связке с мощными средами разработки демократизировало FPGA-программирование. Этот отрывок из Главы 4 книги «Architecting High-Performance Embedded Systems» даёт исчерпывающий обзор FPGA-устройств, языков их реализации и процесса разработки, завершаясь практическим руководством по началу построения собственных FPGA-дизайнов.
1: Аппаратные ресурсы
2: Языки реализации (эста статья)
3: Процесс разработки
4: Построение проекта
5: Реализация
Адаптировано из «Architecting High-Performance Embedded Systems», автор Jim Ledin.
Языки реализации FPGA
Проектирование для FPGA в конечном счёте сводится к выбору одного или нескольких высокоуровневых, HDL-подобных языков для описания поведения устройства.
Традиционные выборы — VHDL и Verilog. Современные тулчейны обычно поддерживают оба, плюс конфигурацию блок-диаграмм, и многие теперь принимают C/C++ как источник для автоматической генерации HDL.
VHDL
VHSIC Hardware Description Language (VHDL) — VHSIC означает Very High-Speed Integrated Circuit — разрабатывался под эгидой Министерства обороны США в 1983 году. Его синтаксис напоминает Ada, что делает его многословным и строго типизированным. Язык предлагает фиксированный набор базовых типов: boolean, bit, bit_vector, character, string, integer, real, time и array, все остальные типы строятся на этих примитивах.
IEEE 1164 определяет стандартную библиотеку для VHDL, включая повсеместный тип std_logic, представляющий однобитный сигнал. Следующая таблица показывает логические значения для std_logic:

Strong 0/1 обозначают управляемые бинарные состояния, слабые сигналы указывают на конфликт на шине. Z представляет высокоомное состояние (CMOS-выход отключён), U — дефолтное неинициализированное состояние, X — отсутствие драйвера, а - — неиспользуемые входы.
Типичные VHDL-дизайны начинаются с импорта библиотеки IEEE 1164:
library IEEE;
use IEEE.std_logic_1164.all;
В этой главе мы используем VHDL как пример, но и VHDL, и Verilog могут полностью выразить любой синтезируемый для FPGA дизайн.
Verilog
Введённый в 1984 и стандартизированный как IEEE 1364 (2005), Verilog моделировался на C для сглаживания кривой обучения. В 2009 он объединился с SystemVerilog, образуя IEEE 1800-2009, добавив обширные возможности верификации поверх базовых HDL-конструкций.
Тип wire Verilog представляет состояния сигналов 0, 1, don't-care (x) или high-impedance (z), каждый с сильной или слабой силой. И VHDL, и Verilog имеют синтезируемые подмножества для аппаратного дизайна, в то время как дополнительные конструкции поддерживают симуляцию.
Например, несинтезируемый цикл for ведёт себя как программный цикл, итерируя последовательно. Синтезируемый цикл for разворачивается в параллельные аппаратные копии, зеркаля количество итераций.
Блок-диаграммы
Помимо текстовых HDL, современные FPGA-свиты предоставляют графические редакторы блок-диаграмм, позволяющие дизайнерам собирать сложные системы — такие как микропроцессоры и продвинутые I/O — без написания низкоуровневого кода. Рисунок 4.2 иллюстрирует блок-диаграмму Xilinx Vivado с мягким процессором MicroBlaze.
click for full size image
Рисунок 4.2 – Блок-диаграмма, содержащая мягкий микропроцессор MicroBlaze
MicroBlaze — мягкое ядро процессора Xilinx, доступное для семейств Artix-7 и других. Пока блок-диаграммы упрощают системную компоновку, инструмент в конечном счёте генерирует VHDL или Verilog за кулисами. Инспекция сгенерированного кода — например, design_1_microblaze_0_0_stub.vhdl — раскрывает HDL-интерфейс сущности:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity design_1_microblaze_0_0 is
Port (
Clk: in STD_LOGIC;
Reset: in STD_LOGIC;
Interrupt: in STD_LOGIC;
Interrupt_Address: in STD_LOGIC_VECTOR (0 to 31);
Interrupt_Ack: out STD_LOGIC_VECTOR (0 to 1);
Instr_Addr: out STD_LOGIC_VECTOR (0 to 31);
Instr: in STD_LOGIC_VECTOR (0 to 31);
Заметьте, что этот файл определяет только интерфейс процессора; ядровая логика поставляется как лицензированный IP, часто в скомпилированной форме для защиты интеллектуальной собственности.
C/C++
Несколько вендоров теперь предоставляют инструменты high-level synthesis (HLS), переводящие C или C++ в HDL, позволяя разработчикам портировать существующие алгоритмы в FPGA-железо. Пока базовое FPGA работает параллельно, сгенерированный дизайн часто отображает последовательные C/C++ утверждения в конечные автоматы. Там, где исходный код предлагает возможности для параллелизма, FPGA может дать значительный ускорение над обычным процессором.
Современные тулчейны позволяют VHDL, Verilog, блок-диаграммам и HLS-производному HDL сосуществовать в одном проекте. Команды могут смешивать языки на основе навыков, но тщательное планирование необходимо для избежания накладных расходов на сопровождение и обеспечения будущей поддерживаемости.
В следующем разделе мы пройдёмся по стандартному процессу FPGA-разработки, от концепции к реализации.
Reprinted with permission from Packt Publishing. Copyright © 2021 Packt Publishing
Джим Ледин — CEO Ledin Engineering, Inc. Джим — эксперт в встраиваемом ПО и аппаратном дизайне, разработке и тестировании. Также компетентен в оценке кибербезопасности встраиваемых систем и тестировании на проникновение. Имеет B.S. в аэрокосмической инженерии от Iowa State University и M.S. в электротехнике и компьютерной инженерии от Georgia Institute of Technology. Джим — зарегистрированный профессиональный электроинженер в Калифорнии, CISSP, CEH и CPT.
Связанный контент:
- Embedded design with FPGAs: Hardware resources
- Open-source tools help simplify FPGA programming
- Implementing floating-point algorithms in FPGAs or ASICs
- Software tools migrate GPU code to FPGAs for AI applications
- FPGAs displace ASICs in Subaru Eyesight vision-based ADAS
- How flash-based FPGAs simplify functional safety requirements
- Reaping the benefits of instant-on FPGAs
- FPGA configuration using high-speed NOR flash
- How FPGA technology is evolving to meet new mid-range system requirements
Для получения большего контента по Embedded подпишитесь на еженедельную рассылку Embedded.
Встроенный
- Программирование встраиваемых систем: языки, архитектура и применения
- Проектирование встроенных систем: этапы, принципы и реальные применения
- Использование встроенного ИИ для превращения Big Data в действенные Smart Insights
- Мастерство USB-C: вызовы дизайна и практические решения для high-speed данных и питания
- Тренды встроенного дизайна, переформирующие будущее технологий
- Высокопроизводительный FPGA-ускоритель для встроенного зрения с MIPI-камерами
- Clientron PST650: все-в-одном POS-терминал с встроенным термопринтером для гостеприимства и ритейла
- MAXREFDES220# — Бесманжетный мониторинг артериального давления с оптическими датчиками
- Microchip запускает defense-grade PolarFire SoC FPGA с Early Access Program
- Максимизация производства с передовым ПО для аддитивного производства