当前位置:   article > 正文

SystemVerilog Assertions应用指南 第一章(1.28章节 内建的系统函数)_system verilog onehot检查

system verilog onehot检查

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/453901
推荐阅读
相关标签
  

闽ICP备14008679号