imicman的个人空间 https://blog.eetop.cn/1518355 [收藏] [复制] [分享] [RSS]

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

日志

约束所在

已有 793 次阅读| 2016-7-11 21:45 |个人分类:验证杂谈

1 背景
  UVM的方法学激励需要施加有效约束,本文总结各种约束。

2原则
    原则1:在pkt(item)中的约束要考虑周全,要适当,不能过紧,排除不可能的情况,并明确variable的关系即可。
   原则2:其他约束放在sequnce中,每个sequence对应了一个case(pattern)

3. 具体原则2的约束总结
   第一:在sequnce,使用系统函数$urandom,$urandom_range;目的是产生一个随机数值(经过一些运算)并将给随机后的数值赋值给pkt的一个property.
   第二:在sequnce,控制pkt的rand_mode和constraint_mode,以精确控制约束和property的随机性。
   第三:在sequnce,使用in_line constrait(与pkt中的constraint格式一样);示例如下
    repeat(iem_count) 
          ·uvm_do_with(req, {if  (port_id == -1)  sa inside { [0:10]};  else sa == port_id; da inside valid_da;})

  第四:在sequnce,使用constraint; 实例如下:
      class my_seq extends uvm_sequnce #(pkt);
           `uvm_object_utils(my_seq)
           function new(string name = "my_seq");
              super.new(name);
           endfucntion

            rand bit[1:0]  seqadd;
           constraint  c1 { seqadd <= 2'b01;}
           task body();
               `uvm_do_with(req, {addr == seqadd;})
            endtask

      endclass
     第五: 在pre_randomize()和post_randomize()中放置合适的操作。



总之,变化的约束要放在sequnce中,不变的约束放在pkt中,UVM的其他地方不要放置约束,便于管理,维护,和debug.

点赞

评论 (0 个评论)

facelist

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

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

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 1

    粉丝
  • 0

    好友
  • 8

    获赞
  • 34

    评论
  • 访问数
关闭

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

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

GMT+8, 2024-4-26 09:27 , Processed in 0.016108 second(s), 11 queries , Gzip On, Redis On.

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