注册 登录
ET创芯网论坛(EETOP) 返回首页

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

日志

约束所在

已有 405 次阅读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

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

关闭

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

小黑屋|手机版|Archiver|ET创芯网 ( 京ICP备:10050787号 京公网安备:110105001212 )

GMT+8, 2019-4-26 17:46 , Processed in 0.031166 second(s), 11 queries , Redis On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

返回顶部