Введение

Язык описания аппаратуры Verilog HDL. VHDL (VHSIC Hardware Description Language) — это язык описания аппаратуры, позволяющий моделировать поведение и структуру цифровых систем на различных уровнях абстракции, от системного уровня до уровня логических элементов, для ввода проекта, документации и верификации. Язык был разработан в 1980-х годах для военной программы VHSIC в США и стандартизирован Институтом инженеров электротехники и электроники (IEEE) как IEEE Std 1076; последняя версия — IEEE Std 1076 2019. Для моделирования аналоговых и систем со смешанными сигналами разработан стандартизированный IEEE HDL на основе VHDL, называемый VHDL AMS (официально IEEE 1076.1).

История

В 1983 году VHDL был первоначально разработан по заказу Министерства обороны США для документирования поведения ASIC, которые компании-поставщики включали в оборудование. Стандарт MIL STD 454N в требовании 64 в разделе 4.5.1 "Документация ASIC в VHDL" явно требует документирования "Микроэлектронных устройств" на VHDL. Идея возможности моделирования ASIC на основе информации из этой документации оказалась настолько привлекательной, что были разработаны логические симуляторы, способные читать файлы VHDL. Следующим шагом стала разработка инструментов логического синтеза, которые считывали VHDL и выдавали определение физической реализации схемы. Поскольку Министерство обороны требовало, чтобы синтаксис максимально основывался на Ada, чтобы избежать повторного изобретения концепций, которые уже были тщательно протестированы при разработке Ada, VHDL в значительной степени заимствует концепции и синтаксис из языка программирования Ada. Первоначальная версия VHDL, разработанная по стандарту IEEE 1076 1987, включала широкий спектр типов данных, включая числовые (целые и вещественные), логические (битовые и булевы), символьные и временные, а также массивы битов, называемые векторными битами, и массивы символов, называемые строками. Однако в этом издании не была решена проблема "многозначной логики", где также учитываются сила сигнала (отсутствие, слабая или сильная) и неопределенные значения. Для этого потребовался стандарт IEEE 1164, который определил 9 типов логических значений: скалярный std_logic и его векторную версию std_logic_vector. Являясь разрешенным подтипом своего родительского типа std_ulogic, сигналы типа std_logic позволяют множественное управление для моделирования шинных структур, при этом функция разрешения подключений адекватно обрабатывает конфликтующие назначения. Обновленный IEEE 1076 в 1993 году сделал синтаксис более последовательным, обеспечил большую гибкость в именовании, расширил символьный тип для поддержки печатаемых символов ISO 8859-1, добавил оператор xnor и т. д. Незначительные изменения в стандарте (2000 и 2002) добавили концепцию защищенных типов (аналогичную концепции класса в C++) и сняли некоторые ограничения с правил сопоставления портов. Помимо стандарта IEEE 1164, было введено несколько дочерних стандартов для расширения функциональности языка. Стандарт IEEE 1076.2 улучшил обработку вещественных и комплексных типов данных. Стандарт IEEE 1076.3 представил знаковые и беззнаковые типы для упрощения арифметических операций с векторами. Стандарт IEEE 1076.1 (известный как VHDL AMS) обеспечивал расширения для проектирования аналоговых и смешанных сигнальных схем. Другие стандарты поддерживают более широкое использование VHDL, в частности VITAL (VHDL Initiative Towards ASIC Libraries) и расширения для проектирования микроволновых схем. В июне 2006 года технический комитет VHDL Accellera (уполномоченный IEEE для работы над следующим обновлением стандарта) одобрил так называемый проект 3.0 VHDL 2006. Сохраняя полную совместимость со старыми версиями, этот предлагаемый стандарт предоставляет многочисленные расширения, упрощающие написание и управление кодом VHDL. Ключевые изменения включают в себя включение дочерних стандартов (1164, 1076.2, 1076.3) в основной стандарт 1076, расширенный набор операторов, более гибкий синтаксис операторов case и generate, включение VHPI (VHDL Procedural Interface) (интерфейс к языкам C/C++) и подмножество PSL (Property Specification Language). Эти изменения должны повысить качество синтезируемого кода VHDL, сделать тестовые стенды более гибкими и расширить возможности использования VHDL для описаний на системном уровне. В феврале 2008 года Accellera одобрила VHDL 4.0, также известный как VHDL 2008, который устранил более 90 проблем, выявленных в ходе испытательного периода для версии 3.0, и включает улучшенные обобщенные типы. В 2008 году Accellera передала VHDL 4.0 в IEEE для голосования о включении в IEEE 1076 2008. Стандарт IEEE 1076 2008 VHDL был опубликован в январе 2009 года.

