stringtranslate.com

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

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

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

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

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

Мотивация

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

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

БИБЛИОТЕКА IEEE ; ИСПОЛЬЗУЙТЕ IEEE.STD_LOGIC_1164. ВСЕ ;  ENTITY not1 IS PORT ( a : IN STD_LOGIC ; b : OUT STD_LOGIC ; ); КОНЕЦ не1 ;             АРХИТЕКТУРА поведенческая OF not1 IS BEGIN b <= NOT a ; КОНЕЦ поведенческий ;         

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

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

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

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

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

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

История

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

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

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

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

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

В 1985 году, когда проектирование перешло на СБИС, компания Gateway Design Automation представила Verilog , а компания Intermetrics выпустила первую завершенную версию языка описания оборудования VHSIC (VHDL). VHDL был разработан по заказу программы VHSIC Министерства обороны США и основывался на языке программирования Ada , а также на опыте, полученном при более ранней разработке ISPS. [10] Первоначально 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, хотя ни один из них никогда не предназначался для их замены.

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

Проектирование с использованием HDL

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

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

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

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

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

To simulate an HDL model, an engineer writes a top-level simulation environment (called a test bench). At minimum, a testbench contains an instantiation of the model (called the device under test or DUT), pin/signal declarations for the model's I/O, and a clock waveform. The testbench code is event driven: the engineer writes HDL statements to implement the (testbench-generated) reset-signal, to model interface transactions (such as a host–bus read/write), and to monitor the DUT's output. An HDL simulator — the program that executes the testbench — maintains the simulator clock, which is the master reference for all events in the testbench simulation. Events occur only at the instants dictated by the testbench HDL (such as a reset-toggle coded into the testbench), or in reaction (by the model) to stimulus and triggering events. Modern HDL simulators have full-featured graphical user interfaces, complete with a suite of debug tools. These allow the user to stop and restart the simulation at any time, insert simulator breakpoints (independent of the HDL code), and monitor or modify any element in the HDL model hierarchy. Modern simulators can also link the HDL environment to user-compiled libraries, through a defined PLI/VHPI interface. Linking is system-dependent (x86, SPARC etc. running Windows/Linux/Solaris), as the HDL simulator and user libraries are compiled and linked outside the HDL environment.

Design verification is often the most time-consuming portion of the design process, due to the disconnect between a device's functional specification, the designer's interpretation of the specification, and the imprecision[citation needed] of the HDL language. The majority of the initial test/debug cycle is conducted in the HDL simulator environment, as the early stage of the design is subject to frequent and major circuit changes. An HDL description can also be prototyped and tested in hardware — programmable logic devices are often used for this purpose. Hardware prototyping is comparatively more expensive than HDL simulation, but offers a real-world view of the design. Prototyping is the best way to check interfacing against other hardware devices and hardware prototypes. Even those running on slow FPGAs offer much shorter simulation times than pure HDL simulation.

Design verification with HDLs

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

В терминах формальной проверки свойство — это фактическое утверждение об ожидаемом или предполагаемом поведении другого объекта. В идеале для данного 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 [11] компании Annapolis Micro Systems, Inc. и LabVIEW FPGA компании National Instruments обеспечивают графический подход к потокам данных для ввода проектов высокого уровня, а такие языки, как SystemVerilog , SystemVHDL и Handel-C , направлены на достижение той же цели, но нацелены на повышение продуктивности существующих инженеров по аппаратному обеспечению, а не на то, чтобы сделать FPGA более доступными для существующих инженеров-программистов .

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

Примеры ЛПВП

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

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

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

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

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

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

Рекомендации

  1. ^ Силетти, Майкл Д. (2011). Расширенный цифровой дизайн с Verilog HDL (2-е изд.). Прентис Холл. ISBN 9780136019282.
  2. ^ Барбаччи, М. «Сравнение языков передачи регистров для описания компьютеров и цифровых систем», Университет Карнеги-Меллона, факультет компьютерных наук, март 1973 г.
  3. ^ Белл, КГ; Ньюэлл, А. (1971). Компьютерные структуры: материалы для чтения и примеры . МакГроу-Хилл. ISBN 0-07-004357-4.
  4. ^ Рейли, ЭД (2003). Вехи развития информатики и информационных технологий . Гринвуд Пресс. п. 183. ИСБН 1-57356-521-0.
  5. ^ Белл, КГ; Грасон, Дж.; Ньюэлл, А. (1972). Проектирование компьютеров и цифровых систем . Цифровая пресса. LCCN  72-89566. ОСЛК  440245727.
  6. ^ Барбаччи, MC (1976). «Символическое манипулирование компьютерными описаниями: компилятор и симулятор ISPL». Департамент компьютерных наук Университета Карнеги-Меллона. дои : 10.1184/R1/6610790.v1. {{cite journal}}: Требуется цитировать журнал |journal=( помощь )
  7. ^ Barbacci, M.C.; Barnes, G.E.; Cattell, R.G.G.; Siewiorek, D.P. (1977). "The ISPS Computer Description Language". Department of Computer Science, Carnegie-Mellon University. doi:10.1184/R1/6610637.v1. {{cite journal}}: Cite journal requires |journal= (help)
  8. ^ Girardi, G.; Hartenstein, R. (1983). ABL specification (Report). CSELT and University of Kaiserslautern.
  9. ^ a b Hartenstein, Reiner W. (2012) [1993], "KARL and ABL", in Mermet, J. (ed.), Fundamentals and Standards in Hardware Description Languages, Nato Science Series E, vol. 249, Springer, pp. 447–, ISBN 9789401119146
  10. ^ Barbacci, M.C.; Grout, S.; Lindstrom, G.; Maloney, M.P. (1984). "Ada as a hardware description language : an initial report". Department of Computer Science, Carnegie-Mellon University. CiteSeerX 10.1.1.938.8003. doi:10.1184/R1/6602984.v1. {{cite journal}}: Cite journal requires |journal= (help)
  11. ^ "VHDL-Based FPGA Programming Application Software Tool". Annapolis Micro Systems, Inc. Retrieved 2018-12-01.
  12. ^ "VHDL code - HDL Coder - MATLAB & Simulink". Mathworks.com. 2011-04-30. Retrieved 2012-08-11.
  13. ^ "Digital Signal Processing (DSP) Builder - Intel® FPGAs". Intel. Retrieved 2021-09-20.
  14. ^ "System Generator for DSP". Xilinx.com. Archived from the original on 2012-07-12. Retrieved 2012-08-11.
  15. ^ A History of Haskell: being lazy with class §12.4.2
  16. ^ "Chisel/FIRRTL Hardware Compiler Framework".
  17. ^ "Higher-level language COLAMO | НИЦ супер-ЭВМ и нейрокомпьютеров".
  18. ^ Eurich, J.P.; Roth, G. (1990). "EDIF grows up". IEEE Spectrum. 27 (11): 68–72. doi:10.1109/6.62219. S2CID 381119.
  19. ^ Yanbing Li; Leeser, M. (1995). "HML: An innovative hardware description language and its translation to VHDL". Proceedings of ASP-DAC'95/CHDL'95/VLSI'95 with EDA Technofair. pp. 691–696. doi:10.1109/ASPDAC.1995.486388. ISBN 4-930813-67-0. S2CID 14198160.
  20. ^ Chalmers Lava
  21. ^ Xilinx Lava
  22. ^ Kansas Lava
  23. ^ York Lava
  24. ^ "Rapid Open Hardware Development (ROHD) Framework". GitHub. 17 November 2021.

External links