Язык описания оборудования - Hardware description language

В компьютерной технике , язык описания аппаратных средств ( HDL ) является специализированным компьютерным языком , используемым для описания структуры и поведения электронных схем , и наиболее часто, цифровые логические схемы.

Язык описания оборудования позволяет получить точное формальное описание электронной схемы, что позволяет проводить автоматизированный анализ и моделирование электронной схемы. Это также позволяет синтезировать описание HDL в список соединений (спецификацию физических электронных компонентов и способы их соединения), который затем можно разместить и направить для создания набора масок, используемых для создания интегральной схемы .

Язык описания оборудования очень похож на язык программирования, такой как C или ALGOL ; это текстовое описание, состоящее из выражений, утверждений и управляющих структур. Одним из важных различий между большинством языков программирования и HDL является то, что HDL явно включают понятие времени.

HDL являются неотъемлемой частью систем автоматизации проектирования электроники (EDA), особенно для сложных схем, таких как специализированные интегральные схемы , микропроцессоры и программируемые логические устройства .

Мотивация

Из-за стремительно растущей сложности цифровых электронных схем с 1970-х годов (см . Закон Мура ) разработчикам схем требовалось, чтобы описания цифровой логики выполнялись на высоком уровне без привязки к конкретной электронной технологии, такой как ECL , TTL или CMOS . HDL были созданы для реализации абстракции на уровне передачи регистров , модели потока данных и синхронизации цепи.

Существует два основных языка описания оборудования: VHDL и Verilog . В них есть разные типы описания: «поток данных, поведенческий и структурный». Пример потока данных VHDL:

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;

ENTITY not1 IS
    PORT(
        a : IN  STD_LOGIC;
        b : OUT STD_LOGIC;
    );
END not1;

ARCHITECTURE behavioral OF not1 IS
BEGIN
    b <= NOT a;
END behavioral;

Структура ЛПВП

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

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

Сравнение с языками управления потоком

Конечно, можно представить семантику оборудования с использованием традиционных языков программирования, таких как C ++ , которые работают с семантикой потока управления, а не с потоком данных , хотя для функционирования как такового программы должны быть дополнены обширными и громоздкими библиотеками классов . Однако, как правило, языки программирования программного обеспечения не включают никаких возможностей для явного выражения времени и, следовательно, не могут функционировать как языки описания оборудования. До появления System Verilog в 2002 году интеграция C ++ с симулятором логики была одним из немногих способов использования объектно-ориентированного программирования для проверки оборудования. System Verilog - первый крупный HDL, предлагающий объектную ориентацию и сборку мусора.

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

История

Первые языки описания оборудования появились в конце 1960-х годов и выглядели как более традиционные языки. Первое, что имело длительный эффект, было описано в 1971 году в книге « Компьютерные структуры» К. Гордона Белла и Аллена Ньюэлла . В этом тексте представлена ​​концепция уровня передачи регистров , впервые использованная в языке ISP для описания поведения PDP-8 Digital Equipment Corporation (DEC) .

Этот язык получил более широкое распространение с появлением модулей RT-Level DEC PDP-16 (RTM) и книги, описывающей их использование. Затем последовали как минимум две реализации базового языка ISP (ISPL и ISPS). ISPS хорошо подходил для описания отношений между входами и выходами дизайна и был быстро принят коммерческими группами в DEC, а также рядом исследовательских групп как в США, так и среди их союзников по НАТО.

Продукты RTM так и не получили коммерческого распространения, и DEC прекратила их продавать в середине 1980-х годов, поскольку новые методы и, в частности, очень крупномасштабная интеграция (VLSI) стали более популярными.

Отдельная работа, проделанная примерно в 1979 году в Университете Кайзерслаутерна, позволила создать язык под названием KARL («язык передачи регистров Кайзерслаутерна»), который включал в себя функции языка расчетного проектирования, поддерживающие планирование этажей микросхем СБИС и структурированный дизайн оборудования. Эта работа была также основой интерактивного графического родственного языка KARL ABL, название которого было инициализмом для «языка блок-схем». ABL был реализован в начале 1980-х годов Центром студий и лабораторий Telecomunicazioni ( CSELT ) в Турине, Италия, где был разработан графический редактор СБИС ABLED. В середине 1980-х годов международный консорциум, финансируемый Комиссией Европейского Союза, внедрил структуру проектирования СБИС вокруг KARL и ABL.

