Friday, 17 July 2015

SystemVerilog Assertions - Counter DUT

Assertions are temporal checks on given protocol.

  • counter_assertions.sv contains temporal checks, with assertion sequence and property, on counter DUT protocol.
  • As each signal here is coming from DUT, it should be defined as inputs.

module counter_assertion(clk, rst, data, updown, load, count);

 input logic clk, rst;
 input logic updown, load;
 input logic [3:0] data, count;


 property reset_prpty;
  @(posedge clk) rst |=> (count == 4'b0);
 endproperty

 sequence up_seq;
  !load && updown;
 endsequence
 
 sequence down_seq;
  !load && !updown;
 endsequence

 property up_count_prpty;
  @(posedge clk) disable iff(rst)
  up_seq |=> (count == ($past(count, 1) + 1'b1));
 endproperty

 property down_count_prpty;
  @(posedge clk) disable iff(rst)
  down_seq |=> (count == ($past(count, 1) - 1'b1));
 endproperty

 property count_Fto0_prpty;
  @(posedge clk) disable iff(rst)
  (!load && updown) && (count == 4'hF) |=> (count == 4'b0);
 endproperty

 property count_0toF_prpty;
  @(posedge clk) disable iff(rst)
  (!load && !updown) && (count == 4'b0) |=> (count == 4'hF);
 endproperty

 property load_prpty;
  @(posedge clk) disable iff(rst)
  load |=> (count == $past(data, 1));
 endproperty




 RST: assert property (reset_prpty);
 UP_COUNT: assert property (up_count_prpty);
 DOWN_COUNT: assert property (down_count_prpty);
 F2O: assert property (count_Fto0_prpty);
 O2F: assert property (count_0toF_prpty);
 LOAD: assert property (load_prpty);

endmodule