СистемаVerilog

Язык описания и проверки оборудования

СистемаVerilog
ПарадигмаСтруктурированный (дизайн)
Объектно-ориентированный (верификация)
РазработаноСинопсис , позже IEEE
Впервые появился2002 ; 22 года назад ( 2002 )
Стабильный релиз
IEEE 1800-2023 / 16 декабря 2023 г. ; 11 месяцев назад ( 2023-12-16 )
Дисциплина набора текстаСтатичный , слабый
Расширения имени файла.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 можно разделить на две отдельные роли:

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

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

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

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

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

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

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

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

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

Многомерные упакованные массивы объединяют и расширяют понятия «регистров» и «памяти» в Verilog:

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

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

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

typedef enum logic [ 2 : 0 ] { КРАСНЫЙ , ЗЕЛЕНЫЙ , СИНИЙ , ГОЛУБОЙ , ПУРПУРНЫЙ , ЖЕЛТЫЙ } color_t ;           color_t my_color = GREEN ; начальный $ display ( "Цвет %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; работа с этими типами может привести к более быстрому моделированию.

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

typedef struct packed { bit [ 10 : 0 ] expo ; bit sign ; bit [ 51 : 0 ] mant ; } FP ;            FP ноль = 64'b0 ;   

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

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

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

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

always_comb начало tmp = b * b - 4 * a * c ; no_root = ( tmp < 0 ); конец                 

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

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

Блок always_ffмоделирует синхронную логику (особенно чувствительную к фронту последовательную логику ):

always_ff @( posedge clk ) количество <= количество + 1 ;       

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

Интерфейсы

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

Пример:

интерфейс intf ; логика a ; логика b ; modport in ( вход a , выход b ); modport out ( вход b , выход a ); endinterface                  модуль top ; intf i (); u_a m1 (. i1 ( i . in )); u_b m2 (. i2 ( i . out )); endmodule          модуль u_a ( intf . in i1 ); конец модуля   модуль u_b ( intf . out i2 ); конец модуля   

Функции проверки

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

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

Тип данных представляет собой текстовую строкуstring переменной длины . Например:

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

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

int cmdline_elements ; // # элементы для динамического массива int da []; // динамический массив int ai [ int ]; // ассоциативный массив, индексированный int int as [ string ]; // ассоциативный массив, индексированный строкой int qa [$]; // очередь, индексированная как массив или встроенными методами          initial begin cmdline_elements = 16 ; da = new [ cmdline_elements ]; // Выделяем массив из 16 элементов end          

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

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

Классы

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

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

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

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

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

Пример:

виртуальный класс Память ; виртуальная функция бит [ 31 : 0 ] чтение ( бит [ 31 : 0 ] адрес ); конечная функция виртуальная функция void запись ( бит [ 31 : 0 ] адрес , бит [ 31 : 0 ] данные ); конечная функция конецкласс                    класс SRAM #( параметр AWIDTH = 10 ) расширяет память ; бит [ 31 : 0 ] mem [ 1 << AWIDTH ];          виртуальная функция бит [ 31 : 0 ] чтение ( бит [ 31 : 0 ] адрес ); возврат памяти [ адрес ]; конечная функция          виртуальная функция 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 ;                        ограничение basic { полезная нагрузка . размер внутри {[ 46 : 1500 ]}; }       ограничение 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 damaged_frame ;                       constraint basic { payload . size inside {[ 46 : 1500 ]}; } function void post_randomize () this . calculate_fcs (); // обновить поле fcs в соответствии с рандомизированным кадром if ( corrupted_frame ) // если этот кадр должен быть поврежден this . corrupt_fcs (); // повредить 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 damaged_frame ;                       ограничение basic { полезная нагрузка . размер внутри {[ 46 : 1500 ]}; } ограничение one_src_cst { src == 48'h1f00 }               ограничение dist_to_fcs { fcs dist { 0 :/ 30 ,[ 1 : 2500 ] :/ 50 }; // 30 и 50 — это веса (в этом примере 30/80 или 50/80) }       конецкласса . . . eth_frame my_frame ; my_frame.one_src_cst.constriction_mode ( 0 ); // ограничение one_src_cst не будет учитываться my_frame.f_type.random_mode( 0 ) ; // переменная f_type не будет рандомизирована для этого экземпляра кадра . my_frame.randomize ( ) ;  

Утверждения

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

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

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

последовательность S1 ; @( posedge clk ) req ## 1 gnt ; конец последовательности      

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

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

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

свойство req_gnt ; @( posedge clk ) req |=> gnt ; endproperty      assert_req_gnt: свойство assert ( req_gnt ) else $ error ( "за req не следует gnt." );     

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

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

Покрытие

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

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

Событие выборки контролирует, когда берется выборка. Событие выборки может быть событием Verilog, входом или выходом из блока кода или вызовом метода sampleгруппы покрытия. Необходимо быть внимательным, чтобы гарантировать, что выборка данных выполняется только тогда, когда она имеет смысл.

Например:

class eth_frame ; // Определения как выше 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: кросс f_type , psize ; конечная группа конечный класс    

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

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

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

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

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

Помимо этого, SystemVerilog обеспечивает удобный интерфейс с иностранными языками (например, C/C++) с помощью SystemVerilog DPI (интерфейс прямого программирования).

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

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

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

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

Ссылки

  1. ^ Рич, Д. «Эволюция SystemVerilog» IEEE Design and Test of Computers, июль/август 2003 г.
  2. ^ IEEE одобряет SystemVerilog, пересмотренную версию Verilog
  3. ^ IEEE 1800-2012, IEEE , 2012
  4. ^ IEEE 1800-2017, IEEE , 2017
  5. ^ IEEE 1800-2023, Стандарт IEEE для SystemVerilog — унифицированный язык проектирования, спецификации и верификации оборудования, IEEE , 2023
  6. ^ Утверждение SystemVerilog: Введение
  • Стандарт IEEE для SystemVerilog: унифицированный язык проектирования, спецификации и верификации оборудования . 2005. doi :10.1109/IEEESTD.2005.97972. ISBN 978-0-7381-4810-6.
  • Стандарт IEEE для SystemVerilog — унифицированный язык проектирования, спецификации и верификации оборудования . 2009. doi :10.1109/IEEESTD.2009.5354441. ISBN 978-0-7381-6130-3.
  • Стандарт IEEE для SystemVerilog — унифицированный язык проектирования, спецификации и верификации оборудования . 2013. doi :10.1109/IEEESTD.2013.6469140. ISBN 978-0-7381-8110-3.
  • Стандарт IEEE для SystemVerilog — унифицированный язык проектирования, спецификации и верификации оборудования . 2017. doi :10.1109/IEEESTD.2018.8299595. ISBN 978-1-5044-4509-2.
  • МакГрат, Дилан (2005-11-09). "IEEE одобряет SystemVerilog, пересмотр Verilog". EE Times . Получено 2007-01-31 .
  • Пунит Кумар (09.11.2005). «Учебник по системе Verilog».
  • Гопи Кришна (9 ноября 2005 г.). «Учебные пособия по SystemVerilog, SVA, SV DPI».
  • HDVL. «Больше ссылок SystemVerilog».
  • Спир, Крис, «SystemVerilog для проверки» Springer, Нью-Йорк, штат Нью-Йорк. ISBN 0-387-76529-8 
  • Стюарт Сазерленд, Саймон Дэвидманн, Питер Флэйк, «SystemVerilog для проектирования, второе издание: руководство по использованию SystemVerilog для проектирования и моделирования оборудования», Springer, Нью-Йорк, штат Нью-Йорк. ISBN 0-387-33399-1 
  • Бен Коэн, Шринивасан Венкатараманан, Аджита Кумари и Лиза Пайпер [1] SystemVerilog Assertions Handbook, 4-е издание, 2016 г. - http://SystemVerilog.us
  • Бен Коэн Шринивасан Венкатараманан и Аджита Кумари [2] Прагматичный подход к принятию VMM, - http://SystemVerilog.us
  • Эрик Селигман и Том Шуберт [3] Формальная проверка: необходимый набор инструментов для современного проектирования СБИС, 24 июля 2015 г.,
Ссылка на стандарт IEEE
  • 1800-2017 — Стандарт IEEE для SystemVerilog — унифицированный язык проектирования, спецификации и верификации оборудования. Версия 2017 года доступна бесплатно через программу IEEE GET. [1]
Учебники
  • Учебное пособие по SystemVerilog
  • Учебник SystemVerilog для начинающих
Разработка стандартов
  • IEEE P1800 – Рабочая группа SystemVerilog
  • Сайты, использовавшиеся до IEEE 1800-2005
    • Официальный сайт SystemVerilog
    • Технические комитеты SystemVerilog
Расширения языка
  • Verilog AUTOs – система метакомментариев с открытым исходным кодом для упрощения поддержки кода Verilog
Онлайн-инструменты
  • EDA Playground – Запустите SystemVerilog из веб-браузера (бесплатная онлайн-IDE)
  • sverule – Навигатор SystemVerilog BNF (в соответствии с IEEE 1800-2012)
Другие инструменты
  • SVUnit – фреймворк модульного тестирования для разработчиков, пишущих код на SystemVerilog. Проверяйте модули, классы и интерфейсы SystemVerilog изолированно.
  • sv2v — конвертер с открытым исходным кодом из SystemVerilog в Verilog
  1. ^ Программа IEEE GET, IEEE
Взято с "https://en.wikipedia.org/w/index.php?title=SystemVerilog&oldid=1247377792"