• SystemVerilog Assertions应用指南 第一章(1.28章节 内建的系统函数)


            SVA提供了几个内建的函数来检查一些最常用的设计条件。
            $onehot(expression)—检验表达式满足“one-hot”,换句话说,就是在任意给定的时钟沿,表达式只有一位为高。
            $onehot0( expression)—检验表达式满足“ zero one-hot”,换句话说,就是在任意给定的时钟沿,表达式只有一位为高或者没有任何位为高。
            $isunknown( expression)—检验表达式的任何位是否是Ⅹ或者Z。
            $countones( expression)—计算向量中为高的位的数量。
            
    断言语句a33a检验向量“ state”是“one-hot”。断言语句a33b检验向量“ state”是“ zero one-hot”,断言语句a33c检验向量“bus”是否有任何位为X或Z。断言语句a33d检验向量“bus”中等于1的位的个数大于1。
     

    1. module routines;
    2. logic clk;
    3. logic [3:0] state;
    4. logic [4:0] bus;
    5. integer i;
    6. initial $vcdpluson();
    7. initial
    8. begin
    9. clk = 1'b0; state = 4'd0;
    10. @(posedge clk);
    11. for(i=0; i<3; i++)
    12. begin
    13. state = i*2;
    14. bus = $random();
    15. @(posedge clk);
    16. end
    17. for(i=0; i<3; i++)
    18. begin
    19. state = $random() % 16;
    20. bus = 8'dz;
    21. @(posedge clk);
    22. end
    23. bus = 4'd10;
    24. repeat(2) @(posedge clk);
    25. $finish();
    26. end
    27. // builtin system functions
    28. a33a: assert property(@(posedge clk) $onehot(state));
    29. a33b: assert property(@(posedge clk) $onehot0(state));
    30. a33c: assert property(@(posedge clk) $isunknown(bus));
    31. a33d: assert property(@(posedge clk) $countones(bus) > 1);
    32. initial forever clk = #25 ~ clk;
    33. endmodule

            图1-35显示了上述断言在模拟中的响应。表1-16总结了每个断言的状态和向量“ state”和“bus”的采样值。注意,断言a33a在时钟周期2失败,因为所有位都为零。“one-hot”要求在任何时钟上升沿都只有一位为高。另一方面,断言a33b成功因为它检查“ zero one-hot”,而对于这种构造,所有位都为零是合法的a33a和a3b都在时钟周期5,6,7,8失败,因为有超过一位为高。断言a33c在任何时候向量“bus”的值不为X或Z时失败。它在时钟周期5,6,7成功,因为向量的值为Z。断言a33d在时钟周期2,3,5,6,7失败,因为值为高的位的个数没超过1。断言a33d在时钟周期4,8成功,因为向量“bus”在这两个时刻都有两位为高。

  • 相关阅读:
    【JavaSE】经典项目 图书管理系统
    MySQL总结(DDL、DML、TPL、DCL)
    Ansible的filter
    Android中使用Glide加载圆形图像或给图片设置指定圆角
    OC iPhoneX UIScrollView顶部有空白问题
    9.2 提高组模拟赛总结
    【二叉树】- 迭代遍历( js 实现前、中、后序)
    写读后感的时候,可以适当地引用书中的内容吗?
    docker启动tomcat容器实例,浏览器访问失败
    Java并发 | 08.[方法] 线程的生命周期及常用的方法
  • 原文地址:https://blog.csdn.net/qq_33300585/article/details/133838610