Верилог
Парадигма | Структурированный |
---|---|
Разработано | Прабху Гоэл , Фил Мурби и Чи-Лай Хуан |
Разработчик | IEEE |
Впервые появился | 1984 |
Стабильная версия | ИИЭР 1800-2023
/ 6 декабря 2023 г |
Дисциплина набора текста | Статический , слабый |
Расширения имен файлов | .v, .vh |
Веб-сайт | https://ieeexplore.ieee.org/document/10458102 |
Диалекты | |
Верилог-АМС | |
Под влиянием | |
Паскаль , Ада , Си , Фортран | |
Под влиянием | |
СистемаVerilog | |
|
Verilog , стандартизированный как IEEE 1364 , представляет собой язык описания аппаратного обеспечения (HDL), используемый для моделирования электронных систем . Чаще всего он используется при проектировании и проверке схем на передачи регистров уровне абстракции цифровых . [ нужна ссылка ] Он также используется при проверке аналоговых схем и схем смешанных сигналов , а также при проектировании генетических схем . [1] В 2009 году стандарт Verilog (IEEE 1364-2005) был объединен со стандартом SystemVerilog , в результате чего был создан стандарт IEEE 1800-2009. С тех пор Verilog официально стал частью языка SystemVerilog. Текущая версия соответствует стандарту IEEE 1800-2023. [2]
Обзор
[ редактировать ]Языки описания оборудования, такие как Verilog, похожи на программного обеспечения языки программирования , поскольку они включают способы описания времени распространения и силы сигнала (чувствительности). Существует два типа операторов присваивания ; блокирующее присвоение (=) и неблокирующее (<=) присвоение. Неблокирующее присвоение позволяет разработчикам описывать обновление конечного автомата без необходимости объявлять и использовать переменные временного хранения . Поскольку эти концепции являются частью семантики языка Verilog, разработчики могут быстро писать описания больших схем в относительно компактной и лаконичной форме. На момент появления Verilog (1984 г.) Verilog представлял собой огромное повышение производительности для разработчиков схем, которые уже использовали программное обеспечение для графического захвата схем и специально написанные программы для документирования и моделирования электронных схем .
Разработчики Verilog хотели создать язык с синтаксисом, похожим на язык программирования C , который уже широко использовался при разработке инженерного программного обеспечения . Как и C, Verilog чувствителен к регистру и имеет базовый препроцессор (хотя и менее сложный, чем у ANSI C/C++). Ключевые потока управления слова (if/else, for, while, case и т. д.) эквивалентны, а приоритет операторов совместим с C. Синтаксические различия включают в себя: требуемую разрядность для объявлений переменных, разграничение процедурных блоков (Verilog использует начало /end вместо фигурных скобок {}) и множество других незначительных отличий. Verilog требует, чтобы переменным был задан определенный размер. В C эти размеры выводятся из «типа» переменной (например, целочисленный тип может иметь длину 32 бита).
Проект Verilog состоит из иерархии модулей . Модули инкапсулируют иерархию дизайна и взаимодействуют с другими модулями через набор объявленных входных, выходных и двунаправленных портов . Внутри модуль может содержать любую комбинацию следующих элементов: объявления сетей/переменных (wire, reg, целое число и т. д.), блоки параллельных и последовательных операторов и экземпляры других модулей (подиерархии). Последовательные операторы помещаются внутри блока начала/конца и выполняются в последовательном порядке внутри блока. Однако сами блоки выполняются одновременно, что делает Verilog языком потоков данных .
Концепция «провода» Verilog состоит как из значений сигналов (4 состояния: «1, 0, плавающий, неопределенный»), так и из уровней сигнала (сильный, слабый и т. д.). Эта система позволяет абстрактно моделировать общие сигнальные линии, когда несколько источников управляют общей сетью. Если провод имеет несколько драйверов, (читаемое) значение провода определяется функцией исходных драйверов и их мощности.
Подмножество операторов языка Verilog является синтезируемым . Модули Verilog, соответствующие синтезируемому стилю кодирования, известному как RTL ( уровень передачи регистров ), могут быть физически реализованы с помощью программного обеспечения синтеза. Программное обеспечение синтеза алгоритмически преобразует (абстрактный) источник Verilog в список соединений , логически эквивалентное описание, состоящее только из элементарных логических примитивов (И, ИЛИ, НЕ, триггеры и т. д.), которые доступны в конкретной технологии FPGA или СБИС . Дальнейшие манипуляции со списком соединений в конечном итоге приводят к созданию схемы изготовления схемы (например, набора фотомаски для ASIC или файла битового потока для FPGA ).
История
[ редактировать ]Начало
[ редактировать ]Verilog был создан Прабху Гоэлом , Филом Мурби и Чи-Лай Хуангом в период с конца 1983 по начало 1984 года. [3] Чи-Лай Хуан ранее работал над описанием аппаратного обеспечения LALSD, языком, разработанным профессором С.Ю. Су для своей докторской работы. [4] Правообладателем этого процесса, который в то время был собственностью компании, была компания «Automated Integrated Design Systems» (позже переименованная в 1985 году в Gateway Design Automation ). Gateway Design Automation была приобретена Cadence Design Systems в 1990 году. Теперь Cadence обладает полными правами собственности на Verilog компании Gateway и Verilog-XL, HDL-симулятор, который станет фактическим стандартом ( логических симуляторов Verilog ) на следующее десятилетие. Первоначально Verilog предназначался только для описания и моделирования; автоматический синтез подмножеств языка в физически реализуемые структуры (вентили и т. д.) был разработан после того, как язык получил широкое распространение.
Verilog — это сочетание слов «проверка» и «логика». [5]
Верилог-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.
Верилог 2001
[ редактировать ]Расширения Verilog-95 были отправлены обратно в IEEE, чтобы устранить недостатки, обнаруженные пользователями в исходном стандарте Verilog. Эти расширения стали стандартом IEEE 1364-2001, известным как Verilog-2001.
Verilog-2001 представляет собой значительное обновление Verilog-95. Во-первых, он добавляет явную поддержку цепей и переменных со знаком (дополнения до двух). Раньше авторам кода приходилось выполнять знаковые операции, используя неуклюжие манипуляции на уровне битов (например, бит выполнения простого 8-битного сложения требовал явного описания булевой алгебры для определения его правильного значения). Эту же функцию в Verilog-2001 можно более кратко описать одним из встроенных операторов: +, -, /, *, >>>. Конструкция генерирования-конца генерации (аналогичная конструкции генерации-конца генерации VHDL) позволяет Verilog-2001 управлять созданием экземпляров и операторов с помощью обычных операторов принятия решения (case-if-else). Используя функцию генерации-конца генерации, Verilog-2001 может создавать экземпляры массива экземпляров, контролируя связность отдельных экземпляров. Файловый ввод-вывод был улучшен за счет нескольких новых системных задач. И, наконец, было внесено несколько синтаксических дополнений для улучшения читаемости кода (например, всегда, @*, переопределение именованного параметра, объявление заголовка функции/задачи/модуля в стиле C).
Verilog-2001 — это версия Verilog, поддерживаемая большинством коммерческих пакетов программного обеспечения EDA .
Верилог 2005
[ редактировать ]Не путать с SystemVerilog , Verilog 2005 ( стандарт IEEE 1364-2005) состоит из незначительных исправлений, уточнений спецификаций и нескольких новых языковых функций (таких как ключевое слово uwire).
Отдельная часть стандарта Verilog, Verilog-AMS , пытается интегрировать моделирование аналоговых и смешанных сигналов с традиционным Verilog.
СистемаVerilog
[ редактировать ]Появление языков проверки оборудования , таких как 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).
Обновления с 2009 года
[ редактировать ]Стандарт SystemVerilog впоследствии был обновлен в 2012 году. [6] 2017, [7] и последний раз в декабре 2023 года. [2]
Пример
[ редактировать ]Ниже приведен простой пример двух шлепанцев :
module toplevel(clock,reset);
input clock;
input reset;
reg flop1;
reg flop2;
always @ (posedge reset or posedge clock)
if (reset)
begin
flop1 <= 0;
flop2 <= 1;
end
else
begin
flop1 <= flop2;
flop2 <= flop1;
end
endmodule
The <=
Оператор в Verilog — это еще один аспект того, что он является языком описания оборудования, в отличие от обычного процедурного языка. Это известно как «неблокирующее» назначение. Его действие не регистрируется до тех пор, пока не будет выполнен блок Always. Это означает, что порядок присваиваний не имеет значения и даст один и тот же результат: flop1 и flop2 будут менять местами значения каждый такт.
Другой оператор присваивания =
называется назначением блокировки. Когда =
используется присвоение, для целей логики целевая переменная обновляется немедленно. Если бы в приведенном выше примере операторы использовали =
блокирующий оператор вместо <=
, flop1 и flop2 не поменялись бы местами. Вместо этого, как и в традиционном программировании, компилятор понимает, что нужно просто установить flop1 равным flop2 (и впоследствии игнорировать избыточную логику, чтобы установить flop2 равным flop1).
Ниже приведен пример схемы счетчика :
module Div20x (rst, clk, cet, cep, count, tc);
// TITLE 'Divide-by-20 Counter with enables'
// enable CEP is a clock enable only
// enable CET is a clock enable and
// enables the TC output
// a counter using the Verilog language
parameter size = 5;
parameter length = 20;
input rst; // These inputs/outputs represent
input clk; // connections to the module.
input cet;
input cep;
output [size-1:0] count;
output tc;
reg [size-1:0] count; // Signals assigned
// within an always
// (or initial)block
// must be of type reg
wire tc; // Other signals are of type wire
// The always statement below is a parallel
// execution statement that
// executes any time the signals
// rst or clk transition from low to high
always @ (posedge clk or posedge rst)
if (rst) // This causes reset of the cntr
count <= {size{1'b0}};
else
if (cet && cep) // Enables both true
begin
if (count == length-1)
count <= {size{1'b0}};
else
count <= count + 1'b1;
end
// the value of tc is continuously assigned
// the value of the expression
assign tc = (cet && (count == length-1));
endmodule
Пример задержки:
...
reg a, b, c, d;
wire e;
...
always @(b or e)
begin
a = b & e;
b = a | b;
#5 c = b;
d = #6 c ^ e;
end
Предложение Always выше иллюстрирует другой тип использования метода, т.е. он выполняется всякий раз, когда изменяется какой-либо из объектов в списке ( b или e ). При одном из этих изменений a немедленно присваивается новое значение, а из-за назначения блокировки впоследствии b присваивается новое значение (с учетом нового значения a ). После задержки в 5 единиц времени c присваивается значение b , а значение c ^ e скрывается в невидимом хранилище. Затем, спустя еще 6 единиц времени, d присваивается спрятанное значение.
Сигналы, которые подаются изнутри процесса (начальный блок или блок Always), должны иметь тип reg . Сигналы, поступающие извне процесса, должны быть типа провод . Ключевое слово reg не обязательно подразумевает аппаратный регистр.
Определение констант
[ редактировать ]Определение констант в Verilog поддерживает добавление параметра ширины. Основной синтаксис:
< Ширина в битах >'< основная буква >< число >
Примеры:
- 12'h123 – Шестнадцатеричное число 123 (с использованием 12 бит)
- 20'd44 – Десятичное число 44 (используется 20 бит – расширение 0 выполняется автоматически)
- 4'b1010 – двоичное число 1010 (с использованием 4 битов)
- 6'o77 – восьмеричное число 77 (с использованием 6 бит)
Синтезируемые конструкции
[ редактировать ]В Verilog есть несколько операторов, не имеющих аналогов на реальном оборудовании, например команда $display. Однако представленные здесь примеры представляют собой классическое (и ограниченное) подмножество языка, имеющее прямое сопоставление с реальными вентилями.
// Mux examples — Three ways to do the same thing.
// The first example uses continuous assignment
wire out;
assign out = sel ? a : b;
// the second example uses a procedure
// to accomplish the same thing.
reg out;
always @(a or b or sel)
begin
case(sel)
1'b0: out = b;
1'b1: out = a;
endcase
end
// Finally — you can use if/else in a
// procedural structure.
reg out;
always @(a or b or sel)
if (sel)
out = a;
else
out = b;
Следующая интересная конструкция — прозрачная защелка ; он передает входной сигнал на выход, когда сигнал стробирования установлен на «сквозной», захватывает входной сигнал и сохраняет его при переходе сигнала стробирования на «удержание». Выходной сигнал будет оставаться стабильным независимо от входного сигнала, пока затвор установлен в положение «удержание». В приведенном ниже примере «сквозной» уровень ворот будет тогда, когда значение предложения if истинно, т.е. ворота = 1. Это читается как «если ворота истинны, сигнал подается на latch_out непрерывно». Если предложение if ложно, последнее значение в latch_out останется и не зависит от значения din.
// Transparent latch example
reg latch_out;
always @(gate or din)
if(gate)
latch_out = din; // Pass through state
// Note that the else isn't required here. The variable
// latch_out will follow the value of din while gate is
// high. When gate goes low, latch_out will remain constant.
Триггер – следующий важный шаблон; в Verilog D-флоп является самым простым, и его можно смоделировать как:
reg q;
always @(posedge clk)
q <= d;
В этом примере важно отметить использование неблокирующего присваивания. Основное практическое правило — использовать <= есть оператор posege или negedge , когда в предложении Always .
Вариант D-флопа — с асинхронным сбросом; существует соглашение, согласно которому состояние сброса будет первым предложением if в операторе.
reg q;
always @(posedge clk or posedge reset)
if(reset)
q <= 0;
else
q <= d;
Следующий вариант включает в себя как асинхронный сброс, так и асинхронное условие установки; снова вступает в силу соглашение, т.е. за термином сброса следует установленный термин.
reg q;
always @(posedge clk or posedge reset or posedge set)
if(reset)
q <= 0;
else
if(set)
q <= 1;
else
q <= d;
Примечание. Если эта модель используется для моделирования триггера установки/сброса, могут возникнуть ошибки моделирования. Рассмотрим следующую тестовую последовательность событий. 1) сброс становится высоким 2) clk становится высоким 3) устанавливается высоким 4) clk снова становится высоким 5) сброс переходит в низкий уровень, а затем 6) устанавливается низким. Предположим, что установка отсутствует, и удерживайте нарушения.
В этом примере оператор Always @ сначала будет выполняться при возникновении нарастающего фронта сброса, что приведет к тому, что q станет равным 0. В следующий раз, когда блок Always будет выполняться, будет нарастающий фронт clk, который снова будет удерживать q на значении 0. Затем блок Always выполняется, когда set становится высоким, что, поскольку сброс имеет высокий уровень, заставляет q оставаться на уровне 0. Это условие может быть правильным, а может и не быть, в зависимости от фактического триггера. Однако это не главная проблема данной модели. Обратите внимание, что когда значение сброса становится низким, этот набор все еще остается высоким. В реальном триггере это приведет к тому, что выходной сигнал перейдет в 1. Однако в этой модели этого не произойдет, поскольку блок Always запускается нарастающими фронтами установки и сброса, а не уровнями. Для триггеров установки/сброса может потребоваться другой подход.
Последний базовый вариант — это тот, который реализует D-флоп с мультиплексором, подающим на его вход. Мультиплексор имеет d-вход и обратную связь от самого флопа. Это обеспечивает функцию стробируемой нагрузки.
// Basic structure with an EXPLICIT feedback path
always @(posedge clk)
if(gate)
q <= d;
else
q <= q; // explicit feedback path
// The more common structure ASSUMES the feedback is present
// This is a safe assumption since this is how the
// hardware compiler will interpret it. This structure
// looks much like a latch. The differences are the
// '''@(posedge clk)''' and the non-blocking '''<='''
//
always @(posedge clk)
if(gate)
q <= d; // the "else" mux is "implied"
Обратите внимание, что в этом описании не упоминаются «начальные» блоки. В этой структуре существует разделение между инструментами синтеза FPGA и ASIC. Инструменты FPGA допускают начальные блоки, в которых устанавливаются значения регистров вместо использования сигнала «сброса». Инструменты синтеза ASIC не поддерживают такое утверждение. Причина в том, что исходное состояние FPGA загружается в таблицы памяти FPGA. ASIC — это реальная аппаратная реализация.
Изначально и всегда
[ редактировать ]Существует два отдельных способа объявления процесса Verilog. Это ключевые слова всегда и начальные . Ключевое слово всегда указывает на автономный процесс. Начальное ключевое слово указывает , что процесс выполняется ровно один раз. Обе конструкции начинают выполнение во время симулятора 0 и обе выполняются до конца блока. Как только блок Always достиг своего конца, он перепланируется (снова). Распространенным заблуждением является мнение, что начальный блок будет выполняться раньше блока Always. На самом деле, лучше думать о начальном блоке как о частном случае блока Always , который завершается после первого завершения.
//Examples:
initial
begin
a = 1; // Assign a value to reg a at time 0
#1; // Wait 1 time unit
b = a; // Assign the value of reg a to reg b
end
always @(a or b) // Any time a or b CHANGE, run the process
begin
if (a)
c = b;
else
d = ~b;
end // Done with this block, now return to the top (i.e. the @ event-control)
always @(posedge a)// Run whenever reg a has a low to high change
a <= b;
Это классическое использование этих двух ключевых слов, но есть и два важных дополнительных применения. Наиболее распространенным из них является ключевое слово всегда без списка чувствительности @(...) . Всегда можно использовать, как показано ниже:
always
begin // Always begins executing at time 0 and NEVER stops
clk = 0; // Set clk to 0
#1; // Wait for 1 time unit
clk = 1; // Set clk to 1
#1; // Wait 1 time unit
end // Keeps executing — so continue back at the top of the begin
Ключевое слово Always действует аналогично конструкции языка C while(1) {..} в том смысле, что оно будет выполняться вечно.
Другое интересное исключение — использование ключевого слова «initial» с добавлением ключевого слова «forever» .
Пример ниже функционально идентичен приведенному выше примеру Always .
initial forever // Start at time 0 and repeat the begin/end forever
begin
clk = 0; // Set clk to 0
#1; // Wait for 1 time unit
clk = 1; // Set clk to 1
#1; // Wait 1 time unit
end
Разветвление/присоединение
[ редактировать ]Пара fork/join используется Verilog для создания параллельных процессов. Все операторы (или блоки) между парой разветвления/объединения начинают выполнение одновременно после того, как поток выполнения достигает разветвления . Выполнение продолжается после соединения после завершения самого продолжительного оператора или блока между разветвлением и соединением .
initial
fork
$write("A"); // Print char A
$write("B"); // Print char B
begin
#1; // Wait 1 time unit
$write("C"); // Print char C
end
join
Как написано выше, можно распечатать последовательности «ABC» или «BAC». Порядок симуляции между первой $write и второй $write зависит от реализации симулятора и может быть целенаправленно рандомизирован симулятором. Это позволяет моделировать как случайные условия гонки, так и намеренное недетерминированное поведение.
Обратите внимание, что VHDL не может динамически создавать несколько процессов, таких как Verilog. [8]
Условия гонки
[ редактировать ]Порядок выполнения в Verilog не всегда гарантируется. [9] Лучше всего это можно проиллюстрировать классическим примером. Рассмотрим фрагмент кода ниже:
initial
a = 0;
initial
b = a;
initial
begin
#1;
$display("Value a=%d Value of b=%d",a,b);
end
Что будет распечатано для значений a и b? В зависимости от порядка выполнения исходных блоков это может быть ноль и ноль или попеременно ноль и какое-то другое произвольное неинициализированное значение. Оператор $display всегда будет выполняться после завершения обоих блоков присваивания из-за задержки №1.
Операторы
[ редактировать ]Примечание. Эти операторы показаны не в порядке приоритета.
Тип оператора | Символы оператора | Операция выполнена |
---|---|---|
Побитовый | ~ | Побитовое НЕ (дополнение до 1) |
& | Побитовое И | |
| | Побитовое ИЛИ | |
^ | Побитовое исключающее ИЛИ | |
~^ или ^~ | Побитовое исключающее ИЛИ | |
Логический | ! | НЕТ |
&& | И | |
|| | ИЛИ | |
Снижение | & | Сокращение И |
~& | Сокращение NAND | |
| | Сокращение ИЛИ | |
~| | Сокращение НОР | |
^ | Сокращение 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 с девятью уровнями. [10]
Системные задачи
[ редактировать ]Доступны системные задачи для выполнения простых операций ввода-вывода и различных функций измерения конструкции во время моделирования. Все системные задачи имеют префикс $ , чтобы отличить их от пользовательских задач и функций. В этом разделе представлен краткий список наиболее часто используемых задач. Это ни в коем случае не полный список.
- $display – Выводит на экран строку, за которой автоматически следует новая строка.
- $write – Распечатайте, чтобы отобразить строку без символа новой строки.
- $swrite – вывести в переменную строку без символа новой строки.
- $sscanf – Считать из переменной строку указанного формата. (*Верилог-2001)
- $fopen – Открыть дескриптор файла (чтение или запись)
- $fdisplay – Распечатать строку из файла, за которой следует автоматический перевод строки.
- $fwrite – Распечатать строку без символа новой строки.
- $fscanf – Считать из файла строку указанного формата. (*Верилог-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()
[11] и tf_getlongp()
[12] которые используются для записи и чтения 64-битного целочисленного аргумента текущей задачи или функции Verilog соответственно. Для 32-битных целых чисел tf_putp()
[13] и tf_getp()
[14] используются.
Программное обеспечение для моделирования
[ редактировать ]Информацию о симуляторах Verilog см. в списке симуляторов Verilog .
См. также
[ редактировать ]Дополнительный материал
[ редактировать ]- Список симуляторов HDL
- Средство просмотра сигналов
- Интерфейс прямого программирования SystemVerilog (DPI)
- Процедурный интерфейс Verilog (VPI)
Похожие языки
[ редактировать ]- VHDL , главный конкурент Verilog и SystemVerilog.
- Verilog-A и Verilog-AMS : Verilog с аналоговыми расширениями.
- SystemC — библиотека C++, обеспечивающая HDL. семантику, управляемую событиями
- СистемаVerilog
- ОпенВера
- е (язык проверки)
- Язык спецификации свойств
- Chisel — язык с открытым исходным кодом, созданный на основе Scala.
Ссылки
[ редактировать ]- ^ Нильсен А.А., Дер Б.С., Шин Дж., Вайдьянатан П., Параланов В., Стрыхальский Е.А., Росс Д., Денсмор Д., Фойгт К.А. (2016). «Автоматизация проектирования генетических схем» . Наука . 352 (6281): аас7341. дои : 10.1126/science.aac7341 . ПМИД 27034378 .
- ^ Jump up to: а б IEEE 1800-2023, Утвержденный IEEE проект стандарта для SystemVerilog — унифицированный язык проектирования, спецификации и проверки аппаратного обеспечения , IEEE , 2023 г.
- ^ «Изобретатель Verilog получил награду Кауфмана от EDA» . ЭЭ Таймс . 7 ноября 2005 г.
- ^ Хуан, Чи-Лай; Су, С.И.Х. «Подходы к проектированию систем автоматизированной логики с использованием языка описания аппаратного обеспечения». Материалы Международного компьютерного симпозиума 1980 г., Тайбэй, Тайвань, декабрь 1980 г. стр. 772–79О. OCLC 696254754 .
- ^ «Устная история Филипа Рэймонда «Фила» Мурби» (PDF) . Музей истории компьютеров. 22 апреля 2013 г. стр. 23–25.
- ^ IEEE 1800-2012 , IEEE , 2012 г.
- ^ IEEE 1800-2017 , IEEE , 2017 г.
- ^ Каммингс, Клиффорд Э. (2003). «SystemVerilog – это слияние Verilog и VHDL?» (PDF) . SNUG Бостон 2003.
- ^ Сазерленд, Стюарт (2002). Верилог — 2001 . Бостон, Массачусетс: Springer US. п. 16. дои : 10.1007/978-1-4615-1713-9 . ISBN 978-1-4613-5691-2 .
Начальная процедура в Verilog не выполняется перед моделированием. Он начинает выполнение в нулевой момент времени, когда начинается моделирование, и выполняется параллельно с другими начальными или постоянными процедурами. При наличии нескольких начальных процедур не существует определенного порядка активации процедур.
- ^ Миллер, Д. Майкл; Торнтон, Митчелл А. (2008). Многозначная логика: понятия и представления . Обобщающие лекции по цифровым схемам и системам. Том. 12. Морган и Клейпул. ISBN 978-1-59829-190-2 .
- ^ «Стандартный язык описания оборудования IEEE Verilog®» (PDF) . п. 652(25,38) . Проверено 12 ноября 2023 г.
- ^ «Стандартный язык описания оборудования IEEE Verilog®» (PDF) . п. 628(25,28) . Проверено 12 ноября 2023 г.
- ^ «Стандартный язык описания оборудования IEEE Verilog®» (PDF) . п. 653(25,39) . Проверено 25 ноября 2023 г.
- ^ «Стандартный язык описания оборудования IEEE Verilog®» (PDF) . п. 631(25,21) . Проверено 25 ноября 2023 г.
- Примечания
- Стандарт IEEE для языка описания оборудования Verilog . 2006. doi : 10.1109/IEESTD.2006.99495 . ISBN 0-7381-4850-4 .
- Стандартный язык описания оборудования IEEE Verilog . 2001. doi : 10.1109/IEESTD.2001.93352 . ISBN 0-7381-2826-0 .
- IEC 61691-4 Ed.1 (IEEE STD 1364(TM)-2001): Поведенческие языки. Часть 4: Verilog(C) Язык описания аппаратного обеспечения . 2004. doi : 10.1109/IEESTD.2004.95753 . ISBN 2-8318-7675-3 .
- Стандартный язык описания оборудования IEEE, основанный на языке описания оборудования Verilog(R) . 1996. doi : 10.1109/IEESTD.1996.81542 . ISBN 978-0-7381-3065-1 .
- Томас, Дональд Э.; Мурби, Филип Р. (2013). Язык описания оборудования Verilog® (3-е изд.). Спрингер. ISBN 978-1475724646 .
- Курс Cornell ECE576, иллюстрирующий конструкции синтеза
- Бержерон, Яник (2012). Написание тестовых стендов: функциональная проверка моделей HDL (2-е изд.). Спрингер. ISBN 978-1-4615-0302-6 . (Библия тестового стенда HDL)
Внешние ссылки
[ редактировать ]Разработка стандартов
[ редактировать ]- «Стандарт IEEE для языка описания оборудования Verilog» . IEEE STD 1364-2005 (пересмотр IEEE STD 1364-2001) : 1–590. Апрель 2006 г. doi : 10.1109/IEESTD.2006.99495 . ISBN 978-0-7381-4851-9 . – Официальный стандарт Verilog 2005 (небесплатно).
- IEEE P1364 — Рабочая группа для Verilog (неактивна).
- IEEE P1800 — Рабочая группа для SystemVerilog (заменяет выше).
- Синтаксис Verilog — описание синтаксиса 1995 года в форме Бэкуса-Наура . Это предшествует стандарту IEEE-1364.
Языковые расширения
[ редактировать ]- Verilog AUTOs — метакомментарий с открытым исходным кодом, используемый отраслевыми IP для упрощения поддержки кода Verilog.