SystemVerilog - SystemVerilog

SystemVerilog
SystemVerilog logo.png
Логотип SystemVerilog
ПарадигмаСтруктурированный (дизайн)
Объектно-ориентированный (проверка)
РазработаноSynopsys, потом IEEE
Впервые появился2002; 18 лет назад (2002)
Стабильный выпуск
IEEE 1800-2017 / 22 февраля 2018 г.; 2 года назад (2018-02-22)
Печатная дисциплинаСтатический, слабый
Расширения имени файла.sv, .svh
Под влиянием
Дизайн: Verilog, VHDL, C ++, Проверка: OpenVera, Ява

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. Текущая версия - стандарт IEEE 1800-2017.[3]

Набор функций SystemVerilog можно разделить на две отдельные роли:

  1. SystemVerilog для уровень регистрации-передачи (RTL) дизайн является продолжением Verilog-2005; все функции этого языка доступны в SystemVerilog. Следовательно, Verilog является подмножеством SystemVerilog.
  2. SystemVerilog для проверки использует обширные объектно-ориентированного программирования методы и более тесно связаны с Ява чем Verilog. Эти конструкции обычно не синтезируются.

В оставшейся части этой статьи обсуждаются возможности SystemVerilog, отсутствующие в Verilog-2005.

Особенности дизайна

Срок службы данных

В SystemVerilog указано два типа времени жизни данных: статический и автоматический. Автоматические переменные создаются в тот момент, когда выполнение программы попадает в область видимости переменной. Статические переменные создаются в начале выполнения программы и сохраняют одно и то же значение в течение всего жизненного цикла программы, если не присвоено новое значение во время выполнения.

Любая переменная, объявленная внутри задачи или функции без указания типа, будет считаться автоматической. Чтобы указать, что переменная статическая, поместите "статический" ключевое слово в объявлении перед типом, например, "статический int x;"."автоматический"ключевое слово используется таким же образом.

Новые типы данных

Расширенные типы переменных добавить новую возможность к типу "reg" Verilog:

логика [31:0] my_var;

Verilog-1995 и -2001 ограничивают переменные reg поведенческими утверждениями, такими как Код RTL. SystemVerilog расширяет тип reg, так что им может управлять один драйвер, такой как вентиль или модуль. SystemVerilog называет этот тип «логикой», чтобы напомнить пользователям, что он имеет эту дополнительную возможность и не является регистром оборудования. Имена «логика» и «рег» взаимозаменяемы. Сигнал с более чем одним драйвером (например, буфер с тремя состояниями за универсальный ввод / вывод ) необходимо объявить сетевой тип, такой как "провод", чтобы SystemVerilog мог определить окончательное значение.

Многомерный упакованные массивы унифицировать и расширить понятие Verilog о «регистрах» и «памяти»:

логика [1:0][2:0] my_pack[32];

Классический Verilog допускал объявление только одного измерения слева от имени переменной. SystemVerilog допускает любое количество таких «упакованных» размеров. Переменная типа упакованного массива отображает 1: 1 на целочисленную арифметическую величину. В приведенном выше примере каждый элемент my_pack может использоваться в выражениях как шестибитное целое число. Размеры справа от имени (в данном случае 32) называются «распакованными» размерами. Как в Verilog-2001, допускается любое количество размеров без упаковки.

Перечислимые типы данных (перечисляет) позволяют присвоить числовым величинам осмысленные имена. Переменные, объявленные как перечислимые, не могут быть присвоены переменным другого перечислимого типа без Кастинг. Это не относится к параметрам, которые были предпочтительной техникой реализации для перечисляемых величин в Verilog-2005:

typedef перечислить логика [2:0] {   КРАСНЫЙ, ЗЕЛЕНЫЙ, СИНИЙ, CYAN, Пурпурный, ЖЕЛТЫЙ} color_t;color_t   my_color = ЗЕЛЕНЫЙ;исходный $ display("Цвет% s", my_color.имя());

Как показано выше, разработчик может указать основной арифметический тип (логика [2: 0] в данном случае), который используется для представления значения перечисления. Здесь могут использоваться мета-значения X и Z, возможно, для представления незаконных состояний. Встроенная функция имя() возвращает строку ASCII для текущего пронумерованного значения, что полезно при проверке и тестировании.

