UVM验证平台顶层有什么作用

电子说

1.3w人已加入

描述

因为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示例.其中:

  • tb_top 是一个静态的module,验证环境中所有的信息都可以从这里索引到。此时需要 import uvm_pkg:: * 才能识别一些uvm库的内容。
  • 在tb_top需要生成验证环境、DUT和接口都需要的时钟和复位。因为验证环境是动态的,无法在其中例化物理接口,所以需要采用uvm_config_db将物理interface的指针set给验证环境中的virtual interface。
  • 通过ru
    n_test(“
    base_test
    ”) 启动
    一个test_case。

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
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
评论(0)
发评论
jf_16632017 2023-03-22
0 回复 举报
你好,请问能转载您的文章到微信公众号上吗 收起回复

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分