參考資料
(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);
問題:雙頂層中的另外一個頂層是怎么跑起來的?