../

Meeting Notes

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 ##!