Стандартизация

Стандарт IEEE 1076 определяет язык описания аппаратуры VHSIC, или VHDL. Изначально он был разработан по контракту F33615 83 C 1003, заключенному ВВС США в 1983 году с командой, в которую входили Intermetrics, Inc. как эксперты по языкам и главный подрядчик, Texas Instruments как эксперты в области разработки микросхем и IBM как эксперты в области разработки компьютерных систем. Язык неоднократно пересматривался и имеет ряд подстандартов, которые существенно дополняют или расширяют его возможности. Стандарт 1076 был и остается важной вехой в проектировании электронных систем.

Переработки

IEEE 1076 1987 (также опубликован с). Значительные улучшения, основанные на многолетней обратной связи. Вероятно, наиболее широко используемая версия с наибольшей поддержкой со стороны производителей инструментов. IEEE 1076 2000. Незначительная редакция. Вводит использование защищенных типов. IEEE 1076 2002. Незначительная переработка стандарта 1076 2000. Правила, касающиеся буферных портов, были смягчены. IEC 61691 1 1:2004. Адаптация IEEE 1076 2002 стандартом IEC. IEEE 1076c 2007. Внедрен VHPI – процедурный интерфейс VHDL, предоставляющий программному обеспечению средства доступа к модели VHDL. Язык VHDL потребовал незначительных изменений для поддержки VHPI. IEEE 1076 2008 (ранее именовался 1076 200x). Значительная редакция, выпущенная 26 января 2009 года. Среди прочих изменений, этот стандарт включает базовый поднабор PSL, допускает использование генериков для пакетов и подпрограмм и вводит использование внешних имен. IEC 61691 1 1:2011. Адаптация IEEE 1076 2008 стандартом IEC. IEEE 1076 2019. Значительная редакция.

Дизайн

