Парадигма | Структурированный |
---|---|
Впервые появился | 1984 |
Стабильный выпуск | IEEE 1364-2005 / 9 ноября 2005 г . |
Печатная дисциплина | Статичный , слабый |
Расширения имени файла | .v, .vh |
Диалекты | |
Verilog-AMS | |
Под влиянием | |
Паскаль , Ада , C , Фортран | |
Под влиянием | |
SystemVerilog | |
|
Verilog , стандартизированный как IEEE 1364 , представляет собой язык описания оборудования (HDL), используемый для моделирования электронных систем . Это наиболее часто используется при проектировании и верификации цифровых схем на уровне регистров передачи в абстракции . Он также используется при проверке аналоговых схем и схем со смешанными сигналами , а также при проектировании генетических схем . [1] В 2009 году стандарт Verilog (IEEE 1364-2005) был объединен с SystemVerilog.стандарт, создавая IEEE Standard 1800-2009. С тех пор Verilog официально является частью языка SystemVerilog. Текущая версия - стандарт IEEE 1800-2017. [2]
Обзор [ править ]
Языки описания оборудования, такие как Verilog, похожи на языки программирования программного обеспечения, потому что они включают способы описания времени распространения и силы сигнала (чувствительности). Есть два типа операторов присваивания ; блокирующее назначение (=) и неблокирующее (<=) назначение. Неблокирующее назначение позволяет разработчикам описывать обновление конечного автомата без необходимости объявлять и использовать временные переменные хранения.. Поскольку эти концепции являются частью семантики языка Verilog, дизайнеры могут быстро писать описания больших схем в относительно компактной и лаконичной форме. На момент появления Verilog (1984) Verilog представлял собой огромное улучшение производительности для проектировщиков схем, которые уже использовали программное обеспечение для ввода графических схем и специально написанные программы для документирования и моделирования электронных схем .
Разработчикам Verilog был нужен язык с синтаксисом, подобным языку программирования C , который уже широко использовался при разработке инженерного программного обеспечения . Как и C, Verilog чувствителен к регистру и имеет базовый препроцессор (хотя и менее сложный, чем у ANSI C / C ++). Его ключевые слова потока управления (if / else, for, while, case и т. Д.) Эквивалентны, а приоритет операторасовместим с C. Синтаксические различия включают: требуемую разрядность для объявлений переменных, разграничение процедурных блоков (Verilog использует начало / конец вместо фигурных скобок {}) и многие другие незначительные отличия. Verilog требует, чтобы переменные имели определенный размер. В C эти размеры выводятся из «типа» переменной (например, целочисленный тип может быть 8 бит).
Дизайн Verilog состоит из иерархии модулей . Модули инкапсулируют иерархию дизайна и взаимодействуют с другими модулями через набор объявленных портов ввода, вывода и двунаправленных портов . Внутри модуль может содержать любую комбинацию из следующего: объявления цепей / переменных (провод, регистр, целое число и т. Д.), Параллельные и последовательные блоки операторов и экземпляры других модулей (подиерархии). Последовательные операторы помещаются в начальный / конечный блок и выполняются в последовательном порядке внутри блока. Однако сами блоки выполняются одновременно, что делает Verilog языком потока данных .
Концепция Verilog «провод» состоит как из значений сигнала (4 состояния: «1, 0, плавающий, неопределенный»), так и из уровней сигнала (сильный, слабый и т. Д.). Эта система позволяет абстрактно моделировать общие сигнальные линии, когда несколько источников управляют общей сетью. Когда провод имеет несколько драйверов, значение провода (читаемое) определяется функцией исходных драйверов и их сильными сторонами.
Подмножество операторов языка Verilog можно синтезировать . Модули Verilog, которые соответствуют синтезируемому стилю кодирования, известному как RTL ( уровень передачи регистров ), могут быть физически реализованы с помощью программного обеспечения для синтеза. Программное обеспечение синтеза алгоритмически преобразует (абстрактный) источник Verilog в список соединений , логически эквивалентное описание, состоящее только из элементарных логических примитивов (И, ИЛИ, НЕ, триггеры и т. Д.), Которые доступны в конкретной технологии FPGA или VLSI . Дальнейшие манипуляции со списком соединений в конечном итоге приводят к созданию схемы (например, фото-маска, установленная для ASIC или файл битового потока дляПЛИС ).
История [ править ]
Начало [ править ]
Verilog был создан Прабху Гоэлем , Филом Мурби , Чи-Лай Хуангом и Дугласом Вармке между концом 1983 и началом 1984 года. [3] Чи-Лай Хуанг ранее работал над описанием оборудования LALSD, языком, разработанным профессором SYH Su, для его кандидатская работа. [4] Правообладателем этого процесса, в то время являвшегося собственностью, была компания «Автоматизированные интегрированные системы проектирования» (позже переименованная в « Автоматизация проектирования шлюзов» в 1985 году). Gateway Design Automation была приобретена компанией Cadence Design Systems в 1990 году. В настоящее время Cadence обладает полными правами собственности на Verilog от Gateway и Verilog-XL, HDL-симулятор, который станет фактическим стандартом ( симуляторов логики Verilog).) на следующее десятилетие. Первоначально Verilog предназначался только для описания и моделирования; автоматический синтез подмножеств языка в физически реализуемые структуры (вентили и т. д.) был разработан после того, как язык получил широкое распространение.
Verilog - это сочетание слов «проверка» и «логика». [5]
Verilog-95 [ править ]
С ростом успеха VHDL в то время Cadence решила сделать этот язык доступным для открытой стандартизации . Cadence передала Verilog в общественное достояние в рамках организации Open Verilog International (OVI) (теперь известной как Accellera ). Позже Verilog был представлен в IEEE и стал стандартом IEEE 1364-1995, обычно называемым Verilog-95.
В то же время Cadence инициировала создание Verilog-A, чтобы обеспечить поддержку стандартов в своем аналоговом симуляторе Spectre . Verilog-A никогда не задумывался как отдельный язык и является подмножеством Verilog-AMS, которое включает Verilog-95.
Verilog 2001 [ править ]
Расширения Verilog-95 были отправлены обратно в IEEE для устранения недостатков, обнаруженных пользователями в исходном стандарте Verilog. Эти расширения стали стандартом IEEE 1364-2001, известным как Verilog-2001.
Verilog-2001 - это существенная модернизация Verilog-95. Во-первых, он добавляет явную поддержку (дополнения до 2) сетей и переменных со знаком. Раньше авторам кода приходилось выполнять операции со знаком, используя неудобные манипуляции на битовом уровне (например, бит выполнения простого 8-битного сложения требовал явного описания булевой алгебры для определения его правильного значения). Эту же функцию в Verilog-2001 можно более кратко описать одним из встроенных операторов: +, -, /, *, >>>. Конструкция generate / endgenerate (аналогичная генерации / endgenerate VHDL) позволяет Verilog-2001 управлять экземпляром и созданием экземпляров оператора с помощью обычных операторов принятия решений (case / if / else). Используя команду generate / endgenerate, Verilog-2001 может создать экземпляр массива экземпляров с контролем над связностью отдельных экземпляров.Файловый ввод-вывод был улучшен за счет нескольких новых системных задач. И, наконец, было введено несколько синтаксических дополнений для улучшения читаемости кода (например, всегда, @ *, переопределение именованного параметра, объявление заголовка функции / задачи / модуля в стиле C).
Verilog-2001 - это версия Verilog, поддерживаемая большинством коммерческих программных пакетов EDA .
Verilog 2005 [ править ]
Не путать с SystemVerilog , Verilog 2005 ( стандарт IEEE 1364-2005) состоит из незначительных исправлений, уточнений спецификаций и нескольких новых языковых функций (таких как ключевое слово uwire).
Отдельная часть стандарта Verilog, Verilog-AMS , пытается интегрировать моделирование аналоговых и смешанных сигналов с традиционным Verilog.
SystemVerilog [ править ]
Появление языков проверки оборудования, таких как OpenVera и язык Verisity e, стимулировало разработку Superlog компанией Co-Design Automation Inc (приобретенной Synopsys ). Основы Superlog и Vera были переданы в дар компании Accellera , которая позже стала стандартом IEEE P1800-2005: SystemVerilog.
SystemVerilog - это расширенная версия Verilog-2005 с множеством новых функций и возможностей, помогающих в проверке проекта и моделировании проекта. С 2009 года языковые стандарты SystemVerilog и Verilog были объединены в SystemVerilog 2009 (стандарт IEEE 1800-2009). Текущая версия - стандарт IEEE 1800-2017. [6]
Пример [ править ]
Ниже приводится простой пример двух триггеров :
модуль верхнего уровня ( часы , сброс ); входные часы ; сброс входа ; reg flop1 ; reg flop2 ; всегда @ ( posedge сброс или posedge часы ) если ( сброс ) начать flop1 <= 0 ; flop2 <= 1 ; конец else begin flop1 <= flop2 ; flop2 <= flop1 ; конец конечного модуля
<=
Оператор в Verilog является еще одним аспектом его быть язык описания аппаратных средств , в отличие от нормального процедурного языка. Это называется «неблокирующим» назначением. Его действие не регистрируется до тех пор, пока не будет выполнен блок always. Это означает, что порядок присваиваний не имеет значения и даст один и тот же результат: flop1 и flop2 будут менять местами значения каждые часы.
Другой оператор присваивания =
называется блокирующим присваиванием. Когда =
используется присваивание, в целях логики целевая переменная обновляется немедленно. В приведенном выше примере, если бы в операторах использовался =
блокирующий оператор вместо <=
, flop1 и flop2 не поменялись местами. Вместо этого, как и в традиционном программировании, компилятор понимает, что нужно просто установить flop1 равным flop2 (и впоследствии проигнорировать избыточную логику, чтобы установить flop2 равным flop1).
Ниже приведен пример схемы счетчика :
модуль Div20x ( rst , clk , cet , cep , count , tc ); // НАЗВАНИЕ 'Divide-by-20 Counter with enable ' // enable CEP - это только включение часов // enable CET - включение часов и // разрешение вывода TC // счетчик с использованием языка Verilog размер параметра = 5 ; длина параметра = 20 ; input rst ; // Эти входы / выходы представляют input clk ; // подключения к модулю. ввод цет ; входной cep ;output [ size - 1 : 0 ] count ; выход tc ;рег [ размер - 1 : 0 ] количество ; // Сигналы, назначенные // внутри всегда // (или начального) блока // должны быть типа regпроволока тс ; // Остальные сигналы относятся к типу wire// Оператор always ниже - это оператор параллельного // выполнения, который // выполняется каждый раз, когда сигналы // сначала или clk переходят с низкого на высокийвсегда @ ( posedge CLK или posedge сначала ) , если ( первый ) // Это вызывает сброс CNTR счетчик <= { размер { 1 «b0 }}; else if ( cet && cep ) // Включает оба true begin if ( count == length - 1 ) count <= { size { 1 'b0 }}; иначе count <= count + 1 'b1 ; конец// значение tc присваивается непрерывно // значение выражения assign tc = ( cet && ( count == length - 1 ));конечный модуль
Пример задержек:
... рег a , b , c , d ; проволока е ; ... всегда @ ( b или e ) begin a = b & e ; б = а | б ; # 5 c = b ; d = # 6 c ^ e ; конец
Всегда пункт выше иллюстрирует другой тип способа использования, т.е. он выполняет каждый раз , когда какой - либо из объектов в списке ( б или е ) изменения. Когда одно из этих изменений, a немедленно присваивается новое значение, а из-за назначения блокировки, b впоследствии назначается новое значение (с учетом нового значения a ). После задержки в 5 единиц времени c присваивается значение b, а значение c ^ e спрятано в невидимом хранилище. Затем, еще через 6 единиц времени, d присваивается значение, которое было спрятано.
Сигналы, которые управляются изнутри процесса (начальный или всегда блокируемый), должны иметь тип reg . Сигналы, поступающие извне в процесс, должны быть типа wire . Ключевое слово reg не обязательно подразумевает регистр оборудования.
Определение констант [ править ]
Определение констант в Verilog поддерживает добавление параметра ширины. Основной синтаксис:
< Ширина в битах > '< базовая буква > < число >
Примеры:
- 12'h123 - 123 в шестнадцатеричной системе (с использованием 12 бит)
- 20'd44 - Десятичное число 44 (с использованием 20 бит - автоматическое расширение 0)
- 4'b1010 - двоичный 1010 (с использованием 4 бита)
- 6'o77 - Octal 77 (с использованием 6 бит)
Синтезируемые конструкции [ править ]
Verilog широко считается HDL (языком описания оборудования). В Verilog есть несколько операторов, не имеющих аналогов на реальном оборудовании, например, $ display. Следовательно, большая часть языка не может использоваться для описания оборудования. Это могло бы означать, что само определение языка Verilog в целом должно быть должным образом перехарактеризовано. Однако представленные здесь примеры представляют собой классическое (и ограниченное) подмножество языка, которое имеет прямое отображение на реальные ворота.
// Примеры мультиплексирования - три способа сделать то же самое.// В первом примере используется непрерывное присвоение wire out ; назначить out = sel ? а : б ;// во втором примере используется процедура // для выполнения того же самого.reg out ; всегда @ ( a или b или sel ) begin case ( sel ) 1 'b0 : out = b ; 1 'b1 : out = a ; конец регистра конец// Наконец, вы можете использовать if / else в // процедурной структуре. reg out ; всегда @ ( a или b или sel ) if ( sel ) out = a ; иначе out = b ;
Следующая интересная конструкция - прозрачная защелка ; он будет передавать входной сигнал на выход, когда стробирующий сигнал установлен на «сквозной», и захватывает вход и сохраняет его при переходе стробирующего сигнала в «удержание». Выход будет оставаться стабильным независимо от входного сигнала, пока гейт установлен в положение «удержание». В приведенном ниже примере «сквозным» уровнем шлюза будет, когда значение предложения if истинно, т. Е. Gate = 1. Считывается, что «если вентиль истинен, шум передается в latch_out непрерывно». Если предложение if ложно, последнее значение в latch_out останется и не зависит от значения din.
// Пример прозрачной защелкиreg latch_out ; всегда @ ( ворота или дин ) if ( ворота ) latch_out = din ; // Прохождение состояния // Обратите внимание, что else здесь не требуется. Переменная // latch_out будет следовать за значением din, пока // ворота находятся на высоком уровне. Когда гейт становится низким, latch_out останется постоянным.
Флип-флоп является следующим существенным шаблоном; в Verilog D-флоп самый простой, и его можно смоделировать как:
reg q ; всегда @ ( posedge clk ) q <= d ;
В этом примере важно отметить использование неблокирующего присваивания. Основное правило заключается в использовании <= , когда есть posedge или negedge заявление в пункте всегда.
Вариантом D-флопа является асинхронный сброс; существует соглашение, что состояние сброса будет первым условием if в операторе.
reg q ; всегда @ ( posedge clk или posedge reset ) if ( reset ) q <= 0 ; иначе q <= d ;
Следующий вариант включает как условие асинхронного сброса, так и условие асинхронной установки; снова в игру вступает соглашение, т.е. за сроком сброса следует установленный срок.
reg q ; всегда @ ( posedge clk или posedge reset или posedge set ) if ( reset ) q <= 0 ; иначе, если ( установить ) q <= 1 ; иначе q <= d ;
Примечание. Если эта модель используется для моделирования триггера Set / Reset, могут возникнуть ошибки моделирования. Рассмотрим следующую тестовую последовательность событий. 1) reset переходит в высокий уровень 2) clk переходит в высокий уровень 3) set становится высоким 4) clk снова становится высоким 5) reset становится низким, а затем 6) set становится низким. Предположим, что нет нарушений установки и удержания.
В этом примере оператор always @ сначала будет выполняться, когда возникает нарастающий фронт сброса, который установит q в значение 0. В следующий раз, когда выполняется блок always, будет нарастающий фронт clk, который снова будет поддерживать q на значении 0. Затем всегда выполняется блок, когда устанавливается высокий уровень, который, поскольку сброс является высоким, заставляет q оставаться на 0. Это условие может быть правильным, а может и не быть правильным, в зависимости от фактического триггера. Однако это не главная проблема данной модели. Обратите внимание, что когда сброс становится низким, этот набор все еще высокий. В реальном триггере это приведет к тому, что выходной сигнал перейдет в 1. Однако в этой модели этого не произойдет, потому что блок всегда запускается по нарастающим фронтам установки и сброса, а не по уровням. Для установки / сброса триггеров может потребоваться другой подход.
Последний базовый вариант - это тот, который реализует D-флоп с мультиплексором, подающим его вход. Мультиплексор имеет d-вход и обратную связь от самого флопа. Это позволяет использовать функцию стробированной нагрузки.
// Базовая структура с ЯВНОЙ обратной связью всегда @ ( posedge clk ) if ( gate ) q <= d ; иначе q <= q ; // явный путь обратной связи// Более общая структура ПРЕДПОЛАГАЕТ, что обратная связь присутствует // Это безопасное предположение, поскольку // аппаратный компилятор интерпретирует ее именно так. Эта структура // очень похожа на защелку. Различия заключаются в // '' '@ (posedge clk)' '' и неблокирующем '' '<=' '' // всегда @ ( posedge clk ) if ( gate ) q <= d ; // мультиплексор "else" подразумевается
Обратите внимание, что в этом описании нет «начальных» блоков. В этой структуре есть разделение между инструментами синтеза FPGA и ASIC. Инструменты FPGA позволяют использовать начальные блоки, в которых устанавливаются значения reg, вместо использования сигнала «сброса». Инструменты синтеза ASIC не поддерживают такое утверждение. Причина в том, что исходное состояние FPGA загружается в таблицы памяти FPGA. ASIC - это реальная аппаратная реализация.
Начальный и всегда [ править ]
Есть два разных способа объявить процесс Verilog. Это всегда и начальные ключевые слова. Всегда ключевое слово указывает на выбеге процесс. Начальное ключевое слово указывает на процесс выполняет ровно один раз. Обе конструкции начинают выполнение во время симулятора 0, и обе выполняются до конца блока. Как только блок всегда достигает своего конца, он переносится (снова). Распространенное заблуждение - полагать, что начальный блок будет выполняться раньше, чем всегда. Фактически, лучше рассматривать начальный -блок как частный случай всегда -блока, который завершается после первого завершения.
// Примеры: initial begin a = 1 ; // Присваиваем значение регистру в момент времени 0 # 1 ; // Ожидание 1 единица времени b = a ; // Присваиваем значение reg a для reg b endalways @ ( a или b ) // Каждый раз, когда a или b ИЗМЕНЯЕТСЯ, запускаем процесс begin if ( a ) c = b ; иначе d = ~ b ; end // Закончили с этим блоком, теперь вернемся к началу (т.е. @ event-control)always @ ( posedge a ) // Запускаем всякий раз, когда reg a имеет низкий уровень изменения a <= b ;
Это классические варианты использования этих двух ключевых слов, но есть еще два важных дополнительных использования. Наиболее распространенным из них является ключевое слово always без списка чувствительности @ (...) . Всегда можно использовать, как показано ниже:
always begin // Всегда начинает выполнение в момент времени 0 и НИКОГДА не останавливается clk = 0 ; // Установить clk на 0 # 1 ; // Ожидание 1 раз clk = 1 ; // Установить clk на 1 # 1 ; // Ждем 1 раз в конце блока // Продолжаем выполнение - так что продолжаем обратно в начало начала
Всегда ключевое слово действует аналогично языку C конструкции в то время как (1) {..} в том смысле , что она будет выполнять вечно.
Другое интересное исключение - использование ключевого слова initial с добавлением ключевого слова forever .
Ниже пример функционально идентичен всегда выше пример.
начальный навсегда // Начало в момент времени 0 и повторение начала / конца навсегда begin clk = 0 ; // Установить clk на 0 # 1 ; // Ожидание 1 раз clk = 1 ; // Установить clk на 1 # 1 ; // Ожидание 1 окончания единицы времени
Вилка / присоединение [ править ]
Вилка / нарисуйте пары используются Verilog для создания параллельных процессов. Все операторы (или блоки) между парой fork / join начинают выполнение одновременно после того, как поток выполнения достигает вилки . Выполнение продолжается после объединения после завершения самого длительного оператора или блока между ветвлением и объединением .
начальная вилка $ write ( "A" ); // Распечатать char A $ write ( "B" ); // Вывести char B begin # 1 ; // Ожидание 1 единица времени $ write ( "C" ); // Печать char C end join
Как написано выше, можно распечатать либо последовательности «ABC», либо «BAC». Порядок симуляции между первой $ write и второй $ write зависит от реализации симулятора и может целенаправленно изменяться симулятором. Это позволяет моделировать как случайные состояния гонки, так и намеренное недетерминированное поведение.
Обратите внимание, что VHDL не может динамически порождать несколько процессов, таких как Verilog. [7]
Условия гонки [ править ]
Порядок выполнения не всегда гарантируется в Verilog. Лучше всего это можно проиллюстрировать на классическом примере. Рассмотрим фрагмент кода ниже:
начальный a = 0 ;начальный b = a ;начальное начало # 1 ; $ display ( "Значение a =% d Значение b =% d" , a , b ); конец
Что будет напечатано для значений a и b? В зависимости от порядка выполнения начальных блоков это может быть ноль и ноль, или поочередно ноль и какое-то другое произвольное неинициализированное значение. Оператор $ display всегда будет выполняться после завершения обоих блоков присваивания из-за задержки №1.
Операторы [ править ]
Примечание. Эти операторы не показаны в порядке приоритета.
Тип оператора | Символы оператора | Операция выполнена |
---|---|---|
Побитовое | ~ | Побитовое НЕ (дополнение до 1) |
& | Побитовое И | |
| | Побитовое ИЛИ | |
^ | Побитовое исключающее ИЛИ | |
~ ^ или ^ ~ | Побитовое исключающее ИЛИ | |
Логический | ! | НЕТ |
&& | А ТАКЖЕ | |
|| | ИЛИ ЖЕ | |
Снижение | & | Уменьшение И |
~ & | Уменьшение NAND | |
| | Снижение ИЛИ | |
~ | | Сокращение NOR | |
^ | Уменьшение XOR | |
~ ^ или ^ ~ | Уменьшение XNOR | |
Арифметика | + | Добавление |
- | Вычитание | |
- | 2 дополнения | |
* | Умножение | |
/ | Разделение | |
** | Возведение в степень (* Verilog-2001) | |
Реляционный | > | Больше чем |
< | Меньше, чем | |
> = | Больше или равно | |
<= | Меньше или равно | |
== | Логическое равенство (битовое значение 1'bX исключено из сравнения) | |
знак равно | Логическое неравенство (битовое значение 1'bX удалено из сравнения) | |
=== | Логическое равенство с четырьмя состояниями (битовое значение 1'bX принимается как буквальное) | |
! == | Логическое неравенство с 4 состояниями (битовое значение 1'bX принимается как буквальное) | |
Сдвиг | >> | Логический сдвиг вправо |
<< | Логический сдвиг влево | |
>>> | Арифметический сдвиг вправо (* Verilog-2001) | |
<<< | Арифметический сдвиг влево (* Verilog-2001) | |
Конкатенация | {,} | Конкатенация |
Репликация | {п {м}} | Повторять значение m n раз |
Условный | ? : | Условный |
Четырехзначная логика [ править ]
Стандарт IEEE 1364 определяет четырехзначную логику с четырьмя состояниями: 0, 1, Z ( высокий импеданс ) и X (неизвестное логическое значение). Для конкурирующего VHDL существует специальный стандарт многозначной логики IEEE 1164 с девятью уровнями. [8]
Системные задачи [ править ]
Доступны системные задачи для обработки простых операций ввода-вывода и различных функций проектных измерений во время моделирования. Все системные задачи имеют префикс $, чтобы отличать их от пользовательских задач и функций. В этом разделе представлен краткий список наиболее часто используемых задач. Это далеко не полный список.
- $ display - выводить на экран строку, за которой следует автоматический перевод строки.
- $ write - выводить на экран строку без новой строки.
- $ swrite - Печатать в переменную строку без новой строки.
- $ sscanf - считывает из переменной строку с заданным форматом. (* Verilog-2001)
- $ fopen - Открыть дескриптор файла (чтение или запись)
- $ fdisplay - печатает строку из файла, за которой следует автоматический перевод строки.
- $ fwrite - напечатать строку без новой строки.
- $ fscanf - считывает из файла строку с заданным форматом. (* Verilog-2001)
- $ fclose - закрыть и отпустить дескриптор открытого файла.
- $ readmemh - Считывает содержимое шестнадцатеричного файла в массив памяти.
- $ readmemb - Считывает содержимое двоичного файла в массив памяти.
- $ monitor - Распечатать все перечисленные переменные при любом изменении значения.
- $ time - Значение текущего времени моделирования.
- $ dumpfile - Объявить имя выходного файла в формате VCD ( Value Change Dump ).
- $ dumpvars - включить и сбросить переменные.
- $ dumpports - Включить и выгрузить переменные в формате Extended-VCD.
- $ random - возвращает случайное значение.
Программный языковой интерфейс (PLI) [ править ]
PLI предоставляет программисту механизм для передачи управления от Verilog программной функции, написанной на языке C. Он официально объявлен устаревшим IEEE Std 1364-2005 в пользу нового процедурного интерфейса Verilog , который полностью заменяет PLI.
PLI (теперь VPI) позволяет Verilog сотрудничать с другими программами , написанных на языке C , такие как тест жгуты , набор инструкций тренажеры одного микроконтроллера , отладчики , и так далее. Например, он предоставляет функции C tf_putlongp()
и tf_getlongp()
которые используются для записи и чтения аргумента текущей задачи или функции Verilog соответственно.
Программное обеспечение для моделирования [ править ]
Для получения информации о симуляторах Verilog см. Список симуляторов Verilog .
См. Также [ править ]
Дополнительные материалы [ править ]
- Список симуляторов Verilog
- Средство просмотра осциллограмм
- Интерфейс прямого программирования SystemVerilog (DPI)
- Процедурный интерфейс Verilog (VPI)
Похожие языки [ править ]
- VHDL
- SystemC - библиотека C ++, обеспечивающая семантику HDL, управляемую событиями
- SystemVerilog
- OpenVera
- e (язык проверки)
- Язык спецификации свойств
- Chisel , язык с открытым исходным кодом, созданный на основе Scala.
Генераторы Verilog [ править ]
Ссылки [ править ]
- ^ Нильсен А.А., Дер Б.С., Шин - J, Vaidyanathan Р, Paralanov В, Strychalski Е.А., Росс Д, Денсмор Д, Воигт СА (2016). «Автоматизация проектирования генетических схем» . Наука . 352 (6281): aac7341. DOI : 10.1126 / science.aac7341 . PMID 27034378 .
- ^ 1800-2vhhu017 - Стандарт IEEE для SystemVerilog - Унифицированный язык проектирования, спецификации и проверки оборудования
- ^ "Изобретатель Verilog получает награду Кауфмана EDA" . EE Times . 7 ноября 2005 г.
- ^ Хуанг, Чи-Лай; Су, SYH "Подходы к проектированию автоматизированных логических систем с использованием языка описания оборудования". Труды Международного компьютерного симпозиума 1980 года, Тайбэй, Тайвань, декабрь 1980 года . С. 772–79O. OCLC 696254754 .
- ^ "Устная история Филипа Рэймонда" Фил "Мурби" (PDF) . Музей истории компьютеров. 22 апреля 2013. С. 23–25.
- ^ 1800-2017 - Стандарт IEEE для SystemVerilog - Унифицированный язык проектирования, спецификации и проверки оборудования
- ^ Каммингс, Клиффорд Э. (2003). "SystemVerilog - это слияние Verilog и VHDL?" (PDF) . SNUG Бостон 2003.
- ^ Миллер, Д. Майкл; Торнтон, Митчелл А. (2008). Многозначная логика: концепции и представления . Синтез лекций по цифровым схемам и системам. 12 . Морган и Клейпул. ISBN 978-1-59829-190-2.
- Заметки
- 1364-2005 - Стандарт IEEE для языка описания оборудования Verilog . 2006. DOI : 10,1109 / IEEESTD.2006.99495 . ISBN 0-7381-4850-4.
- 1364-2001 - Язык описания оборудования Verilog стандарта IEEE . 2001. DOI : 10,1109 / IEEESTD.2001.93352 . ISBN 0-7381-2826-0.
- 61691-4-2004 - Поведенческие языки IEC / IEEE - Часть 4: Язык описания аппаратного обеспечения Verilog (принятие стандарта IEEE 1364-2001) . 2004. DOI : 10,1109 / IEEESTD.2004.95753 . ISBN 2-8318-7675-3.
- 1364-1995 - Стандартный язык описания оборудования IEEE на основе языка описания оборудования Verilog (R) . 1996. DOI : 10,1109 / IEEESTD.1996.81542 . ISBN 978-0-7381-3065-1.
- Томас, Дональд Э .; Мурби, Филип Р. (2013). Язык описания аппаратного обеспечения Verilog® (3-е изд.). Springer. ISBN 978-1475724646.
- [1] Cornell ECE576 Курс, иллюстрирующий конструкции синтеза.
- Бержерон, Яник (2012). Написание тестовых стендов: функциональная проверка моделей HDL (2-е изд.). Springer. ISBN 978-1-4615-0302-6. (Библия HDL Testbench)
Внешние ссылки [ править ]
В Викиучебнике есть книга на тему: Программируемая логика / Verilog. |
Разработка стандартов [ править ]
- IEEE Std 1364-2005 - официальный стандарт Verilog 2005 (не бесплатно).
- IEEE P1364 - рабочая группа для Verilog (неактивна).
- IEEE P1800 - Рабочая группа по SystemVerilog (заменяет выше).
- Синтаксис Verilog - описание синтаксиса в форме Бэкуса-Наура . Это предшествует стандарту IEEE-1364.
- Verilog-AMS - расширения смешанных сигналов Accellera для Verilog
Расширения языка [ править ]
- Verilog AUTOs - мета-комментарий с открытым исходным кодом, используемый отраслевыми IP для упрощения поддержки кода Verilog.