User Guide: DSim LRM Extensions

Modified on Thu, 11 Jul at 11:43 AM

User Guide: DSim LRM Extensions

All Language Reference Manual (LRM) references are with respect to IEEE Std 1800™-2012(Revision of IEEE Std 1800-2009).



Functional Coverage


Cross coverage between crosses

A cross coverage may involve another cross, a. k. a. cross of crosses. As an extension to the LRM, it is supported with limitation: bin definitions are not permitted in a cross of crosses.



Force/Release

LRM section 10.6.2 discusses force and release procedural statements and indicates some limitations. The following limitatations are lifted as an LRM extension. Force/release of:


  • individually indexed bits or part selects of a variable
  • individually indexed singular elements of an unpacked array (variable or net)
  • entire unpacked arrays

Please note force/release of singular elements of unpacked structs is still unsupported.



$deposit(signal, value)

This system call is similar to a force statement: it sets the specified signal to a certain value, but unlike force does not need to be released. The value is used to simulate the signal until a new value is assigned. The assignment takes effect immediately with the highest precedence, it will override a procedural force or assign.


The value is released when another update of the signal occurs through regular processing of the simulation.


The signal can be a variable/net, or an expression on a variable/net, such as an array reference or slice, indicating where to put the value. The value's should match the signal expression's type.



Parameters of dynamic array type

LRM section 6.20.1 discusses parameter declaration syntax and indicates some limitations. The following limitatations are lifted as an LRM extension.


  • unsized_dimension, i.e. [] may follow after parameter_identifier. For instance:


    localparam integer DYNARR[] = '{ 1, 2, 3 };



Virtual Interface Self-Reference

The name of a virtual interface can now be used to refer to the current instance of the interface, much in the same way that this refers to the current instance of an object. To enable this extension provide the -allow-self-vif option to DSim.


 

package P;
    function void register_if(virtual foo_if vif);
    ...
    endfunction
endpackage

interface foo_if;
import P::*;
initial register_if(foo_if); // registers current instance
endinterface

 

Was this article helpful?

That’s Great!

Thank you for your feedback

Sorry! We couldn't be helpful

Thank you for your feedback

Let us know how can we improve this article!

Select at least one of the reasons
CAPTCHA verification is required.

Feedback sent

We appreciate your effort and will try to fix the article