HOME

TheInfoList



OR:

SystemVerilog,
standardized Standardization (American English) or standardisation (British English) is the process of implementing and developing technical standards based on the consensus of different parties that include firms, users, interest groups, standards organiza ...
as IEEE 1800 by the
Institute of Electrical and Electronics Engineers The Institute of Electrical and Electronics Engineers (IEEE) is an American 501(c)(3) public charity professional organization for electrical engineering, electronics engineering, and other related disciplines. The IEEE has a corporate office ...
(IEEE), is a hardware description and hardware verification language commonly used to model,
design A design is the concept or proposal for an object, process, or system. The word ''design'' refers to something that is or has been intentionally created by a thinking agent, and is sometimes used to refer to the inherent nature of something ...
, simulate,
test Test(s), testing, or TEST may refer to: * Test (assessment), an educational assessment intended to measure the respondents' knowledge or other abilities Arts and entertainment * ''Test'' (2013 film), an American film * ''Test'' (2014 film) ...
and implement electronic systems in the
semiconductor A semiconductor is a material with electrical conductivity between that of a conductor and an insulator. Its conductivity can be modified by adding impurities (" doping") to its crystal structure. When two regions with different doping level ...
and electronic design industry. SystemVerilog is an extension of
Verilog Verilog, standardized as IEEE 1364, is a hardware description language (HDL) used to model electronic systems. It is most commonly used in the design and verification of digital circuits, with the highest level of abstraction being at the re ...
.


History

SystemVerilog started with the donation of the Superlog language to Accellera in 2002 by the startup company Co-Design Automation. The bulk of the verification functionality is based on the OpenVera language donated by
Synopsys Synopsys, Inc. is an American electronic design automation (EDA) company headquartered in Sunnyvale, California, that focuses on silicon design and verification, silicon intellectual property and software security and quality. Synopsys sup ...
. In 2005, SystemVerilog was adopted as
IEEE Standard The Institute of Electrical and Electronics Engineers Standards Association (IEEE SA) is an operating unit within IEEE that develops global standards in a broad range of industries, including: power and energy, artificial intelligence systems, ...
1800-2005. In 2009, the standard was merged with the base Verilog (IEEE 1364-2005) standard, creating IEEE Standard 1800-2009. The SystemVerilog standard was subsequently updated in 2012, 2017, and most recently in December 2023.IEEE 1800-2023, IEEE Standard for SystemVerilog--Unified Hardware Design, Specification, and Verification Language
IEEE The Institute of Electrical and Electronics Engineers (IEEE) is an American 501(c)(3) organization, 501(c)(3) public charity professional organization for electrical engineering, electronics engineering, and other related disciplines. The IEEE ...
, 2023


Design features

