Skip to content

Commit

Permalink
axi_xbar: Add pipeline stages in cross
Browse files Browse the repository at this point in the history
  • Loading branch information
Wolfgang Rönninger authored and thommythomaso committed Oct 6, 2022
1 parent 10d815c commit 3076c14
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 3 deletions.
3 changes: 2 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -327,7 +327,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
Prevents AWs to be emmitted downstream to a different master port as long as Ws
are still in flight to another. This prevents deadlock, if there is stalling
downstream.

- `axi_xbar`: Add parameter `PipelineStages` to `axi_pkg::xbar_cfg_t`. This adds `axi_multicuts`
in the crossed connections in the xbar between the demuxes and muxes.

### Fixed
- `axi_demux`: Break combinatorial simulation loop.
Expand Down
1 change: 1 addition & 0 deletions src/axi_pkg.sv
Original file line number Diff line number Diff line change
Expand Up @@ -399,6 +399,7 @@ package axi_pkg;
int unsigned MaxSlvTrans;
bit FallThrough;
xbar_latency_e LatencyMode;
int unsigned PipelineStages;
int unsigned AxiIdWidthSlvPorts;
int unsigned AxiIdUsedSlvPorts;
bit UniqueIds;
Expand Down
19 changes: 17 additions & 2 deletions src/axi_xbar.sv
Original file line number Diff line number Diff line change
Expand Up @@ -204,8 +204,23 @@ import cf_math_pkg::idx_width;
for (genvar i = 0; i < Cfg.NoSlvPorts; i++) begin : gen_xbar_slv_cross
for (genvar j = 0; j < Cfg.NoMstPorts; j++) begin : gen_xbar_mst_cross
if (Connectivity[i][j]) begin : gen_connection
assign mst_reqs[j][i] = slv_reqs[i][j];
assign slv_resps[i][j] = mst_resps[j][i];
axi_multicut #(
.NoCuts ( Cfg.PipelineStages ),
.aw_chan_t ( slv_aw_chan_t ),
.w_chan_t ( w_chan_t ),
.b_chan_t ( slv_b_chan_t ),
.ar_chan_t ( slv_ar_chan_t ),
.r_chan_t ( slv_r_chan_t ),
.req_t ( slv_req_t ),
.resp_t ( slv_resp_t )
) i_axi_multicut_xbar_pipeline (
.clk_i,
.rst_ni,
.slv_req_i ( slv_reqs[i][j] ),
.slv_resp_o ( slv_resps[i][j] ),
.mst_req_o ( mst_reqs[j][i] ),
.mst_resp_i ( mst_resps[j][i] )
);

end else begin : gen_no_connection
assign mst_reqs[j][i] = '0;
Expand Down

0 comments on commit 3076c14

Please sign in to comment.