Add exclusives bus properties
This commit is contained in:
parent
6ef3503ef5
commit
dbc331dbb4
|
@ -44,6 +44,8 @@ reg src_active_dph;
|
||||||
reg src_write_dph;
|
reg src_write_dph;
|
||||||
reg [W_ADDR-1:0] src_addr_dph;
|
reg [W_ADDR-1:0] src_addr_dph;
|
||||||
reg [2:0] src_size_dph;
|
reg [2:0] src_size_dph;
|
||||||
|
reg src_excl_dph;
|
||||||
|
reg global_reservation_valid;
|
||||||
|
|
||||||
always @ (posedge clk or negedge rst_n) begin
|
always @ (posedge clk or negedge rst_n) begin
|
||||||
if (!rst_n) begin
|
if (!rst_n) begin
|
||||||
|
@ -51,11 +53,16 @@ always @ (posedge clk or negedge rst_n) begin
|
||||||
src_write_dph <= 1'b0;
|
src_write_dph <= 1'b0;
|
||||||
src_addr_dph <= {W_ADDR{1'b0}};
|
src_addr_dph <= {W_ADDR{1'b0}};
|
||||||
src_size_dph <= 3'h0;
|
src_size_dph <= 3'h0;
|
||||||
|
src_excl_dph <= 1'b0;
|
||||||
|
global_reservation_valid <= 1'b0;
|
||||||
end else if (src_hready) begin
|
end else if (src_hready) begin
|
||||||
src_active_dph <= src_htrans[1];
|
src_active_dph <= src_htrans[1];
|
||||||
src_write_dph <= src_hwrite;
|
src_write_dph <= src_hwrite;
|
||||||
src_addr_dph <= src_haddr;
|
src_addr_dph <= src_haddr;
|
||||||
src_size_dph <= src_hsize;
|
src_size_dph <= src_hsize;
|
||||||
|
src_excl_dph <= src_hexcl && src_htrans[1];
|
||||||
|
if (src_excl_dph)
|
||||||
|
global_reservation_valid <= src_hexokay && !src_write_dph;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -87,6 +94,9 @@ always @ (posedge clk) if (rst_n) begin: dst_ahbl_req_properties
|
||||||
// this only supports INCRx bursts)
|
// this only supports INCRx bursts)
|
||||||
if (src_htrans == 2'b11)
|
if (src_htrans == 2'b11)
|
||||||
assert(src_haddr == src_addr_dph + W_DATA / 8);
|
assert(src_haddr == src_addr_dph + W_DATA / 8);
|
||||||
|
// No pipelining of exclusive transfers
|
||||||
|
if (src_excl_dph)
|
||||||
|
assert(!src_hexcl);
|
||||||
end
|
end
|
||||||
|
|
||||||
// Data phase properties:
|
// Data phase properties:
|
||||||
|
@ -94,6 +104,9 @@ always @ (posedge clk) if (rst_n) begin: dst_ahbl_req_properties
|
||||||
// Write data stable during write data phase
|
// Write data stable during write data phase
|
||||||
if (src_write_dph && !$past(src_hready))
|
if (src_write_dph && !$past(src_hready))
|
||||||
assert($stable(src_hwdata));
|
assert($stable(src_hwdata));
|
||||||
|
// An exclusive write must match a prior exclusive read which was HEXOKAY=1
|
||||||
|
if (src_write_dph && src_excl_dph)
|
||||||
|
assert(global_reservation_valid);
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue