外貿(mào)網(wǎng)站屏蔽國(guó)內(nèi)ipseo報(bào)名在線咨詢
????????在SystemVerilog和UVM驗(yàn)證環(huán)境中,run_test()
?是啟動(dòng)UVM仿真流程的核心函數(shù)。它負(fù)責(zé)初始化UVM框架、創(chuàng)建測(cè)試用例實(shí)例,并觸發(fā)UVM的Phase機(jī)制來(lái)執(zhí)行驗(yàn)證環(huán)境的構(gòu)建和運(yùn)行
1.?run_test()
?的作用
run_test()
?是UVM提供的內(nèi)置函數(shù),定義在UVM庫(kù)中(uvm_root.svh
),主要功能如下:
-
初始化UVM根對(duì)象(
uvm_root
),啟動(dòng)全局Phase流程。 -
根據(jù)參數(shù)動(dòng)態(tài)創(chuàng)建測(cè)試用例實(shí)例(通過(guò)UVM工廠機(jī)制)。
-
根據(jù)指定的測(cè)試用例名稱(通過(guò)參數(shù)或命令行),使用 UVM 的工廠機(jī)制創(chuàng)建相應(yīng)的測(cè)試用例對(duì)象。
-
-
觸發(fā)UVM各階段的執(zhí)行(如?
build_phase
、connect_phase
、run_phase
?等)。-
測(cè)試用例對(duì)象會(huì)調(diào)用?
build_phase
?方法,在這個(gè)階段會(huì)創(chuàng)建并配置驗(yàn)證環(huán)境中的各個(gè)組件,如激勵(lì)發(fā)生器(Sequencer)、驅(qū)動(dòng)器(Driver)、監(jiān)測(cè)器(Monitor)、計(jì)分板(Scoreboard)等。
-
-
結(jié)束仿真:當(dāng)所有階段執(zhí)行完畢后,仿真結(jié)束。
2.?run_test()
?的調(diào)用位置
通常在頂層模塊(top
)的?initial
?塊中調(diào)用,位于DUT實(shí)例化和時(shí)鐘/復(fù)位生成之后:
module top;// 時(shí)鐘和復(fù)位生成initial beginclk = 0;forever #5 clk = ~clk;rst = 1;#10 rst = 0;end// DUT實(shí)例化dut u_dut(.clk(clk), ...);// UVM啟動(dòng)initial begin// 配置接口到uvm_config_db(可選)uvm_config_db#(virtual dut_if)::set(null, "*", "dut_vif", dut_if_inst);// 啟動(dòng)測(cè)試用例run_test("my_test_case");end
endmodule
3.?run_test()
?的執(zhí)行流程
(1) 初始化UVM根對(duì)象
-
創(chuàng)建?
uvm_root
?單例:
UVM通過(guò)?uvm_root::get()
?獲取全局根對(duì)象,負(fù)責(zé)管理所有UVM組件和Phase調(diào)度。
(2) 動(dòng)態(tài)創(chuàng)建測(cè)試用例
-
工廠模式(Factory):
run_test("my_test_case")
?中的字符串參數(shù)對(duì)應(yīng)一個(gè)已注冊(cè)的測(cè)試用例類。
UVM工廠根據(jù)該名稱創(chuàng)建測(cè)試用例實(shí)例(my_test_case
?必須通過(guò)?uvm_component_utils
?宏注冊(cè))。class my_test_case extends uvm_test;`uvm_component_utils(my_test_case) // 注冊(cè)到工廠... endclass
(3) 啟動(dòng)Phase機(jī)制
-
自頂向下執(zhí)行Phase:
run_test()
?觸發(fā)UVM的Phase流程,從根對(duì)象(uvm_root
)開(kāi)始,遞歸調(diào)用所有組件的Phase方法:-
build_phase
:創(chuàng)建子組件并配置參數(shù)。 -
connect_phase
:連接TLM端口和分析端口。 -
end_of_elaboration_phase
:驗(yàn)證環(huán)境構(gòu)建完成后的最終檢查。 -
start_of_simulation_phase
:仿真開(kāi)始前的初始化操作。 -
run_phase
:啟動(dòng)激勵(lì)生成、監(jiān)測(cè)和檢查(并行執(zhí)行)。 run_phase
?結(jié)束:run_phase
?是執(zhí)行實(shí)際測(cè)試邏輯的主要階段,當(dāng)?run_phase
?中的所有任務(wù)都完成后,該階段結(jié)束。通常,測(cè)試用例中的激勵(lì)生成、數(shù)據(jù)監(jiān)測(cè)等操作都在這個(gè)階段完成。- 后續(xù)清理階段執(zhí)行:
run_phase
?結(jié)束后,會(huì)依次執(zhí)行后續(xù)的清理階段。例如,extract_phase
?用于提取測(cè)試結(jié)果數(shù)據(jù),check_phase
?用于檢查測(cè)試結(jié)果是否符合預(yù)期,report_phase
?用于生成測(cè)試報(bào)告。 - 驗(yàn)證環(huán)境結(jié)束:當(dāng)所有階段都執(zhí)行完畢后,驗(yàn)證環(huán)境結(jié)束,仿真也隨之停止。
-
?