The feature-set of SystemVerilog can be divided into two distinct roles: # SystemVerilog for
register-transfer level In digital circuit design, register-transfer level (RTL) is a design abstraction which models a synchronous digital circuit in terms of the flow of digital signals (data) between hardware registers, and the logical operations performed on th ...
(RTL) design is an extension of Verilog-2005; all features of that language are available in SystemVerilog. Therefore, Verilog is a subset of SystemVerilog. # SystemVerilog for verification uses extensive
object-oriented programming Object-oriented programming (OOP) is a programming paradigm based on the concept of '' objects''. Objects can contain data (called fields, attributes or properties) and have actions they can perform (called procedures or methods and impl ...
techniques and is more closely related to
Java Java is one of the Greater Sunda Islands in Indonesia. It is bordered by the Indian Ocean to the south and the Java Sea (a part of Pacific Ocean) to the north. With a population of 156.9 million people (including Madura) in mid 2024, proje ...
than Verilog. These constructs are generally not synthesizable. The remainder of this article discusses the features of SystemVerilog not present in Verilog-2005.


Data lifetime

There are two types of data lifetime specified in SystemVerilog: static and
automatic Automatic may refer to: Music Bands * Automatic (Australian band), Australian rock band * Automatic (American band), American rock band * The Automatic, a Welsh alternative rock band Albums * ''Automatic'' (Jack Bruce album), a 1983 el ...
. Automatic variables are created the moment program execution comes to the scope of the variable. Static variables are created at the start of the program's execution and keep the same value during the entire program's lifespan, unless assigned a new value during execution. Any variable that is declared inside a task or function without specifying type will be considered automatic. To specify that a variable is static place the "static" keyword in the declaration before the type, e.g., "static int x;". The "automatic" keyword is used in the same way.


New data types

Enhanced variable types add new capability to Verilog's "reg" type: logic 1:0my_var; Verilog-1995 and -2001 limit reg variables to behavioral statements such as RTL code. SystemVerilog extends the reg type so it can be driven by a single driver such as gate or module. SystemVerilog names this type "logic" to remind users that it has this extra capability and is not a hardware register. The names "logic" and "reg" are interchangeable. A signal with more than one driver (such as a tri-state buffer for general-purpose input/output) needs to be declared a net type such as "wire" so SystemVerilog can resolve the final value. Multidimensional packed arrays unify and extend Verilog's notion of "registers" and "memories": logic :02:0] my_pack 2 Classical Verilog permitted only one dimension to be declared to the left of the variable name. SystemVerilog permits any number of such "packed" dimensions. A variable of packed array type maps 1:1 onto an integer arithmetic quantity. In the example above, each element of my_pack may be used in expressions as a six-bit integer. The dimensions to the right of the name (32 in this case) are referred to as "unpacked" dimensions. As in Verilog-2001, any number of unpacked dimensions is permitted. Enumerated data types (enums) allow numeric quantities to be assigned meaningful names. Variables declared to be of enumerated type cannot be assigned to variables of a different enumerated type without
casting Casting is a manufacturing process in which a liquid material is usually poured into a mold, which contains a hollow cavity of the desired shape, and then allowed to solidify. The solidified part is also known as a casting, which is ejected or ...
. This is not true of parameters, which were the preferred implementation technique for enumerated quantities in Verilog-2005: typedef enum logic :0 color_t; color_t my_color = GREEN; initial $display("The color is %s", my_color.name()); As shown above, the designer can specify an underlying arithmetic type (logic :0/code> in this case) which is used to represent the enumeration value. The meta-values X and Z can be used here, possibly to represent illegal states. The built-in function name() returns an ASCII string for the current enumerated value, which is useful in validation and testing. New integer types: SystemVerilog defines byte, shortint, int and longint as two-state signed integral types having 8, 16, 32, and 64 bits respectively. A bit type is a variable-width two-state type that works much like logic. Two-state types lack the X and Z metavalues of classical Verilog; working with these types may result in faster simulation. '' Structures'' and '' unions'' work much like they do in the
C language C (''pronounced'' '' – like the letter c'') is a general-purpose programming language. It was created in the 1970s by Dennis Ritchie and remains very widely used and influential. By design, C's features cleanly reflect the capabilities o ...
. SystemVerilog enhancements include the ''packed'' attribute and the ''tagged'' attribute. The tagged attribute allows runtime tracking of which member(s) of a union are currently in use. The packed attribute causes the structure or union to be mapped 1:1 onto a packed array of bits. The contents of struct data types occupy a continuous block of memory with no gaps, similar to
bit field A bit field is a data structure that maps to one or more adjacent bits which have been allocated for specific purposes, so that any single bit or group of bits within the structure can be set or inspected. A bit field is most commonly used to repre ...
s in C and C++: typedef struct packed FP; FP zero = 64'b0; As shown in this example, SystemVerilog also supports
typedef typedef is a reserved keyword in the programming languages C, C++, and Objective-C. It is used to create an additional name (''alias'') for another data type, but does not create a new type, except in the obscure case of a qualified typedef of ...
s, as in C and C++.


Procedural blocks

