写在前面:之前公众号写过一篇关于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 : constraint slove... before 详解相关推荐

  1. Sparsity constraint稀疏约束详解

    Sparsity constraint稀疏约束详解 引子: 线性模型是我们经常使用的一种模型,比如: 文本分类中,bag-of-words 有p = 20 K 个特征, 共有 N = 5K 个文本样例 ...

  2. [SV]SystemVerilog進程之fork join专题详解及案例分析

                SystemVerilog進程之fork...join专题详解及案例分析  目錄 一.fork-join 1.1.fork join example, 二.fork-join_ ...

  3. [SV]SystemVerilog枚举型变量语法详解及应用举例

    SystemVerilog枚举型变量语法详解及应用举例 This section provides the examples to declare SystemVerilog enum of logi ...

  4. Constraint Layout 2.0 用法详解

    Constraint Layout 是最受欢迎的 Jetpack 库之一,它的 2.0 正式版本也发布啦 (目前最新版本 2.1.0-alpha1)!也许您已熟悉了 Constraint Layout ...

  5. Spring JDBC详解

    <Spring JDBC详解> 本文旨在讲述Spring JDBC模块的用法.Spring JDBC模块是Spring框架的基础模块之一. 一.概述 在Spring JDBC模块中,所有的 ...

  6. Android中measure过程、WRAP_CONTENT详解以及 xml布局文件解析流程浅析

    转自:http://www.uml.org.cn/mobiledev/201211221.asp 今天,我着重讲解下如下三个内容: measure过程 WRAP_CONTENT.MATCH_PAREN ...

  7. Android中measure过程、WRAP_CONTENT详解以及xml布局文件解析流程浅析(下)

       本文原创, 转载请注明出处:http://blog.csdn.net/qinjuning 上篇文章<<Android中measure过程.WRAP_CONTENT详解以及xml布局文 ...

  8. web.xml 中的listener、 filter、servlet 加载顺序及其详解(转)

    在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似的,所以自己查找资料总结了下,下面有些是转载其他人的,毕竟人家写的不错,自己也就不重复造轮子了,只是略加点了自己的修饰. 首先可以肯定的是 ...

  9. 创建emp表 oracle,Oracle中创建和管理表详解

    Oracle中创建和管理表详解 更新时间:2013年08月01日 15:44:16   作者: 以下是对Oracle中的创建和管理表进行了详细的分析介绍,需要的朋友可以过来参考下 SQL> /* ...

  10. Android控件之ConstraintLayout详解

    目录: 1.为什么要用ConstraintLayout? 2.ConstraintLayout有哪些缺点? 3.怎么使用ConstraintLayout. 1.为什么要用ConstraintLayou ...

最新文章

  1. LINUX 使用tcgetattr函数与tcsetattr函数控制终端三
  2. Redis:常见的面试题
  3. [ATF]-ARM级别/异常/状态切回时候的寄存器保存与恢复
  4. [javaweb] servlet 服务器端转发和客户端重定向 (四)
  5. Code Signal_练习题_extractEachKth
  6. 高级SQL注入拿shell,一般黑客不知道。哈客
  7. ue4 设置intellisence_UE4.22编辑器界面操控设置(4)
  8. 【C++深度剖析教程40】使用数值型模板技术计算1+2+3+...+N的值
  9. 部门名称部门结构叠用_金属结构分公司三部门联合开展工会小组活动
  10. KE之undefinded instruction问题记录
  11. 南京邮电大学《管理学原理C》2019/2020 学年第 2 学期期末试卷
  12. 从0开始使用腾讯云GPU服务器
  13. CAPM模型的应用--回归模型中的Alpha, r_f
  14. Matplotlib颜色设置
  15. 指尖江湖鸿蒙抽奖,剑网三:指尖江湖 李忘生竞技场攻略
  16. MFC CFileDialog使用
  17. dev.env.js和prod.env.js
  18. CANopen协议,上位机开发(C#)
  19. MYSQL加密解密 中文、数字 AES_ENCRYPT,AES_DECRYPT
  20. [转] 一百本名著中的一百句话

热门文章

  1. Bootstrap框架——栅格系统
  2. 有人云平台全面升级!“旧词新释”秒懂物联网云平台的奥秘
  3. WebForm CSS垂直虚线时间轴特效
  4. 深入理解Zend执行引擎
  5. 中职一年级计算机学情分析,一年级学生学情分析
  6. (爱斯维尔期刊:遇到问题已解决) 使用elsarticle-harv的style引文格式时报错 mand\Nat@force@numbers{}\NAT@force@numbers
  7. 【转】Android Hook框架Xposed详解
  8. java 订单支付_Java多订单多支付方式分配金额问题的解决
  9. nginx配置反向路由代理
  10. “别人家”的毕设:造了个车!宅家5个月,设计建模组装自行完成