Новые целочисленные типы: SystemVerilog определяет байт, shortint, int и longint как целые со знаком с двумя состояниями, имеющие 8, 16, 32 и 64 бита соответственно. А кусочек type - это тип с двумя состояниями переменной ширины, который работает так же, как логика. Типам с двумя состояниями не хватает Икс и Z метапредметы классического Verilog; работа с этими типами может привести к ускорению моделирования.

Структуры и союзы работают так же, как в Язык программирования C. Усовершенствования SystemVerilog включают упакованный атрибут и отмечен атрибут. В отмечен Атрибут позволяет во время выполнения отслеживать, какие члены объединения используются в настоящее время. В упакованный Атрибут заставляет структуру или объединение отображаться 1: 1 на упакованный массив битов. Содержание структура типы данных занимают непрерывный блок памяти без пропусков, аналогично битовые поля в C и C ++:

typedef структура упакованный {    кусочек [10:0]  Экспо;    кусочек         знак;    кусочек [51:0]  мант;} FP;FP     нуль = 64'b0;

Как показано в этом примере, SystemVerilog также поддерживает typedefs, как в C и C ++.

Процедурные блоки

SystemVerilog представляет три новых процедурных блока, предназначенных для моделирования аппаратное обеспечение: always_comb (моделировать комбинационная логика ), always_ff (за шлепки ), и always_latch (за защелки ). В то время как Verilog использовал одиночный универсальный всегда block для моделирования различных типов аппаратных структур, каждый из новых блоков SystemVerilog предназначен для моделирования определенного типа аппаратного обеспечения путем наложения семантических ограничений, чтобы гарантировать, что аппаратное обеспечение, описываемое блоками, соответствует предполагаемому использованию модели. Компилятор HDL или программа проверки могут предпринять дополнительные шаги, чтобы гарантировать, что происходит только предполагаемый тип поведения.

An always_comb блочные модели комбинационная логика. Симулятор выводит список чувствительности, чтобы быть всеми переменными из содержащихся операторов:

always_comb начинать    tmp = б * б - 4 * а * c;    нет корня = (tmp < 0);конец

An always_latch блок предназначен для вывода чувствительный к уровню защелка. Опять же, список чувствительности выводится из кода:

always_latch    если (en) q <= d;

An always_ff блок предназначен для моделирования синхронная логика (особенно чувствительный к краям последовательная логика ):

always_ff @(поза clk)    считать <= считать + 1;

Автоматизация электронного проектирования (EDA) инструменты могут проверить замысел проекта, проверив, что модель оборудования не нарушает семантику использования блоков. Например, новые блоки ограничивают присвоение переменной, разрешая только один источник, тогда как Verilog всегда блокировать разрешенное назначение из нескольких процедурных источников.

Интерфейсы

Для небольших проектов Verilog порт компактно описывает связь модуля с окружающей средой. Но основные блоки в большой иерархии проектов обычно имеют количество портов, исчисляемое тысячами. SystemVerilog представляет концепцию интерфейсы чтобы уменьшить избыточность объявления имени порта между подключенными модулями, а также группой и Абстрактные связанные сигналы в объявленный пользователем пакет. Дополнительным понятием является модпорт, показывающий направление логических связей.

Пример:

интерфейс intf;  логика а;  логика б;  модпорт в (Вход а, выход б);  модпорт из (Вход б, выход а); конечный интерфейсмодуль верх;  intf я ();  u_a m1 (.i1(я.в));  u_b m2 (.i2(я.из));конечный модульмодуль u_a (intf.в i1);конечный модульмодуль u_b (intf.из i2);конечный модуль

Особенности проверки

Следующие функции проверки, как правило, не синтезируются, то есть они не могут быть реализованы аппаратно на основе кода HDL. Вместо этого они помогают в создании расширяемых, гибких испытательные стенды.

Новые типы данных

В нить тип данных представляет собой текст переменной длины нить. Например:

нить s1 = "Привет";нить s2 = "Мир";нить п = ".?!";нить s3 = {s1, ", ", s2, п[2]}; // конкатенация строк$ display("[% d]% s", s3.len(), s3); // симуляция напечатает: "[13] Hello, world!"