К концу 1970-х годов стало популярным проектирование с использованием программируемых логических устройств (PLD), хотя эти конструкции в основном ограничивались проектированием конечных автоматов . В 1980 году в Data General использовались те же устройства для разработки Data General Eclipse MV / 8000 , и начала расти коммерческая потребность в языке, который мог бы хорошо им соответствовать. К 1983 году компания Data I / O представила ABEL, чтобы удовлетворить эту потребность.

В 1985 году, когда дизайн перешел на VLSI, Gateway Design Automation представила Verilog , а Intermetrics выпустила первую завершенную версию языка описания оборудования VHSIC (VHDL). VHDL был разработан по заказу программы VHSIC Министерства обороны США и основан на языке программирования Ada , а также на опыте, полученном при более ранней разработке ISPS. Первоначально Verilog и VHDL использовались для документирования и моделирования схем, уже записанных и описанных в другой форме (например, в файлах схем ). Моделирование HDL позволило инженерам работать на более высоком уровне абстракции, чем моделирование на схематическом уровне, и, таким образом, увеличило проектную мощность с сотен транзисторов до тысяч. В 1986 году , при поддержке Министерства обороны США, VHDL был организован в качестве стандарта IEEE (IEEE Std 1076), а первый IEEE нестандартизированное версии VHDL, IEEE Std 1076-1987, был утвержден в декабре 1987 года Cadence Design Позднее компания Systems приобрела Gateway Design Automation за права на Verilog-XL, симулятор HDL, который стал де-факто стандартом симуляторов Verilog на следующее десятилетие.

Введение логического синтеза для HDL вытолкнуло HDL из фона на передний план цифрового дизайна. Инструменты синтеза скомпилировали исходные файлы HDL (записанные в ограниченном формате, называемом RTL) в производимое описание списка соединений в терминах вентилей и транзисторов . Написание синтезируемых файлов RTL требовало практики и дисциплины со стороны дизайнера; по сравнению с традиционной схематической компоновкой, синтезированные RTL-списки соединений почти всегда были больше по площади и медленнее по производительности. Схема, разработанная опытным инженером с использованием трудоемкого схематического захвата / ручного макета, почти всегда превосходила его логически синтезированный эквивалент, но преимущество в производительности, обеспечиваемое синтезом, вскоре сместило цифровой схематический захват именно в те области, которые были проблематичными для Синтез RTL: чрезвычайно высокоскоростная, маломощная или асинхронная схема.

В течение нескольких лет VHDL и Verilog стали доминирующими HDL в электронной промышленности, в то время как старые и менее функциональные HDL постепенно перестали использоваться. Однако VHDL и Verilog имеют многие из тех же ограничений, например, непригодность для моделирования аналоговых схем или схем со смешанными сигналами . Специализированные HDL (такие как Confluence) были введены с явной целью исправить определенные ограничения Verilog и VHDL, хотя ни один из них никогда не предназначался для их замены.

За прошедшие годы было вложено много усилий в улучшение HDL. Последняя итерация Verilog, формально известная как IEEE 1800-2005 SystemVerilog, представляет множество новых функций (классы, случайные переменные и свойства / утверждения) для удовлетворения растущей потребности в улучшенной рандомизации тестовых стендов, иерархии проектирования и повторном использовании. Будущая версия VHDL также находится в разработке и, как ожидается, будет соответствовать улучшениям SystemVerilog.

Дизайн с использованием HDL

В результате повышения эффективности, реализованного с использованием HDL, большая часть современных цифровых схем сосредоточена вокруг него. Большинство проектов начинается с набора требований или архитектурной схемы высокого уровня. Структуры управления и принятия решений часто прототипируются в приложениях с блок- схемами или вводятся в редакторе диаграммы состояний . Процесс написания HDL-описания сильно зависит от природы схемы и предпочтений разработчика стиля кодирования. HDL - это просто «язык захвата», часто начинающийся с высокоуровневого алгоритмического описания, такого как математическая модель C ++. Дизайнеры часто используют языки сценариев, такие как Perl, для автоматической генерации повторяющихся структур схем на языке HDL. Специальные текстовые редакторы предлагают функции для автоматического отступа, синтаксической окраски и расширения объявления объекта / архитектуры / сигнала на основе макросов .

