对DUT中parameter参数与TB中参数化的类的理解

对DUT中parameter参数与TB中参数化的类的理解

  • DUT:V在定义module时通过parameter关键字定义参数。参数具有默认值,在定义parameter时指定。可以在模块实例化时,通过.parameter(appoint_value)的方式来为模块中的参数进行赋值。如果实例化时不通过此方式指定参数的数值,那么参数会使用默认值。parameter的作用域为整个模块(即module~endmodule)。
//define module and parameter
module adder
                    #(parameter ADD2=2'd1)     //parameter ADD2 default value is 2'd1
                    (input clk,
                     input a,
                     output [3:0]sum
                     );
                     
             always@(*)
             begin
                sum <= a + ADD2;
             end
   
endmodule

//instance module
module test;
    wire [3:0] my_sum;
    initial
    begin
        forever #10 clk = ~clk;
    end

    adder my_adder
                  #(.ADD2(2'd2))            //transmit parameter
                  (.clk(clk),
                   .a(1'b1)
                   .sum(my_sum)
                   );
endmodule
  • TB:SV定义参数化的类时,在类声明时定义参数。同样的,参数具有默认值。在类实例化时,可以通过对类中的参数进行赋值(赋值的位置需对应)。在一个参数化的类A中,可以实例化另一个参数化的类B。类A中的参数可以传递给B,这样类B中的参数就引用了A中的类,和A中的参数相同。这种用法通常在具有层级关系的类中(嵌套参数化的类),如agent和driver/monitor/sequencer或者driver/monitor和item/interface组件。
class driver #(int ADDR_WIDTH_1=16) extends uvm_driver;
...
endclass

class agent #(int ADDR_WIDTH_2=16) extends uvm_agent;
    driver #(int ADDR_WIDTH_1=16) my_driver;
    
    void function build_phase(uvm_phase phase);
        //parameter ADDR_WIDTH_1 equals to ADDR_WIDTH_2
        my_driver = driver #(ADDR_WIDTH_2)::type_id::create("my_driver", this);
    endfunction
...    
endclass
  • 两者异同:DUT的parameter和TB中参数化的类非常相似。定义时可以赋默认值,参数的赋值都是在实例化时进行赋值,赋值方式不同。参数的作用域相同,参数可以向包含的子模块/类向下传递。DUT的parameter和TB中参数化的类都是为了模块实例化时可以通过参数进行配置,使模块的实例化更加灵活。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

搬砖小张

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值