SystemVerilog introduces three new procedural blocks intended to model hardware: always_comb (to model
combinational logic In automata theory, combinational logic (also referred to as time-independent logic) is a type of digital logic that is implemented by Boolean circuits, where the output is a pure function of the present input only. This is in contrast to sequ ...
), always_ff (for
flip-flops Flip-flops are a type of light sandal-like shoe, typically worn as a form of casual footwear. They consist of a flat sole held loosely on the foot by a Y-shaped strap known as a toe thong that passes between the first and second toes and around ...
), and always_latch (for latches). Whereas Verilog used a single, general-purpose always block to model different types of hardware structures, each of SystemVerilog's new blocks is intended to model a specific type of hardware, by imposing semantic restrictions to ensure that hardware described by the blocks matches the intended usage of the model. An HDL compiler or verification program can take extra steps to ensure that only the intended type of behavior occurs. An always_comb block models
combinational logic In automata theory, combinational logic (also referred to as time-independent logic) is a type of digital logic that is implemented by Boolean circuits, where the output is a pure function of the present input only. This is in contrast to sequ ...
. The simulator infers the sensitivity list to be all variables from the contained statements: always_comb begin tmp = b * b - 4 * a * c; no_root = (tmp < 0); end An always_latch block models level-sensitive latches. Again, the sensitivity list is inferred from the code: always_latch if (en) q <= d; An always_ff block models synchronous logic (especially edge-sensitive
sequential logic In automata theory, sequential logic is a type of logic circuit whose output depends on the present value of its input signals and on the sequence of past inputs, the input history. This is in contrast to '' combinational logic'', whose output i ...
): always_ff @(posedge clk) count <= count + 1;
Electronic design automation Electronic design automation (EDA), also referred to as electronic computer-aided design (ECAD), is a category of software tools for designing Electronics, electronic systems such as integrated circuits and printed circuit boards. The tools wo ...
(EDA) tools can verify the design's intent by checking that the hardware model does not violate any block usage semantics. For example, the new blocks restrict assignment to a variable by allowing only one source, whereas Verilog's always block permitted assignment from multiple procedural sources.


Interfaces

For small designs, the Verilog ''port'' compactly describes a module's connectivity with the surrounding environment. But major blocks within a large design hierarchy typically possess port counts in the thousands. SystemVerilog introduces concept of
interfaces Interface or interfacing may refer to: Academic journals * ''Interface'' (journal), by the Electrochemical Society * '' Interface, Journal of Applied Linguistics'', now merged with ''ITL International Journal of Applied Linguistics'' * '' Inter ...
to both reduce the redundancy of port-name declarations between connected modules, as well as group and abstract related signals into a user-declared bundle. An additional concept is ''modport'', which shows the direction of logic connections. Example: 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


Verification features

The following verification features are typically not synthesizable, meaning they cannot be implemented in hardware based on HDL code. Instead, they assist in the creation of extensible, flexible
test bench A test bench or testing workbench is an environment used to verify the correctness or soundness of a design or model. The term has its roots in the testing of electronic devices, where an engineer would sit at a lab bench with tools for measurem ...
es.


New data types

