VHDL - VHDL

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

Язык описания оборудования VHSIC ( VHDL ) - это язык описания оборудования (HDL), который может моделировать поведение и структуру цифровых систем на нескольких уровнях абстракции , от уровня системы до уровня логических вентилей , для ввода в проект, документации и т. Д. и в целях проверки. С 1987 года VHDL стандартизирован Институтом инженеров по электротехнике и радиоэлектронике (IEEE) как IEEE Std 1076 ; последняя версия (по состоянию на апрель 2020 г.) - IEEE Std 1076-2019 . Для того, чтобы модель аналоговых и смешанных сигналов систем, IEEE-стандартизированы ЛПВП на основе VHDL называется VHDL-AMS (официально IEEE 1076,1) была разработана.

VHDL назван в честь созданной Министерством обороны США программы - Программа очень высокоскоростных интегральных схем (VHSIC). В начале 1980-х годов программа VHSIC искала новый HDL для использования в конструкции интегральных схем, которые она стремилась разработать. Результатом этих усилий стал VHDL версии 7.2, выпущенный в 1985 году. В следующем году начались попытки стандартизировать его в качестве стандарта IEEE.

История

В 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называются bit_vectorи из characterназываемой строки .

Проблема не решен это издание, однако, была «многозначная логика», где сигнал в силу привода также считаются (нет, слабой или сильной) и неизвестных значений. Для этого требовался стандарт IEEE 1164 , в котором определены 9-значные логические типы: скалярная std_logicи его векторная версия std_logic_vector. Будучи разрешенным подтипом своего std_Ulogicродительского типа, std_logicсигналы -типов допускают многократное управление для моделирования шинных структур, в результате чего подключенная функция разрешения адекватно обрабатывает конфликтующие назначения.

Обновленный IEEE 1076 в 1993 году сделал синтаксис более согласованным, обеспечил большую гибкость в именовании, расширил characterтип, чтобы разрешить печать символов 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 поручил работу над следующим обновлением стандарта) одобрил так называемый Draft 3.0 of 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 1076c-2007. Представлен VHPI, процедурный интерфейс VHDL, который предоставляет программному обеспечению средства доступа к модели VHDL. Язык VHDL потребовал незначительных изменений, чтобы приспособить его к VHPI.
  • IEEE 1076-2008 (ранее назывался 1076-200x). Основная версия выпущена 26 января 2009 г. Помимо других изменений, этот стандарт включает базовое подмножество PSL, позволяет использовать обобщения для пакетов и подпрограмм и вводит использование внешних имен .
    • МЭК 61691-1-1: 2011. Принятие IEC стандарта IEEE 1076-2008.
  • IEEE 1076-2019. Основная доработка.

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

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

Дизайн

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

Симулятор 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 проект состоит как минимум из объекта, описывающего интерфейс, и архитектуры, содержащей фактическую реализацию. Кроме того, большинство проектов импортируют библиотечные модули. Некоторые проекты также содержат несколько архитектур и конфигураций .

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

-- (this is a VHDL comment)
/*
    this is a block comment (VHDL-2008)
*/
-- import std_logic from the IEEE library
library IEEE;
use IEEE.std_logic_1164.all;

-- this is the entity
entity ANDGATE is
  port ( 
    I1 : in std_logic;
    I2 : in std_logic;
    O  : out std_logic);
end entity ANDGATE;

-- this is the architecture
architecture RTL of ANDGATE is
begin
  O <= I1 and I2;
end architecture RTL;

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

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

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

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

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

Шаблон MUX

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

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

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

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

-- latch template 1:
Q <= D when Enable = '1' else Q;

-- latch template 2:
process(all)
begin
    Q <= D when(Enable);
end process;

Шлепанцы D-типа

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

DFF : process(all) is
begin
  if RST then
    Q <= '0';
  elsif rising_edge(CLK) then
    Q <= D;
  end if;
end process DFF;

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

DFF : process(RST, CLK) is
begin
  if RST then
    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(all) is 
begin
  if rising_edge(CLK) then
    Q  <= D;
    Q2 <= Q1;
  end if;
  if RST then
    Q <= '0';
  end if;
end process DFF;

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

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

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

library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;    -- for the unsigned type

entity COUNTER is
  generic (
    WIDTH : in natural := 32);
  port (
    RST   : in std_logic;
    CLK   : in std_logic;
    LOAD  : in std_logic;
    DATA  : in std_logic_vector(WIDTH-1 downto 0);
    Q     : out std_logic_vector(WIDTH-1 downto 0));
end entity COUNTER;

architecture RTL of COUNTER is

begin
  process(all) is
  begin
    if RST then
      Q <= (others => '0');
    elsif rising_edge(CLK) then
      if LOAD then
        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 внутри rising_edge(CLK) elsifдля добавления других функций, таких как включение счетчика, остановка или переход на определенное значение счетчика, генерация выходных сигналов, таких как сигналы счетчика клемм, и т. Д. Необходимо соблюдать осторожность с порядком и вложенность таких элементов управления, если они используются вместе, для получения желаемых приоритетов и минимизации количества необходимых логических уровней.

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

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

process
begin
  CLK <= '1'; wait for 10 NS;
  CLK <= '0'; wait for 10 NS;
end process;

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

process
begin
  wait until START = '1'; -- wait until START is high
  
  for i in 1 to 10 loop -- then wait for a few clock periods...
    wait until rising_edge(CLK);
  end loop;

  for i in 1 to 10 loop 	-- write numbers 1 to 10 to DATA, 1 every cycle
    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

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

Другой:

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

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

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

Примечания
  • 1076 / INT-1991 - Интерпретации стандартов IEEE: IEEE Std 1076-1987, Справочное руководство по стандартному языку VHDL IEEE . 1992. DOI : 10,1109 / IEEESTD.1992.101084 . ISBN 0-7381-0987-8.

дальнейшее чтение

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

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