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
Feedback sent
We appreciate your effort and will try to fix the article