The string data type represents a variable-length text
string String or strings may refer to: *String (structure), a long flexible structure made from threads twisted together, which is used to tie, bind, or hang other objects Arts, entertainment, and media Films * ''Strings'' (1991 film), a Canadian anim ...
. For example: string s1 = "Hello"; string s2 = "world"; string p = ".?!"; string s3 = ; // string concatenation $display(" d%s", s3.len(), s3); // simulation will print: " 3Hello, world!" In addition to the static array used in design, SystemVerilog offers
dynamic array In computer science, a dynamic array, growable array, resizable array, dynamic table, mutable array, or array list is a random access, variable-size list data structure that allows elements to be added or removed. It is supplied with standard l ...
s,
associative arrays In computer science, an associative array, key-value store, map, symbol table, or dictionary is an abstract data type that stores a collection of (key, value) pairs, such that each possible key appears at most once in the collection. In math ...
and queues: 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 A dynamic array works much like an unpacked array, but offers the advantage of being dynamically allocated at runtime (as shown above.) Whereas a packed array's size must be known at compile time (from a constant or expression of constants), the dynamic array size can be initialized from another runtime variable, allowing the array to be sized and resize arbitrarily as needed. An associative array can be thought of as a
binary search tree In computer science, a binary search tree (BST), also called an ordered or sorted binary tree, is a Rooted tree, rooted binary tree data structure with the key of each internal node being greater than all the keys in the respective node's left ...
with a user-specified key type and data type. The key implies an ordering; the elements of an associative array can be read out in lexicographic order. Finally, a queue provides much of the functionality of the C++ STL deque type: elements can be added and removed from either end efficiently. These primitives allow the creation of complex data structures required for scoreboarding a large design.


Classes

