@@ -109,8 +109,13 @@ module mem_to_banks_detailed #(
109109 resp_valid, resp_ready;
110110 req_t [NumBanks- 1 : 0 ] bank_req,
111111 bank_oup;
112- logic [NumBanks- 1 : 0 ] bank_req_internal, bank_gnt_internal, zero_strobe, dead_response;
113- logic dead_write_fifo_full;
112+ logic [NumBanks- 1 : 0 ] bank_req_internal,
113+ bank_gnt_internal,
114+ zero_strobe,
115+ dead_response,
116+ dead_response_unmasked;
117+ logic dead_write_fifo_full,
118+ dead_write_fifo_empty;
114119
115120 function automatic addr_t align_addr (input addr_t addr);
116121 return (addr >> $clog2 (DataBytes)) << $clog2 (DataBytes);
@@ -148,11 +153,13 @@ module mem_to_banks_detailed #(
148153 assign bank_wuser_o[i] = bank_oup[i].wuser;
149154 assign bank_we_o[i] = bank_oup[i].we;
150155
151- assign zero_strobe[i] = (bank_oup [i].strb == '0 );
156+ assign zero_strobe[i] = (bank_req [i].strb == '0 );
152157
153158 if (HideStrb) begin : gen_hide_strb
154- assign bank_req_o[i] = (bank_oup[i].we && zero_strobe[i]) ? 1'b0 : bank_req_internal[i];
155- assign bank_gnt_internal[i] = (bank_oup[i].we && zero_strobe[i]) ? 1'b1 : bank_gnt_i[i];
159+ assign bank_req_o[i] = (bank_oup[i].we && (bank_oup[i].strb == '0 )) ?
160+ 1'b0 : bank_req_internal[i];
161+ assign bank_gnt_internal[i] = (bank_oup[i].we && (bank_oup[i].strb == '0 )) ?
162+ 1'b1 : bank_gnt_i[i];
156163 end else begin : gen_legacy_strb
157164 assign bank_req_o[i] = bank_req_internal[i];
158165 assign bank_gnt_internal[i] = bank_gnt_i[i];
@@ -170,19 +177,22 @@ module mem_to_banks_detailed #(
170177 ) i_dead_write_fifo (
171178 .clk_i,
172179 .rst_ni,
173- .flush_i ( 1'b0 ),
174- .testmode_i ( 1'b0 ),
175- .full_o ( dead_write_fifo_full ),
176- .empty_o (),
180+ .flush_i ( 1'b0 ),
181+ .testmode_i ( 1'b0 ),
182+ .full_o ( dead_write_fifo_full ),
183+ .empty_o ( dead_write_fifo_empty ),
177184 .usage_o (),
178- .data_i ( bank_we_o & zero_strobe ),
179- .push_i ( req_i & gnt_o ),
180- .data_o ( dead_response ),
181- .pop_i ( rvalid_o )
185+ .data_i ( { NumBanks { we_i }} & zero_strobe ),
186+ .push_i ( req_i & gnt_o ),
187+ .data_o ( dead_response_unmasked ),
188+ .pop_i ( rvalid_o )
182189 );
190+ assign dead_response = dead_response_unmasked & { NumBanks{~ dead_write_fifo_empty}} ;
183191 end else begin : gen_no_dead_write_fifo
192+ assign dead_response_unmasked = '0 ;
184193 assign dead_response = '0 ;
185194 assign dead_write_fifo_full = 1'b0 ;
195+ assign dead_write_fifo_empty = 1'b1 ;
186196 end
187197
188198 // Handle responses.
0 commit comments