~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ B4E601C59F4F40B9CA28C1531398E94B__1716743280 ✰
Заголовок документа оригинал.:
✰ SystemVerilog - Wikipedia ✰
Заголовок документа перевод.:
✰ СистемаVerilog — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/SystemVerilog ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/b4/4b/b4e601c59f4f40b9ca28c1531398e94b.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/b4/4b/b4e601c59f4f40b9ca28c1531398e94b__translat.html ✰
Дата и время сохранения документа:
✰ 20.06.2024 22:01:42 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 26 May 2024, at 20:08 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

СистемаVerilog — Википедия Jump to content

СистемаVerilog

Из Википедии, бесплатной энциклопедии

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

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

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

Срок действия данных [ править ]

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

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

Новые типы данных [ править ]

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

логика   [  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 , допускается любое количество распакованных измерений.

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

typedef   enum   log   [  2  :  0  ]   { 
    КРАСНЫЙ  ,   ЗЕЛЕНЫЙ  ,   СИНИЙ  ,   ГОЛУБОЙ  ,   ПУРПУРНЫЙ  ,   ЖЕЛТЫЙ 
 }   color_t  ; 

  color_t     my_color   =   ЗЕЛЕНЫЙ  ; 
  начальный   $  display  (  "Цвет %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   упаковано   { 
     бит   [  10  :  0  ]    expo  ; 
      битовый           знак  ; 
      бит   [  51  :  0  ]    мант  ; 
  }   ФП  ; 

  FP       ноль   =   64'b0  ; 

Как показано в этом примере, SystemVerilog также поддерживает typedefs , как в 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 
     if   (  en  )   q   <=   d  ; 

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

Always_ff   @(  posege   clk  ) 
     count   <=   count   +   1  ; 

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

Интерфейсы [ править ]

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

Пример:

интерфейс   intf  ; 
    логика   а  ; 
    логика   б  ; 
    modport   in   (  вход   a  ,   выход   b  ); 
   modport    выход   (  вход   b  ,   выход   a  );  
 endinterface 

  модуль   top  ; 
    int   я   (); 
    u_a   m1   (.  i1  (  i  .  in  )); 
    u_b   m2   (.  i2  (  i  .  out  )); 
 конечного 

  модуль   модуля u_a   (  intf  .  in   i1  ); 
 конечного модуля 

  модуль   u_b   (  intf  .  out   i2  ); 
  конечный модуль 

Возможности проверки [ править ]

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

Новые типы данных [ править ]

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

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

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

int   cmdline_elements  ;    // # элементы динамического массива 
 int   da  [];                // динамический массив 
 int   ai  [  int  ];             // ассоциативный массив, индексированный int 
 int   as  [  string  ];          // ассоциативный массив, индексированный строкой 
 int   qa  [$];               // очередь, индексируемая как массив или встроенными методами 

 Initial   Begin 
     cmdline_elements   =   16  ; 
      да   =   новый  [   cmdline_elements   ];    // Выделяем массив из 16 элементов 
 end 

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

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

Классы [ править ]

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

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

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

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

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

Пример:

виртуальный   класс   Память  ; 
     виртуальной   функции   бита   [  31  :  0  ]    чтение  (  бит   [  31  :  0  ]   адрес  );    конечная функция 
     виртуальной   функции   void   write  (  бит   [  31  :  0  ]   адрес  ,   бит   [  31  :  0  ]   данные  );    endfunction 
 endclass 

 class   SRAM   #(  параметр   AWIDTH  =  10  )   расширяет   память  ; 
      бит   [  31  :  0  ]   mem   [  1  <<  AWIDTH  ]; 

     виртуальной   функции   бита   [  31  :  0  ]    чтение  (  бит   [  31  :  0  ]   адрес  ); 
          вернуть   память  [  адрес  ]; 
      конечная функция 

     виртуальной   функции   void   write  (  бит   [  31  :  0  ]   адрес  ,   бит   [  31  :  0  ]   данные  ); 
          мем  [  адрес  ]   =   данные  ; 
     функции 
  конечный класс 

Ограниченная случайная генерация [ править ]

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

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

класс   eth_frame  ; 
      rand   бит   [  47  :  0  ]   dest  ; 
      rand   бит   [  47  :  0  ]   источник  ; 
      rand   бит   [  15  :  0  ]   f_type  ; 
      rand   байт         полезной нагрузки  []; 
      бит   [  31  :  0  ]        fcs  ; 
      rand   бит   [  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. Метод рандомизации вызывается пользователем для рандомизации переменных класса. Метод pre_randomize вызывается методом рандомизации перед рандомизацией, а метод post_randomize вызывается методом рандомизации после рандомизации.

класс   eth_frame  ; 
      rand   бит   [  47  :  0  ]   dest  ; 
      rand   бит   [  47  :  0  ]   источник  ; 
      rand   бит   [  15  :  0  ]   f_type  ; 
      rand   байт         полезной нагрузки  []; 
      бит   [  31  :  0  ]        fcs  ; 
      рандом   бит          поврежденный_фрейм  ; 

      ограничение   базовое   { 
         полезная нагрузка  .   размер   внутри   {[  46  :  1500  ]}; 
      } 
    
     Функция   void   post_randomize  () 
       this  .   вычислить_fcs  ();    // обновляем поле fcs в соответствии со случайным кадром 
       if   (  corrupted_frame  )    // если этот кадр должен быть поврежден 
         this  .   коррумпированный_fcs  ();   fcs 
     функции 
  // повреждаем конечный класс конечной 

Управление ограничениями [ править ]

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

класс   eth_frame  ; 
      rand   бит   [  47  :  0  ]   dest  ; 
      rand   бит   [  47  :  0  ]   источник  ; 
      rand   бит   [  15  :  0  ]   f_type  ; 
      rand   байт         полезной нагрузки  []; 
      бит   [  31  :  0  ]        fcs  ; 
      рандом   бит          поврежденный_фрейм  ; 

      ограничение   базовое   { 
         полезная нагрузка  .   размер   внутри   {[  46  :  1500  ]}; 
      } 
   
     ограничение   one_src_cst   { 
         src   ==   48'h1f00 
     } 

     ограничение   dist_to_fcs   { 
         fcs   dist   {  0  :/  30  , [  1  :  2500  ]  :/  50  };     // 30 и 50 — это веса (30/80 или 50/80 в этом примере) 
     } 

 endclass 
 . 
  . 
  . 
  eth_frame   my_frame  ; 

  мой_фрейм  .   one_src_cst  .   режим ограничения  (  0  );    // ограничение one_src_cst не будет учитываться 
 my_frame  .   f_type  .   случайный_режим  (  0  );           // переменная f_type не будет рандомизирована для этого экземпляра кадра. 
  мой_фрейм  .   рандомизировать  (); 

Утверждения [ править ]

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

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

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

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

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

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

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

свойство   req_gnt  ; 
      @(  posege   clk  )   req   |=>   gnt  ; 
  endproperty 

 Assert_req_gnt:   утверждения   свойство   (  req_gnt  )   else   $  error  (  «req не сопровождается gnt.»  ); 

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

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

Охват [ править ]

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

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

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

Например:

класс   eth_frame  ; 
     // Определения, приведенные выше, 
    Covergroup   cov  ; 
        точка покрытия   dest   { 
           bins   bcast  [  1  ]   =   {  48'hFFFFFFFFFFFF  }; 
            bins   ucast  [  1  ]   =   по умолчанию  ; 
        } 
       Coverpoint   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 Примитив « события позволял различным блокам процедурных операторов запускать друг друга, но обеспечение синхронизации потоков зависело от (умного) использования программиста. SystemVerilog предлагает два примитива специально для межпоточной синхронизации: почтовый ящик и семафор . Почтовый ящик моделируется как очередь сообщений FIFO . При желании FIFO можно параметризовать по типу , чтобы только объекты указанного типа через него можно было передавать . Обычно объекты представляют собой экземпляры классов, представляющие транзакции : элементарные операции (например, отправка кадра), которые выполняются компонентами проверки. Семафор моделируется как счетный семафор .

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

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

Помимо этого, 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 до тех пор, пока весь их набор интерфейсных инструментов ( линтеры , формальная проверка и автоматические генераторы тестовых структур ) не будет поддерживать общее языковое подмножество. [ нужно обновить? ]

См. также [ править ]

Ссылки [ править ]

  • Стандарт 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 для проектирования, второе издание: Руководство по использованию SystemVerilog для проектирования и моделирования аппаратного обеспечения», Спрингер, Нью-Йорк, штат Нью-Йорк. ISBN   0-387-33399-1
  • Бен Коэн, Сринивасан Венкатараманан, Аджита Кумари и Лиза Пайпер [1] Справочник по утверждениям SystemVerilog, 4-е издание, 2016 г. – http://SystemVerilog.us
  • Бен Коэн Сринивасан Венкатараманан и Аджита Кумари [2] Прагматичный подход к внедрению VMM, - http://SystemVerilog.us
  • Эрик Селигман и Том Шуберт [3] Формальная проверка: необходимый набор инструментов для современного проектирования СБИС, 24 июля 2015 г.,

Внешние ссылки [ править ]

Справочник стандартов IEEE
Учебники
Разработка стандартов
Языковые расширения
  • Verilog AUTOs — система метакомментариев с открытым исходным кодом, упрощающая поддержку кода Verilog.
Онлайн-инструменты
  • EDA Playground – Запустите SystemVerilog из веб-браузера (бесплатная онлайн-IDE)
  • sverule - навигатор SystemVerilog BNF (в соответствии со стандартом IEEE 1800-2012)
Другие инструменты
  • SVUnit — среда модульного тестирования для разработчиков, пишущих код в SystemVerilog. Проверьте модули, классы и интерфейсы SystemVerilog по отдельности.
  • sv2v — конвертер с открытым исходным кодом из SystemVerilog в Verilog
Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: B4E601C59F4F40B9CA28C1531398E94B__1716743280
URL1:https://en.wikipedia.org/wiki/SystemVerilog
Заголовок, (Title) документа по адресу, URL1:
SystemVerilog - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)