@@ -83,14 +83,12 @@ module axicb_slv_switch_rd
8383 logic [8 - 1 : 0 ] a_len;
8484
8585 logic rch_en;
86- logic rch_en_r;
8786 logic rfirst;
8887 logic rch_mr;
8988 logic [AXI_ID_W - 1 : 0 ] rch_id;
9089 logic [8 - 1 : 0 ] rch_len;
9190 logic [SLV_NB - 1 : 0 ] rch_grant;
9291 logic [8 - 1 : 0 ] rlen;
93- logic rch_running;
9492 logic rch_full;
9593 logic c_end;
9694
@@ -144,15 +142,15 @@ module axicb_slv_switch_rd
144142
145143 endgenerate
146144
147- assign o_arvalid[0 ] = (slv_ar_targeted[0 ]) ? i_arvalid : 1'b0 ;
148- assign o_arvalid[1 ] = (slv_ar_targeted[1 ]) ? i_arvalid : 1'b0 ;
149- assign o_arvalid[2 ] = (slv_ar_targeted[2 ]) ? i_arvalid : 1'b0 ;
150- assign o_arvalid[3 ] = (slv_ar_targeted[3 ]) ? i_arvalid : 1'b0 ;
145+ assign o_arvalid[0 ] = (slv_ar_targeted[0 ]) ? i_arvalid & ! rch_full : 1'b0 ;
146+ assign o_arvalid[1 ] = (slv_ar_targeted[1 ]) ? i_arvalid & ! rch_full : 1'b0 ;
147+ assign o_arvalid[2 ] = (slv_ar_targeted[2 ]) ? i_arvalid & ! rch_full : 1'b0 ;
148+ assign o_arvalid[3 ] = (slv_ar_targeted[3 ]) ? i_arvalid & ! rch_full : 1'b0 ;
151149
152- assign i_arready = (slv_ar_targeted[0 ]) ? o_arready[0 ]:
153- (slv_ar_targeted[1 ]) ? o_arready[1 ]:
154- (slv_ar_targeted[2 ]) ? o_arready[2 ]:
155- (slv_ar_targeted[3 ]) ? o_arready[3 ]:
150+ assign i_arready = (slv_ar_targeted[0 ]) ? o_arready[0 ] & ! rch_full :
151+ (slv_ar_targeted[1 ]) ? o_arready[1 ] & ! rch_full :
152+ (slv_ar_targeted[2 ]) ? o_arready[2 ] & ! rch_full :
153+ (slv_ar_targeted[3 ]) ? o_arready[3 ] & ! rch_full :
156154 ar_misrouting;
157155
158156 assign o_arch = i_arch;
@@ -188,7 +186,7 @@ module axicb_slv_switch_rd
188186 endgenerate
189187
190188 // OoO ID Management
191- axicb_slv_ooo
189+ axicb_slv_ooo
192190 # (
193191 .RD_PATH (1 ),
194192 .AXI_ID_W (AXI_ID_W ),
@@ -197,7 +195,7 @@ module axicb_slv_switch_rd
197195 .MST_ID_MASK (MST_ID_MASK ),
198196 .CCH_W (RCH_W )
199197 )
200- rresp_ooo
198+ rresp_ooo
201199 (
202200 .aclk (aclk),
203201 .aresetn (aresetn),
@@ -223,7 +221,7 @@ module axicb_slv_switch_rd
223221
224222 assign c_end = i_rvalid & i_rready & i_rlast;
225223
226- // Follow-up rcompletion len for mis-routed traffic
224+ // Follow-up rcompletion len for mis-routed traffic
227225 // which need to be recreated
228226 always @ (posedge aclk or negedge aresetn) begin
229227 if (! aresetn) begin
@@ -256,20 +254,10 @@ module axicb_slv_switch_rd
256254 end
257255 end
258256
259-
260- always @ (posedge aclk or negedge aresetn) begin
261- if (! aresetn) begin
262- rch_en_r <= '0 ;
263- end else if (srst) begin
264- rch_en_r <= '0 ;
265- end else begin
266- if (rch_grant== '0 ) rch_en_r <= 1'b1 ;
267- else rch_en_r <= 1'b0 ;
268- end
269- end
270-
257+ // Activates the arbiter in OoO module on first read completion dataphase
258+ assign rch_en = rfirst;
271259
272- assign rch_en = rfirst | rch_en_r;
260+ // Switching logic for RRESP channel
273261
274262 assign i_rvalid = (rch_mr) ? 1'b1 :
275263 (rch_grant[0 ]) ? o_rvalid[0 ] :
0 commit comments