SystemVerilog - SystemVerilog
Парадигма |
Структурированный (дизайн) Объектно-ориентированный (проверка) |
---|---|
Разработано | Synopsys , позже IEEE |
Впервые появился | 2002 |
Стабильный выпуск | IEEE 1800-2017 / 22 февраля 2018 г .
|
Печатная дисциплина | Статичный , слабый |
Расширения имени файла | .sv, .svh |
Под влиянием | |
Дизайн: Verilog , VHDL , C ++ , Проверка: OpenVera , Java |
SystemVerilog , стандартизированный как IEEE 1800 , представляет собой язык описания и проверки оборудования, используемый для моделирования, проектирования , моделирования , тестирования и реализации электронных систем. SystemVerilog основан на Verilog и некоторых расширениях, а с 2008 года Verilog теперь является частью того же стандарта IEEE . Он обычно используется в индустрии проектирования полупроводников и электроники как эволюция Verilog.
История
SystemVerilog начал свою деятельность с того, что в 2002 году Accellera подарила язык Superlog начинающей компании Co-Design Automation. Основная часть функций проверки основана на языке OpenVera, предоставленном Synopsys . В 2005 году SystemVerilog был принят в качестве стандарта IEEE 1800-2005. В 2009 году стандарт был объединен с базовым стандартом Verilog (IEEE 1364-2005), в результате чего был создан стандарт IEEE 1800-2009. Текущая версия - стандарт IEEE 1800-2017.
Набор функций SystemVerilog можно разделить на две отдельные роли:
- SystemVerilog для проектирования уровня передачи регистров (RTL) является расширением Verilog-2005 ; все функции этого языка доступны в SystemVerilog. Следовательно, Verilog - это подмножество SystemVerilog.
- SystemVerilog для проверки использует обширные методы объектно-ориентированного программирования и более тесно связан с Java, чем с Verilog. Эти конструкции обычно не синтезируются.
В оставшейся части статьи обсуждаются возможности SystemVerilog, отсутствующие в Verilog-2005 .
Особенности дизайна
Срок службы данных
В SystemVerilog указано два типа времени жизни данных: статический и автоматический . Автоматические переменные создаются в тот момент, когда выполнение программы попадает в область видимости переменной. Статические переменные создаются в начале выполнения программы и сохраняют одно и то же значение в течение всего жизненного цикла программы, если только не присвоено новое значение во время выполнения.
Любая переменная, объявленная внутри задачи или функции без указания типа, будет считаться автоматической. Чтобы указать, что переменная является статической, поместите ключевое слово " static
" в объявлении перед типом, например " ". Ключевое слово " " используется таким же образом.
static int x;
automatic
Новые типы данных
Расширенные типы переменных добавляют новые возможности к типу "reg" Verilog:
logic [31:0] my_var;
Verilog-1995 и -2001 ограничивают переменные reg поведенческими операторами, такими как код RTL . SystemVerilog расширяет тип reg, так что он может управляться одним драйвером, таким как вентиль или модуль. SystemVerilog называет этот тип «логикой», чтобы напомнить пользователям, что он имеет эту дополнительную возможность и не является аппаратным регистром. Имена «логика» и «рег» взаимозаменяемы. Сигнал с более чем одним драйвером (например, буфер с тремя состояниями для ввода / вывода общего назначения ) должен быть объявлен сетевым типом, таким как «провод», чтобы SystemVerilog мог разрешить окончательное значение.
Многомерные упакованные массивы унифицируют и расширяют понятие Verilog о «регистрах» и «памяти»:
logic [1:0][2:0] my_pack[32];
Классический Verilog позволял объявлять только одно измерение слева от имени переменной. SystemVerilog допускает любое количество таких «упакованных» размеров. Переменная типа упакованного массива отображает 1: 1 на целочисленную арифметическую величину. В приведенном выше примере каждый элемент my_pack
может использоваться в выражениях как шестибитовое целое число. Размеры справа от названия (в данном случае 32) называются «неупакованными» размерами. Как и в Verilog-2001 , допускается любое количество размеров без упаковки.
Перечислимые типы данных (enums
) позволяют присвоить числовым величинам осмысленные имена. Переменные, объявленные как перечислимые, не могут быть присвоены переменным другого перечислимого типа без приведения . Это не относится к параметрам, которые были предпочтительным методом реализации для перечисляемых величин в Verilog-2005:
typedef enum logic [2:0] {
RED, GREEN, BLUE, CYAN, MAGENTA, YELLOW
} color_t;
color_t my_color = GREEN;
initial $display("The color is %s", my_color.name());
Как показано выше, разработчик может указать базовый арифметический тип ( logic [2:0]
в данном случае), который используется для представления значения перечисления. Здесь могут использоваться мета-значения X и Z, возможно, для представления незаконных состояний. Встроенная функция name()
возвращает строку ASCII для текущего перечисляемого значения, что полезно при проверке и тестировании.
Новые целые типы : SystemVerilog определяет byte
, shortint
, int
и , longint
как два государства подписали интегральные типы , имеющие 8, 16, 32 и 64 бита соответственно. bit
Тип переменной ширины типа два состояния , который работает так же, как logic
. Типы с двумя состояниями лишены мета значений X и Z классического Verilog; работа с этими типами может привести к более быстрому моделированию.
Структуры и объединения работают таккак ониделают в языке программирования Си . Усовершенствования SystemVerilog включают упакованный атрибут иатрибут tagged . tagged
Атрибут позволяет отслеживать время выполнения которых пользователь (ей) из союза используемых в настоящее время. packed
Атрибута приводит к томуструктуре или объединениячтобы быть отображены 1: 1 на упакованный массив бит. Содержимоеstruct
типов данных занимает непрерывный блок памяти без пропусков, аналогично битовым полям в C и C ++:
typedef struct packed {
bit [10:0] expo;
bit sign;
bit [51:0] mant;
} FP;
FP zero = 64'b0;
Как показано в этом примере, SystemVerilog также поддерживает определения типов , как в C и C ++.
Процедурные блоки
SystemVerilog представляет три новых процедурных блока, предназначенных для моделирования оборудования : always_comb
(для моделирования комбинационной логики ), always_ff
(для триггеров ) и always_latch
(для защелок ). В то время как Verilog использовал один универсальный always
блок для моделирования различных типов структур оборудования, каждый из новых блоков SystemVerilog предназначен для моделирования определенного типа оборудования путем наложения семантических ограничений, чтобы гарантировать, что оборудование, описываемое блоками, соответствует предполагаемому использованию модель. Компилятор HDL или программа проверки могут предпринять дополнительные шаги, чтобы гарантировать, что происходит только предполагаемый тип поведения.
always_comb
Блок модели комбинационной логики . Симулятор делает вывод, что список чувствительности состоит из всех переменных из содержащихся в нем операторов:
always_comb begin
tmp = b * b - 4 * a * c;
no_root = (tmp < 0);
end
An always_latch
блочные модели уровня чувствительные защелок. Опять же, список чувствительности выводится из кода:
always_latch
if (en) q <= d;
always_ff
Блок модели синхронной логики (особенно чувствительный к фронту последовательной логики ):
always_ff @(posedge clk)
count <= count + 1;
Инструменты автоматизации электронного проектирования (EDA) могут проверить замысел проекта, проверив, что модель оборудования не нарушает семантику использования блоков. Например, новые блоки ограничивают назначение переменной, разрешая только один источник, тогда как always
блок Verilog разрешает назначение из нескольких процедурных источников.
Интерфейсы
Для небольших проектов порт Verilog компактно описывает связь модуля с окружающей средой. Но основные блоки в большой иерархии проектов обычно имеют количество портов, исчисляемое тысячами. SystemVerilog вводит концепцию интерфейсов как для уменьшения избыточности объявлений имен портов между подключенными модулями, так и для группирования и абстрактных связанных сигналов в объявленном пользователем пакете. Дополнительным понятием является модпорт, показывающий направление логических связей.
Пример:
interface intf;
logic a;
logic b;
modport in (input a, output b);
modport out (input b, output a);
endinterface
module top;
intf i ();
u_a m1 (.i1(i.in));
u_b m2 (.i2(i.out));
endmodule
module u_a (intf.in i1);
endmodule
module u_b (intf.out i2);
endmodule
Особенности проверки
Следующие функции проверки обычно не синтезируются, то есть они не могут быть реализованы аппаратно на основе кода HDL. Вместо этого они помогают создавать расширяемые и гибкие испытательные стенды .
Новые типы данных
Тип string
данных представляет собой текстовую строку переменной длины . Например:
string s1 = "Hello";
string s2 = "world";
string p = ".?!";
string s3 = {s1, ", ", s2, p[2]}; // string concatenation
$display("[%d] %s", s3.len(), s3); // simulation will print: "[13] Hello, world!"
В дополнение к статическому массиву, используемому в дизайне, SystemVerilog предлагает динамические массивы , ассоциативные массивы и очереди :
int cmdline_elements; // # elements for dynamic array
int da[]; // dynamic array
int ai[int]; // associative array, indexed by int
int as[string]; // associative array, indexed by string
int qa[$]; // queue, indexed as an array, or by built-in methods
initial begin
cmdline_elements = 16;
da = new[ cmdline_elements ]; // Allocate array with 16 elements
end
Динамический массив работает так же, как неупакованный массив, но предлагает то преимущество, что он динамически выделяется во время выполнения (как показано выше). В то время как размер упакованного массива должен быть известен во время компиляции (из константы или выражения констант), динамический массив size может быть инициализирован из другой переменной времени выполнения, что позволяет изменять размер и размер массива произвольно по мере необходимости.
Ассоциативный массив можно рассматривать как двоичное дерево поиска с указанным пользователем типом ключа и типом данных . Ключ подразумевает порядок ; элементы ассоциативного массива можно считывать в лексикографическом порядке. Наконец, очередь обеспечивает большую часть функциональности типа deque C ++ STL : элементы можно эффективно добавлять и удалять с любого конца. Эти примитивы позволяют создавать сложные структуры данных, необходимые для табло большого проекта.
Классы
SystemVerilog предоставляет объектно-ориентированную модель программирования .
В SystemVerilog классы поддерживают модель одиночного наследования , но могут реализовывать функциональные возможности, аналогичные множественному наследованию, за счет использования так называемых «интерфейсных классов» (идентичных по концепции interface
функции Java). Классы могут быть параметризованы по типу , обеспечивая базовую функцию шаблонов C ++ . Однако специализация шаблонов и шаблоны функций не поддерживаются.
Возможности полиморфизма SystemVerilog аналогичны функциям C ++: программист может специально написать virtual
функцию, чтобы производный класс мог контролировать эту функцию. См. Дополнительную информацию в виртуальной функции .
Инкапсуляция и скрытие данных осуществляется с помощью local
и protected
ключевые слова, которые должны быть применены к любому элементу , который должен быть скрыт. По умолчанию все свойства класса являются общедоступными .
Экземпляры классов динамически создаются с помощью new
ключевого слова. Конструктор обозначается function new
может быть определен. SystemVerilog имеет автоматическую сборку мусора , поэтому нет языковых средств для явного уничтожения экземпляров, созданных оператором new .
Пример:
virtual class Memory;
virtual function bit [31:0] read(bit [31:0] addr); endfunction
virtual function void write(bit [31:0] addr, bit [31:0] data); endfunction
endclass
class SRAM #(parameter AWIDTH=10) extends Memory;
bit [31:0] mem [1<<AWIDTH];
virtual function bit [31:0] read(bit [31:0] addr);
return mem[addr];
endfunction
virtual function void write(bit [31:0] addr, bit [31:0] data);
mem[addr] = data;
endfunction
endclass
Ограниченная случайная генерация
Целочисленные величины, определенные либо в определении класса, либо как отдельные переменные в некоторой лексической области видимости, могут иметь случайные значения на основе набора ограничений. Эта функция полезна для создания случайных сценариев для проверки .
В определениях класса, rand
и randc
модификаторы сигнал переменных, которые должны пройти рандомизации. randc
определяет рандомизацию на основе перестановок , при которой переменная принимает все возможные значения один раз, прежде чем какое-либо значение будет повторено. Переменные без модификаторов не рандомизируются.
class eth_frame;
rand bit [47:0] dest;
rand bit [47:0] src;
rand bit [15:0] f_type;
rand byte payload[];
bit [31:0] fcs;
rand bit [31:0] fcs_corrupt;
constraint basic {
payload.size inside {[46:1500]};
}
constraint good_fr {
fcs_corrupt == 0;
}
endclass
В этом примере fcs
поле не рандомизировано; на практике он будет вычисляться с помощью генератора CRC и fcs_corrupt
поля, используемого для его повреждения, чтобы ввести ошибки FCS. Два показанных ограничения применимы к соответствующим кадрам Ethernet . Ограничения могут быть включены выборочно; эта функция потребуется в приведенном выше примере для создания поврежденных кадров. Ограничения могут быть произвольно сложными, включая взаимосвязь между переменными, последствиями и итерациями. Решатель ограничений SystemVerilog требуется для поиска решения, если оно существует, но не дает никаких гарантий относительно времени, которое потребуется для этого, поскольку в целом это NP-сложная проблема ( логическая выполнимость ).
Методы рандомизации
В каждом классе SystemVerilog есть 3 предопределенных метода рандомизации: pre_randomize, randomize и post_randomize. Метод randomize вызывается пользователем для рандомизации переменных класса. Метод pre_randomize вызывается методом randomize перед рандомизацией, а метод post_randomize вызывается методом randomize после рандомизации.
class eth_frame;
rand bit [47:0] dest;
rand bit [47:0] src;
rand bit [15:0] f_type;
rand byte payload[];
bit [31:0] fcs;
rand bit corrupted_frame;
constraint basic {
payload.size inside {[46:1500]};
}
function void post_randomize()
this.calculate_fcs(); // update the fcs field according to the randomized frame
if (corrupted_frame) // if this frame should be corrupted
this.corrupt_fcs(); // corrupt the fcs
endfunction
endclass
Контроль ограничений
Методы constraint_mode () и random_mode () используются для управления рандомизацией. constraint_mode () используется для включения и выключения определенного ограничения, а random_mode используется для включения или выключения рандомизации конкретной переменной. Приведенный ниже код описывает и процедурно тестирует фрейм Ethernet :
class eth_frame;
rand bit [47:0] dest;
rand bit [47:0] src;
rand bit [15:0] f_type;
rand byte payload[];
bit [31:0] fcs;
rand bit corrupted_frame;
constraint basic {
payload.size inside {[46:1500]};
}
constraint one_src_cst {
src == 48'h1f00
}
constraint dist_to_fcs {
fcs dist {0:/30,[1:2500]:/50}; // 30, and 50 are the weights (30/80 or 50/80, in this example)
}
endclass
.
.
.
eth_frame my_frame;
my_frame.one_src_cst.constraint_mode(0); // the constraint one_src_cst will not be taken into account
my_frame.f_type.random_mode(0); // the f_type variable will not be randomized for this frame instance.
my_frame.randomize();
Утверждения
Утверждения полезны для проверки свойств проекта, которые проявляются после достижения определенного условия или состояния. SystemVerilog имеет собственный язык спецификации утверждений, аналогичный языку спецификации свойств . Подмножество языковых конструкций SystemVerilog, обслуживающих утверждения, обычно называется SystemVerilog Assertion или SVA.
Утверждения SystemVerilog построены на основе последовательностей и свойств . Свойства - это надмножество последовательностей; любая последовательность может использоваться, как если бы она была свойством, хотя обычно это бесполезно.
Последовательности состоят из логических выражений, дополненных временными операторами . Самый простой темпоральный оператор - это ##
оператор, выполняющий конкатенацию:
sequence S1;
@(posedge clk) req ##1 gnt;
endsequence
Эта последовательность совпадает, если gnt
сигнал переходит в высокий уровень через один тактовый цикл req
. Обратите внимание, что все операции последовательности синхронны с часами.
Другие последовательные операторы включают операторы повторения, а также различные соединения. Эти операторы позволяют проектировщику выражать сложные отношения между компонентами дизайна.
Утверждение работает, постоянно пытаясь оценить последовательность или свойство. Утверждение не выполняется, если свойство терпит неудачу. Приведенная выше последовательность не сработает, если req
будет низкий уровень. Чтобы точно выразить требование, gnt
следующее req
за свойством, требуется:
property req_gnt;
@(posedge clk) req |=> gnt;
endproperty
assert_req_gnt: assert property (req_gnt) else $error("req not followed by gnt.");
В этом примере показан оператор импликации|=>
. Предложение слева от импликации называется антецедентом, а предложение справа - консеквентом . Оценка импликации начинается с повторных попыток оценить антецедент. Когда антецедент успешен , предпринимается попытка получить консеквент, и успех утверждения зависит от успеха консеквента. В этом примере консеквент не будет предприниматься до тех пор, пока не станет req
высоким, после чего свойство потерпит неудачу, если gnt
не будет высоким на следующих часах.
В дополнение к утверждениям SystemVerilog поддерживает предположения и покрытие свойств. Предположение устанавливает условие, которое инструмент доказательства формальной логики должен считать истинным . Утверждение определяет свойство, истинность которого должна быть подтверждена. При моделировании утверждения и предположения проверяются на основании тестовых стимулов. Покрытие собственности позволяет инженеру по верификации убедиться, что утверждения точно соответствуют проекту.
Покрытие
Покрытие применительно к языкам проверки оборудования относится к сбору статистики на основе событий выборки в рамках моделирования. Покрытие используется для определения того, когда тестируемое устройство (ИУ) подвергалось воздействию достаточного количества стимулов, что с высокой степенью уверенности в том, что ИУ функционирует правильно. Обратите внимание, что это отличается от покрытия кода, которое определяет код проекта, чтобы гарантировать выполнение всех строк кода в проекте. Функциональное покрытие гарантирует, что все желаемые угловые и краевые случаи в пространстве дизайна были изучены .
Группа покрытия SystemVerilog создает базу данных «ячеек», в которых хранится гистограмма значений связанной переменной. Также может быть определено перекрестное покрытие, которое создает гистограмму, представляющую декартово произведение нескольких переменных.
A выборки управляет событие , когда образец берется. Выборки событие может быть событием Verilog, вход или выход из блока кода, или вызов sample
метода группы покрытия. Требуется осторожность, чтобы гарантировать, что данные отбираются только тогда, когда они значимы.
Например:
class eth_frame;
// Definitions as above
covergroup cov;
coverpoint dest {
bins bcast[1] = {48'hFFFFFFFFFFFF};
bins ucast[1] = default;
}
coverpoint f_type {
bins length[16] = { [0:1535] };
bins typed[16] = { [1536:32767] };
bins other[1] = default;
}
psize: coverpoint payload.size {
bins size[] = { 46, [47:63], 64, [65:511], [512:1023], [1024:1499], 1500 };
}
sz_x_t: cross f_type, psize;
endgroup
endclass
В этом примере инженера по верификации интересует распределение широковещательных и одноадресных кадров, поле size / f_type и размер полезной нагрузки. Диапазоны точки покрытия размера полезной нагрузки отражают интересные угловые случаи, включая кадры минимального и максимального размера.
Синхронизация
Сложная тестовая среда состоит из повторно используемых компонентов проверки, которые должны взаимодействовать друг с другом. Примитив Verilog « событие » позволял различным блокам процедурных операторов запускать друг друга, но обеспечение синхронизации потоков оставалось на усмотрение программиста (умного). SystemVerilog предлагает два примитива специально для межпотоковой синхронизации: почтовый ящик и семафор . Почтовый ящик смоделирован как очередь сообщений FIFO . Необязательно, FIFO , может быть типа параметрироваться так , что только объекты указанного типа могут быть переданы через него. Обычно объекты представляют собой экземпляры класса, представляющие транзакции : элементарные операции (например, отправку кадра), которые выполняются компонентами проверки. Семафор моделируется как счетный семафор .
Общие улучшения классического Verilog
В дополнение к новым функциям, описанным выше, SystemVerilog повышает удобство использования существующих языковых функций Verilog. Ниже приведены некоторые из этих улучшений:
- Операторы процедурного присваивания (<=, =) теперь могут работать непосредственно с массивами .
- Определения портов (входящие, входные, выходные) теперь расширены для поддержки более широкого спектра типов данных : поддерживаются структуры , перечисления , реальные и многомерные типы.
- Конструкция цикла for теперь позволяет автоматически объявлять переменную внутри оператора for. Цикл управления потоком улучшается за счет продолжать и перерыв заявления .
- SystemVerilog добавляет Do / во время цикла в то время как петли конструкции.
- Постоянные переменные , то есть те, которые обозначены как неизменяемые во время выполнения, могут быть обозначены с помощью const .
- Инициализация переменной теперь может работать с массивами.
-
Операторы инкремента и декремента (
x++
,++x
,x--
,--x
) поддерживаются в SystemVerilog, как и другие назначения соединения операторов (x += a
,x -= a
,x *= a
,x /= a
,x %= a
,x <<= a
,x >>= a
,x &= a
,x ^= a
,x |= a
) , как в С и потомков . - В препроцессоре улучшены возможности подстановки макросов `define , в частности, подстановки внутри буквальных строк (" "), а также конкатенация нескольких макротокенов в одно слово .
- Конструкция fork / join была расширена с помощью join_none и join_any .
- Дополнения к директиве timescale позволяют более предсказуемо управлять шкалой времени моделирования в большой среде моделирования, при этом каждый исходный файл использует локальную шкалу времени.
- Теперь порты задач можно объявлять ref . Ссылка дает телу задачи прямой доступ к исходным аргументам в области вызывающего, известный как « передача по ссылке » в компьютерном программировании. Поскольку она работает с самой исходной переменной, а не с копией значения аргумента, задача / функция может изменять переменные (но не сети) в области действия вызывающего объекта в реальном времени . Объявления порта ввода / вывода передают переменные по значению и откладывают обновление переменной области действия вызывающего объекта до момента выхода из задачи.
- Теперь функции можно объявлять недействительными , что означает, что они не возвращают значения.
- Параметры могут быть объявлены любого типа, в том числе определяемые пользователем ЬурейеЕ с .
Помимо этого, SystemVerilog обеспечивает удобный интерфейс с иностранными языками (например, C / C ++) с помощью SystemVerilog DPI (интерфейс прямого программирования).
Программное обеспечение для проверки и синтеза
При проверке проекта SystemVerilog широко используется в индустрии проектирования микросхем. Три крупнейших поставщика EDA ( Cadence Design Systems , Mentor Graphics , Synopsys ) включили SystemVerilog в свои многоязычные симуляторы HDL . Хотя ни один симулятор пока не может претендовать на поддержку всего SystemVerilog LRM , что затрудняет взаимодействие тестовых стендов , предпринимаются усилия по продвижению совместимости между поставщиками. В 2008 году Cadence и Mentor выпустили Open Verification Methodology, библиотеку классов и среду использования с открытым исходным кодом для облегчения разработки повторно используемых тестовых стендов и готовых верификационных IP-адресов. Synopsys, которая была первой, кто опубликовал библиотеку классов SystemVerilog (VMM), впоследствии отреагировала, открыв свой собственный VMM для широкой публики. Многие сторонние поставщики объявили или уже выпустили проверочный IP-адрес SystemVerilog.
В роли синтеза проекта (преобразование описания проекта оборудования в список соединений ) внедрение SystemVerilog было медленным. Многие команды разработчиков используют потоки проектирования, в которых задействовано несколько инструментов от разных поставщиков. Большинство проектных групп не могут перейти на SystemVerilog RTL-дизайн, пока весь их набор интерфейсных инструментов ( линтеры , формальная проверка и автоматические генераторы структуры тестирования ) не будет поддерживать подмножество общего языка.
Смотрите также
- Список симуляторов SystemVerilog (поиск SV2005)
- Verilog-AMS
- e (язык проверки)
- SpecC
- Accellera
- SystemC
- SystemRDL
Рекомендации
- 1800-2005 - Стандарт IEEE для системной верификации - унифицированный язык проектирования, спецификации и проверки аппаратного обеспечения . 2005. DOI : 10,1109 / IEEESTD.2005.97972 . ISBN 978-0-7381-4810-6.
- 1800-2009 - Стандарт IEEE для SystemVerilog - унифицированный язык проектирования, спецификации и проверки аппаратного обеспечения . 2009. DOI : 10,1109 / IEEESTD.2009.5354441 . ISBN 978-0-7381-6130-3.
- 1800-2012 - Стандарт IEEE для SystemVerilog - унифицированный язык проектирования, спецификации и проверки оборудования . 2013. DOI : 10,1109 / IEEESTD.2013.6469140 . ISBN 978-0-7381-8110-3.
- 1800-2017 - Стандарт IEEE для SystemVerilog - унифицированный язык проектирования, спецификации и проверки оборудования . 2017. DOI : 10,1109 / IEEESTD.2018.8299595 . ISBN 978-1-5044-4509-2.
- МакГрат, Дилан (2005-11-09). «IEEE одобряет SystemVerilog, версию Verilog» . EE Times . Проверено 31 января 2007 .
- Пунит Кумар (2005-11-09). «Учебное пособие по системе Verilog» .
- Гопи Кришна (2005-11-09). «Учебники по SystemVerilog, SVA, SV DPI» .
- HDVL. "Дополнительные ссылки на SystemVerilog" .
- Спир, Крис, «SystemVerilog для проверки», Спрингер, Нью-Йорк, штат Нью-Йорк. ISBN 0-387-76529-8
- Стюарт Сазерленд, Саймон Дэвидманн, Питер Флейк, «SystemVerilog для дизайна, второе издание: руководство по использованию SystemVerilog для проектирования и моделирования оборудования», Спрингер, Нью-Йорк, штат Нью-Йорк. ISBN 0-387-33399-1
- Бен Коэн, Сринивасан Венкатараманан, Аджита Кумари и Лиза Пайпер [1] Справочник утверждений SystemVerilog, 4-е издание, 2016 г. - http://SystemVerilog.us
- Бен Коэн Сринивасан Венкатараманан и Аджита Кумари [2] Прагматический подход к принятию VMM, - http://SystemVerilog.us
- Эрик Селигман и Том Шуберт [3] Формальная проверка: необходимый инструментарий для проектирования современных СБИС, 24 июля 2015 г.,
Внешние ссылки
- Справочник по стандарту IEEE
Самые последние стандартные документы SystemVerilog доступны бесплатно в IEEExplore .
- Учебники
- Разработка стандартов
- IEEE P1800 - Рабочая группа по SystemVerilog
- Сайты, использовавшиеся до IEEE 1800-2005
- Расширения языка
- Verilog AUTOs - система мета-комментариев с открытым исходным кодом для упрощения поддержки кода Verilog
- Онлайн-инструменты
- EDA Playground - запуск SystemVerilog из веб-браузера (бесплатная онлайн-среда IDE)
- SVeN - SystemVerilog BNF Navigator (в соответствии с IEEE 1800-2012)
- Прочие инструменты