Testbench Feature - 2022.1 English

Vivado Design Suite User Guide: Logic Simulation (UG900)

Document ID
Release Date
2022.1 English

In Vivado simulator, support for some of the commonly used testbench features have been added, as shown in the following table:

Table 1. Supported Dynamic Type Constructs
Primary Construct Secondary Construct LRM Section Status
String data type   6.16 Supported
  String operators (table 6-9 of IEEE 1800-2012) 6.16 Supported
  Len() 6.16.1 Supported
  Putc() 6.16.2 Supported
  Getc() 6.16.3 Supported
  Toupper() 6.16.4 Supported
  Tolower() 6.16.5 Supported
  Compare 6.16.6 Supported
  Icompare() 6.16.7 Supported
  Substr() 6.16.8 Supported
  Atoi(), atohex(), atooct(), atobin() 6.16.9 Supported
  Atoreal() 6.16.10 Supported
  Itoa() 6.16.11 Supported
  Hextoa() 6.16.12 Supported
  Octtoa() 6.16.13 Supported
  Bintoa() 6.16.14 Supported
  Realtoa() 6.16.15 Supported
Dynamic Array   7.5 Supported
  Dynamic array new 7.5.1 Supported
  Size 7.5.2 Supported
  Delete 7.5.3 Supported
Associative Array   7.8 Supported
  Wildcard index 7.8.1 Supported
  String index 7.8.2 Supported
  Class index 7.8.3 Supported
  Integral index 7.8.4 Supported
  Other user-defined types 7.8.5 Supported
  Accessing invalid index 7.8.6 Supported
  Associative array methods 7.9 Supported
  Num() and Size() 7.9.1 Supported
  Delete() 7.9.2 Supported
  Exists() 7.9.3 Supported
  First() 7.9.4 Supported
  Last() 7.9.5 Supported
  Next() 7.9.6 Supported
  Prev() 7.9.7 Supported
  Arguments to traversal Method 7.9.8 Supported
  Associative array assignment 7.9.9 Supported
  Associative array arguments 7.9.10 Supported
  Associative Array literals 7.9.11 Supported
Queue   7.10 Supported
  Queue operators 7.10.1 Supported
  Queue methods 7.10.2 Supported
  Size() Supported
  Insert() Supported
  Delete() Supported
  Pop_front() Supported
  Pop_back() Supported
  Push_front() Supported
  Push_back() Supported
  Persistence of references to elements of a queue 7.10.3 Supported
  Updating a queue using assignment and unpacked array concatenation 7.10.4 Supported
  Bounded queues 7.10.5 Supported
Class   8 Supported
  Class General 8.1 Supported
  Overviews 8.2 Supported
  Syntax 8.3 Supported
  Objects(Class instance) 8.4 Supported
  Object properties and object parameter data 8.5 Supported
  Object methods 8.6 Supported
  Constructors 8.7 Supported
  Static class properties 8.8 Supported
  Static methods 8.9 Supported
  This 8.10 Supported
  Assignment, renaming, and copying 8.11 Supported
  Inheritance and subclasses 8.12 Supported
  Overridden members 8.13 Supported
  Super 8.14 Supported
  Casting 8.15 Supported
  Chaining constructors 8.16 Supported
  Data hiding and encapsulation 8.17 Supported
  Constant class properties 8.18 Supported
  Virtual methods 8.19 Supported
  Abstract classes and pure virtual methods 8.20 Supported
  Polymorphism: dynamic method lookup 8.21 Supported
  Class scope resolution operator :: 8.22 Supported
  Out-of-block declarations 8.23 Supported
  Parameterized classes 8.24 Supported
  Class resolution operator for parameterized classes 8.24.1 Supported
  Typedef class 8.25 Supported
  Interface classes 8.26 Supported
  Multiple inheritance of Interface classes 8.26.6 Supported
  Memory management 8.27 Supported
  Classes and structures 8.28 Supported
Processes   9 Supported
  Parallel Process - Fork Join_Any and Fork Join_None 9.3 Supported
  Wait fork 9.6.1 Supported
  Disable Fork 9.6.3 Supported
  Fine grain process control 9.7 Supported
Clocking Block   14 Supported
  General 14.1 Supported
  Overview 14.2 Supported
  Clocking block declaration 14.3 Supported
  Input and output Skew 14.4 Supported
  Hierarchical Expressions 14.5 Not Supported
  Signals in multiple clocking block 14.6 Supported
  Clocking block scope and lifetime 14.7 Supported
  Multiple clocking block example 14.8 Supported
  Interface and clocking block 14.9 Supported
  Clocking block event 14.10 Supported
  Cycle Delay 14.11 Supported
  Default clocking 14.12 Supported
  Input Sampling 14.13 Supported
  Global clocking 14.14 Not Supported
  Synchronous events 14.15 Supported
  Synchronous drives 14.16 Supported
  Drives and nonblocking assignments 14.16.1 Supported
  Driving clocking output signals 14.16.2 Supported
