索手锋芒的个人空间 https://blog.eetop.cn/calvin [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

`uvm_do_with注意事項

已有 5682 次阅读| 2016-3-9 09:48 |个人分类:UVM notebook

Case:
  在上层top_seq调用下层sub-seq或seq_item时,可能会使用`uvm_do_with对下层的random变量进行约束。
  通常为了coding的方便,上层和下层seq变量的名字可能是一样的。这样就有一个问题,我们会发现如果使用`uvm_do_with(sub_seq, {var_a == var_a;}),
  这个约束是无法启作用的,下层的var_a该怎么random还是怎么random,即使上层top_seq将var_a设定为某个固定值也没用。
Reason:
  这是由于作用域的问题,在编译器来看,它不知道两个var_a有什么不同,把他当成sub_seq作用域中的两个相同变量,自然而然这条约束就没用效用
Solution:
  可能有人会想到有this,这正是一个陷阱。在top_seq中使用`uvm_do_with(sub_seq, {sub_seq.var_a == this.var_a}),仿真会发现,同样没有效果,为什么?
  因为被`uvm_do_with中,this指定的作用域首先找到的是sub_seq,而并不是想要的top_seq的this。
  有两种解决方法:
  1.  top_seq使用不同的变量名,`uvm_do_with(sub_seq,{sub_seq.var_a == tmp_var_a}),  这样做就不太方便,如果seq嵌套太多,变量名就一大堆
  2. 使用this,但换个名字,如下
Example
   class top_seq  extends...
        ...
       top_seq    my_seq;

      function new()
             my_seq = this                    ==> 指向自己,其实就是把this换了个名字,
     endfunction

      ...
     `uvm_do_with(sub_seq, {var_a == my_seq.var_a})        ==>原理很简单,就是避免关键字因素的影响
   endclass

点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 1

    粉丝
  • 0

    好友
  • 4

    获赞
  • 4

    评论
  • 3176

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-11 04:27 , Processed in 0.024708 second(s), 14 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部