weiqi7777

uvm中直接操作RTL信号

0
阅读(8045)

UVM提供了一种机制,可以直接对RTL中的信号进行操作,比如赋值,force,release。

在uvm_hdl.svh文件中。提供了相关的操作RTL信号函数。

文件中,定义了使用typedef定义了uvm_hdl_data_t类型,其实就是大小为1024bit的数据。

然后根据宏UVM_HDL_NO_DPI,是否定义,从而决定操作RTL信号函数的实现。一般情况下,我们是不会定义UVM_HDL_NO_DPI,这个宏。因此,UVM实现的各个操作RTL信号的函数,其实是通过DPI的方式,调用EDA工具提供的操作RTL信号的函数。

函数有以下:在各个函数之前,均省略了

    import "DPI-C" context function

函数

说明

int uvm_hdl_check_path(string path)

path指定的信号,是否存在

返回值:

0:不存在

1:存在

int uvm_hdl_deposit(string path,

uvm_hdl_data_t value)

将path指定的信号,设置为value值

返回值

1:设置成功

0:设置失败

int uvm_hdl_force(string path,

uvm_hdl_data_t value)

将path指定的信号,force成value值

返回值

1:force成功

0:force失败

int uvm_hdl_release(string path)

将path指定的信号,release

返回值

1: release成功

0: release失败

int uvm_hdl_read(string path,

output uvm_hdl_data_t value)

读取path指定的信号值,保存在value中

返回值

1: 读取成功

0: 读取失败

int uvm_hdl_release_and_read(string path,

inout uvm_hdl_data_t value)

将path指定的信号,release掉,并且读取release之后的值,保存在value中

返回值

1: 成功

0: 失败

如果信号是reg,那么读取的值是之前force的值,如果信号是wire,那么读取的值是当前被驱动的值。

另外,还有一个task,uvm_hdl_force_time,将指定的信号,force一段指定的时间,force完成后,读取信号的值,保存在value中。

内部调用了,上述提到的函数。

通过uvm提供的这些DPI,我们就可以在环境中,使用这些dpi,对RTL中信号的值,进行操作。