Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

// Примеры мультиплексирования - три способа сделать то же самое.// В первом примере используется непрерывное присвоение 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.

Операторы [ править ]

Примечание. Эти операторы не показаны в порядке приоритета.

Четырехзначная логика [ править ]

Стандарт 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 [ править ]

Ссылки [ править ]

  1. ^ Нильсен А.А., Дер Б.С., Шин - J, Vaidyanathan Р, Paralanov В, Strychalski Е.А., Росс Д, Денсмор Д, Воигт СА (2016). «Автоматизация проектирования генетических схем» . Наука . 352 (6281): aac7341. DOI : 10.1126 / science.aac7341 . PMID  27034378 .
  2. ^ 1800-2vhhu017 - Стандарт IEEE для SystemVerilog - Унифицированный язык проектирования, спецификации и проверки оборудования
  3. ^ "Изобретатель Verilog получает награду Кауфмана EDA" . EE Times . 7 ноября 2005 г.
  4. ^ Хуанг, Чи-Лай; Су, SYH "Подходы к проектированию автоматизированных логических систем с использованием языка описания оборудования". Труды Международного компьютерного симпозиума 1980 года, Тайбэй, Тайвань, декабрь 1980 года . С. 772–79O. OCLC 696254754 . 
  5. ^ "Устная история Филипа Рэймонда" Фил "Мурби" (PDF) . Музей истории компьютеров. 22 апреля 2013. С. 23–25.
  6. ^ 1800-2017 - Стандарт IEEE для SystemVerilog - Унифицированный язык проектирования, спецификации и проверки оборудования
  7. ^ Каммингс, Клиффорд Э. (2003). "SystemVerilog - это слияние Verilog и VHDL?" (PDF) . SNUG Бостон 2003.
  8. ^ Миллер, Д. Майкл; Торнтон, Митчелл А. (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)

Внешние ссылки [ править ]

Разработка стандартов [ править ]

  • IEEE Std 1364-2005 - официальный стандарт Verilog 2005 (не бесплатно).
  • IEEE P1364 - рабочая группа для Verilog (неактивна).
  • IEEE P1800 - Рабочая группа по SystemVerilog (заменяет выше).
  • Синтаксис Verilog - описание синтаксиса в форме Бэкуса-Наура . Это предшествует стандарту IEEE-1364.
  • Verilog-AMS - расширения смешанных сигналов Accellera для Verilog

Расширения языка [ править ]

  • Verilog AUTOs - мета-комментарий с открытым исходным кодом, используемый отраслевыми IP для упрощения поддержки кода Verilog.