UVM中一些自带的DPI方法(主要是与后门访问有关)

uvm-hdl.c(包括了所要用到的.c文件,主要是uvm_hdl_vcs.c(VCS),uvm_hdl_inca.c(C),uvm_hdl_questa.c(M)),很久不同 的define来选择不同 的EDA vendor。我们以S家为例子进行简单介绍一下。在uvm-hdl.svh文件中,有下面的方法(DPI)

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指定的信号,forcevalue 返回值

1force成功     0force失败

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自带的,非DPI)

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

关于上面的DPI方法,其实在uvm-hdl.svhUVM也自己实现了,只是里面全是fatal答应,有一个参数,当定义了UVM_HDL_NO_DPI,而用户由调用了HDL DPI相关的函数,这时会报错,因此要使用这些个方法,不可以定义参数UVM_HDL_NO_DPI

我们在平常的使用uvm寄存器自带的后门访问后者想自己实现后门,都可以使用这几个DPI方法

你可能感兴趣的:(UVM文章)