diff --git a/CHANGELOG.md b/CHANGELOG.md index 97402a3be..7f7791662 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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. diff --git a/src/axi_pkg.sv b/src/axi_pkg.sv index 92ede558c..0820dd708 100644 --- a/src/axi_pkg.sv +++ b/src/axi_pkg.sv @@ -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; diff --git a/src/axi_xbar.sv b/src/axi_xbar.sv index 0971ef6f5..7fd4f537d 100644 --- a/src/axi_xbar.sv +++ b/src/axi_xbar.sv @@ -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;