systemverilog : constraint slove... before 详解

写在前面:之前公众号写过一篇关于systemverilog中随机约束implication的介绍,由于编写的不够严谨,出现一些错误,在此做出勘误说明和进一步的分析说明。
在此感谢Holden同学指出其中的问题。
温故而知新:systemverilog 随机约束之implication

在此我们以绿皮书中的例子为说明。

rand bit x;
rand bit[1:0] y;

without order, solve before的概率分布

在此设计三种不同的随机先后顺序,分析x和y取值的其概率分布。

  1. without order:
    请添加图片描述
    在x和y互相耦合的约束下,{x,y}的合法取值共有5种,每种取值的概率分别为1/5。
    请添加图片描述
    因此,x=0的取值概率为:0.2,y=0的取值概率为:0.2+0.2=0.4,y=1,2,3的取值概率都是0.2。这种分析方式也是符合SV语法手册的说明,参见SV语法手册第18.5.10小节的说明。

注:这种概率的分布和绿皮书中的分析并不相同,这是由于绿皮书中采用vcs仿真器不同版本的差异造成的。在较新的vcs版本中,有ntb_solver_mode仿真选项,在设置ntb_solver_mode=1时,可以得到绿皮书中的结果;ntb_solver_mode=2或者使用默认设置,得到的就是上面的分析结果。

  1. solve x before y:
    请添加图片描述
    solve-before并没有改变合法解的空间,只是改变了概率分布,由于x先于y求解,因此x的随机不受y取值的影响,其概率分布如下:
    请添加图片描述
    因此,x=0和1的取值概率都是0.5,y=0的取值概率为:0.5+0.125=0.625,其余取值概率都为0.125。
  2. solve y before x:
    请添加图片描述
    和第2点类似,概率分布如下:
    请添加图片描述
    因此,y的取值是均匀分布,都是0.25,x=0的取值概率都是0.125,x=1的取值概率为:0.253+0.250.5=0.875。
    上述三种约束,使用vsim仿真,提取x和y的取值概率分布如下:
    请添加图片描述
    因此,无论是选择哪一种约束顺序,由于x和y之间存在耦合,二者的取值概率都不会同时满足各自的均匀分布,即x=0/1:0.5和y=0,1,2,3:0.25不能同时出现。
    进一步,如果上述的约束中,如果指定了x或者y的概率分布,结果又会如何?

指定x的概率分布:without order, solve before的差异分析

添加x的dist概率分布,分别对without order,solve_before方式进行测试。

without order:
请添加图片描述
solve x before y:
请添加图片描述
solve y before x:
请添加图片描述
测试结果如下:
请添加图片描述
上表实测结果的理论分析值如下:
请添加图片描述
从中可以看出:
(1)在without order和solve x before y条件下,x的dist概率分布会得到满足;
(2)在solve y before x的条件下,优先满足solve before顺序,y是均匀分布;

指定y的概率分布:without order, solve before的差异分析

添加x的dist概率分布,分别对without order,solve_before方式进行测试。

without order:
请添加图片描述
solve x before y:
请添加图片描述
solve y before x:
请添加图片描述
测试结果如下:
请添加图片描述
上表实测结果的理论分析值如下:
请添加图片描述
从中可以看出:

(1)在without order和solve y before x条件下,y的dist概率分布会得到满足;

(2)在solve x before y的条件下,优先满足solve before顺序,x是均匀分布;

同时指定x和y的概率分布:without order, solve before的差异分析

添加x的dist概率分布,分别对without order,solve_before方式进行测试。

without order:
请添加图片描述
solve x before y:
请添加图片描述
solve y before x:
请添加图片描述
测试结果如下:
请添加图片描述
上表实测结果的理论分析值如下:
请添加图片描述
从中可以看出:
(1)solve before 仍会优先得到满足;
(2)在同时指定dist概率分布时,without order的概率理论值分析方法暂时没有确定,同时也没有和测试值吻合。(SV语法手册中关于dist分布和其他constraint产生冲突时,给出的描述:Absent any other constraints, the probability that the expression matches any value in the list is proportional to its specified weight. If there are constraints on some expressions that cause the distribution weights on these expressions to be not satisfiable, implementations are only required to satisfy the constraints.)如果大家有比较合理的分析方式,欢迎一起交流。

总的来看,使用->或者if-else时,参数的概率分布会变得复杂且不易理解,尤其涉及到多条件蕴含时,某些参数的概率分布很难做出预期,因此更加需要后续的功能覆盖率加以分析,找出不合理的约束。

原文🔗systemverilog 随机约束implication的概率分析

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值