|
@ -5,10 +5,14 @@ module counter_t ( |
|
|
); |
|
|
); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
`define INIT_VALUE 8
|
|
|
|
|
|
|
|
|
`define INITVAL 8
|
|
|
|
|
|
`define ENDVAL 64
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
counter #(.Init(`INIT_VALUE)) counter_i ( |
|
|
|
|
|
|
|
|
counter #( |
|
|
|
|
|
.InitVal(`INITVAL), |
|
|
|
|
|
.EndVal(`ENDVAL) |
|
|
|
|
|
) counter_i ( |
|
|
.Reset_n_i(Reset_n_i), |
|
|
.Reset_n_i(Reset_n_i), |
|
|
.Clk_i(Clk_i), |
|
|
.Clk_i(Clk_i), |
|
|
.Data_o(Data_o) |
|
|
.Data_o(Data_o) |
|
@ -34,18 +38,16 @@ module counter_t ( |
|
|
end |
|
|
end |
|
|
*/ |
|
|
*/ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Intermediate assertions
|
|
|
// Intermediate assertions
|
|
|
always @(*) |
|
|
always @(*) |
|
|
if (!Reset_n_i) assert (Data_o == `INIT_VALUE); |
|
|
|
|
|
|
|
|
if (!Reset_n_i) assert (Data_o == `INITVAL); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Fail with unbounded prove using SMTBMC, maybe the assertions have to be more strict
|
|
|
|
|
|
// there have to be more restrictions.
|
|
|
|
|
|
// With abc pdr is can be successfully proved
|
|
|
|
|
|
assert property (@(posedge Clk_i) Data_o >= `INIT_VALUE && Data_o <= 64); |
|
|
|
|
|
assert property (@(posedge Clk_i) disable iff (!Reset_n_i) Data_o < 64 |=> Data_o == $past(Data_o) + 1); |
|
|
|
|
|
assert property (@(posedge Clk_i) disable iff (!Reset_n_i) Data_o == 64 |=> $stable(Data_o)); |
|
|
|
|
|
|
|
|
// Fails with unbounded prove using SMTBMC, maybe
|
|
|
|
|
|
// the assumptions/assertions have to be more strict.
|
|
|
|
|
|
// With abc pdr this can be successfully proved.
|
|
|
|
|
|
assert property (@(posedge Clk_i) disable iff (!Reset_n_i) Data_o < `ENDVAL |=> Data_o == $past(Data_o) + 1); |
|
|
|
|
|
assert property (@(posedge Clk_i) disable iff (!Reset_n_i) Data_o == `ENDVAL |=> $stable(Data_o)); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|