Затем код HDL проходит проверку кода или аудит. При подготовке к синтезу описание HDL подвергается множеству автоматических проверок. Проверяющие сообщают об отклонениях от стандартизированных правил кодирования, выявляют потенциально неоднозначные конструкции кода до того, как они могут вызвать неправильную интерпретацию, и проверяют общие логические ошибки кодирования, такие как плавающие порты или закороченные выходы. Этот процесс помогает устранить ошибки до того, как код будет синтезирован.

Говоря промышленным языком, проектирование HDL обычно заканчивается на стадии синтеза. После того, как инструмент синтеза отобразил описание HDL в список соединений ворот, список соединений передается на внутреннюю стадию. В зависимости от физической технологии ( FPGA , ASIC , вентильная матрица , СИС стандартных ячеек ), ЛПВП может или не может играть существенную роль в серверном потоке. В общем, по мере того, как процесс проектирования переходит в физически реализуемую форму, база данных проекта становится все более загруженной информацией, относящейся к конкретной технологии, которая не может быть сохранена в общем описании HDL. Наконец, интегральная схема изготавливается или программируется для использования.

Моделирование и отладка кода HDL

Существенным для проектирования на HDL является возможность имитировать программы на HDL. Моделирование позволяет HDL-описанию проекта (называемому моделью) пройти проверку проекта , что является важной вехой, которая проверяет предполагаемую функцию (спецификацию) проекта по сравнению с реализацией кода в описании HDL. Это также позволяет архитектурное исследование. Инженер может поэкспериментировать с выбором дизайна, написав несколько вариантов базового проекта, а затем сравнив их поведение при моделировании. Таким образом, моделирование имеет решающее значение для успешного проектирования HDL.

Чтобы смоделировать модель HDL, инженер создает среду моделирования верхнего уровня (называемую испытательным стендом ). Как минимум, тестовый стенд содержит экземпляр модели (называемый тестируемым устройством или DUT), объявления контактов / сигналов для ввода-вывода модели и сигнал тактовой частоты. Код тестовой среды управляется событиями: инженер пишет операторы HDL для реализации сигнала сброса (генерируемого тестовой программой), для моделирования транзакций интерфейса (таких как чтение / запись шины хоста) и для мониторинга выходных данных DUT. Симулятор HDL - программа, выполняющая тестовую среду - поддерживает часы симулятора, которые являются эталоном для всех событий в моделировании тестовой среды. События происходят только в моменты времени, продиктованные тестовым HDL (например, переключатель сброса, закодированный в тестовом стенде), или в реакции (моделью) на стимулы и запускающие события. Современные симуляторы HDL имеют полнофункциональный графический пользовательский интерфейс с набором инструментов отладки. Они позволяют пользователю останавливать и перезапускать симуляцию в любое время, вставлять точки останова симулятора (независимо от кода HDL), а также отслеживать или изменять любой элемент в иерархии модели HDL. Современные симуляторы также могут связывать среду HDL с библиотеками, скомпилированными пользователем, через определенный интерфейс PLI / VHPI . Связывание зависит от системы ( x86 , SPARC и т. Д. Под управлением Windows / Linux / Solaris ), поскольку симулятор HDL и пользовательские библиотеки компилируются и связываются вне среды HDL.

Проверка проекта часто является наиболее трудоемкой частью процесса проектирования из-за несоответствия между функциональной спецификацией устройства, интерпретацией спецификации проектировщиком и неточностью языка HDL. Большая часть начального цикла тестирования / отладки проводится в среде симулятора HDL , так как на ранней стадии проектирования происходят частые и серьезные изменения схемы. Описание HDL также может быть прототипировано и протестировано на аппаратном уровне - для этой цели часто используются программируемые логические устройства . Аппаратное прототипирование сравнительно дороже, чем моделирование HDL, но предлагает реальный взгляд на конструкцию. Прототипирование - лучший способ проверить взаимодействие с другими аппаратными устройствами и аппаратными прототипами. Даже те, которые работают на медленных ПЛИС, предлагают гораздо более короткое время моделирования, чем чистое моделирование HDL.

Проверка дизайна с помощью HDL

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

