Fix commented out frontend properties which relied on non-constant past reset values
This commit is contained in:
parent
449348f459
commit
116e34df49
|
@ -534,7 +534,6 @@ if (EXTENSION_M) begin: has_muldiv
|
|||
.result_vld (x_muldiv_result_vld)
|
||||
);
|
||||
|
||||
// TODO fusion of MULHx->MUL and DIVy->REMy sequences
|
||||
wire x_muldiv_result_is_high =
|
||||
d_mulop == M_OP_MULH ||
|
||||
d_mulop == M_OP_MULHSU ||
|
||||
|
@ -891,7 +890,7 @@ always @ (posedge clk or negedge rst_n) begin
|
|||
// AMOs should handle the entire bus transfer in stage X.
|
||||
assert(xm_memop != MEMOP_AMOADD_W);
|
||||
`endif
|
||||
if (d_memop_is_amo && |x_amo_phase) begin // TODO do AMOs clear reservation?
|
||||
if (d_memop_is_amo) begin
|
||||
mw_local_exclusive_reserved <= 1'b0;
|
||||
end else if (xm_memop == MEMOP_SC_W) begin
|
||||
mw_local_exclusive_reserved <= 1'b0;
|
||||
|
|
|
@ -171,7 +171,6 @@ always @ (posedge clk or negedge rst_n) begin
|
|||
assert(ctr_flush_pending <= pending_fetches);
|
||||
assert(pending_fetches < 2'd3);
|
||||
assert(!(mem_data_vld && !pending_fetches));
|
||||
// assert(!($past(mem_addr_hold) && $past(mem_addr_vld) && !$stable(mem_addr)));
|
||||
`endif
|
||||
mem_addr_hold <= mem_addr_vld && !mem_addr_rdy;
|
||||
pending_fetches <= pending_fetches_next;
|
||||
|
@ -220,11 +219,6 @@ always @ (posedge clk or negedge rst_n) begin
|
|||
unaligned_jump_aph <= 1'b0;
|
||||
unaligned_jump_dph <= 1'b0;
|
||||
end else if (EXTENSION_C) begin
|
||||
`ifdef FORMAL_FIXMEEEE
|
||||
assert(!(unaligned_jump_aph && !unaligned_jump_dph));
|
||||
assert(!($past(jump_now && !jump_target[1]) && unaligned_jump_aph));
|
||||
assert(!($past(jump_now && !jump_target[1]) && unaligned_jump_dph));
|
||||
`endif
|
||||
if (mem_addr_rdy || (jump_now && !unaligned_jump_now)) begin
|
||||
unaligned_jump_aph <= 1'b0;
|
||||
end
|
||||
|
@ -244,6 +238,26 @@ always @ (posedge clk or negedge rst_n) begin
|
|||
end
|
||||
end
|
||||
|
||||
`ifdef FORMAL
|
||||
reg property_after_aligned_jump;
|
||||
always @ (posedge clk or negedge rst_n) begin
|
||||
if (!rst_n) begin
|
||||
property_after_aligned_jump <= 1'b0;
|
||||
end else begin
|
||||
// Every unaligned jump that requires care in aphase also requires care in dphase.
|
||||
assert(!(unaligned_jump_aph && !unaligned_jump_dph));
|
||||
|
||||
property_after_aligned_jump <= jump_now && !jump_target[1];
|
||||
if (property_after_aligned_jump) begin
|
||||
// Make sure these clear properly (have been subtle historic bugs here)
|
||||
assert(!unaligned_jump_aph);
|
||||
assert(!unaligned_jump_dph);
|
||||
end
|
||||
end
|
||||
end
|
||||
`endif
|
||||
|
||||
|
||||
// Combinatorially generate the address-phase request
|
||||
|
||||
reg reset_holdoff;
|
||||
|
@ -326,8 +340,7 @@ always @ (posedge clk or negedge rst_n) begin
|
|||
end else begin
|
||||
`ifdef FORMAL
|
||||
assert(cir_vld <= 2);
|
||||
assert(cir_use <= cir_vld);
|
||||
// assert(cir_vld <= buf_level || $past(cir_lock));
|
||||
assert(cir_use <= cir_vld);
|
||||
`endif
|
||||
// Update CIR flags
|
||||
buf_level <= buf_level_next;
|
||||
|
@ -341,6 +354,20 @@ end
|
|||
always @ (posedge clk)
|
||||
{hwbuf, cir} <= instr_data_plus_fetch;
|
||||
|
||||
`ifdef FORMAL
|
||||
reg [1:0] property_past_buf_level; // Workaround for weird non-constant $past reset issue
|
||||
always @ (posedge clk or negedge rst_n) begin
|
||||
if (!rst_n) begin
|
||||
property_past_buf_level <= 2'h0;
|
||||
end else begin
|
||||
property_past_buf_level <= buf_level;
|
||||
// We fetch 32 bits per cycle, max. If this happens it's due to negative overflow.
|
||||
if (property_past_buf_level == 2'h0)
|
||||
assert(buf_level != 2'h3);
|
||||
end
|
||||
end
|
||||
`endif
|
||||
|
||||
// Also keep track of bus errors associated with CIR contents, shifted in the
|
||||
// same way as instruction data. Errors may come straight from the bus, or
|
||||
// may be buffered in the prefetch queue.
|
||||
|
|
Loading…
Reference in New Issue