VHDL обычно используется для написания текстовых моделей, описывающих логическую схему. Такая модель обрабатывается программой синтеза только в том случае, если она является частью логического проекта. Для тестирования логического проекта используется программа моделирования, использующая модели для представления логических схем, взаимодействующих с проектом. Эта совокупность моделей моделирования обычно называется тестовой средой (testbench). Симулятор VHDL обычно является симулятором, управляемым событиями. Это означает, что каждая транзакция добавляется в очередь событий на определенное запланированное время. Например, если присваивание сигнала должно произойти через 1 наносекунду, событие добавляется в очередь на время +1 нс. Допускается также нулевая задержка, но ее все равно необходимо запланировать: для этих случаев используется дельта-задержка, представляющая собой бесконечно малый интервал времени. Моделирование переключается между двумя режимами: выполнением операторов, где вычисляются активируемые операторы, и обработкой событий, где обрабатываются события из очереди. VHDL имеет конструкции для обработки параллелизма, присущего аппаратному обеспечению, но эти конструкции (процессы) отличаются синтаксисом от параллельных конструкций в Ada (задачи). Как и Ada, VHDL является языком с сильной типизацией и не чувствителен к регистру. Для непосредственного представления операций, часто встречающихся в аппаратном обеспечении, в VHDL есть множество функций, отсутствующих в Ada, например, расширенный набор булевых операторов, включая NAND и NOR. VHDL поддерживает ввод и вывод файлов и может использоваться как язык общего назначения для обработки текста, но файлы чаще используются в тестовых средах моделирования для стимулов или данных верификации. Существуют компиляторы VHDL, которые создают исполняемые двоичные файлы. В этом случае можно использовать VHDL для написания тестовой среды для проверки функциональности проекта с использованием файлов на хост-компьютере для определения стимулов, взаимодействия с пользователем и сравнения результатов с ожидаемыми. Однако большинство разработчиков оставляют эту задачу симулятору. Опытному разработчику относительно легко создать код, который успешно моделируется, но который невозможно синтезировать в реальное устройство или который слишком велик для практического применения. Одной из распространенных ошибок является случайное создание прозрачных защелок вместо D-триггеров в качестве элементов хранения. Аппаратное обеспечение можно проектировать в VHDL IDE (для реализации на FPGA, таких как Xilinx ISE, Altera Quartus, Synopsys Synplify или Mentor Graphics HDL Designer) для создания RTL-схемы желаемой схемы. Затем полученную схему можно проверить с помощью программного обеспечения моделирования, которое отображает формы сигналов входов и выходов схемы после создания соответствующей тестовой среды. Для создания подходящей тестовой среды для конкретной схемы или кода VHDL необходимо правильно определить входы. Например, для входного тактового сигнала требуется цикл или итеративный оператор. И последнее: когда модель VHDL преобразуется в "элементы И и провода", которые отображаются на программируемое логическое устройство, такое как CPLD или FPGA, то конфигурируется фактическое аппаратное обеспечение, а не код VHDL, который "выполняется", как на каком-либо типе процессорного чипа.

Преимущества

Ключевое преимущество VHDL при использовании для разработки систем заключается в том, что он позволяет описать (смоделировать) и проверить (симулировать) поведение требуемой системы до того, как инструменты синтеза преобразуют проект в реальное аппаратное обеспечение (логические элементы и соединения). Другое преимущество состоит в том, что VHDL позволяет описывать конкурентную систему. VHDL – это язык описания аппаратуры, основанный на потоке данных, в котором каждое оператор рассматривается для одновременного выполнения, в отличие от процедурных языков программирования, таких как BASIC, C и ассемблер, где последовательность операторов выполняется последовательно, один за другим. Проект на VHDL многоцелевой. Однажды созданный вычислительный блок может быть использован во многих других проектах. Однако многие параметры формирования и функциональные параметры блока могут быть настроены (параметры производительности, размер памяти, элементная база, состав блока и структура соединений). Проект на VHDL переносим. Созданный для одной элементной базы, проект вычислительного устройства может быть перенесен на другую элементную базу, например, на КМОП с различными технологиями. Значительным преимуществом VHDL по сравнению с исходным Verilog является наличие в VHDL полноценной системы типов. Разработчики могут использовать систему типов для написания более структурированного кода (особенно путем объявления типов-записей).

Синтезируемые конструкции и шаблоны VHDL

VHDL часто используется для двух различных целей: моделирования электронных схем и их синтеза. Синтез – это процесс компиляции VHDL-кода и его преобразования в реализацию на конкретной технологии, такой как FPGA или ASIC. Не все конструкции VHDL подходят для синтеза. Например, большинство конструкций, явно работающих с временными задержками, таких как `wait for 10 ns;`, не синтезируемы, хотя и допустимы при моделировании. Несмотря на то, что различные средства синтеза обладают разными возможностями, существует общий синтезируемый поднабор VHDL, определяющий, какие языковые конструкции и идиомы преобразуются в стандартные аппаратные компоненты для многих средств синтеза. Стандарт IEEE 1076.6 определяет этот поднабор как официальный синтезируемый поднабор языка. Обычно считается хорошей практикой писать код для синтеза, используя наиболее распространенные идиомы, поскольку использование нестандартных конструкций может привести к некорректным или неоптимальным результатам.

Стандартные библиотеки

Также известные как стандартные комплекты.