VHDL

редактировать
VHDL
Paradigm одновременный, реактивный, поток данных
Впервые появился1980-е годы
Стабильный выпуск IEEE 1076-2019 / 23 декабря 2019 г.; 10 месяцев назад (23.12.2019)
Дисциплина ввода строгий
Расширения имен файлов .vhd
Веб-сайтIEEE VASG
Диалекты
VHDL-AMS
Под влиянием
Ada, Pascal
источник VHDL для подписанного сумматора

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

Содержание

  • 1 История
    • 1.1 Стандартизация
      • 1.1.1 Версии
      • 1.1.2 Связанные стандарты
  • 2 Дизайн
  • 3 Преимущества
  • 4 Примеры дизайна
    • 4.1 Синтезируемые конструкции и шаблоны VHDL
    • 4.2 Шаблон MUX
    • 4.3 Шаблон с защелкой
    • 4.4 Триггеры D-типа
    • 4.5 Пример: счетчик
    • 4.6 Конструкции только для моделирования
  • 5 Симуляторы VHDL
  • 6 См. Также
  • 7 Ссылки
  • 8 Дополнительная литература
  • 9 Внешние ссылки

История

В 1983 г. VHDL изначально был разработан по приказу США. Министерство обороны для документирования поведения ASIC, которые компании-поставщики включали в оборудование. Стандарт MIL-STD-454N в Требовании 64 в разделе 4.5.1 «Документация ASIC на VHDL» явно требует документации «Микроэлектронных устройств» на VHDL.

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

Из-за того, что Министерство обороны требует, чтобы как можно больше синтаксиса основывалось на Ada, чтобы избежать повторного изобретения концепций, которые уже были тщательно протестированы при разработке Ada, VHDL в значительной степени заимствует у язык программирования Ada как в концепции, так и в синтаксисе .

Первоначальная версия VHDL, разработанная в соответствии со стандартом IEEE IEEE 1076-1987, включала широкий спектр типов данных, включая числовые (целые и вещественные ), логические (бит и логические ), символ и время, плюс массивы из бита, называемого bit_vectorи символа , вызываемого string.

Проблема не решена в этой редакции, однако, была «многозначная логика», где также учитывались значения сигнала (нет, слабый или сильный) и неизвестные значения. Для этого потребовался стандарт 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 в отношении библиотек ASIC) и микроволновые расширения схемотехники.

В июне 2006 года Технический комитет VHDL из Accellera (которому IEEE делегировал работу над следующим обновлением стандарта) одобрил так называемый Draft 3.0 VHDL-2006. Поддерживая полную совместимость со старыми версиями, этот предлагаемый стандарт предоставляет множество расширений, которые упрощают написание кода VHDL и управление им. Ключевые изменения включают включение дочерних стандартов (1164, 1076.2, 1076.3) в основной стандарт 1076, расширенный набор операторов, более гибкий синтаксис операторов case и generate, включение VHPI (VHDL Procedural Interface) (интерфейс для языков C / C ++) и подмножество PSL (Язык спецификации свойств ). Эти изменения должны улучшить качество синтезируемого кода VHDL, сделать испытательные стенды более гибкими и позволить более широкое использование VHDL для описаний на уровне системы.

В феврале 2008 года Accellera одобрила VHDL 4.0, также неофициально известный как VHDL 2008, который решает более 90 проблем, обнаруженных в течение пробного периода для версии 3.0, и включает расширенные универсальные типы. В 2008 году Accellera выпустила VHDL 4.0 в IEEE для голосования по включению в IEEE 1076-2008. Стандарт VHDL IEEE 1076-2008 был опубликован в январе 2009 года.

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

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

1076 был и остается вехой в разработке электронных систем.

Редакции

  • IEEE 1076-1987 Первая стандартизированная редакция версии 7.2 языка, разработанная ВВС США.
  • IEEE 1076-1993 (также опубликовано с ISBN 1-55937-376-8 ). Значительные улучшения, полученные после нескольких лет обратной связи. Вероятно, наиболее широко используемая версия с максимальной поддержкой инструментов от производителей.
  • IEEE 1076-2000. Небольшое изменение. Введение в использование защищенных типов.
  • IEEE 1076-2002. Мелкая редакция 1076-2000 гг. Правила относительно буферных портов ослаблены.
    • МЭК 61691-1-1: 2004. Принятие IEC IEEE 1076-2002.
  • IEEE 1076-2008 (ранее называлось 1076-200x). Основная версия выпущена 26 января 2009 г. Помимо других изменений, этот стандарт включает в себя базовое подмножество PSL, позволяет использовать универсальные шаблоны для пакетов и подпрограмм и вводит использование внешних имен.
    • МЭК 61691-1-1: 2011. Принятие IEC IEEE 1076-2008.