В дополнение к статическому массиву, используемому в дизайне, SystemVerilog предлагает динамические массивы, ассоциативные массивы и очереди:

int cmdline_elements; // # элементы для динамического массиваint да[];             // динамический массивint ай[int];          // ассоциативный массив, индексируемый intint в качестве[нить];       // ассоциативный массив, индексируемый строкойint qa[$];            // очередь, индексированная как массив или встроенными методамиисходный начинать    cmdline_elements = 16;    да = новый[ cmdline_elements ]; // Выделяем массив из 16 элементовконец

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

Ассоциативный массив можно рассматривать как двоичное дерево поиска с указанный пользователем тип ключа и тип данных. Ключ подразумевает заказ; элементы ассоциативного массива можно считывать в лексикографическом порядке. Наконец, очередь обеспечивает большую часть функций C ++ STL дек type: элементы можно эффективно добавлять и удалять с любого конца. Эти примитивы позволяют создавать сложные структуры данных, необходимые для табло большой дизайн.

Классы

SystemVerilog предоставляет объектно-ориентированного программирования модель.

В SystemVerilog классы поддерживают одинарное наследование модель, но может реализовать функциональность, аналогичную множественному наследованию, за счет использования так называемых «интерфейсных классов» (идентичных по концепции интерфейс особенность Java). Классы можно параметризовать по типу, обеспечивая основную функцию Шаблоны C ++. Тем не мение, специализация шаблона и шаблоны функций не поддерживаются.

SystemVerilog's полиморфизм функции аналогичны функциям C ++: программист может специально написать виртуальный функция, чтобы получить контроль над функцией усиления производного класса. Видеть виртуальная функция для получения дополнительной информации.

Инкапсуляция и сокрытие данных достигается с помощью местный и защищенный ключевые слова, которые должны применяться к любому элементу, который необходимо скрыть. По умолчанию все свойства класса общественный.

Экземпляры классов динамически создаются с помощью новый ключевое слово. А конструктор обозначается функция новая можно определить. SystemVerilog имеет автоматический вывоз мусора, поэтому нет языковых средств для явного уничтожения экземпляров, созданных новый оператор.

Пример:

виртуальный учебный класс объем памяти;    виртуальный функция кусочек [31:0] читать(кусочек [31:0] адрес); конечная функция    виртуальный функция пустота записывать(кусочек [31:0] адрес, кусочек [31:0] данные); конечная функцияконец классаучебный класс SRAM #(параметр AWIDTH=10) расширяет объем памяти;    кусочек [31:0] мем [1<<AWIDTH];    виртуальный функция кусочек [31:0] читать(кусочек [31:0] адрес);        возвращаться мем[адрес];    конечная функция    виртуальный функция пустота записывать(кусочек [31:0] адрес, кусочек [31:0] данные);        мем[адрес] = данные;    конечная функцияконец класса

Ограниченная случайная генерация

Целочисленные величины, определенные либо в определении класса, либо как отдельные переменные в некоторой лексической области видимости, могут быть присвоенные случайные значения на основе набора ограничений. Эта функция полезна для создания рандомизированные сценарии для проверки.

В определениях классов ранд и randc модификаторы сигнализируют о переменных, которые должны пройти рандомизацию. randc указывает перестановка рандомизация на основе, когда переменная примет все возможные значения один раз, прежде чем любое значение будет повторено. Переменные без модификаторов не рандомизируются.

учебный класс eth_frame;    ранд кусочек [47:0] dest;    ранд кусочек [47:0] src;    ранд кусочек [15:0] f_type;    ранд байт       полезная нагрузка[];    кусочек [31:0]      fcs;    ранд кусочек [31:0] fcs_corrupt;    ограничение базовый {        полезная нагрузка.размер внутри {[46:1500]};    }    ограничение good_fr {        fcs_corrupt == 0;    }конец класса

В этом примере fcs поле не рандомизировано; на практике он будет вычисляться с помощью генератора CRC, а fcs_corrupt поле, используемое для его повреждения, чтобы ввести ошибки FCS. Два показанных ограничения применимы к соответствию Кадры Ethernet. Ограничения могут быть включены выборочно; эта функция может потребоваться в приведенном выше примере для создания поврежденных кадров. Ограничения могут быть произвольно сложными, включая взаимосвязь между переменными, последствиями и итерациями. SystemVerilog решатель ограничений требуется для поиска решения, если оно существует, но не дает никаких гарантий относительно времени, которое потребуется для этого, так как это, как правило, NP-жесткий проблема (логическая выполнимость ).

