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»:

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. Ниже приведены некоторые из этих улучшений:

Помимо этого, 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 for Design, второе издание: Руководство по использованию 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://arc.ask3.ru/arc/aa/b4/4b/b4e601c59f4f40b9ca28c1531398e94b.html
Заголовок, (Title) документа по адресу, URL1:
SystemVerilog - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)