1-uvm_root, uvm_top, uvm_test_top
参考资料
(1) UVM使用双顶层的用法 | 骏的世界 (lujun.org.cn)
1.UVM的根-uvm_root or uvm_test_top?
(1) uvm_test_top实例化时的名字是uvm_test_top,这个名字是由UVM在run_test时自动指定的;
(2) uvm_top的名字是_top_,但是在显示路径时,并不会显示这个名字,而只显示从uvm_test_top开始的路径;
2. uvm_root(类)
(1) uvm_root本质是uvm_component;
(2) uvm_root的存在是为了保证验证平台只有一棵树(uvm_root是单实例类,整个UVM验证平台中,有且只有uvm_root的一个实例存在),并且发挥着phase controller的作用,管理所有component的phase.
(3) 任何没有指定parent的component,默认其parent是uvm_top(全局变量, uvm_root的一个实例).
(4) uvm_component的两大机制(树形组织结构和phase机制)都离不开uvm_root;
3. uvm_top(uvm_root类的句柄)及常用函数
(1) UVM中真正的树根,任何组件实例都在它之下(如果组件的parent为null,那么该组件为uvm_top的子组件);
(2) uvm_top是一个全局变量,是uvm_root的一个实例,也是uvm_root唯一的实例.
(3) uvm_top的名字是_top_,但是在显示路径时,并不会显示这个名字,而只显示从uvm_test_top开始的路径.
(4) uvm_top.find及示例;
uvm_component comp;
comp=uvm_top.find(“*.axi_agt”);
注1:其中*表示匹配任意字符;?表示匹配一个字符;+表示匹配一个或多个字符;
(5) uvm_top.find_all及示例;
uvm_component comps[$];
uvm_top.find_all("*.axi_?",comps);
foreach(comps[i]) begin
comps[i].print();
end
4. uvm_test_top
(1) 通过run_test语句创建的实例的名字为uvm_test_top.无论传递给run_test的参数是什么,创建的实例的名字都为uvm_test_top.
(2) uvm_test_top的parent是uvm_top,而uvm_top的parent是null.
(3) UVM中,支持uvm_top下有多个叶子节点,但是,多个叶子节点不能都叫uvm_test_top,如下所示.
5.uvm双顶层
详见UVM使用双顶层的用法 | 骏的世界 (lujun.org.cn);
问题:双顶层中的另外一个顶层是怎么跑起来的?