SVA Basics: Bind

Binding SVA module to design can be done using system verilog bind statement. This is semantically equivalent to instantiation of SVA module. The bind directive can be specified in a module, interface or a compilation unit scope.

There are many ways binding can be done. Following section discusses these.

Normal Bind
Binding fifo to fifo_sva assertion module can be done as follows

Bind using Implicit port connections
By using this method, port names need not be specified and all ports will be accessible to assertion module.

Bind to a lower level module
Hierarchy needs to be specified along with the bind statement.

Bind using different parameters/generic
Passing parameter values in bind can be done in the following way.

This helps to develop generic assertions.

Bind to a instance of a module
If there are multiple instances of fifo module, and need to bind assertion to two of the instances (fifo1,fifo2). This can be done in the following way.

So we can make the design untouched by developing assertions in a separate module and by using any of the above bind statements.

2 Comments

    1. Swastika, You can use $nc_mirror if you use Incisive tool.

      For eg:
      top_tb.dut:inst_block1:inst_block2:sig1 signal can be mirrored to sig1 in the following way.
      $nc_mirror(“sig1″,”top_tb.dut:inst_block1:inst_block2:sig1″,””);

      Please check in the user manual if you use other simulators.

Leave a Reply

Your email address will not be published. Required fields are marked *