Связанные стандарты

  • IEEE 1076.1 VHDL, аналоговый и смешанный сигнал (VHDL-AMS )
  • Стандартные пакеты IEEE 1076.1.1 VHDL-AMS (stdpkgs)
  • IEEE 1076.2 VHDL Math Package
  • IEEE 1076.3 VHDL Synthesis Package (vhdlsynth) (numeric_std )
  • IEEE 1076.3 VHDL Synthesis Package - Floating Point (fphdl)
  • IEEE 1076.4 Timing ( Инициатива VHDL в отношении библиотек ASIC: жизненно важна)
  • IEEE 1076.6 VHDL Synthesis Interoperability (отозван в 2010 году)
  • IEEE 1164 VHDL Multivue Logic (std_logic_1164) Пакеты

Дизайн

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

Симулятор VHDL обычно представляет собой. Это означает, что каждая транзакция добавляется в очередь событий на определенное запланированное время. Например. если назначение сигнала должно произойти через 1 наносекунду, событие добавляется в очередь на время + 1 нс. Нулевая задержка также разрешена, но ее все же необходимо запланировать: в этих случаях используется дельта-задержка, которая представляет собой бесконечно малый временной шаг. Моделирование переключается между двумя режимами: выполнение оператора, при котором оцениваются запущенные операторы, и обработка событий, при которой обрабатываются события в очереди.

VHDL имеет конструкции для обработки параллелизма, присущего аппаратным проектам, но эти конструкции (процессы) отличаются по синтаксису от параллельных конструкций в Ada (задачи). Как и Ada, VHDL имеет строго типизированный и без учета регистра. Для прямого представления операций, которые являются общими для оборудования, существует множество функций VHDL, которых нет в Ada, например расширенный набор логических операторов, включая nand и или .

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 имеет полную систему типов . Дизайнеры могут использовать систему типов для написания гораздо более структурированного кода (особенно путем объявления record типов).

Примеры дизайна

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

Простой элемент И в VHDL будет выглядеть примерно так:

- (это комментарий VHDL) / * это комментарий блока (VHDL-2008) * / - импортировать std_logic из библиотеки IEEE library IEEE; используйте IEEE.std_logic_1164.all; - это сущность сущность ANDGATE - это порт (I1: в std_logic; I2: в std_logic; O: вне std_logic); конечный объект ANDGATE; - это архитектура архитектуры RTL для ANDGATE - начало O <= I1 and I2; end architecture RTL;

(обратите внимание, что RTLозначает дизайн уровня передачи регистров.) Хотя приведенный выше пример может показаться многословным новичкам в HDL., многие части являются необязательными или должны быть написаны только один раз. Обычно простые функции, подобные этой, являются частью более крупного поведенческого модуля, вместо того, чтобы иметь отдельный модуль для чего-то столь простого. Кроме того, использование таких элементов, как тип std_logic, на первый взгляд может показаться излишним. Можно легко использовать встроенный тип бити вначале избежать импорта библиотеки. Однако использование формы многозначной логики, в частности 9-значной логики (U,X,0,1,Z,W,H,L,-), вместо простых битов (0,1) предлагает разработчику очень мощный инструмент моделирования и отладки. который в настоящее время не существует ни в одном другом HDL.

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

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

VHDL часто используется для двух разных цели: моделирование электронных схем и синтез таких конструкций. Синтез - это процесс, в котором VHDL компилируется и преобразуется в технологию реализации, такую ​​как FPGA или ASIC. Многие поставщики FPGA имеют бесплатные (или недорогие) инструменты для синтеза VHDL для использования со своими чипами, тогда как инструменты ASIC часто очень дороги.

