1、parameter有无local的区别:
parameter可用作在顶层模块中例化底层模块时传递参数的接口,localparam的作用域仅仅限于当前module,不能作为参数传递的接口。
2、uvm_phase:
- uvm_component有两大特性是uvm_object所没有的:一是通过在new时指定parent参数来形成一种树形的组织结构,二是有phase的自动执行特点。
- 派生自uvm_object,其主要作用为控制uvm_component的行为方式,使uvm_component平滑地在各个不同的phase之间依次运转。
- 参考于UVM基础——uvm_component 与uvm_object
3、`uvm_info("mv_driver", "data is drived", UVM_LOW)
uvm_info宏;有三个参数:
第一个参数是字符串,用于把打印的信息归类;
第二个参数也是字符串,是具体要打印的信息;
第三个参数则是冗余级别。
在验证平台中, 某些信息是非常关键的, 这样的信息可以设置为UVM_LOW;而有些信息可有可无, 就可以设置为UVM_HIGH;介于两者之间的就是UVM_MEDIUM,UVM默认只显示UVM_MEDIUM或者UVM_LOW的信息。
4、run_test语句
run_test语句替换了my_driver实例化以及main_phase的显式调用
通过run_test创建的实例是树根,并且树根的名字是固定的,为uvm_test_top
5、uvm_interface的应用
virtual interface使用总结:
(1)、interface只能在module中声明,因此在class类中要用virtual interface;
(2)、virtual interface是在仿真运行时才连接到DUT上,如果只是interface,在编译时就必须进行连接。virtual interface在class中时automatic,在运行的时候产生;
(3)、virtual interface主要完成接口的动态分配,只要在top层定义virtual interface,其他层不需要改变,直接通过interface传递参数即可;
(4)、可以消除绝对路径,避免修改的时候改很多东西。
Systemverilog中static、automatic区别
6、`uvm_fatal(" ", " ")宏:
只有两个参数,与uvm_info前两个参数意义完全一样
7、config_db的set和get
top_tb 中 input_if 和 my_driver中的vif 对应起来
uvm_config_db #(virtual my_if) :: set(null, "uvm_test_top", "vit", input_if);
uvm_config_db #(virtual my_if) :: get(this, " ", "vif", vif);
set和get函数都有四个参数,这两个函数的第三个参数必须完全一致;
set函数第四个参数表示要将哪个interface通过config_db传递给my_driver,get函数第四个参数表示把得到的interface传递给哪个my_driver的成员变量;
set函数的第二个参数表示的是路径索引,无论传递给run_test的参数是什么,都会创建一个名字为uvm_test_top的实例,所以set第二个参数就是这个。
总的来说:白皮书(P87)
set:
第一个和第二个参数联合起来组成目标路径,与此路径符合的目标才能收信。
第一个参数必须是一个uvm_component实例的指针;
第二个参数是相对此实例的路径;
第三个参数表示一个记号,用以说明这个值是传给目标中的哪个成员的;
第四个参数是要设置的值。
get:
第一个和第二个参数联合起来组成路径;
第一个参数必须是一个uvm_component实例的指针;
第二个参数是相对此实例的路径;一般的,如果第一个参数被设置为this,那么第二个参数可以是一个空的字符串;
第三个参数就是set函数的第三个参数,这两个参数必须严格匹配;
第四个参数是要设置的变量。