我想添加一个检查器,用于检查当启用为“1”时 clk 是否正在切换 clk 的频率是随机的未知

问题描述

假设我们有一个名为“clk”的信号,我们希望确保当“enable”为“1”时,clk 会切换。并且“clk”的频率未知。

解决方法

这个怎么样?

module top();
  
  reg clk;
  reg enable;
  
  always @(posedge enable)
    begin
      automatic bit toggled=1'b0;
      automatic process p;
      
      fork
        begin
          p = process::self();
          $display("%t expecting CLK toggle ...",$time);
          @(clk) toggled = 1'b1;
          $display("%t CLK toggled!",$time);
        end
      join_none
      
      @(negedge enable);
      if (!toggled) $error("CLK not toggled!");
      p.kill();
    end
  
  initial
    begin
      
      clk = 1'b0;
      enable = 1'b0;
      $dumpfile("dump.vcd"); $dumpvars;
      
      repeat(3)
      begin
        #5;
        enable <= 1'b1;
        #5;
        clk <= ~clk;
        #5;
        enable <= 1'b0;
      
        #5;
        enable <= 1'b1;
        #5;
        //clk <= ~clk;
        #5;
        enable <= 1'b0;
      end
      
      #5;
      $finish();
      
    end
  
endmodule : top