Semaphore   15.3 Supported
  Semaphore method new() 15.3.1 Supported
  Semaphore method put() 15.3.2 Supported
  Semaphore method get() 15.3.3 Supported
  Semaphore method try_get() 15.3.4 Supported
Mailbox   15.4 Supported
  Mailbox method new() 15.4.1 Supported
  Mailbox method num() 15.4.2 Supported
  Mailbox method put() 15.4.3 Supported
  Mailbox method try_put() 15.4.4 Supported
  Mailbox method get() 15.4.5 Supported
  Mailbox method try_get() 15.4.6 Supported
  Mailbox method peek() 15.4.7 Supported
  Mailbox method try_peek() 15.4.8 Supported
  Parameterized mailbox 15.4.9 Supported
Named Event   15.5 Supported
  Triggering an event 15.5.1 Supported
  Waiting on event 15.5.2 Supported
  Persistent trigger 15.5.3 Not Supported
  Event Sequence 15.5.4 Not Supported
  Operation on named event variable 15.5.5 Supported
  Merging Events Supported
  Reclaiming event Supported
  Event comparison Supported
Assertion   16 Supported
  General 16.1 Supported
  Overview 16.2 Supported
  Assert 16.2 Supported
  Assume 16.2 Supported
  Cover 16.2 Not Supported
  Restrict 16.2 Not Supported
  Immediate assertion 16.3 Supported
  Deferred assertion 16.4 Not Supported
  Concurrent assertion overview 16.5 Supported
  Sampling 16.5.1 Supported
  Assertion clock 16.5.2 Supported
  Boolean expression 16.6 Supported
  Sequence 16.7 Supported
  Declaring sequence 16.8 Supported
  Typed formal argument in sequence declarations 16.8.1 Supported
  Local variable formal arguments in sequence declarations 16.8.2 Supported
  Sequence operations 16.9 Supported
  Operator precedence 16.9.1 Supported
  Repetition in sequences 16.9.2 Supported
  Sampled value functions 16.9.3 Supported
  Global clocking past and future sampled value functions 16.9.4 Not Supported
  AND operation 16.9.5 Supported
  Intersection (AND with length restriction) 16.9.6 Supported
  OR operation 16.9.7 Supported
  First_match operation 16.9.8 Supported
  Conditions over sequences 16.9.9 Supported
  Sequence contained within another sequence 16.9.10 Supported
  Composing sequences from simpler subsequences 16.9.11 Supported
  Local variables 16.10 Supported
  Calling subroutines on match of a sequence 16.11 Supported
  Declaring properties 16.12 Supported
  Sequence property 16.12.1 Supported
  Negation property 16.12.2 Supported
  Disjunction property 16.12.3 Supported
  Conjunction property 16.12.4 Supported
  If-else property 16.12.5 Supported
  Implication 16.12.6 Supported
  Implies and iff properties 16.12.7 Supported
  Property instantiation 16.12.8 Supported
  Followed-by property 16.12.9 Not Supported
  Next time property 16.12.10 Not Supported
  Always property 16.12.11 Not Supported
  Until property 16.12.12 Not Supported
  Eventually property 16.12.13 Not Supported
  Abort properties 16.12.14 Not Supported
  Weak and strong operators 16.12.15 Not Supported
  Case 16.12.16 Not Supported
  Recursive properties 16.12.17 Not Supported
  Typed formal arguments in property declarations 16.12.18 Supported
  Local variable formal arguments in property declarations 16.12.19 Supported
  Property examples 16.12.20 Supported
  Finite-length versus infinite-length behavior 16.12.21 Supported
  Nondegeneracy 16.12.22 Supported
  Multiclock support 16.13 Not Supported
  Concurrent assertions 16.14 Supported
  Assert statement 16.14.1 Supported
  Assume statement 16.14.2 Supported
  Cover statement 16.14.3 Not Supported
  Restrict statement 16.14.4 Not Supported
  Using concurrent assertion statements outside procedural code 16.14.5 Supported
  Embedding concurrent assertions in procedural code 16.14.6 Not Supported
  Inferred value functions 16.14.7 Not Supported
  Nonvacuous evaluations 16.14.8 Not Supported
  Disable iff resolution 16.15 Supported
  Clock resolution 16.16 Supported
  Semantic leading clocks for multiclocked sequence and properties 16.16.1 Supported
  Expect statement 16.17 Not Supported
  Clocking blocks and concurrent assertions 16.18 Supported
