电子说
因为DUT是一个静态的内容,所以testbench理应也是静态的,其作为uvm验证环境和DUT的全局根结点。
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
上面是一个简单的验证平台的tb_top示例.其中:
Clock generation
一般的数字设计都会包含一个或者多个时钟,同时设计可能会因为工艺等问题工作在不同的频率下,所以时钟生成最好是参数化的。
Reset Generation
和时钟类似,复位也需要在testbench顶层实现。在许多数字设计中,复位分为 硬件复位和软件复位 ,它们的复位方式不一样,前者通过寄存器接口实现,后者直接通过硬件复位接口实现。
和DUT interface一样,时钟和复位在验证环境和DUT中都会用到,对应的赋值可以在tb_top中实现,也可以在验证环境中实现。
另外很多验证环境都需要抽取DUT中的信号,可能是force,也可能是采样DUT内部信号。此时需要在testbench tb_top中将DUT信号赋值过去。
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
全部0条评论
快来发表一下你的评论吧 !