СистемаVerilog
Парадигма | Структурированный (дизайн) Объектно-ориентированный (проверка) |
---|---|
Разработано | Synopsys , позже IEEE |
Впервые появился | 2002 год |
Стабильная версия | ИИЭР 1800-2023
/ 16 декабря 2023 г |
Дисциплина набора текста | Статический , слабый |
Расширения имен файлов | .sv, .svh |
Под влиянием | |
Дизайн: Verilog , VHDL , C++ , Проверка: OpenVera , Java |
SystemVerilog , стандартизированный как IEEE 1800 , представляет собой язык описания и проверки оборудования, используемый для моделирования, проектирования , моделирования , тестирования и реализации электронных систем. SystemVerilog основан на Verilog и некоторых расширениях, а с 2008 года Verilog стал частью того же стандарта IEEE . Он широко используется в индустрии полупроводников и электронного проектирования как развитие Verilog.
История
[ редактировать ]SystemVerilog начался с передачи языка Superlog компании Accellera в 2002 году начинающей компанией Co-Design Automation. [1] Основная часть функций проверки основана на языке OpenVera, подаренном Synopsys . В 2005 году SystemVerilog был принят в качестве стандарта IEEE 1800-2005. [2] В 2009 году стандарт был объединен с базовым стандартом Verilog (IEEE 1364-2005), в результате чего был создан стандарт IEEE 1800-2009.
Стандарт SystemVerilog впоследствии был обновлен в 2012 году. [3] 2017, [4] и последний раз в декабре 2023 года. [5]
Особенности конструкции
[ редактировать ]Набор функций SystemVerilog можно разделить на две отдельные роли:
- SystemVerilog для проектирования уровня передачи регистров (RTL) является расширением Verilog-2005 ; все функции этого языка доступны в SystemVerilog. Таким образом, Verilog является подмножеством SystemVerilog.
- SystemVerilog для проверки использует обширные методы объектно-ориентированного программирования и более тесно связан с Java , чем Verilog. Эти конструкции, как правило, не поддаются синтезу.
В оставшейся части статьи обсуждаются возможности SystemVerilog, отсутствующие в Verilog-2005 .
Срок службы данных
[ редактировать ]В SystemVerilog указано два типа срока жизни данных: статический и автоматический . Автоматические переменные создаются в тот момент, когда выполнение программы попадает в область действия переменной. Статические переменные создаются в начале выполнения программы и сохраняют одно и то же значение в течение всего срока службы программы, если во время выполнения ей не будет присвоено новое значение.
Любая переменная, объявленная внутри задачи или функции без указания типа, будет считаться автоматической. Чтобы указать, что переменная является статической, поместите " static
" ключевое слово в объявлении перед типом, например, " static int x;
". " automatic
Ключевое слово «используется таким же образом.
Новые типы данных
[ редактировать ]Расширенные типы переменных добавляют новые возможности к типу Verilog «reg»:
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
type — это тип с двумя состояниями переменной ширины, который работает во многом аналогично logic
. В типах с двумя состояниями отсутствуют метазначения X и Z классического Verilog; работа с этими типами может привести к более быстрому моделированию.
Структуры и объединения работают так же, как в языке программирования C. Улучшения SystemVerilog включают упакованный атрибут и тегированный атрибут. 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 также поддерживает typedefs , как в 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
Ан always_latch
блочные модели , чувствительные к уровню защелки. Опять же, список чувствительности выводится из кода:
always_latch
if (en) q <= d;
Ан always_ff
блочные модели синхронной логики (особенно чувствительной к фронту последовательной логики ):
always_ff @(posedge clk)
count <= count + 1;
Инструменты автоматизации электронного проектирования (EDA) могут проверить цель проекта, проверив, что модель оборудования не нарушает семантику использования блоков. Например, новые блоки ограничивают назначение переменной, допуская только один источник, тогда как Verilog always
блокировать разрешенное назначение из нескольких процедурных источников.
Интерфейсы
[ редактировать ]Для небольших проектов порт Verilog компактно описывает связь модуля с окружающей средой. Но основные блоки в большой иерархии проектов обычно имеют количество портов, исчисляемое тысячами. SystemVerilog представляет концепцию интерфейсов, позволяющую как уменьшить избыточность объявлений имен портов между подключенными модулями, так и группировать и абстрагировать связанные сигналы в объявленный пользователем пакет. Дополнительным понятием является modport , который показывает направление логических соединений.
Пример:
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-кода. Вместо этого они помогают создавать расширяемые и гибкие испытательные стенды .
Новые типы данных
[ редактировать ]The 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 может быть инициализирован из другой переменной времени выполнения, что позволяет произвольно изменять размер и размер массива по мере необходимости.
Ассоциативный массив можно рассматривать как двоичное дерево поиска с определяемым пользователем типом ключа и типом данных . Ключ подразумевает порядок ; элементы ассоциативного массива можно считывать в лексикографическом порядке. Наконец, очередь обеспечивает большую часть функциональности C++ STL типа deque : элементы можно эффективно добавлять и удалять с любого конца. Эти примитивы позволяют создавать сложные структуры данных, необходимые для табло большого проекта.
Классы
[ редактировать ]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. Метод рандомизации вызывается пользователем для рандомизации переменных класса. Метод pre_randomize вызывается методом рандомизации перед рандомизацией, а метод post_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
Контроль ограничений
[ редактировать ]Методы ограничения_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. [6]
Утверждения 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 поддерживает предположения и охват свойств. Предположение устанавливает условие, которое инструмент формального логического доказательства должен считать истинным . Утверждение определяет свойство, истинность которого должна быть доказана. При моделировании как утверждения, так и предположения проверяются с помощью тестовых стимулов. Покрытие свойств позволяет инженеру по верификации проверить, что утверждения точно контролируют проект. [ нечеткий ]
Покрытие
[ редактировать ]Покрытие применительно к языкам проверки оборудования означает сбор статистики на основе событий выборки в рамках моделирования. Покрытие используется для определения того, когда тестируемое устройство (DUT) подвергалось воздействию достаточного разнообразия стимулов, при котором существует высокая уверенность в том, что DUT работает правильно. Обратите внимание, что это отличается от покрытия кода , которое инструментирует код проекта, чтобы гарантировать, что все строки кода в проекте были выполнены. Функциональный охват гарантирует, что все необходимые угловые и краевые случаи в пространстве проекта будут изучены .
Группа покрытия SystemVerilog создает базу данных «ячейок», в которой хранится гистограмма значений связанной переменной. Также можно определить перекрестное покрытие, при котором создается гистограмма, представляющая декартово произведение нескольких переменных.
Событие отбора проб определяет, когда берется проба. Событием выборки может быть событие 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 ' event ' позволял различным блокам процедурных операторов запускать друг друга, но обеспечение синхронизации потоков зависело от (умного) использования программиста. SystemVerilog предлагает два примитива специально для межпоточной синхронизации: почтовый ящик и семафор . Почтовый ящик моделируется как очередь сообщений FIFO . При желании FIFO можно параметризовать по типу , чтобы только объекты указанного типа через него можно было передавать . Обычно объекты представляют собой экземпляры классов, представляющие транзакции : элементарные операции (например, отправка кадра), которые выполняются компонентами проверки. Семафор моделируется как счетный семафор .
Общие улучшения классического Verilog
[ редактировать ]В дополнение к вышеперечисленным новым функциям SystemVerilog повышает удобство использования существующих языковых функций Verilog. Ниже приведены некоторые из этих улучшений:
- Операторы процедурного присваивания (<=, =) теперь могут работать непосредственно с массивами .
- Определения портов (inout, input, output) теперь расширены для поддержки более широкого спектра типов данных : поддерживаются struct , enum , real и многомерные типы.
- Конструкция цикла for теперь позволяет автоматически объявлять переменные внутри оператора for. в цикле Управление потоком улучшается с помощью continue и Break операторов .
- SystemVerilog добавляет цикл do / while в while конструкцию цикла .
- Постоянные переменные , то есть те, которые обозначены как неизменяющиеся во время выполнения, могут быть обозначены с помощью 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
), как в C и потомках . - В препроцессоре улучшены возможности определения макроподстановок , в частности, замена внутри литеральных строк (""), а также объединение нескольких макротокенов в одно слово .
- Конструкция fork/join была расширена за счет join_none и join_any .
- Дополнения к директиве timescale позволяют более предсказуемо управлять временной шкалой моделирования в большой среде моделирования, при этом каждый исходный файл использует локальную шкалу времени.
- Порты задач теперь можно объявить ref . Ссылка предоставляет телу задачи прямой доступ к исходным аргументам в области вызывающего объекта, что в компьютерном программировании называется « передачей по ссылке ». Поскольку она работает с исходной переменной, а не с копией значения аргумента, задача/функция может изменять переменные (но не сети) в области вызывающего объекта в реальном времени . Объявления порта ввода/вывода передают переменные по значению и откладывают обновление переменной области вызывающего объекта до момента выхода из задачи.
- Функции теперь могут быть объявлены void , что означает, что они не возвращают никакого значения.
- Параметры могут быть объявлены любого типа, включая определяемые пользователем typedef s .
Помимо этого, SystemVerilog обеспечивает удобный интерфейс для иностранных языков (например, C/C++) с помощью SystemVerilog DPI (интерфейс прямого программирования).
Программное обеспечение для проверки и синтеза
[ редактировать ]SystemVerilog широко используется в сфере проектирования микросхем для проверки проекта. Три крупнейших поставщика EDA ( Cadence Design Systems , Mentor Graphics , Synopsys ) включили SystemVerilog в свои многоязычные HDL-симуляторы . Хотя ни один симулятор пока не может претендовать на поддержку всего Справочного руководства по языку SystemVerilog, что затрудняет взаимодействие тестовых стендов , предпринимаются усилия по обеспечению совместимости между поставщиками. [ когда? ] В 2008 году Cadence и Mentor выпустили методологию открытой проверки, библиотеку классов и структуру использования с открытым исходным кодом, чтобы облегчить разработку многоразовых тестовых стендов и стандартных проверочных IP. Компания Synopsys, которая первой опубликовала библиотеку классов SystemVerilog (VMM), впоследствии отреагировала на это открытием своей собственной VMM для широкой публики. Многие сторонние поставщики объявили или уже выпустили проверочный IP-адрес SystemVerilog.
В роли синтеза проекта (преобразование описания проекта аппаратного обеспечения в список соединений ) внедрение SystemVerilog происходит медленно. Многие команды дизайнеров используют процессы проектирования, включающие несколько инструментов от разных поставщиков. Большинство проектных групп не могут перейти на RTL-проектирование SystemVerilog до тех пор, пока весь их набор интерфейсных инструментов ( линтеры , формальная проверка и автоматические генераторы тестовых структур ) не будет поддерживать общее языковое подмножество. [ нужно обновить? ]
См. также
[ редактировать ]- Список симуляторов HDL (Поиск SV2005)
- Верилог-АМС
- е (язык проверки)
- СпецC
- Акселлера
- СистемаC
- СистемаRDL
Ссылки
[ редактировать ]- ^ Рич, Д. «Эволюция SystemVerilog» IEEE Design and Test of Computers, июль/август 2003 г.
- ^ IEEE одобряет SystemVerilog, версию Verilog
- ^ IEEE 1800-2012 , IEEE , 2012 г.
- ^ IEEE 1800-2017 , IEEE , 2017 г.
- ^ IEEE 1800-2023, Стандарт IEEE для SystemVerilog — унифицированный язык проектирования, спецификации и проверки оборудования , IEEE , 2023 г.
- ^ Утверждение SystemVerilog: Введение
- Стандарт IEEE для SystemVerilog: унифицированный язык проектирования, спецификации и проверки оборудования . 2005. doi : 10.1109/IEESTD.2005.97972 . ISBN 978-0-7381-4810-6 .
- Стандарт IEEE для SystemVerilog — унифицированный язык проектирования, спецификации и проверки оборудования . 2009. doi : 10.1109/IEESTD.2009.5354441 . ISBN 978-0-7381-6130-3 .
- Стандарт IEEE для SystemVerilog — унифицированный язык проектирования, спецификации и проверки оборудования . 2013. doi : 10.1109/IEESTD.2013.6469140 . ISBN 978-0-7381-8110-3 .
- Стандарт IEEE для SystemVerilog — унифицированный язык проектирования, спецификации и проверки оборудования . 2017. doi : 10.1109/IEESTD.2018.8299595 . ISBN 978-1-5044-4509-2 .
- МакГрат, Дилан (9 ноября 2005 г.). «IEEE одобряет SystemVerilog, версию Verilog» . ЭЭ Таймс . Проверено 31 января 2007 г.
- Пунит Кумар (9 ноября 2005 г.). «Учебное пособие по системе Verilog» .
- Гопи Кришна (9 ноября 2005 г.). «Учебные пособия по SystemVerilog, SVA, SV DPI» .
- HDVЛ. «Больше веб-ссылок SystemVerilog» .
- Спир, Крис, «SystemVerilog для проверки», Спрингер, Нью-Йорк, штат Нью-Йорк. ISBN 0-387-76529-8
- Стюарт Сазерленд, Саймон Дэвидманн, Питер Флейк, «SystemVerilog for Design, второе издание: Руководство по использованию SystemVerilog для проектирования и моделирования аппаратного обеспечения» , Спрингер, Нью-Йорк, штат Нью-Йорк. ISBN 0-387-33399-1
- Бен Коэн, Сринивасан Венкатараманан, Аджита Кумари и Лиза Пайпер [1] Справочник по утверждениям SystemVerilog, 4-е издание, 2016 г. – http://SystemVerilog.us
- Бен Коэн Сринивасан Венкатараманан и Аджита Кумари [2] Прагматичный подход к внедрению VMM, - http://SystemVerilog.us
- Эрик Селигман и Том Шуберт [3] Формальная проверка: необходимый набор инструментов для современного проектирования СБИС, 24 июля 2015 г.,
Внешние ссылки
[ редактировать ]- Стандартный справочник IEEE
- 1800-2017 — Стандарт IEEE для SystemVerilog — унифицированный язык проектирования, спецификации и проверки аппаратного обеспечения . Версия 2017 доступна бесплатно через программу IEEE GET. [1]
- Учебники
- Разработка стандартов
- IEEE P1800 – Рабочая группа для SystemVerilog
- Сайты, использовавшиеся до IEEE 1800-2005.
- Языковые расширения
- Verilog AUTOs — система метакомментариев с открытым исходным кодом, упрощающая поддержку кода Verilog.
- Онлайн-инструменты
- EDA Playground – Запустите SystemVerilog из веб-браузера (бесплатная онлайн-IDE)
- sverule - навигатор SystemVerilog BNF (в соответствии со стандартом IEEE 1800-2012)
- Другие инструменты