../

Meeting Notes

assertion Reason
fifo_not_empty_after_write Assumed rd_en and wr_en won’t be high at the same time
paddr_stable_during_enable $stable at reset requires additional config
pwrite_stable_during_enable $stable at reset requires additional config
pwdata_stable_during_write_enable $stable at reset requires additional config
fifo_tx_rd_en_low_in_delay_bytes
penable_requires_pselx Assertions on 2 Input signals
penable_after_pselx Assertions on 2 Input signals
penable_requires_pselx Assertions on 2 Input signals
pselx_before_penable Assertions on 2 Input signals
pslverr_requires_penable_and_pready Assertions on 2 Input signals
tx_write_not_when_full WR_EN logic doesn’t have TX_FULL to disable it
tx_read_not_when_empty RD_EN logic doesn’t take TX_EMPTY to disable it
rx_read_not_when_empty RD_EN logic doesn’t take TX_EMPTY to disable it
paddr_stable_during_enable $stable at reset requires additional config
pwrite_stable_during_enable $stable at reset requires additional config
pwdata_stable_during_write_enable $stable at reset requires additional config

Why are the assertions wrong?

 // After reset deasserted and one write, FIFO is no longer empty
 // -------------------------------------------------------------------
 fifo_not_empty_after_write: assert property (
     @(posedge clock) disable iff (reset)
     (f_empty && wr_en && !f_full) |=> (!f_empty)
 );

//Counter
always@(posedge clock)
begin
        if (reset)
        begin
                counter <= {(AWIDTH){1'b0}};
        end
        else
        begin
                if (rd_en && !f_empty && !wr_en)
                begin
                        counter <= w_counter;
                end
                else if (wr_en && !f_full && !rd_en)
                begin
                        counter <= w_counter;
                end
        end
end

 assign w_counter = (rd_en && !f_empty && !wr_en)? counter - 4'd1: (wr_en && !f_full && !rd_en)? counter + 4'd1: w_counter ;

Should the LLM have thought of this edge case?

Or are we missing an assumption?

Missing assumption

// -------------------------------------------------------------------
// APB protocol: PENABLE must follow PSELx
// -------------------------------------------------------------------

penable_requires_pselx: assert property (
	@(posedge PCLK) disable iff (!PRESETn)
	PENABLE |-> PSELx
);

They are both inputs. Why would it generate constraints on that?

Wrong specification

 paddr_stable_during_enable: assert property (
	  @(posedge PCLK) disable iff (!PRESETn)
	  (PSELx && PENABLE) |-> $stable(PADDR)
  );

$stable fails on the first clock cycle Should always uses ##!

Notes

  • Try fixing stable
  • Ask the LLM to not generate the input assumptions for the top module