Random Constraint   18 Supported
  Concepts and Usage 18.3 Supported
  Random Variable 18.4 Supported
  Rand modifier 18.4.1 Supported
  Randc modifier 18.4.2 Supported
  Constraint block 18.5 Supported
  External constraint block 18.5.1 Supported
  Constraint inheritance 18.5.2 Supported
  Set membership 18.5.3 Supported
  Distribution 18.5.4 Supported
  Implication 18.5.6 Supported
  If-else constraint 18.5.7 Supported
  Iterative constraint 18.5.8 Supported
  foreach iterative constraint Supported
  Array reduction iterative constraint Supported
  Global constraint 18.5.9 Supported
  Variable Ordering 18.5.10 Supported
  Static constraint block 18.5.11 Supported
  Function in constraint 18.5.12 Supported
  Constraint Guards 18.5.13 Supported
  Soft constraint 18.5.14 Supported
  Method Randomize 18.6.1 Supported
  Pre_randomize and post_randomize 18.6.2 Supported
  Behavior of randomization method 18.6.3 Supported
  In-line constraints 18.7 Supported
  Local scope resolution 18.7.1 Supported
  Disabling random variable with rand_mode 18.8 Supported
  Controlling constraints with constraint_mode 18.9 Supported
  Dynamic constraint modification 18.10 Supported
  In-line random variable control 18.11 Supported
  In-line constraint checker 18.11.1 Supported
  Randomize of a scope variable std::randomize 18.12 Supported
  Adding constraint to scope variables std::randomize with 18.12.1 Supported
  Random number system functions and method 18.13 Supported
  $urandom 18.13.1 Supported
  $urandom_range 18.13.2 Supported
  srandom 18.13.3 Supported
  Get_randstate 18.13.4 Supported
  Set_randstate 18.13.5 Supported
  Random stability 18.14 Supported
  Manually seeding randomization 18.15 Supported
  Randcase 18.16 Supported
  Randsequence 18.17 Not Supported
Programs   24 Supported
  The Program construct 24.3 Supported
  Scheduling semantic of code in program construct 24.3.1 Supported
  Program port connection 24.3.2 Supported
  Eliminating test bench race 24.4 Supported
  Blocking task in cycle/event mode 24.5 Supported
  Anonymous Programs 24.6 Not Supported
  Program control task 24.7 Supported
Functional Coverage   19 Supported
  General 19.1 Supported
  Overview 19.2 Supported
  Defining coverage model: covergroup 19.3 Supported
  Using covergroup in classes 19.4 Supported
  Defining coverage points 19.5 Supported
  Specifying bins for values 19.5.1 Supported
  Coverpoint bin with covergroup expressions Supported
  Coverpoint bin set covergroup expressions Not supported
  Specifying bins for transitions 19.5.2 Supported
  Automatic bin creation for coverage points 19.5.3 Supported
  Wildcard specification of coverage point bins 19.5.4 Supported
  Excluding coverage point values or transitions 19.5.5 Supported
  Specifying Illegal coverage point values or transitions 19.5.6 Supported
  Value resolution 19.5.7 Supported
  Defining cross coverage 19.6 Supported
  Defining cross coverage bins 19.6.1 Supported
  Example of user-defined cross coverage and select expressions Supported
  Cross bin with covergroup expressions Supported
  Cross bin automatically defined types Supported
  Cross bin set expression Supported
  Excluding cross products 19.6.2 Supported
  Specifying illegal cross products 19.6.3 Supported
  Specifying coverage options 19.7 Supported
  Covergroup type options 19.7.1 Supported
  Predefined coverage methods 19.8 Supported
  Overriding the built-in sample method 19.8.1 Supported
  Predefined coverage system tasks and system functions 19.9 Supported
  Organization of option and type_option members 19.10 Supported
Note: Sensitivity on dynamic types such as Queue, Dynamic Array, Associative Array, and Class are not supported, therefore, block waiting on dynamic type update may not work correctly. For example:
module top();
int c[$];
event e1;
    c[0] = 10;
    for(int i = 0; i <= 10; i++)
        c = {i, c};
        -> e1;
always@(*) $display($time, " trying to read sensitivity on dynamic type : %d", c[0]); 
// this won't work as sensitivity on dynamic type is not supported
always @(e1) $display($time, " coming from event sensitivity : %d", c[0]); // this we 
can do as WA
always_comb if(c.size() > 0) $display($time, " Coming from size sensitivity : %d", 
c[0]); // sensitivity on size works