С точки зрения формальной проверки , свойство - это фактическое утверждение об ожидаемом или предполагаемом поведении другого объекта. В идеале для данного HDL-описания свойство или свойства могут быть доказаны как истинные или ложные с помощью формальных математических методов. На практике многие свойства не могут быть доказаны, поскольку они занимают неограниченное пространство решений . Однако, если предоставляется набор рабочих предположений или ограничений, средство проверки свойств может подтвердить (или опровергнуть) определенные свойства, сужая пространство решений.

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

HDL и языки программирования

HDL очень похож на язык программирования программного обеспечения , но между ними есть существенные отличия. Большинство языков программирования по своей сути являются процедурными (однопоточными) с ограниченной синтаксической и семантической поддержкой для обработки параллелизма . С другой стороны, HDL напоминают языки параллельного программирования своей способностью моделировать несколько параллельных процессов (таких как триггеры и сумматоры ), которые автоматически выполняются независимо друг от друга. Любое изменение входных данных процесса автоматически запускает обновление в стеке процессов симулятора.

И языки программирования, и HDL обрабатываются компилятором (часто называемым синтезатором в случае HDL), но с разными целями. Для HDL «компиляция» относится к логическому синтезу ; процесс преобразования листинга кода HDL в физически реализуемый список соединений ворот . Выходные данные списка соединений могут принимать любую из многих форм: список соединений для моделирования с информацией о задержке затвора, список соединений для передачи обслуживания для размещения и маршрутизации на полупроводниковом кристалле после синтеза или стандартный отраслевой формат обмена электронными проектами (EDIF). ) (для последующего преобразования в файл формата JEDEC ).

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

Тем не менее, поскольку электронные системы становятся все более сложными, а реконфигурируемые системы становятся все более распространенными, в отрасли растет потребность в едином языке, который может выполнять некоторые задачи как проектирования оборудования, так и программирования программного обеспечения. SystemC является примером такого - встроенное системное оборудование может быть смоделировано как недетализированные архитектурные блоки ( черные ящики с смоделированными входными сигналами и драйверами вывода). Целевое приложение написано на C или C ++ и изначально скомпилировано для системы разработки хоста; в отличие от нацеливания на встроенный ЦП, для чего требуется имитация встроенного ЦП или эмулируемого ЦП на хосте.

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

Синтез высокого уровня

По уровню абстракции HDL сравнивают с языками ассемблера . Предпринимаются попытки повысить уровень абстракции проектирования оборудования, чтобы упростить программирование на HDL, создав подполе, называемое синтезом высокого уровня .

Такие компании, как Cadence , Synopsys и Agility Design Solutions, продвигают SystemC как способ объединения языков высокого уровня с моделями параллелизма, чтобы обеспечить более быстрые циклы проектирования для FPGA, чем это возможно при использовании традиционных HDL. Подходы, основанные на стандартном C или C ++ (с библиотеками или другими расширениями, допускающими параллельное программирование), можно найти в инструментах Catapult C от Mentor Graphics и инструментах Impulse C от Impulse Accelerated Technologies.

Похожая инициатива Intel - использование Data Parallel C ++, связанного с SYCL , в качестве языка синтеза высокого уровня.

Пакет CoreFire Design Suite от Annapolis Micro Systems , Inc. и FPGA National Instruments LabVIEW обеспечивают подход с графическим потоком данных для входа в высокоуровневый дизайн, а такие языки, как SystemVerilog , SystemVHDL и Handel-C, стремятся достичь той же цели, но нацелены на это. повышение производительности существующих инженеров по аппаратному обеспечению вместо того, чтобы делать ПЛИС более доступными для существующих инженеров-программистов .

Также возможно проектировать аппаратные модули с помощью MATLAB и Simulink, используя инструмент MathWorks HDL Coder или DSP Builder для Intel FPGA или Xilinx System Generator (XSG) от Xilinx .

Примеры HDL

HDL для проектирования аналоговых схем

Имя Описание
HDL-A Собственный аналог HDL
SpectreHDL Запатентованный аналоговый HDL от Cadence Design Systems для симулятора цепей Spectre
Verilog-AMS (Verilog для аналоговых и смешанных сигналов) Accellera стандартное расширение IEEE Std 1364 Verilog для аналоговых и смешанных сигналов моделирования
VHDL-AMS (VHDL с расширением аналоговых / смешанных сигналов) Стандарт IEEE расширение (IEEE Std 1076,1) из VHDL для аналогового и смешанного сигнала моделирования

HDL для проектирования цифровых схем