Не все конструкции в VHDL подходят для синтеза. Например, большинство конструкций, которые явно имеют дело с синхронизацией, такие как , ждут 10 нс;не могут быть синтезированы, несмотря на то, что они допустимы для моделирования. Хотя разные инструменты синтеза имеют разные возможности, существует общее синтезируемое подмножество VHDL, которое определяет, какие языковые конструкции и идиомы отображаются в общее оборудование для многих инструментов синтеза. IEEE 1076.6 определяет подмножество языка, которое считается официальным подмножеством синтеза. Обычно считается «лучшей практикой» писать очень идиоматический код для синтеза, поскольку результаты могут быть неверными или неоптимальными для нестандартных конструкций.

Шаблон MUX

Мультиплексор , или «MUX», как его обычно называют, представляет собой простую конструкцию, очень распространенную при проектировании оборудования. Пример ниже демонстрирует простой мультиплексор «два к одному» с входами Aи B, селектором Sи выходом X. Обратите внимание, что есть много других способов выразить тот же MUX в VHDL.

X <= A when S = '1' else B;

Шаблон защелки

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

- шаблон защелки 1: Q <= D when Enable = '1' else Q; -- latch template 2: process(all) begin Q <= D when(Enable); end process;

триггеры D-типа

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

DFF: процесс (все) начинается, если RST, то Q <= '0'; elsif rising_edge(CLK) then Q <= D; end if; end process DFF;

Другой распространенный способ записи поведения, запускаемого фронтом, в VHDL - использование атрибута сигнала «событие». Между именем сигнала и именем атрибута должен быть написан одиночный апостроф.

DFF: процесс (RST, CLK) начинается, если RST, тогда Q <= '0'; elsif CLK'event and CLK = '1' then Q <= D; end if; end process DFF;

VHDL также поддается "однострочным", таким как

DFF: Q <= '0' when RST = '1' else D when rising_edge(clk);

или

DFF: process (все) начинается, если возрастающая_ кромка (CLK), то Q <= D; Q2 <= Q1; end if; if RST then Q <= '0'; end if; end process DFF;

Что может быть полезно, если не все сигналы (регистры), управляемые этим процессом, должны быть сброшены.

Пример: счетчик

В следующем примере показан восходящий счетчик с асинхронным сбросом, параллельной загрузкой и настраиваемой шириной. Он демонстрирует использование типа «беззнаковый», преобразования типов между «беззнаковый» и «std_logic_vector» и универсальные типы VHDL. Дженерики очень близки к аргументам или шаблонам в других традиционных языках программирования, таких как C ++.

библиотека IEEE; используйте IEEE.std_logic_1164.all; используйте IEEE.numeric_std.all; - для объекта беззнакового типа COUNTER является универсальным (WIDTH: в натуральном выражении: = 32); порт (RST: в std_logic; CLK: в std_logic; ЗАГРУЗКА: в std_logic; ДАННЫЕ: в std_logic_vector (WIDTH-1 до 0); Q: из std_logic_vector (WIDTH-1 до 0)); конечный объект COUNTER; архитектура RTL COUNTER - начало процесса (все) - начало, если RST тогда Q <= (others =>'0'); elsif rise_edge (CLK), тогда, если LOAD, то Q <= DATA; else Q <= std_logic_vector(unsigned(Q) + 1); --Addition is unsigned, converted back to std_logic_vector end if; end if; end process; end architecture RTL;

Более сложные счетчики могут добавлять операторы if / then / else в восходящий_ край (CLK) elsifдля добавления других функций, таких как включение счетчика, остановка или прокрутка при некотором значении счетчика, генерируя выходные сигналы, такие как сигналы счетчика клемм, и т. д. Необходимо внимательно следить за порядком и вложенностью таких элементов управления, если они используются вместе, чтобы обеспечить желаемые приоритеты и минимизировать количество необходимых логических уровней.

Конструкции только для моделирования

Большое подмножество VHDL не может быть преобразовано в оборудование. Это подмножество известно как несинтезируемое или предназначенное только для моделирования подмножество VHDL и может использоваться только для прототипирования, моделирования и отладки. Например, следующий код сгенерирует часы с частотой 50 МГц. Его можно, например, использовать для управления входом часов в проекте во время моделирования. Однако это конструкция только для моделирования и не может быть реализована аппаратно. В реальном оборудовании часы генерируются извне; его можно уменьшить внутри с помощью логики пользователя или специального оборудования.

