How to manipulate RTL signals from UVM classes

Sometimes we need to verify corner cases that take long simulation run. An example would be testing the functionality of the wraparound  counter. 

In order to test the wraparound, depending on the maximum value of the counter, it might require very long simulation to test if the counter is working correctly after reaching this value.

One of the techniques is to force the counter in the RTL to the value that is near the maximum and check afterwards that the counter did wraparound.

The best way to manipulate with RTL signals from UVM classes is to use UVM HDL Backdoor Access support routines.

In this case we used:

function int uvm_hdl_deposit(string path,uvm_hdl_data_t value) in following way:

uvm_hdl_deposit(“tb.dut.counter”, (max_counter-10)))

 

Deposit sets the given HDL path to the specified value, and after that RTL continues to increment the counter.

Beside deposit function, there are several more predefined UVM functions that can help with controlling  the RTL signals:

uvm_hdl_force – Forces the value on the given path.

uvm_hdl_force_time – Forces the value on the given path for the specified amount of force time.

uvm_hdl_release_and_read – Releases a value previously set with uvm_hdl_force.

uvm_hdl_release – Releases a value previously set with uvm_hdl_force.

uvm_hdl_read() – Gets the value at the given path.

Manipulating RTL signals from UVM classes
Share on facebook
Share on twitter
Share on linkedin
Share on whatsapp
Share on email

Contact Us

Please, enter your details below. We will get back to you as fast as we can.

This website uses cookies to ensure you get the best experience on our website.

Get Cogita

Please, enter your details below. We will get back to you as fast as we can.

Thank you!

We will get in touch soon.

Get a Quote

Please, enter your details below. We will get back to you as fast as we can.