Двумя наиболее широко используемыми и хорошо поддерживаемыми разновидностями HDL, используемыми в промышленности, являются Verilog и VHDL .

Имя Описание
Расширенный язык логических выражений (ABEL)
Язык описания оборудования Altera (AHDL) проприетарный язык от Altera
AHPL Язык программирования оборудования
Bluespec HDL высокого уровня на основе Haskell (не встроенный DSL )
Bluespec SystemVerilog (BSV) на основе Bluespec, с синтаксисом, подобным Verilog HDL, от Bluespec, Inc.
C-to-Verilog Конвертер из C в Verilog
Chisel (Создание оборудования на встроенном языке Scala) на основе Scala (встроенный DSL )
Clash Clash Современный функциональный язык описания оборудования. Clash - это функциональный язык описания оборудования, синтаксис и семантика которого заимствованы из языка функционального программирования Haskell.
COLAMO (Общий ориентированный язык для архитектуры нескольких объектов) собственный язык от ООО «Центр исследований суперкомпьютеров и нейрокомпьютеров».
Слияние функциональный HDL; было прекращено
CoWareC HDL на основе C от CoWare . Сейчас прекращено в пользу SystemC
CUPL (компилятор универсальной программируемой логики) собственный язык от Logical Devices, Inc.
ЭЛЛА больше не используется
ESys.net .NET framework, написанный на C #
Гендель-C C-подобный язык дизайна
Hardcaml на основе OCaml (встроенный DSL). Попробуйте онлайн .
HHDL на основе Haskell (встроенный DSL).
Аппаратное соединение Java (HJJ) на основе Join Java
HML (Аппаратное машинное обучение) на основе Standard ML
Гидра на основе Haskell
Импульс C другой C-подобный HDL
ISPS Оригинальный HDL от CMU, больше не используется
ParC (параллельный C ++) kusu расширен потоками и связью в стиле HDL для параллельного программирования
JHDL на основе Java
KARL Регистровый язык KAiserslautern (глава в), паскалинский аппаратный описательный язык, который больше не используется.
Лава на основе Haskell (встроенный DSL).
Лола простой язык, используемый для обучения
M HDL от Mentor Graphics
MyHDL на основе Python (встроенный DSL )
nMigen на основе Python
ПАЛАЗМ для устройств с программируемой матричной логикой (PAL)
ТрубопроводC C-подобный язык описания оборудования, добавляющий автоматическую конвейерную обработку, подобную высокоуровневому синтезу, в качестве языковой конструкции / компилятора.
PyMTL на основе Python от Корнельского университета
PyRTL основан на Python, из Калифорнийского университета в Санта-Барбаре
ROCCC (Оптимизирующий компилятор Riverside для конфигурируемых вычислений) Бесплатный инструмент с открытым исходным кодом от C до HDL
RHDL на основе языка программирования Ruby
ROHD ( среда быстрой открытой разработки оборудования) фреймворк для проектирования и проверки оборудования, написанный на Dart
Ruby (язык описания оборудования)
SystemC стандартизированный класс библиотек C ++ для высокоуровневого поведенческого и транзакционного моделирования цифрового оборудования на высоком уровне абстракции, то есть на системном уровне
SystemVerilog надмножество Verilog с улучшениями для проектирования и проверки на уровне системы
СпинальныйЛВП На основе Scala (встроенный DSL)
SystemTCL SDL на основе Tcl.
THDL ++ (шаблонный HDL, вдохновленный C ++) Расширение VHDL с наследованием, расширенными шаблонами и классами политик.
TL-Verilog ( Verilog на уровне транзакций) Расширение Verilog / SystemVerilog с конструкциями для конвейеров и транзакций .
Verilog Один из наиболее широко используемых и хорошо поддерживаемых HDL
VHDL ( VHSIC HDL) Один из наиболее широко используемых и хорошо поддерживаемых HDL

HDL для проектирования печатных плат

Существует несколько проектов для определения возможности подключения печатных плат с использованием языковых методов ввода текста.

Имя Описание
PHDL (PCB HDL) Бесплатный HDL с открытым исходным кодом для определения возможности подключения печатных плат.
EDAsolver HDL для решения схематических проектов на основе ограничений
СКИДЛ Модуль Python с открытым исходным кодом для разработки электронных схем

Смотрите также

использованная литература

внешние ссылки