因?yàn)镈UT是一個(gè)靜態(tài)的內(nèi)容,所以testbench理應(yīng)也是靜態(tài)的,其作為uvm驗(yàn)證環(huán)境和DUT的全局根結(jié)點(diǎn)。
module tb_top;
import uvm_pkg::*;
bit clk;
always #10 clk <= ~clk;
dut_if dut_if1 (clk);
dut_wrapper dut_wr0 (._if (dut_if1));
initial begin
uvm_config_db #(virtual dut_if)::set (null,"uvm_test_top","dut_if",dut_if1);
run_test ("base_test");
end
endmodule
上面是一個(gè)簡(jiǎn)單的驗(yàn)證平臺(tái)的tb_top示例.其中:
- tb_top 是一個(gè)靜態(tài)的module,驗(yàn)證環(huán)境中所有的信息都可以從這里索引到。此時(shí)需要 import uvm_pkg:: * 才能識(shí)別一些uvm庫(kù)的內(nèi)容。
- 在tb_top需要生成驗(yàn)證環(huán)境、DUT和接口都需要的時(shí)鐘和復(fù)位。因?yàn)轵?yàn)證環(huán)境是動(dòng)態(tài)的,無(wú)法在其中例化物理接口,所以需要采用uvm_config_db將物理interface的指針set給驗(yàn)證環(huán)境中的virtual interface。
- 通過(guò)ru
n_test(“
base_test
”) 啟動(dòng)
一個(gè)test_case。
Clock generation
一般的數(shù)字設(shè)計(jì)都會(huì)包含一個(gè)或者多個(gè)時(shí)鐘,同時(shí)設(shè)計(jì)可能會(huì)因?yàn)楣に嚨葐?wèn)題工作在不同的頻率下,所以時(shí)鐘生成最好是參數(shù)化的。
Reset Generation
和時(shí)鐘類似,復(fù)位也需要在testbench頂層實(shí)現(xiàn)。在許多數(shù)字設(shè)計(jì)中,復(fù)位分為 硬件復(fù)位和軟件復(fù)位 ,它們的復(fù)位方式不一樣,前者通過(guò)寄存器接口實(shí)現(xiàn),后者直接通過(guò)硬件復(fù)位接口實(shí)現(xiàn)。
和DUT interface一樣,時(shí)鐘和復(fù)位在驗(yàn)證環(huán)境和DUT中都會(huì)用到,對(duì)應(yīng)的賦值可以在tb_top中實(shí)現(xiàn),也可以在驗(yàn)證環(huán)境中實(shí)現(xiàn)。
另外很多驗(yàn)證環(huán)境都需要抽取DUT中的信號(hào),可能是force,也可能是采樣DUT內(nèi)部信號(hào)。此時(shí)需要在testbench tb_top中將DUT信號(hào)賦值過(guò)去。
interface gen_if;
logic signals;
endinterface
module tb_top;
gen_if u_if0 ();
des u_des ( ... );
// Assign an internal net to a generic in
assign u_if0.signals = u_des.u_xyz.status;
endmodule
-
時(shí)鐘
+關(guān)注
關(guān)注
11文章
1741瀏覽量
131633 -
UVM
+關(guān)注
關(guān)注
0文章
182瀏覽量
19197 -
DUT
+關(guān)注
關(guān)注
0文章
189瀏覽量
12437
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論