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指定的信号,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自带的,非DPI)
另外,还有一个task,uvm_hdl_force_time,将指定的信号,force一段指定的时间,force完成后,读取信号的值,保存在value中。
关于上面的DPI方法,其实在uvm-hdl.svhUVM也自己实现了,只是里面全是fatal答应,有一个参数,当定义了UVM_HDL_NO_DPI,而用户由调用了HDL DPI相关的函数,这时会报错,因此要使用这些个方法,不可以定义参数UVM_HDL_NO_DPI
我们在平常的使用uvm寄存器自带的后门访问后者想自己实现后门,都可以使用这几个DPI方法