From c1f2b5d5750250f80aa6ab0ec532f7f905d361e9 Mon Sep 17 00:00:00 2001 From: "Alvin.F" <2397267714@qq.com> Date: Thu, 10 Apr 2025 23:32:56 +0800 Subject: [PATCH 1/3] [optimize] determine the connection relationship and then route, improve transmission efficiency and reduce the consumption of hardware resources --- src/axi_xbar_unmuxed.sv | 43 +++++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/src/axi_xbar_unmuxed.sv b/src/axi_xbar_unmuxed.sv index 32679900f..3c8d61ab8 100644 --- a/src/axi_xbar_unmuxed.sv +++ b/src/axi_xbar_unmuxed.sv @@ -104,17 +104,32 @@ import cf_math_pkg::idx_width; // workaround for issue #133 (problem with vsim 10.6c) localparam int unsigned cfg_NoMstPorts = Cfg.NoMstPorts; + // addr_map_i and connectivity relationship + rule_t [Cfg.NoSlvPorts-1:0][Cfg.NoAddrRules-1:0] addr_map; for (genvar i = 0; i < Cfg.NoSlvPorts; i++) begin : gen_slv_port_demux -`ifdef VCS - logic [MstPortsIdxWidth-1:0] dec_aw, dec_ar; -`else - logic [idx_width(Cfg.NoMstPorts)-1:0] dec_aw, dec_ar; -`endif + `ifdef VCS + logic [MstPortsIdxWidth-1:0] dec_aw, dec_ar; + `else + logic [idx_width(Cfg.NoMstPorts)-1:0] dec_aw, dec_ar; + `endif + mst_port_idx_t slv_aw_select, slv_ar_select; logic dec_aw_valid, dec_aw_error; logic dec_ar_valid, dec_ar_error; + //if there is no connection betwen master and slave, one index for decode error will be used + for (genvar j = 0; j < Cfg.NoMstPorts; j++) begin : gen_addr_map + if (!Connectivity[i][j]) begin : fix_addr_map + assign addr_map[i][j].idx = mst_port_idx_t'(Cfg.NoMstPorts); + assign addr_map[i][j].start_addr = addr_map_i[j].start_addr; + assign addr_map[i][j].end_addr = addr_map_i[j].end_addr; + end + else begin : keep_addr_map + assign addr_map[i][j] = addr_map_i[j]; + end + end + addr_decode #( .NoIndices ( Cfg.NoMstPorts ), .NoRules ( Cfg.NoAddrRules ), @@ -122,7 +137,7 @@ import cf_math_pkg::idx_width; .rule_t ( rule_t ) ) i_axi_aw_decode ( .addr_i ( slv_ports_req_i[i].aw.addr ), - .addr_map_i ( addr_map_i ), + .addr_map_i ( addr_map ), .idx_o ( dec_aw ), .dec_valid_o ( dec_aw_valid ), .dec_error_o ( dec_aw_error ), @@ -137,7 +152,7 @@ import cf_math_pkg::idx_width; .rule_t ( rule_t ) ) i_axi_ar_decode ( .addr_i ( slv_ports_req_i[i].ar.addr ), - .addr_map_i ( addr_map_i ), + .addr_map_i ( addr_map ), .idx_o ( dec_ar ), .dec_valid_o ( dec_ar_valid ), .dec_error_o ( dec_ar_error ), @@ -252,20 +267,6 @@ import cf_math_pkg::idx_width; end else begin : gen_no_connection assign mst_ports_req_o[j][i] = '0; - axi_err_slv #( - .AxiIdWidth ( Cfg.AxiIdWidthSlvPorts ), - .axi_req_t ( req_t ), - .axi_resp_t ( resp_t ), - .Resp ( axi_pkg::RESP_DECERR ), - .ATOPs ( ATOPs ), - .MaxTrans ( 1 ) - ) i_axi_err_slv ( - .clk_i, - .rst_ni, - .test_i, - .slv_req_i ( slv_reqs[i][j] ), - .slv_resp_o ( slv_resps[i][j] ) - ); end end end From 9535c2b391659a323f82cb25332b9b63fdf580ac Mon Sep 17 00:00:00 2001 From: "Alvin.F" <92354610+Alvin-FA@users.noreply.github.com> Date: Fri, 25 Apr 2025 23:58:16 +0800 Subject: [PATCH 2/3] Update src/axi_xbar_unmuxed.sv Co-authored-by: Michael Rogenmoser --- src/axi_xbar_unmuxed.sv | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/axi_xbar_unmuxed.sv b/src/axi_xbar_unmuxed.sv index 3c8d61ab8..f20a00a1a 100644 --- a/src/axi_xbar_unmuxed.sv +++ b/src/axi_xbar_unmuxed.sv @@ -119,14 +119,12 @@ import cf_math_pkg::idx_width; logic dec_ar_valid, dec_ar_error; //if there is no connection betwen master and slave, one index for decode error will be used - for (genvar j = 0; j < Cfg.NoMstPorts; j++) begin : gen_addr_map - if (!Connectivity[i][j]) begin : fix_addr_map - assign addr_map[i][j].idx = mst_port_idx_t'(Cfg.NoMstPorts); - assign addr_map[i][j].start_addr = addr_map_i[j].start_addr; - assign addr_map[i][j].end_addr = addr_map_i[j].end_addr; - end - else begin : keep_addr_map - assign addr_map[i][j] = addr_map_i[j]; + for (genvar j = 0; j < Cfg.NoAddrRules; j++) begin : gen_addr_map + always_comb begin + addr_map[i][j] = addr_map_i[j]; + if (!Connectivity[i][addr_map_i[j].idx]) begin + addr_map[i][j].idx = mst_port_idx_t'(Cfg.NoMstPorts); + end end end From d363cdd0b17bba3bf95d4c00075afe447fb41d68 Mon Sep 17 00:00:00 2001 From: "Alvin.F" <92354610+Alvin-FA@users.noreply.github.com> Date: Sat, 26 Apr 2025 00:09:21 +0800 Subject: [PATCH 3/3] Update axi_xbar_unmuxed.sv --- src/axi_xbar_unmuxed.sv | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/axi_xbar_unmuxed.sv b/src/axi_xbar_unmuxed.sv index f20a00a1a..9dec515ea 100644 --- a/src/axi_xbar_unmuxed.sv +++ b/src/axi_xbar_unmuxed.sv @@ -140,7 +140,7 @@ import cf_math_pkg::idx_width; .dec_valid_o ( dec_aw_valid ), .dec_error_o ( dec_aw_error ), .en_default_idx_i ( en_default_mst_port_i[i] ), - .default_idx_i ( default_mst_port_i[i] ) + .default_idx_i ( Connectivity[i][default_mst_port_i[i]] ? default_mst_port_i[i] : mst_port_idx_t'(Cfg.NoMstPorts) ) ); addr_decode #( @@ -155,7 +155,7 @@ import cf_math_pkg::idx_width; .dec_valid_o ( dec_ar_valid ), .dec_error_o ( dec_ar_error ), .en_default_idx_i ( en_default_mst_port_i[i] ), - .default_idx_i ( default_mst_port_i[i] ) + .default_idx_i ( Connectivity[i][default_mst_port_i[i]] ? default_mst_port_i[i] : mst_port_idx_t'(Cfg.NoMstPorts) ) ); assign slv_aw_select = (dec_aw_error) ?