начало процесса CLK <= '1'; wait for 10 NS; CLK <= '0'; wait for 10 NS; end process;

Конструкции только для моделирования могут использоваться для построения сложных сигналов за очень короткое время. Такой сигнал можно использовать, например, в качестве тестовых векторов для сложной конструкции или в качестве прототипа некоторой логики синтезатора, которая будет реализована в будущем.

начало процесса ждать, пока START = '1'; - подождите, пока СТАРТ не станет высоким для i в цикле от 1 до 10 - затем подождите несколько периодов времени... подождите, пока рост_ кромки (CLK); конец петли; for i в цикле от 1 до 10 - записывать числа от 1 до 10 в DATA, 1 каждый цикл DATA <= to_unsigned(i, 8); wait until rising_edge(CLK); end loop; -- wait until the output changes wait on RESULT; -- now raise ACK for clock period ACK <= '1'; wait until rising_edge(CLK); ACK <= '0'; -- and so on... end process;

Симуляторы VHDL

Коммерческие:

  • Aldec Active-HDL (Windows 7 Только / 10)
  • Cadence Incisive (Прошлые продукты: NC-VHDL)
  • Mentor Graphics ModelSim. Урезанные версии, используемые различными поставщиками FPGA, например Altera, Lattice, Microsemi и др.
  • Mentor Graphics. Дополнительные возможности отладки, ориентированные на сложные FPGA и SoC на основе Modelsim.
  • Synopsys VCS-MX
  • Xilinx Vivado (a.k.a. xsim). На основе iSim из предыдущей инструментальной цепочки ISE.
  • EDA Utilities от Kanai Ghosh VHDL Parser, vhdl2verilog, vhdl2ipxact и многих других утилит. Коммерческий; был бесплатным до 2018 года.

Другое:

  • EDA Playground - Бесплатная среда VHDL на основе веб-браузера (использует Synopsys VCS, Cadence Incisive, Aldec Riviera-PRO и GHDL для моделирования VHDL)
  • GHDL - это компилятор VHDL с открытым исходным кодом, который может выполнять программы VHDL. GHDL на GitHub
  • boot от freerangefactory.org - это компилятор и симулятор VHDL на основе GHDL и GTKWave
  • VHDL Simili от Symphony EDA. бесплатный коммерческий симулятор VHDL.
  • nvc от Ника Гассона - компилятор VHDL с открытым исходным кодом
  • freehdl от Эдвина Нароска был симулятором VHDL с открытым исходным кодом, заброшенный с 2001 г.

См. также

Ссылки

Примечания

Дополнительная литература

  • Питер Дж. Эшенден, «Руководство разработчика по VHDL, третье издание (системы на кремнии)», 2008 г., ISBN 0-1208-8785 -1. (Справочник VHDL, написанный одним из ведущих разработчиков языка)
  • Брайан Мили, Фабрицио Тапперо (февраль 2012 г.). Свободный диапазон VHDL. Простое руководство по написанию мощного кода VHDL для ваших цифровых реализаций. freerangefactory.org.
  • Йохан Сандстрем (октябрь 1995 г.). «Синтаксическое и семантическое сравнение Verilog с VHDL». Интегрированный системный дизайн. EE Times. - Sandstrom представляет таблицу, связывающую конструкции VHDL с конструкциями Verilog.
  • Qualis Design Corporation (2000-07-20). "Краткая справочная карта VHDL" (PDF). 1.1. Qualis Design Corporation. Архивировано из оригинального (PDF) 10.12.2003. Cite journal требует | journal =()
  • Qualis Design Corporation (2000-07 -20). «Краткая справочная карта по 1164 пакетам» (PDF). 1.0. Qualis Design Corporation. Архивировано из оригинального (PDF) от 14 марта 2016 года. Cite journal требуется | journal =()
  • Яник Бержерон, «Написание тестовых стендов: функциональная проверка моделей HDL», 2000, ISBN 0 -7923-7766-4. (Библия HDL Testbench)

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

Викискладе есть носители, связанные с VHDL.
Викибуком Программируемой логикой есть страница по теме: VHDL
Последняя правка сделана 2021-06-18 07:40:39
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте