Verilog - Verilog

Verilog
ПарадигмаСтруктурированный
Впервые появился1984 (1984)
Стабильный выпуск
IEEE 1364-2005 / 9 ноября 2005 г.; 15 лет назад (2005-11-09)
Печатная дисциплинаСтатический, слабый
Расширения имени файла.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 или СБИС технологии. Дальнейшие манипуляции со списком соединений в конечном итоге приводят к созданию схемы изготовления схемы (такой как набор фото маски для ASIC или битовый поток файл для FPGA ).

История

Начало

Verilog был создан Прабху Гоэль, Фил Мурби, Чи-Лай Хуанг и Дуглас Вармке в период с конца 1983 по начало 1984 года.[3] Чи-Лай Хуанг ранее работал над описанием оборудования LALSD, языком, разработанным профессором S.Y.H. Су за его кандидатскую работу.[4] Правообладателем этого процесса, в то время являвшегося собственностью, была компания «Автоматизированные комплексные системы проектирования» (позже переименованная в Автоматизация проектирования шлюзов в 1985 г.). Автоматизация проектирования шлюзов была приобретена Системы дизайна Cadence в 1990 году. Cadence теперь имеет полные права собственности на Verilog от Gateway и Verilog-XL, HDL-симулятор, который стал де-факто стандартом (Verilog логические тренажеры ) на следующее десятилетие. Первоначально Verilog предназначался только для описания и моделирования; автоматический синтез подмножеств языка в физически реализуемые структуры (ворота и т. д.) был разработан после того, как язык получил широкое распространение.

Verilog - это сочетание слов «проверка» и «логика».[5]

Verilog-95

С ростом успеха VHDL в то время Cadence решила сделать этот язык доступным для открытых стандартизация. Cadence передала Verilog в общественное достояние под Открыть Verilog International (OVI) (теперь известный как Accellera ) организация. Позже Verilog был представлен IEEE и стал стандартом IEEE 1364-1995, обычно называемым Verilog-95.

В то же время Cadence инициировала создание Verilog-A обеспечить поддержку стандартов в аналоговом симуляторе Призрак. 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 может создать экземпляр массива экземпляров с контролем над связностью отдельных экземпляров. Файловый ввод-вывод был улучшен за счет нескольких новых системных задач. И, наконец, было введено несколько синтаксических дополнений для улучшения читаемости кода (например, always, @ *, переопределение именованного параметра, объявление заголовка функции / задачи / модуля в стиле C).

Verilog-2001 - это версия Verilog, поддерживаемая большинством коммерческих EDA программные пакеты.

Verilog 2005

Не путать с SystemVerilog, Verilog 2005 (IEEE Стандарт 1364-2005) состоит из незначительных исправлений, уточнений спецификаций и нескольких новых языковых функций (таких как ключевое слово uwire).

Отдельная часть стандарта Verilog, Verilog-AMS, пытается интегрировать моделирование аналоговых и смешанных сигналов с традиционным Verilog.

SystemVerilog

Появление языки проверки оборудования такие как OpenVera, и Verisity's электронный язык поддержал разработку 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]

пример

Простой пример двух шлепки следует:

модуль высший уровень(Часы,сброс настроек);  ввод Часы;  ввод сброс настроек;  рег flop1;  рег флоп2;  всегда @ (поза сброс настроек или поза Часы)    если (сброс настроек)      начать        flop1 <= 0;        флоп2 <= 1;      конец    еще      начать        flop1 <= флоп2;        флоп2 <= flop1;      конецконечный модуль

В <= Оператор в Verilog - это еще один аспект того, что он является языком описания оборудования, в отличие от обычного процедурного языка. Это называется «неблокирующим» назначением. Его действие не регистрируется до тех пор, пока не будет выполнен блок always. Это означает, что порядок присвоений не имеет значения и даст один и тот же результат: flop1 и flop2 будут менять местами значения каждые часы.

Другой оператор присваивания = называется блокирующим назначением. Когда = присваивание используется в целях логики, целевая переменная обновляется немедленно. Если бы в приведенном выше примере использовались операторы = блокирующий оператор вместо <=, flop1 и flop2 не поменялись местами. Вместо этого, как и в традиционном программировании, компилятор понимает, что нужно просто установить flop1 равным flop2 (и впоследствии игнорировать избыточную логику, чтобы установить flop2 равным flop1).

Пример счетчик Схема следующая:

модуль Div20x (первый, clk, cet, белый гриб, считать, tc);// НАЗВАНИЕ 'Счетчик деления на 20 с включениями'// включить CEP - только часы// enable CET - это включение часов и// включает вывод TC// счетчик на языке Verilogпараметр размер = 5;параметр длина = 20;ввод первый; // Эти входы / выходы представляютввод clk; // подключения к модулю.ввод cet;ввод белый гриб;вывод [размер-1:0] считать;вывод tc;рег [размер-1:0] считать; // Назначенные сигналы                      // внутри всегда                      // (или начальный) блок                      // должно быть типа regпровод tc; // Остальные сигналы имеют тип провода// Приведенный ниже оператор always является параллельным// оператор выполнения, который// выполняет в любое время сигналы// сначала или clk переход от низкого к высокомувсегда @ (поза clk или поза первый)  если (первый) // Это вызывает сброс cntr    считать <= {размер{1'b0}};  еще  если (cet && белый гриб) // Включает оба значения true    начать      если (считать == длина-1)        считать <= {размер{1'b0}};      еще        считать <= считать + 1'b1;    конец// значение tc присваивается непрерывно// значение выраженияназначать tc = (cet && (считать == длина-1));конечный модуль

Пример задержек:

...рег а, б, c, d;провод е;...всегда @(б или е)  начать    а = б & е;    б = а | б;    #5 c = б;    d = #6 c ^ е;  конец

В всегда Вышеупомянутое предложение иллюстрирует другой тип метода использования, то есть он выполняется всякий раз, когда любой из объектов в списке ( б или е) изменения. Когда одно из этих изменений, а немедленно присваивается новое значение, и из-за назначения блокировки, б впоследствии присваивается новое значение (с учетом нового значения а). После задержки в 5 единиц времени, c присвоено значение б и ценность с ^ е спрятан в невидимом магазине. Затем, еще через 6 единиц времени, d присваивается значение, которое было спрятано.

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

Определение констант

Определение констант в Verilog поддерживает добавление параметра ширины. Базовый синтаксис:

<Ширина в битах>'<базовая буква><количество>

Примеры:

  • 12'h123 - 123 в шестнадцатеричной системе (с использованием 12 бит)
  • 20'd44 - Десятичное число 44 (с использованием 20 бит - автоматическое расширение 0)
  • 4'b1010 - двоичный 1010 (с использованием 4 бита)
  • 6'o77 - Octal 77 (с использованием 6 бит)

Синтезируемые конструкции

В Verilog есть несколько операторов, не имеющих аналогов на реальном оборудовании, например $ display. Следовательно, большая часть языка не может использоваться для описания оборудования. Представленные здесь примеры являются классическим подмножеством языка, имеющим прямое отображение на реальные ворота.

// Примеры мультиплексирования - три способа сделать то же самое.// В первом примере используется непрерывное присвоениепровод вне;назначать вне = сел ? а : б;// во втором примере используется процедура// для того же.рег вне;всегда @(а или б или сел)  начать    кейс(сел)      1'b0: вне = б;      1'b1: вне = а;    конец  конец// Наконец, вы можете использовать if / else в// процедурная структура.рег вне;всегда @(а или б или сел)  если (сел)    вне = а;  еще    вне = б;

Следующая интересная структура - это прозрачная защелка; он будет передавать вход на выход, когда стробирующий сигнал установлен на «проход», и захватывает вход и сохраняет его при переходе стробирующего сигнала в «удержание». Выход будет оставаться стабильным независимо от входного сигнала, пока гейт установлен в положение «удержание». В приведенном ниже примере «сквозным» уровнем шлюза будет, когда значение предложения if истинно, то есть gate = 1. Это читается: «если вентиль истинен, шум передается в latch_out непрерывно». Если предложение if ложно, последнее значение в latch_out останется и не зависит от значения din.

// Пример прозрачной защелкирег latch_out;всегда @(Ворота или шум)  если(Ворота)    latch_out = шум; // Прохождение состояния    // Обратите внимание, что else здесь не требуется. Переменная    // latch_out будет следовать за значением din, пока ворота    // высоко. Когда гейт становится низким, latch_out останется постоянным.

В резкий поворот следующий значимый шаблон; в Verilog D-флоп является самым простым, и его можно смоделировать как:

рег q;всегда @(поза clk)  q <= d;

В этом примере важно отметить использование неблокирующего присваивания. Базовый практическое правило использовать <= когда есть поза или negedge заявление в предложении always.

Вариант D-флопа с асинхронным сбросом; существует соглашение, что состояние сброса будет первым условием if в операторе.

рег q;всегда @(поза clk или поза сброс настроек)  если(сброс настроек)    q <= 0;  еще    q <= d;

Следующий вариант включает в себя как асинхронный сброс, так и условие асинхронной установки; снова в игру вступает соглашение, т.е. за сроком сброса следует установленный срок.

рег q;всегда @(поза clk или поза сброс настроек или поза набор)  если(сброс настроек)    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-вход и обратную связь от самого флопа. Это позволяет использовать функцию стробированной нагрузки.

// Базовая структура с ЯВНОЙ обратной связьювсегда @(поза clk)  если(Ворота)    q <= d;  еще    q <= q; // явный путь обратной связи// Более общая структура ПРЕДНАЗНАЧЕНА, что обратная связь присутствует// Это безопасное предположение, поскольку именно так// аппаратный компилятор его интерпретирует. Эта структура// очень похож на защелку. Отличия заключаются в// '' '@ (posedge clk)' '' и неблокирующий '' '<=' ''//всегда @(поза clk)  если(Ворота)    q <= d; // мультиплексор "else" подразумевается

Обратите внимание, что в этом описании нет «начальных» блоков. В этой структуре есть разделение между инструментами синтеза FPGA и ASIC. Инструменты FPGA позволяют использовать начальные блоки, в которых устанавливаются значения reg, вместо использования сигнала «сброса». Инструменты синтеза ASIC не поддерживают такое утверждение. Причина в том, что исходное состояние FPGA загружается в таблицы памяти FPGA. ASIC - это реальная аппаратная реализация.

Первоначально и всегда

Есть два разных способа объявить процесс Verilog. Эти всегда и начальный ключевые слова. В всегда ключевое слово указывает на автономный процесс. В начальный ключевое слово указывает, что процесс выполняется ровно один раз. Обе конструкции начинают выполнение во время симулятора 0, и обе выполняются до конца блока. Однажды всегда блок подошел к концу, он переносится (снова). Распространенное заблуждение - полагать, что начальный блок будет выполняться раньше, чем всегда. На самом деле лучше подумать о начальный-блок как частный случай всегда-block, который завершается после первого завершения.

//Примеры:начальный  начать    а = 1; // Присваиваем значение reg a в момент времени 0    #1; // Ждем 1 единицу времени    б = а; // Присваиваем значение reg a для reg b  конецвсегда @(а или б) // Каждый раз, когда a или b ИЗМЕНЯЕТСЯ, запускаем процессначать  если (а)    c = б;  еще    d = ~б;конец // Закончили с этим блоком, теперь вернемся к началу (т.е. @ event-control)всегда @(поза а)// Запускаем всякий раз, когда у reg a есть изменение от низкого до высокого  а <= б;

Это классические варианты использования этих двух ключевых слов, но есть еще два важных дополнительных использования. Наиболее распространенным из них является всегда ключевое слово без @(...) список чувствительности. Всегда можно использовать, как показано ниже:

всегда  начать // Всегда начинает выполнение в момент времени 0 и НИКОГДА не останавливается    clk = 0; // Устанавливаем clk на 0    #1; // Ждем 1 единицу времени    clk = 1; // Устанавливаем clk на 1    #1; // Ждем 1 единицу времени  конец // Продолжаем выполнение - так что продолжаем обратно в начало начала

В всегда ключевое слово действует аналогично конструкции языка C в то время как (1) {..} в том смысле, что он будет выполняться вечно.

Другое интересное исключение - использование начальный ключевое слово с добавлением навсегда ключевое слово.

Пример ниже функционально идентичен всегда пример выше.

начальный навсегда // Начало в момент времени 0 и повторение начала / конца навсегда  начать    clk = 0; // Установить clk на 0    #1; // Ждем 1 единицу времени    clk = 1; // Устанавливаем clk на 1    #1; // Ждем 1 единицу времени  конец

Вилка / присоединение

В вилка / присоединение пара используются Verilog для создания параллельных процессов. Все операторы (или блоки) между парой fork / join начинают выполнение одновременно после того, как поток выполнения достигает вилка. Исполнение продолжается после присоединиться после завершения самого длительного оператора или блока между вилка и присоединиться.

начальный  вилка    $ написать("А"); // Печать char A    $ написать("B"); // Печать char B    начать      #1; // Ждем 1 единицу времени      $ написать("C"); // Выводим char C    конец  присоединиться

Как написано выше, можно распечатать последовательности «ABC» или «BAC». Порядок симуляции между первой записью и второй записью зависит от реализации симулятора и может целенаправленно изменяться симулятором. Это позволяет моделировать как случайные состояния гонки, так и намеренное недетерминированное поведение.

Обратите внимание, что VHDL не может динамически порождать несколько процессов, таких как Verilog.[7]

Условия гонки

Порядок выполнения не всегда гарантируется в Verilog. Лучше всего это можно проиллюстрировать на классическом примере. Рассмотрим фрагмент кода ниже:

начальный  а = 0;начальный  б = а;начальный  начать    #1;    $ display("Значение a =% d Значение b =% d",а,б);  конец

Что будет напечатано для значений a и b? В зависимости от порядка выполнения начальных блоков это может быть ноль и ноль, или поочередно ноль и какое-то другое произвольное неинициализированное значение. Оператор $ display всегда будет выполняться после завершения обоих блоков присваивания из-за задержки №1.

Операторы

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

Тип оператораСимволы оператораОперация выполнена
Побитовое~Побитовое НЕ (дополнение до 1)
&Побитовое И
|Побитовое ИЛИ
^Побитовое исключающее ИЛИ
~ ^ или ^ ~Побитовое исключающее ИЛИ
Логический!НЕ
&&И
||ИЛИ
Сокращение&Уменьшение И
~&Уменьшение NAND
|Снижение ИЛИ
~|Сокращение NOR
^Уменьшение XOR
~ ^ или ^ ~Уменьшение XNOR
Арифметика+Дополнение
-Вычитание
-2 дополнения
*Умножение
/Деление
**Возведение в степень (* Verilog-2001)
Реляционный>Лучше чем
<Меньше, чем
>=Больше или равно
<=Меньше или равно
==Логическое равенство (битовое значение 1'bX исключено из сравнения)
!=Логическое неравенство (битовое значение 1'bX удалено из сравнения)
===Логическое равенство с 4 состояниями (битовое значение 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 (Дамп изменения значения ) формат имени выходного файла.
  • $ 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

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

  1. ^ Нильсен А.А., Дер Б.С., Шин Дж., Вайдьянатан П., Параланов В., Стричальский Е.А., Росс Д., Денсмор Д., Войт, Калифорния (2016). «Автоматизация проектирования генетических схем». Наука. 352 (6281): aac7341. Дои:10.1126 / science.aac7341. PMID  27034378.
  2. ^ 1800-2vhhu017 - Стандарт IEEE для SystemVerilog - Единый язык проектирования, спецификации и проверки оборудования
  3. ^ "Изобретатель Verilog получает награду Кауфмана EDA". EE Times. 7 ноября 2005 г.
  4. ^ Хуанг, Чи-Лай; Су, С.Ю. «Подходы к проектированию компьютерных логических систем с использованием языка описания оборудования». Материалы Международного компьютерного симпозиума 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.
Заметки

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

Разработка стандартов

Расширения языка

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