• 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”在这两个时刻都有两位为高。

  • 相关阅读:
    联想拯救者Y7000P更新BIOS
    「软考」高项通关秘籍,附赠备考资料
    今天告诉你界面控件DevExpress WinForms为何弃用经典视觉样式
    React基础教程(四):组件理解
    Python 音频处理工具库之pydub使用详解
    VO、DTO
    FT2004(D2000)开发实战之移植OpenCV-3.4.16
    R语言计算两个向量成对元素的最小值:计算两个向量的平行最小值(parallel minimum)
    小红书推广怎么做?小红书推广需要注意什么?
    TiDB 6.0 Placement Rules In SQL 使用实践
  • 原文地址:https://blog.csdn.net/qq_33300585/article/details/133838610