为了保证验证平台的可移植性,在根本上来说应该杜绝在验证平台中使用绝对路径
1.使用宏(这里不提)
2.使用interface
定义完interface之后,在top_tb中实例化DUT时就可以直接使用:
上面是在top_tb中使用interface,那如何在driver中使用interface呢?
在类中不能直接使用interface,只有在module中可以这样使用。
在类中应该使用virtual interface
可以看到driver中的路径都用vif代替了,大大提高了代码的可移植性。
还剩下一个问题:
如何把top_tb中的input_if 和 my_driver中的vif对应起来?
config_tb机制:
在这个机制中,分为set和get操作(寄信和写信)
在top_tb中执行set操作,在driver中执行get操作。
其中的bulid_phase与main_phase一样,也是属于UVM中的内建的一个phase。当UVM启动后,会自动启动build_phase。执行顺序是先new函数,再bulid_phase,再main_phase。在build_phase中主要通过config_db的set和get操作来传递一些数据,以及实例化成员变量等。
14:这里显示调用了super.build_phase是因为其在父类的build_phase中执行了一些必要的操作。
build_phase是一个函数phase,而main_phase是一个任务phase,build_phase是不消耗仿真时间的,总在仿真时间为0时执行。
17:uvm_fatal:这个也是用来打印的,但是与uvm_info不同的是在执行完这个语句后会自动finish,只有在验证平台出现重大问题无法继续时用这个。
config_tb的set和get都有四个参数,两个函数的第三个参数要求必须完全一致