//+++++++++++++++++++++++++++++++++++++++++++++++++ // DUT With assertions //+++++++++++++++++++++++++++++++++++++++++++++++++ module disableiff_assertion( input wire clk,req,reset, output reg gnt); //================================================= // Sequence Layer //================================================= sequence req_gnt_seq; // (~req & gnt) and (~req & ~gnt) is Boolean Layer (~req & gnt) ##1 (~req & ~gnt); endsequence //================================================= // Property Specification Layer //================================================= property req_gnt_prop; @ (posedge clk) // At every posedge clk disable iff (reset) // disable if reset is asserted req |=> req_gnt_seq; endproperty //================================================= // Assertion Directive Layer //================================================= req_gnt_assert : assert property (req_gnt_prop); //================================================= // Actual DUT RTL //================================================= always @ (posedge clk) gnt <= req; endmodule //+++++++++++++++++++++++++++++++++++++++++++++++ // Testbench Code //+++++++++++++++++++++++++++++++++++++++++++++++ module disableiff_assertion_tb(); reg clk = 0; reg reset, req = 0; wire gnt; always #3 clk ++; initial begin reset <= 1; #20 reset <= 0; // Make the assertion pass #100 @ (posedge clk) req <= 1; @ (posedge clk) req <= 0; // Make the assertion fail #100 @ (posedge clk) req <= 1; repeat (5) @ (posedge clk); req <= 0; #10 $finish; end disableiff_assertion dut (clk,req,reset,gnt); endmodule