SystemVerilog provides an
object-oriented programming Object-oriented programming (OOP) is a programming paradigm based on the concept of '' objects''. Objects can contain data (called fields, attributes or properties) and have actions they can perform (called procedures or methods and impl ...
model. In SystemVerilog, classes support a single-inheritance model, but may implement functionality similar to multiple-inheritance through the use of so-called "interface classes" (identical in concept to the interface feature of Java). Classes can be parameterized by type, providing the basic function of C++ templates. However, template specialization and function templates are not supported. SystemVerilog's polymorphism features are similar to those of C++: the programmer may specifically write a virtual function to have a derived class gain control of the function. See
virtual function In object-oriented programming such as is often used in C++ and Object Pascal, a virtual function or virtual method is an inheritable and overridable function or method that is dispatched dynamically. Virtual functions are an important part ...
for further information. Encapsulation and data hiding is accomplished using the local and protected keywords, which must be applied to any item that is to be hidden. By default, all class properties are
public In public relations and communication science, publics are groups of individual people, and the public (a.k.a. the general public) is the totality of such groupings. This is a different concept to the sociology, sociological concept of the ''Öf ...
. Class instances are dynamically created with the new keyword. A constructor denoted by function new can be defined. SystemVerilog has automatic garbage collection, so there is no language facility to explicitly destroy instances created by the new operator. Example: virtual class Memory; virtual function bit 1:0read(bit 1:0addr); endfunction virtual function void write(bit 1:0addr, bit 1:0data); endfunction endclass class SRAM #(parameter AWIDTH=10) extends Memory; bit 1:0mem < virtual function bit 1:0read(bit 1:0addr); return mem ddr endfunction virtual function void write(bit 1:0addr, bit 1:0data); mem ddr= data; endfunction endclass


Constrained random generation

Integer quantities, defined either in a class definition or as stand-alone variables in some lexical scope, can be assigned random values based on a set of constraints. This feature is useful for creating randomized scenarios for verification. Within class definitions, the rand and randc modifiers signal variables that are to undergo randomization. randc specifies
permutation In mathematics, a permutation of a set can mean one of two different things: * an arrangement of its members in a sequence or linear order, or * the act or process of changing the linear order of an ordered set. An example of the first mean ...
-based randomization, where a variable will take on all possible values once before any value is repeated. Variables without modifiers are not randomized. class eth_frame; rand bit 7:0dest; rand bit 7:0src; rand bit 5:0f_type; rand byte payload[]; bit 1:0 fcs; rand bit 1:0fcs_corrupt; constraint basic constraint good_fr endclass In this example, the fcs field is not randomized; in practice it will be computed with a CRC generator, and the fcs_corrupt field used to corrupt it to inject FCS errors. The two constraints shown are applicable to conforming
Ethernet frame In computer networking, an Ethernet frame is a data link layer protocol data unit and uses the underlying Ethernet physical layer transport mechanisms. In other words, a data unit on an Ethernet link transports an Ethernet frame as its paylo ...
s. Constraints may be selectively enabled; this feature would be required in the example above to generate corrupt frames. Constraints may be arbitrarily complex, involving interrelationships among variables, implications, and iteration. The SystemVerilog
constraint solver Constraint may refer to: * Constraint (computer-aided design), a demarcation of geometrical characteristics between two or more entities or solid modeling bodies * Constraint (mathematics), a condition of an optimization problem that the solution m ...
is required to find a solution if one exists, but makes no guarantees as to the time it will require to do so as this is in general an
NP-hard In computational complexity theory, a computational problem ''H'' is called NP-hard if, for every problem ''L'' which can be solved in non-deterministic polynomial-time, there is a polynomial-time reduction from ''L'' to ''H''. That is, assumi ...
problem ( boolean satisfiability).


Randomization methods

In each SystemVerilog class there are 3 predefined methods for randomization: pre_randomize, randomize and post_randomize. The randomize method is called by the user for randomization of the class variables. The pre_randomize method is called by the randomize method before the randomization and the post_randomize method is called by the randomize method after randomization. class eth_frame; rand bit 7:0dest; rand bit 7:0src; rand bit 5:0f_type; rand byte payload[]; bit 1:0 fcs; rand bit corrupted_frame; constraint basic 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


Controlling constraints

The constraint_mode() and the random_mode() methods are used to control the randomization. constraint_mode() is used to turn a specific constraint on and off and the random_mode is used to turn a randomization of a specific variable on or off. The below code describes and procedurally tests an
Ethernet frame In computer networking, an Ethernet frame is a data link layer protocol data unit and uses the underlying Ethernet physical layer transport mechanisms. In other words, a data unit on an Ethernet link transports an Ethernet frame as its paylo ...
: class eth_frame; rand bit 7:0dest; rand bit 7:0src; rand bit 5:0f_type; rand byte payload[]; bit 1:0 fcs; rand bit corrupted_frame; constraint basic constraint one_src_cst constraint dist_to_fcs 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();


Assertions

Assertions are useful for verifying properties of a design that manifest themselves after a specific condition or state is reached. SystemVerilog has its own assertion specification language, similar to
Property Specification Language Property Specification Language (PSL) is a temporal logic extending linear temporal logic with a range of operators for both ease of expression and enhancement of expressive power. PSL makes an extensive use of regular expressions and syntactic suga ...
. The subset of SystemVerilog language constructs that serves assertion is commonly called SystemVerilog Assertion or SVA. SystemVerilog assertions are built from sequences and properties. Properties are a superset of sequences; any sequence may be used as if it were a property, although this is not typically useful. Sequences consist of boolean expressions augmented with temporal operators. The simplest temporal operator is the ## operator which performs a concatenation: sequence S1; @(posedge clk) req ##1 gnt; endsequence This sequence matches if the gnt signal goes high one clock cycle after req goes high. Note that all sequence operations are synchronous to a clock. Other sequential operators include repetition operators, as well as various conjunctions. These operators allow the designer to express complex relationships among design components. An assertion works by continually attempting to evaluate a sequence or property. An assertion fails if the property fails. The sequence above will fail whenever req is low. To accurately express the requirement that gnt follow req a property is required: property req_gnt; @(posedge clk) req , => gnt; endproperty assert_req_gnt: assert property (req_gnt) else $error("req not followed by gnt."); This example shows an implication operator , =>. The clause to the left of the implication is called the antecedent and the clause to the right is called the consequent.
Evaluation In common usage, evaluation is a systematic determination and assessment of a subject's merit, worth and significance, using criteria governed by a set of Standardization, standards. It can assist an organization, program, design, project or any o ...
of an implication starts through repeated attempts to evaluate the antecedent. When the antecedent succeeds, the consequent is attempted, and the success of the assertion depends on the success of the consequent. In this example, the consequent won't be attempted until req goes high, after which the property will fail if gnt is not high on the following clock. In addition to assertions, SystemVerilog supports assumptions and coverage of properties. An assumption establishes a condition that a
formal logic Logic is the study of correct reasoning. It includes both formal and informal logic. Formal logic is the study of deductively valid inferences or logical truths. It examines how conclusions follow from premises based on the structure o ...
proving tool must assume to be true. An assertion specifies a property that must be proven true. In
simulation A simulation is an imitative representation of a process or system that could exist in the real world. In this broad sense, simulation can often be used interchangeably with model. Sometimes a clear distinction between the two terms is made, in ...
, both assertions and assumptions are verified against test stimuli. Property coverage allows the verification engineer to verify that assertions are accurately monitoring the design.


Coverage

Coverage as applied to hardware verification languages refers to the collection of statistics based on sampling events within the simulation. Coverage is used to determine when the
device under test A device under test (DUT), also known as equipment under test (EUT) and unit under test (UUT), is a manufactured product undergoing testing, either at first manufacture or later during its life cycle as part of ongoing functional testing and calibr ...
(DUT) has been exposed to a sufficient variety of stimuli that there is a high confidence that the DUT is functioning correctly. Note that this differs from
code coverage In software engineering, code coverage, also called test coverage, is a percentage measure of the degree to which the source code of a program is executed when a particular test suite is run. A program with high code coverage has more of its ...
which instruments the design code to ensure that all lines of code in the design have been executed. Functional coverage ensures that all desired corner and
edge case An edge case is a problem or situation that occurs only at an extreme (maximum or minimum) operating parameter. For example, a stereo speaker might noticeably distort audio when played at maximum volume, even in the absence of any other extreme s ...
s in the design space have been explored. A SystemVerilog coverage group creates a database of "bins" that store a
histogram A histogram is a visual representation of the frequency distribution, distribution of quantitative data. To construct a histogram, the first step is to Data binning, "bin" (or "bucket") the range of values— divide the entire range of values in ...
of values of an associated variable. Cross-coverage can also be defined, which creates a histogram representing the
Cartesian product In mathematics, specifically set theory, the Cartesian product of two sets and , denoted , is the set of all ordered pairs where is an element of and is an element of . In terms of set-builder notation, that is A\times B = \. A table c ...
of multiple variables. A sampling event controls when a sample is taken. The sampling event can be a Verilog event, the entry or exit of a block of code, or a call to the sample method of the coverage group. Care is required to ensure that data are sampled only when meaningful. For example: class eth_frame; // Definitions as above covergroup cov; coverpoint dest coverpoint f_type psize: coverpoint payload.size sz_x_t: cross f_type, psize; endgroup endclass In this example, the verification engineer is interested in the distribution of broadcast and unicast frames, the size/f_type field and the payload size. The ranges in the payload size coverpoint reflect the interesting corner cases, including minimum and maximum size frames.


Synchronization

A complex test environment consists of reusable verification components that must communicate with one another. Verilog's ' event' primitive allowed different blocks of procedural statements to trigger each other, but enforcing thread
synchronization Synchronization is the coordination of events to operate a system in unison. For example, the Conductor (music), conductor of an orchestra keeps the orchestra synchronized or ''in time''. Systems that operate with all parts in synchrony are sa ...
was up to the programmer's (clever) usage. SystemVerilog offers two primitives specifically for interthread synchronization: '' mailbox'' and ''
semaphore Semaphore (; ) is the use of an apparatus to create a visual signal transmitted over distance. A semaphore can be performed with devices including: fire, lights, flags, sunlight, and moving arms. Semaphores can be used for telegraphy when arra ...
''. The mailbox is modeled as a FIFO message queue. Optionally, the FIFO can be type-parameterized so that only objects of the specified type may be passed through it. Typically, objects are class instances representing '' transactions'': elementary operations (for example, sending a frame) that are executed by the verification components. The semaphore is modeled as a counting semaphore.


General improvements to classical Verilog

In addition to the new features above, SystemVerilog enhances the usability of Verilog's existing language features. The following are some of these enhancements: *The procedural
assignment operator Assignment, assign or The Assignment may refer to: * Homework * Sex assignment * The process of sending National Basketball Association players to its development league; see Computing * Assignment (computer science), a type of modification to ...
s (<=, =) can now operate directly on arrays. *Port (inout, input, output) definitions are now expanded to support a wider variety of
data type In computer science and computer programming, a data type (or simply type) is a collection or grouping of data values, usually specified by a set of possible values, a set of allowed operations on these values, and/or a representation of these ...
s: struct,
enum Telephone number mapping is a system of unifying the international telephone number system of the public switched telephone network with the Internet addressing and identification name spaces. Internationally, telephone numbers are systematicall ...
, real, and multi-dimensional types are supported. *The
for loop In computer science, a for-loop or for loop is a control flow Statement (computer science), statement for specifying iteration. Specifically, a for-loop functions by running a section of code repeatedly until a certain condition has been satisfi ...
construct now allows automatic variable declaration inside the for statement. Loop flow control is improved by the ''continue'' and ''break'' statements. *SystemVerilog adds a ''do''/while loop to the ''while'' loop construct. * Constant variables, i.e. those designated as non-changing during runtime, can be designated by use of '' const''. * Variable initialization can now operate on arrays. *
Increment and decrement operators Increment and decrement operators are unary operators that increase or decrease their operand by one. They are commonly found in imperative programming languages. C-like languages feature two versions (pre- and post-) of each operator with ...
(x++, ++x, x--, --x) are supported in SystemVerilog, as are other compound assignment operators (x += a, x -= a, x *= a, x /= a, x %= a, x <<= a, x >>= a, x &= a, x ^= a, x , = a) as in C and descendants. *The preprocessor has improved `define macro-substitution capabilities, specifically substitution within literal-strings (""), as well as concatenation of multiple macro-tokens into a single word. *The fork/join construct has been expanded with ''join_none'' and ''join_any''. *Additions to the `timescale directive allow simulation timescale to be controlled more predictably in a large simulation environment, with each
source file In computing, source code, or simply code or source, is a plain text computer program written in a programming language. A programmer writes the human readable source code to control the behavior of a computer. Since a computer, at base, onl ...
using a local timescale. *Task ports can now be declared ''ref''. A reference gives the task body direct access to the source arguments in the caller's scope, known as " pass by reference" in computer programming. Since it is operating on the original variable itself, rather than a copy of the argument's value, the task/function can modify variables (but not nets) in the caller's scope in real time. The inout/output port declarations pass variables by value, and defer updating the caller-scope variable until the moment the task exits. *Functions can now be declared '' void'', which means it returns no value. * Parameters can be declared any type, including user-defined ''typedef''s. Besides this, SystemVerilog allows convenient interface to foreign languages (like C/C++), by SystemVerilog DPI (Direct Programming Interface).


Verification and synthesis software

In the design verification role, SystemVerilog is widely used in the chip-design industry. The three largest EDA vendors (
Cadence Design Systems Cadence Design Systems, Inc. (stylized as cādence)Investor's Business DailCEO Lip-Bu Tan Molds Troubled Cadence Into Long-Term LeaderRetrieved November 12, 2020 is an American multinational corporation, multinational technology and computational ...
,
Mentor Graphics Mentor Graphics Corporation was a US-based electronic design automation (EDA) multinational corporation for electrical engineering and electronics, headquartered in Wilsonville, Oregon. Founded in 1981, the company distributed products that ass ...
,
Synopsys Synopsys, Inc. is an American electronic design automation (EDA) company headquartered in Sunnyvale, California, that focuses on silicon design and verification, silicon intellectual property and software security and quality. Synopsys sup ...
) have incorporated SystemVerilog into their mixed-language HDL simulators. Although no simulator can yet claim support for the entire SystemVerilog Language Reference Manual, making testbench
interoperability Interoperability is a characteristic of a product or system to work with other products or systems. While the term was initially defined for information technology or systems engineering services to allow for information exchange, a broader de ...
a challenge, efforts to promote cross-vendor compatibility are underway. In 2008, Cadence and Mentor released the Open Verification Methodology, an open-source class-library and usage-framework to facilitate the development of re-usable testbenches and canned verification-IP. Synopsys, which had been the first to publish a SystemVerilog class-library (VMM), subsequently responded by opening its proprietary VMM to the general public. Many third-party providers have announced or already released SystemVerilog verification IP. In the design synthesis role (transformation of a hardware-design description into a gate-
netlist In electronic design, a netlist is a description of the connectivity of an electronic circuit. In its simplest form, a netlist consists of a list of the electronic components in a circuit and a list of the nodes they are connected to. A netwo ...
), SystemVerilog adoption has been slow. Many design teams use design flows which involve multiple tools from different vendors. Most design teams cannot migrate to SystemVerilog RTL-design until their entire front-end tool suite ( linters,
formal verification In the context of hardware and software systems, formal verification is the act of proving or disproving the correctness of a system with respect to a certain formal specification or property, using formal methods of mathematics. Formal ver ...
and automated test structure generators) support a common language subset.


See also

*
List of HDL simulators HDL simulators are software packages that simulate expressions written in one of the hardware description languages, such as VHDL, Verilog, SystemVerilog. This page is intended to list current and historical HDL simulators, accelerators, emulat ...
(Search for SV2005) * Verilog-AMS * e (verification language) * SpecC * Accellera *
SystemC SystemC is a set of C++ classes and macros which provide an event-driven simulation interface (see also discrete event simulation). These facilities enable a designer to ''simulate'' concurrent processes, each described using plain C++ synta ...
* SystemRDL


References

* * * * * * * * * Spear, Chris
"SystemVerilog for Verification"
Springer, New York City, NY. * Stuart Sutherland, Simon Davidmann, Peter Flake
"SystemVerilog for Design Second Edition: A Guide to Using SystemVerilog for Hardware Design and Modeling"
Springer, New York City, NY. * Ben Cohen, Srinivasan Venkataramanan, Ajeetha Kumari and Lisa Pipe

SystemVerilog Assertions Handbook, 4th Edition, 2016- http://SystemVerilog.us * Ben Cohen Srinivasan Venkataramanan and Ajeetha Kumar

A Pragmatic Approach to VMM Adoption, - http://SystemVerilog.us * Erik Seligman and Tom Schuber

Formal Verification: An Essential Toolkit for Modern VLSI Design, Jul 24, 2015,


External links

;IEEE Standard Reference
1800-2017 - IEEE Standard for SystemVerilog--Unified Hardware Design, Specification, and Verification Language
The 2017 version is available at no cost via the IEEE GET Program.IEEE GET Program
IEEE The Institute of Electrical and Electronics Engineers (IEEE) is an American 501(c)(3) organization, 501(c)(3) public charity professional organization for electrical engineering, electronics engineering, and other related disciplines. The IEEE ...
;Tutorials
SystemVerilog Tutorial

SystemVerilog Tutorial for Beginners
;Standards Development
IEEE P1800
– Working group for SystemVerilog * Sites used before IEEE 1800-2005 *
SystemVerilog official website
*
SystemVerilog Technical Committees
;Language Extensions
Verilog AUTOs
– An open source meta-comment system to simplify maintaining Verilog code ;Online Tools
EDA Playground
– Run SystemVerilog from a web browser (free online IDE)
sverule
– A SystemVerilog BNF Navigator (current to IEEE 1800-2012) ;Other Tools
SVUnit
– unit test framework for developers writing code in SystemVerilog. Verify SystemVerilog modules, classes and interfaces in isolation.
sv2v
- open-source converter from SystemVerilog to Verilog {{DEFAULTSORT:Systemverilog Hardware description languages Hardware verification languages System description languages Programming languages created in 2002 Articles with example code