Vhdl и Systemverilog: сравнение языков описания аппаратного обеспечения для смешанных проектов
Языки описания аппаратного обеспечения (HDL) составляют основу проектирования цифровых систем, позволяя инженерам моделировать, имитировать и синтезировать сложные схемы. Среди наиболее широко используемых сегодня HDL являются VHDL и SystemVerilog. В то время как оба языка позволяют дизайнерам описывать поведение аппаратного обеспечения на различных уровнях абстракции, они значительно различаются по синтаксису, функциям и типичным вариантам использования. Во многих современных проектах, особенно в тех, которые включают сложные конструкции системы на чипе (SoC), критически важные для безопасности компоненты и расширенную проверку, инженеры считают полезным объединить VHDL и SystemVerilog. Эта статья обеспечивает глубокое сравнение VHDL и SystemVerilog, исследует их соответствующие сильные и слабые стороны и предлагает практическое руководство для успешной интеграции обоих языков в смешанных языковых средах.
Обзор VHDL
VHDL (VHSIC Hardware Description Language) был разработан в 1980-х годах по программе очень высокоскоростной интегральной схемы Министерства обороны США (VHSIC). Его создание было обусловлено необходимостью стандартизированного, строгого метода документирования и моделирования цифровых систем. VHDL был официально стандартизирован как IEEE 1076 в 1987 году, с последующими изменениями (1993, 2002, 2008 и 2019) с добавлением новых возможностей. Ключевые характеристики VHDL включают:
- Сильная типизация: VHDL обеспечивает строгую проверку типов во время компиляции, уменьшая вероятность непреднамеренных несоответствий данных. Это делает его идеальным для критически важных для безопасности приложений, где ошибки могут иметь серьезные последствия.
- Вербосный синтаксис: VHDL известен своим явным, самодокументирующим стилем.Каждый порт, сигнал и процесс должен быть объявлен с полной информацией о типе, что улучшает читаемость и ремонтопригодность в больших командах.
- Поддержка пакетов и библиотек: Механизм пакетов VHDL позволяет разработчикам группировать связанные типы данных, константы и подпрограммы, способствуя повторному использованию и модульности.
- Ориентированные на симуляцию функции: Языковая семантика VHDL предназначена для поддержки подробного моделирования, включая дельта-циклы и широкий спектр типов данных (например, , , и определяемые пользователем типы).
Эти особенности делают VHDL языком выбора в таких отраслях, как аэрокосмическая промышленность, оборона, медицинские устройства и железнодорожная сигнализация, где правильность и прослеживаемость имеют первостепенное значение.Многие государственные и международные стандарты (например, DO-254 для бортовых систем) явно требуют или настоятельно рекомендуют использовать VHDL для разработки оборудования.
Обзор системного верилога
SystemVerilog появился в начале 2000-х годов как расширение языка Verilog (IEEE 1364). Он был создан для решения растущей сложности цифровых конструкций и необходимости более мощных возможностей проверки. Язык был стандартизирован в соответствии с IEEE 1800 в 2005 году, с обновлениями, выпущенными в 2009, 2012 и 2017 годах. SystemVerilog основывается на кратком, C-подобном синтаксисе Verilog и добавляет несколько расширенных функций:
- Поддержка объектно-ориентированного программирования: Классы, наследование и полиморфизм позволяют создавать многоразовые масштабируемые компоненты тестбенча.
- Утверждения: Системные вериологические утверждения (SVA) позволяют проектировщикам определять временные свойства и проверять их во время моделирования, что облегчает улавливание функциональных ошибок.
- Рандомизация и решение ограничений: Язык включает в себя встроенные конструкции для генерации случайных стимулов с ограничениями, что необходимо для проверки сложных протоколов и угловых случаев.
- Улучшенные типы данных: SystemVerilog вводит (тип 4-состояния общего назначения), , и , наряду с определяемыми пользователем и типами, которые могут использоваться как для синтеза, так и для моделирования.
- Интерфейсы и модпорты: Эти конструкции упрощают подключение нескольких модулей и позволяют объединять связанные сигналы с правилами доступа.
SystemVerilog стал доминирующим языком для проверки в полупроводниковой промышленности, особенно для конструкций SoC, которые требуют обширной функциональной проверки. Его краткий синтаксис и сходство с C делают его привлекательным для дизайнеров с программным обеспечением, а его прямая поддержка UVM (Универсальная методология проверки) сделала его стандартом для передовых сред проверки.
Основные различия между VHDL и системным верилогом
Хотя VHDL и SystemVerilog описывают аппаратное обеспечение, их философия дизайна и типичные приложения расходятся несколькими важными способами. В таблице ниже кратко излагаются основные различия, но последующая дискуссия обеспечивает более глубокий взгляд.
- Синтаксический стиль: VHDL использует многословный, Ada-подобный синтаксис, который очень явный. Каждое назначение сигнала производится с и списки чувствительности процесса являются обязательными. SystemVerilog, напротив, наследует C-подобный синтаксис Verilog, с назначениями, использующими для всегда блоков и для неблокирующих назначений внутри блоков с часами. Синтаксис SystemVerilog более компактен, что может ускорить кодирование, но может потребовать большей дисциплины для обеспечения читаемости.
- Система и безопасность типов: VHDL сильно типизирован — вы не можете напрямую назначить целое число без функции преобразования. Эта строгость улавливает много ошибок во время компиляции, но может быть громоздкой. SystemVerilog более расслаблен; например, вектор может быть непосредственно назначен переменной , и неявные преобразования типа разрешены во многих контекстах. Эта гибкость ускоряет разработку, но может позволить тонкие несоответствия оставаться незамеченными до моделирования.
- Особенности проверки: SystemVerilog предлагает значительно более богатые конструкции для проверки, включая классы, ограниченную рандомизацию, функциональное покрытие и утверждения. VHDL не имеет встроенной поддержки OOP — хотя в пересмотре VHDL-2008 добавлены некоторые объектно-ориентированные возможности через защищенные типы и псевдонимы, они не так зрелы, как у SystemVerilog.
- Поддержка внедрения и инструментов в отрасли: Оба языка поддерживаются всеми основными поставщиками EDA (Siemens EDA, Synopsys, Cadence, Aldec и т. д.) Однако инфраструктура проверки SystemVerilog, особенно UVM и библиотеки утверждений, более тесно интегрирована в современные среды моделирования. VHDL остается сильным в рабочих процессах синтеза для высоконадежных конструкций, где зрелость инструмента и свидетельства сертификации имеют решающее значение.
- Инженеры с опытом работы на C или Java часто находят SystemVerilog проще начать из-за его знакомого синтаксиса. Вербальность VHDL и строгая типизация могут быть изначально сложными, но сторонники утверждают, что это способствует лучшей дисциплине и уменьшает ошибки в больших проектах. Многие учебные заведения учат VHDL как вводный HDL для инженеров-электриков, в то время как программы компьютерной инженерии могут склоняться к Verilog / SystemVerilog.
Использование VHDL и SystemVerilog в смешанных проектах
В идеальном мире каждый дизайн будет использовать один HDL. Реальные ограничения - унаследованная IP, экспертиза команды, сертификация инструментов и конкретные требования к проверке - часто делают смешанные языковые проекты необходимыми. Например, проект может потребовать критически важный блок управления, написанный в VHDL, чтобы удовлетворить сертификационные органы, в то время как остальная часть SoC использует SystemVerilog для проектирования и проверки. Интеграция этих двух языков представляет несколько проблем и возможностей.
Коммуникация между языками
Фундаментальная проблема в смешанном дизайне заключается в том, как взаимодействуют модули VHDL и SystemVerilog. Современные инструменты EDA обеспечивают встроенную совместимость путем автоматического сопоставления типов портов и направлений на основе синтаксиса инстанциации компонентов VHDL или синтаксиса инстанциации модулей SystemVerilog. Однако необходимо соблюдать некоторые правила:
- Типы данных: Типы VHDL, такие как и , могут быть отображены в SystemVerilog и , соответственно. Большинство инструментов обрабатывают это бесшовно. Для определяемых пользователем типов VHDL (например, перечисленных типов) может потребоваться обертка интерфейса.
- Чувствительность к направлению: Порты VHDL объявляются с , или . Система Vierlog использует , и . Инструменты обрабатывают отображение, но имейте в виду, что неограниченные порты VHDL ( без диапазона) требуют тщательного инстанцирования.
- Разрешение времени и планирование: VHDL использует модель дельта-задержки, которая может отличаться от планирования области SystemVerilog. Симуляторы предназначены для устранения этих различий, но могут возникать тонкие несоответствия во времени. Запуск тщательного моделирования с задним аннотированным временем рекомендуется перед выходом на ленту.
Официальные стандарты совместимости
Для обеспечения бесшовного смешивания VHDL и SystemVerilog IEEE определил несколько механизмов:
- VHDL-2008 Direct VHDL Instantiation (DVI): Эта функция позволяет блоку проектирования VHDL инстанцировать объекты VHDL из SystemVerilog без файлов обертки. Инструмент должен поддерживать стандарт IEEE 1076-2008.
- SystemVerilog Direct Programming Interface (DPI): Хотя DPI в первую очередь предназначен для интеграции C/C++, его также можно использовать для вызова иностранных функций из SystemVerilog.Некоторые инженеры создают обертки VHDL-to-C для взаимодействия с пакетами VHDL, хотя этот подход не является общим для инстанциации модулей.
- Импорт VHDL в стиле верилога: Многие инструменты EDA поддерживают прагматичный подход: вы можете инстанцировать объект VHDL внутри модуля SystemVerilog с помощью директивы или специального синтаксиса инстанциации. Проверьте документацию вашего поставщика — например, Synopsys VCS и Cadence Xcelium оба имеют специальные возможности смешанного языка.
Проблемы и соображения
Сочетание VHDL и SystemVerilog не всегда просто. Инженеры должны знать о следующих практических вопросах:
Синтетическая поддержка
Современные инструменты синтеза (например, Synopsys Design Compiler, Cadence Genus) могут синтезировать конструкции, которые смешивают VHDL и SystemVerilog, но они имеют ограничения. Не все конструкции SystemVerilog являются синтезируемыми (например, классы, утверждения являются только симуляцией). Аналогично, типы с плавающей точкой VHDL и некоторые функции пакета могут не поддерживаться всеми логическими синтезаторами. Важно использовать только синтезируемое подмножество каждого языка в проектной части проекта. Для модулей только для проверки (тестбенши, табло) может использоваться полный язык.
Моделирование производительности
Смешанное моделирование может быть медленнее, чем однородное моделирование, потому что инструмент должен управлять двумя системами разных типов и моделями планирования. Однако с современными высокопроизводительными тренажерами накладные расходы часто незначительны для проектов до нескольких миллионов шлюзов. Для очень больших проектов рассмотрите возможность написания всего дизайна на одном языке и использования другого только для компонентов проверки (через DPI или модули обертки).
Командные навыки и документация
Не все инженеры свободно владеют как VHDL, так и SystemVerilog. Проект на смешанном языке должен поддерживать четкую документацию, которая описывает границы модулей, используемые языки и конвенции о инстанциации. Установить руководящие принципы кодирования, которые касаются, например, соглашений об именах для портов (некоторые команды префиксируют VHDL / , чтобы избежать путаницы с направлениями SystemVerilog).
Лучшие практики для смешанных языковых дизайнов
Основываясь на опыте многочисленных промышленных проектов на смешанном языке, вот практические рекомендации:
- Определить четкий стандарт интерфейса на ранней стадии. Определить набор базовых типов (например, для одиночных битов, для автобусов), которые будут использоваться на языковой границе. Избегайте использования типа VHDL непосредственно через границу; вместо этого преобразуйте в векторный тип.
- Используйте компоненты оберточного IP. Для устаревших VHDL-блоков рассмотрите возможность их обертывания в интерфейсные модули SystemVerilog, которые обрабатывают преобразования типов и обеспечивают простой API для остальной части дизайна.
- Используйте иерархический дизайн. Сохраните модули VHDL и SystemVerilog в отдельных каталогах или библиотеках. Используйте общий дизайн верхнего уровня, который инстанцирует все компоненты — этот верхний уровень может быть написан на любом языке, но большинство инструментов предпочитают его на «доминантном» языке проекта.
- Используйте один и тот же симулятор для всех проверок. Перед началом проекта убедитесь, что выбранная вами среда моделирования поддерживает симуляцию на смешанном языке с обоими языками. Большинство коммерческих симуляторов делают это, но бесплатные или академические инструменты могут иметь ограниченную поддержку. Проверяйте небольшой дизайн на смешанном языке на ранней стадии проекта, чтобы убедиться, что поток работает сквозно.
- План синтеза. Если дизайн должен быть синтезирован, ограничьте SystemVerilog синтезируемыми конструкциями (такими как , , и типов. Аналогично, используйте только синтезируемый VHDL (например, со списком чувствительности, . Убедитесь, что инструмент синтеза может читать нет-лист на смешанном языке — некоторые инструменты требуют, чтобы все исходные файлы дизайна были скомпилированы в единую унифицированную библиотеку.
- Поддерживайте единый подход к тестбенчу. Обычно проще написать весь тестбенч на одном языке (SystemVerilog рекомендуется из-за его расширенных функций проверки), а затем инстанцировать внутри него блоки проектирования на смешанном языке. Это позволяет избежать сложности наличия компонентов тестбенча на обоих языках.
Будущие тенденции и общественные идеи
Индустрия разработки аппаратного обеспечения продолжает развиваться. Последние изменения как VHDL (IEEE 1076-2019), так и SystemVerilog (IEEE 1800-2017) добавили функции, улучшающие совместимость, такие как поддержка VHDL для внешних имен и расширенный синтаксис связывания SystemVerilog. Между тем, отраслевые инициативы, такие как рабочая группа по смешанному языку Accellera, работают над стандартизацией интерфейсов и форматов файлов (например, IP-XACT), которые облегчают интеграцию на смешанном языке. Также растет интерес к инструментам с открытым исходным кодом, таким как Verilator (который поддерживает SystemVerilog и некоторые VHDL через VHDL-Verilog конвертер Verilator), которые получают возможности смешанного языка. Однако для сертификации, связанной с безопасностью, коммерческие инструменты с проверенными послужными списками остаются стандартом.
Для дальнейшего чтения обратитесь к официальным стандартам IEEE: IEEE 1076-2019 VHDL и IEEE 1800-2017 SystemVerilog. Кроме того, многие поставщики EDA предоставляют примечания к приложениям для моделирования на смешанном языке, такие как Siemens EDA и Synopsys.
Заключение
Выбор между VHDL и SystemVerilog не должен быть ни-или решение. Строгой типизации и многословный синтаксис VHDL делает его сильным кандидатом на безопасность-критически и высокой надежности конструкций, в то время как расширенные функции проверки SystemVerilog и лаконичный стиль хорошо подходят для современной разработки SoC. Тщательно планируя интерфейс, используя возможности инструмента и следуя установленным передовым практикам, инженерные команды могут успешно объединить оба языка в одном проекте. Смешанные языковые проекты позволяют организациям повторно использовать существующие VHDL IP, воспользоваться преимуществами экосистемы проверки SystemVerilog и удовлетворить разнообразные требования проекта - все это без ущерба для качества или времени на рынок. Поскольку отрасль продолжает настаивать на более высокой интеграции и охвата проверки, способность эффективно работать с несколькими HDLs останется ценным навыком для каждого цифрового дизайнера.