芯片验证中踩过的坑

UVM

  1. sequence中rand变量与transaction中的rand变量同名

在sequence中会定义rand类型变量,传递给transaction中的变量;但如果跟transaction中定义的随机变量同名,并不会采用seq中的变量。为什么呢?

来看下面一段代码

clase my_seq extends uvm_sequence#(my_transaction);
    rand bit[47:0] dmac=48‘hFF_FFFF;
    
    virtual task body():
        my_transaction tr;
        `uvm_do_with(tr, {tr.dmac == dmac;})//约束
        tr.print();
    endtask

endclass
 

上述打印结果:tr.dmac的值并不为约束值48'hFFFFFF;而是一个随机值。

这是因为运行到第6行,编译器会首先去transaction中寻找dmac;找到就不会继续向上查找了。

`uvm_do_with(tr, {tr.dmac == dmac;})
//等同于
`uvm_do_with(tr, {tr.dmac == tr.dmac;})
  1. super.xxx_phase

原始build_phase中存在“自动获取通过config_db::set设置的参数”。所有除了build_phase中有必要加上super.build_phase。其余phase大可不必!(除非扩展自用户自定义类)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值