Методы рандомизации

В каждом классе SystemVerilog есть 3 предопределенных метода рандомизации: pre_randomize, randomize и post_randomize. Метод randomize вызывается пользователем для рандомизации переменных класса. Метод pre_randomize вызывается методом randomize перед рандомизацией, а метод post_randomize вызывается методом randomize после рандомизации.

учебный класс eth_frame;    ранд кусочек [47:0] dest;    ранд кусочек [47:0] src;    ранд кусочек [15:0] f_type;    ранд байт       полезная нагрузка[];    кусочек [31:0]      fcs;    ранд кусочек        поврежденный_frame;    ограничение базовый {        полезная нагрузка.размер внутри {[46:1500]};    }        функция пустота post_randomize()      это.Calcul_fcs(); // обновляем поле fcs согласно рандомизированному кадру      если (поврежденный_frame)  // если этот фрейм должен быть поврежден         это.коррумпированный_fcs(); // повредить fcs    конечная функцияконец класса

Контроль ограничений

Методы constraint_mode () и random_mode () используются для управления рандомизацией. constraint_mode () используется для включения и выключения определенного ограничения, а random_mode используется для включения или выключения рандомизации конкретной переменной. Приведенный ниже код описывает и процедурно тестирует Кадр Ethernet:

учебный класс eth_frame;    ранд кусочек [47:0] dest;    ранд кусочек [47:0] src;    ранд кусочек [15:0] f_type;    ранд байт       полезная нагрузка[];    кусочек [31:0]      fcs;    ранд кусочек        поврежденный_frame;    ограничение базовый {        полезная нагрузка.размер внутри {[46:1500]};    }       ограничение one_src_cst {        src == 48'h1f00    }    ограничение dist_to_fcs {        fcs расстояние {0:/30,[1:2500]:/50};  // 30 и 50 - веса (в данном примере 30/80 или 50/80)     }    конец класса...eth_frame my_frame;my_frame.one_src_cst.constraint_mode(0); // ограничение one_src_cst не будет учтеноmy_frame.f_type.random_mode(0);        // переменная f_type не будет рандомизирована для этого экземпляра кадра.my_frame.рандомизировать();

Утверждения

Утверждения полезны для проверки свойств проекта, которые проявляются после достижения определенного условия или состояния. SystemVerilog имеет собственный язык спецификации утверждений, аналогичный Язык спецификации свойств. Подмножество языковых конструкций SystemVerilog, обслуживающих утверждения, обычно называется SystemVerilog Assertion или SVA.[4]

Утверждения SystemVerilog построены из последовательности и характеристики. Свойства - это надмножество последовательностей; любая последовательность может использоваться как свойство, хотя обычно это не используется.

Последовательности состоят из логические выражения дополненный временные операторы. Самый простой темпоральный оператор - это ## оператор, который выполняет конкатенацию:[требуется разъяснение ]

последовательность S1;    @(поза clk) req ##1 gnt;конечная последовательность

Эта последовательность соответствует, если gnt сигнал становится высоким через один такт после req идет высоко. Обратите внимание, что все операции последовательности синхронны с часами.

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

Утверждение работает, постоянно пытаясь оценить последовательность или свойство. Утверждение не выполняется, если свойство терпит неудачу. Приведенная выше последовательность завершится ошибкой, когда req низкий. Чтобы точно выразить требование, чтобы gnt следить req требуется свойство:

свойство req_gnt;    @(поза clk) req |=> gnt;конечная собственностьassert_req_gnt: утверждать свойство (req_gnt) еще $ ошибка("req, за которым не следует gnt.");

Этот пример показывает значение оператор |=>. Предложение слева от импликации называется предшествующий а пункт справа называется последующий. Оценка импликации начинается с повторных попыток оценить антецедент. Когда предшествующее преуспевает, выполняется попытка консеквента, и успех утверждения зависит от успеха консеквента. В этом примере консеквент не будет предприниматься до тех пор, пока req идет высоко, после чего свойство выйдет из строя, если gnt на следующие часы не так высоко.

Помимо утверждений, SystemVerilog поддерживает предположения и покрытие собственности. Предположение устанавливает условие, что формальная логика инструмент доказательства должен считать, что это правда. Утверждение определяет свойство, истинность которого должна быть подтверждена. В симуляция, как утверждения, так и предположения проверяются тестовыми стимулами. Покрытие собственности позволяет инженеру по верификации убедиться, что утверждения точно соответствуют проекту.[нечеткий ]

Покрытие

Покрытие применительно к языкам проверки аппаратного обеспечения относится к сбору статистики на основе событий выборки в рамках моделирования. Покрытие используется, чтобы определить, когда тестируемое устройство (DUT) подвергся воздействию достаточного количества стимулов, поэтому есть высокая уверенность в том, что DUT работает правильно. Обратите внимание, что это отличается от покрытие кода который инструментирует код проекта, чтобы гарантировать выполнение всех строк кода в проекте. Функциональное покрытие гарантирует, что все желаемое угол и крайние случаи в дизайнерское пространство Был исследовал.

Группа покрытия SystemVerilog создает базу данных «ящиков», в которых хранится гистограмма значений связанной переменной. Также можно определить перекрестное покрытие, которое создает гистограмму, представляющую Декартово произведение нескольких переменных.

А отбор проб событие контролирует, когда берется образец. В отбор проб событие может быть событием Verilog, входом или выходом блока кода или вызовом образец метод группы покрытия. Требуется осторожность, чтобы гарантировать, что данные отбираются только тогда, когда они значимы.

Например:

учебный класс eth_frame;   // Определения, как указано выше   covergroup cov;      точка прикрытия dest {          мусорные ведра bcast[1] = {48'hFFFFFFFFFFFF};          мусорные ведра ucast[1] = дефолт;      }      точка прикрытия f_type {          мусорные ведра длина[16] = { [0:1535] };          мусорные ведра напечатанный[16] = { [1536:32767] };          мусорные ведра Другой[1] = дефолт;      }      psize: точка прикрытия полезная нагрузка.размер {          мусорные ведра размер[] = { 46, [47:63], 64, [65:511], [512:1023], [1024:1499], 1500 };      }      sz_x_t: Пересекать f_type, psize;   конечная группаконец класса

В этом примере инженера по верификации интересует распределение широковещательных и одноадресных кадров, поле size / f_type и размер полезной нагрузки. Диапазоны точки покрытия размера полезной нагрузки отражают интересные угловые случаи, включая кадры минимального и максимального размера.

Синхронизация

Сложная тестовая среда состоит из повторно используемых компонентов проверки, которые должны взаимодействовать друг с другом. Verilog's 'мероприятие 'примитив позволяет различным блокам процедурных операторов запускать друг друга, но обеспечивает выполнение потока синхронизация было до (умного) использования программиста. SystemVerilog предлагает два примитивы специально для межпоточной синхронизации: почтовый ящик и семафор. Почтовый ящик смоделирован как ФИФО очередь сообщений. При желании FIFO может быть параметризованный типом так что только объекты указанного типа может пройти через это. Обычно объекты экземпляры класса представляющий сделки: элементарные операции (например, отправка кадра), которые выполняются компонентами проверки. Семафор моделируется как счетный семафор.

Общие улучшения классического Verilog

В дополнение к новым функциям, описанным выше, SystemVerilog повышает удобство использования существующих языковых функций Verilog. Ниже приведены некоторые из этих улучшений:

Кроме того, SystemVerilog позволяет удобно интерфейс к иностранным языкам (например, C / C ++), SystemVerilog DPI (Интерфейс прямого программирования).

Программное обеспечение для проверки и синтеза

При проверке проекта SystemVerilog широко используется в индустрии проектирования микросхем. Три крупнейших поставщика EDA (Системы дизайна Cadence, Наставник Графика, Synopsys ) включили SystemVerilog в свой многоязычный Симуляторы HDL. Хотя ни один симулятор еще не может претендовать на поддержку всего SystemVerilog LRM[когда определяется как? ], делаем тестовый стенд совместимость проблема, усилия по продвижению совместимости между поставщиками продолжаются.[когда? ] В 2008 году Cadence и Mentor выпустили Open Verification Methodology, библиотеку классов и среду использования с открытым исходным кодом для облегчения разработки повторно используемых тестовых стендов и готовых верификационных IP. Synopsys, которая была первой, кто опубликовал библиотеку классов SystemVerilog (VMM), впоследствии отреагировала, открыв свой проприетарный VMM для широкой публики. Многие сторонние поставщики объявили или уже выпустили проверочный IP-адрес SystemVerilog.

в синтез дизайна роль (преобразование описания конструкции оборудования в шлюзсписок соединений ), Внедрение SystemVerilog было медленным. Многие команды разработчиков используют потоки проектирования, в которых задействовано несколько инструментов от разных поставщиков. Большинство дизайнерских групп не могут перейти на SystemVerilog RTL-design, пока весь их набор интерфейсных инструментов (линтеры, формальная проверка и автоматические генераторы тестовых структур ) поддерживают подмножество общего языка.[нужно обновление? ]

Смотрите также

Рекомендации

  • 1800-2005 - Стандарт IEEE для системной верификации - унифицированный язык проектирования, спецификации и проверки оборудования. 2005. Дои:10.1109 / IEEESTD.2005.97972. ISBN  978-0-7381-4810-6.
  • 1800-2009 - Стандарт IEEE для SystemVerilog - унифицированный язык проектирования, спецификации и проверки оборудования. 2009. Дои:10.1109 / IEEESTD.2009.5354441. ISBN  978-0-7381-6130-3.
  • 1800-2012 - Стандарт IEEE для SystemVerilog - унифицированный язык проектирования, спецификации и проверки оборудования. 2013. Дои:10.1109 / IEEESTD.2013.6469140. ISBN  978-0-7381-8110-3.
  • 1800-2017 - Стандарт IEEE для SystemVerilog - унифицированный язык проектирования, спецификации и проверки оборудования. 2017. Дои:10.1109 / IEEESTD.2018.8299595. ISBN  978-1-5044-4509-2.
  • МакГрат, Дилан (2005-11-09). «IEEE одобряет SystemVerilog, версию Verilog». EE Times. Получено 2007-01-31.
  • Пунит Кумар (2005-11-09). "Учебное пособие по системе Verilog".
  • Гопи Кришна (2005-11-09). "Учебные материалы по SystemVerilog, SVA, SV DPI".
  • HDVL. "Дополнительные ссылки на SystemVerilog".
  • Копье, Крис, «SystemVerilog для проверки» Спрингер, Нью-Йорк, штат Нью-Йорк. ISBN  0-387-76529-8
  • Стюарт Сазерленд, Саймон Дэвидманн, Питер Флейк, "SystemVerilog for Design, второе издание: руководство по использованию SystemVerilog для проектирования и моделирования оборудования" Спрингер, Нью-Йорк, штат Нью-Йорк. ISBN  0-387-33399-1
  • Бен Коэн, Сринивасан Венкатараманан, Аджита Кумари и Лиза Пайпер [1] Справочник по SystemVerilog Assertions, 4-е издание, 2016 г. http://SystemVerilog.us
  • Бен Коэн Сринивасан Венкатараманан и Аджита Кумари [2] Прагматический подход к принятию VMM, - http://SystemVerilog.us
  • Эрик Селигман и Том Шуберт [3] Формальная проверка: необходимый инструментарий для проектирования современных СБИС, 24 июля 2015 г.,

внешняя ссылка

Стандартные ссылки IEEE

Самые последние стандартные документы SystemVerilog: доступно бесплатно от IEEExplore.

Учебники
Разработка стандартов
Расширения языка
  • Verilog АВТО - Система мета-комментариев с открытым исходным кодом для упрощения поддержки кода Verilog
Онлайн-инструменты
  • EDA Детская площадка - Запустите SystemVerilog из веб-браузера (бесплатная онлайн-среда IDE)
  • SVeN - SystemVerilog BNF Navigator (в соответствии с IEEE 1800-2012)
Другие инструменты
  • SVUnit - фреймворк модульного тестирования для разработчиков, пишущих код в SystemVerilog. Проверяйте модули, классы и интерфейсы SystemVerilog изолированно.
  • sv2v - конвертер с открытым исходным кодом из SystemVerilog в Verilog