From 6d6908051fa8a92cc2c50003e45a96f45cd66551 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20R=C3=B6nninger?= Date: Mon, 29 Jun 2020 13:21:51 +0200 Subject: [PATCH 01/11] tb_axi_xbar: Add parameters, make more configurable for ci --- test/tb_axi_xbar.sv | 272 +++++++++++++++++++++++--------------------- 1 file changed, 144 insertions(+), 128 deletions(-) diff --git a/test/tb_axi_xbar.sv b/test/tb_axi_xbar.sv index d5ab6cc0c..6b8eb84ba 100644 --- a/test/tb_axi_xbar.sv +++ b/test/tb_axi_xbar.sv @@ -22,49 +22,62 @@ `include "axi/typedef.svh" `include "axi/assign.svh" -module tb_axi_xbar; - // Dut parameters - localparam int unsigned NoMasters = 6; // How many Axi Masters there are - localparam int unsigned NoSlaves = 8; // How many Axi Slaves there are - // Random master no Transactions - localparam int unsigned NoWrites = 1000; // How many writes per master - localparam int unsigned NoReads = 1000; // How many reads per master - // Random Master Atomics - localparam bit EnAtop = 1'b1; - // timing parameters +/// Testbench for the module `axi_xbar`. +module tb_axi_xbar #( + /// Number of AXI masters connected to the xbar. (Number of slave ports) + parameter int unsigned TbNumMasters = 32'd6, + /// Number of AXI slaves connected to the xbar. (Number of master ports) + parameter int unsigned TbNumSlaves = 32'd8, + /// Number of write transactions per master. + parameter int unsigned TbNumWrites = 32'd1000, + /// Number of read transactions per master. + parameter int unsigned TbNumReads = 32'd1000, + /// AXI4+ATOP ID wisth of the masters connected to the slave ports of the DUT. + /// The ID width of the salves is calulated depending on the xbar configuration. + parameter int unsigned TbAxiIdWidthMasters = 32'd4, + /// The used ID width of the DUT. + /// Has to be `TbAxiIdWidthMasters >= TbAxiIdUsed`. + parameter int unsigned TbAxiIdUsed = 32'd3, + /// Data width of the AXI channels. + parameter int unsigned TbAxiDataWidth = 32'd64, + /// Pipeline stages in the xbar itself. (Between Demux and mux) + parameter int unsigned TbPipeline = 32'd1, + /// Eanable ATOP generation + parameter bit TbEnAtop = 1'b1 +); + + // TB timing parameters localparam time CyclTime = 10ns; localparam time ApplTime = 2ns; localparam time TestTime = 8ns; - // axi configuration - localparam int unsigned AxiIdWidthMasters = 4; - localparam int unsigned AxiIdUsed = 3; // Has to be <= AxiIdWidthMasters - localparam int unsigned AxiIdWidthSlaves = AxiIdWidthMasters + $clog2(NoMasters); - localparam int unsigned AxiAddrWidth = 32; // Axi Address Width - localparam int unsigned AxiDataWidth = 64; // Axi Data Width - localparam int unsigned AxiStrbWidth = AxiDataWidth / 8; - localparam int unsigned AxiUserWidth = 5; - // in the bench can change this variables which are set here freely + // AXI configuration which is automatically derived. + localparam int unsigned TbAxiIdWidthSlaves = TbAxiIdWidthMasters + $clog2(TbNumMasters); + localparam int unsigned TbAxiAddrWidth = 32'd32; + localparam int unsigned TbAxiStrbWidth = TbAxiDataWidth / 8; + localparam int unsigned TbAxiUserWidth = 5; + // In the bench can change this variables which are set here freely, localparam axi_pkg::xbar_cfg_t xbar_cfg = '{ - NoSlvPorts: NoMasters, - NoMstPorts: NoSlaves, + NoSlvPorts: TbNumMasters, + NoMstPorts: TbNumSlaves, MaxMstTrans: 10, MaxSlvTrans: 6, FallThrough: 1'b0, LatencyMode: axi_pkg::CUT_ALL_AX, - AxiIdWidthSlvPorts: AxiIdWidthMasters, - AxiIdUsedSlvPorts: AxiIdUsed, - AxiAddrWidth: AxiAddrWidth, - AxiDataWidth: AxiDataWidth, - NoAddrRules: 8 + PipelineStages: TbPipeline, + AxiIdWidthSlvPorts: TbAxiIdWidthMasters, + AxiIdUsedSlvPorts: TbAxiIdUsed, + AxiAddrWidth: TbAxiAddrWidth, + AxiDataWidth: TbAxiDataWidth, + NoAddrRules: TbNumSlaves }; - typedef logic [AxiIdWidthMasters-1:0] id_mst_t; - typedef logic [AxiIdWidthSlaves-1:0] id_slv_t; - typedef logic [AxiAddrWidth-1:0] addr_t; - typedef axi_pkg::xbar_rule_32_t rule_t; // Has to be the same width as axi addr - typedef logic [AxiDataWidth-1:0] data_t; - typedef logic [AxiStrbWidth-1:0] strb_t; - typedef logic [AxiUserWidth-1:0] user_t; + typedef logic [TbAxiIdWidthMasters-1:0] id_mst_t; + typedef logic [TbAxiIdWidthSlaves-1:0] id_slv_t; + typedef logic [TbAxiAddrWidth-1:0] addr_t; + typedef axi_pkg::xbar_rule_32_t rule_t; // Has to be the same width as axi addr + typedef logic [TbAxiDataWidth-1:0] data_t; + typedef logic [TbAxiStrbWidth-1:0] strb_t; + typedef logic [TbAxiUserWidth-1:0] user_t; `AXI_TYPEDEF_AW_CHAN_T(aw_chan_mst_t, addr_t, id_mst_t, user_t) `AXI_TYPEDEF_AW_CHAN_T(aw_chan_slv_t, addr_t, id_slv_t, user_t) @@ -82,40 +95,43 @@ module tb_axi_xbar; `AXI_TYPEDEF_REQ_T(slv_req_t, aw_chan_slv_t, w_chan_t, ar_chan_slv_t) `AXI_TYPEDEF_RESP_T(slv_resp_t, b_chan_slv_t, r_chan_slv_t) - localparam rule_t [xbar_cfg.NoAddrRules-1:0] AddrMap = '{ - '{idx: 32'd7, start_addr: 32'h0001_0000, end_addr: 32'h0001_1000}, - '{idx: 32'd6, start_addr: 32'h0000_9000, end_addr: 32'h0001_0000}, - '{idx: 32'd5, start_addr: 32'h0000_8000, end_addr: 32'h0000_9000}, - '{idx: 32'd4, start_addr: 32'h0000_7000, end_addr: 32'h0000_8000}, - '{idx: 32'd3, start_addr: 32'h0000_6300, end_addr: 32'h0000_7000}, - '{idx: 32'd2, start_addr: 32'h0000_4000, end_addr: 32'h0000_6300}, - '{idx: 32'd1, start_addr: 32'h0000_3000, end_addr: 32'h0000_4000}, - '{idx: 32'd0, start_addr: 32'h0000_0000, end_addr: 32'h0000_3000} - }; + // Each slave has its own address range: + localparam rule_t [xbar_cfg.NoAddrRules-1:0] AddrMap = addr_map_gen(); + + function rule_t [xbar_cfg.NoAddrRules-1:0] addr_map_gen (); + for (int unsigned i = 0; i < xbar_cfg.NoAddrRules; i++) begin + addr_map_gen[i] = rule_t'{ + idx: unsigned'(i), + start_addr: i * 32'h0000_2000, + end_addr: (i+1) * 32'h0000_2000, + default: '0 + }; + end + endfunction typedef axi_test::axi_rand_master #( // AXI interface parameters - .AW ( AxiAddrWidth ), - .DW ( AxiDataWidth ), - .IW ( AxiIdWidthMasters ), - .UW ( AxiUserWidth ), + .AW ( TbAxiAddrWidth ), + .DW ( TbAxiDataWidth ), + .IW ( TbAxiIdWidthMasters ), + .UW ( TbAxiUserWidth ), // Stimuli application and test time - .TA ( ApplTime ), - .TT ( TestTime ), + .TA ( ApplTime ), + .TT ( TestTime ), // Maximum number of read and write transactions in flight - .MAX_READ_TXNS ( 20 ), - .MAX_WRITE_TXNS ( 20 ), - .AXI_ATOPS ( EnAtop ) + .MAX_READ_TXNS ( 20 ), + .MAX_WRITE_TXNS ( 20 ), + .AXI_ATOPS ( TbEnAtop ) ) axi_rand_master_t; typedef axi_test::axi_rand_slave #( // AXI interface parameters - .AW ( AxiAddrWidth ), - .DW ( AxiDataWidth ), - .IW ( AxiIdWidthSlaves ), - .UW ( AxiUserWidth ), + .AW ( TbAxiAddrWidth ), + .DW ( TbAxiDataWidth ), + .IW ( TbAxiIdWidthSlaves ), + .UW ( TbAxiUserWidth ), // Stimuli application and test time - .TA ( ApplTime ), - .TT ( TestTime ) + .TA ( ApplTime ), + .TT ( TestTime ) ) axi_rand_slave_t; // ------------- @@ -124,62 +140,62 @@ module tb_axi_xbar; logic clk; // DUT signals logic rst_n; - logic [NoMasters-1:0] end_of_sim; + logic [TbNumMasters-1:0] end_of_sim; // master structs - mst_req_t [NoMasters-1:0] masters_req; - mst_resp_t [NoMasters-1:0] masters_resp; + mst_req_t [TbNumMasters-1:0] masters_req; + mst_resp_t [TbNumMasters-1:0] masters_resp; // slave structs - slv_req_t [NoSlaves-1:0] slaves_req; - slv_resp_t [NoSlaves-1:0] slaves_resp; + slv_req_t [TbNumSlaves-1:0] slaves_req; + slv_resp_t [TbNumSlaves-1:0] slaves_resp; // ------------------------------- // AXI Interfaces // ------------------------------- AXI_BUS #( - .AXI_ADDR_WIDTH ( AxiAddrWidth ), - .AXI_DATA_WIDTH ( AxiDataWidth ), - .AXI_ID_WIDTH ( AxiIdWidthMasters ), - .AXI_USER_WIDTH ( AxiUserWidth ) - ) master [NoMasters-1:0] (); + .AXI_ADDR_WIDTH ( TbAxiAddrWidth ), + .AXI_DATA_WIDTH ( TbAxiDataWidth ), + .AXI_ID_WIDTH ( TbAxiIdWidthMasters ), + .AXI_USER_WIDTH ( TbAxiUserWidth ) + ) master [TbNumMasters-1:0] (); AXI_BUS_DV #( - .AXI_ADDR_WIDTH ( AxiAddrWidth ), - .AXI_DATA_WIDTH ( AxiDataWidth ), - .AXI_ID_WIDTH ( AxiIdWidthMasters ), - .AXI_USER_WIDTH ( AxiUserWidth ) - ) master_dv [NoMasters-1:0] (clk); + .AXI_ADDR_WIDTH ( TbAxiAddrWidth ), + .AXI_DATA_WIDTH ( TbAxiDataWidth ), + .AXI_ID_WIDTH ( TbAxiIdWidthMasters ), + .AXI_USER_WIDTH ( TbAxiUserWidth ) + ) master_dv [TbNumMasters-1:0] (clk); AXI_BUS_DV #( - .AXI_ADDR_WIDTH ( AxiAddrWidth ), - .AXI_DATA_WIDTH ( AxiDataWidth ), - .AXI_ID_WIDTH ( AxiIdWidthMasters ), - .AXI_USER_WIDTH ( AxiUserWidth ) - ) master_monitor_dv [NoMasters-1:0] (clk); - for (genvar i = 0; i < NoMasters; i++) begin : gen_conn_dv_masters + .AXI_ADDR_WIDTH ( TbAxiAddrWidth ), + .AXI_DATA_WIDTH ( TbAxiDataWidth ), + .AXI_ID_WIDTH ( TbAxiIdWidthMasters ), + .AXI_USER_WIDTH ( TbAxiUserWidth ) + ) master_monitor_dv [TbNumMasters-1:0] (clk); + for (genvar i = 0; i < TbNumMasters; i++) begin : gen_conn_dv_masters `AXI_ASSIGN (master[i], master_dv[i]) `AXI_ASSIGN_TO_REQ(masters_req[i], master[i]) `AXI_ASSIGN_FROM_RESP(master[i], masters_resp[i]) end AXI_BUS #( - .AXI_ADDR_WIDTH ( AxiAddrWidth ), - .AXI_DATA_WIDTH ( AxiDataWidth ), - .AXI_ID_WIDTH ( AxiIdWidthSlaves ), - .AXI_USER_WIDTH ( AxiUserWidth ) - ) slave [NoSlaves-1:0] (); + .AXI_ADDR_WIDTH ( TbAxiAddrWidth ), + .AXI_DATA_WIDTH ( TbAxiDataWidth ), + .AXI_ID_WIDTH ( TbAxiIdWidthSlaves ), + .AXI_USER_WIDTH ( TbAxiUserWidth ) + ) slave [TbNumSlaves-1:0] (); AXI_BUS_DV #( - .AXI_ADDR_WIDTH ( AxiAddrWidth ), - .AXI_DATA_WIDTH ( AxiDataWidth ), - .AXI_ID_WIDTH ( AxiIdWidthSlaves ), - .AXI_USER_WIDTH ( AxiUserWidth ) - ) slave_dv [NoSlaves-1:0](clk); + .AXI_ADDR_WIDTH ( TbAxiAddrWidth ), + .AXI_DATA_WIDTH ( TbAxiDataWidth ), + .AXI_ID_WIDTH ( TbAxiIdWidthSlaves ), + .AXI_USER_WIDTH ( TbAxiUserWidth ) + ) slave_dv [TbNumSlaves-1:0](clk); AXI_BUS_DV #( - .AXI_ADDR_WIDTH ( AxiAddrWidth ), - .AXI_DATA_WIDTH ( AxiDataWidth ), - .AXI_ID_WIDTH ( AxiIdWidthSlaves ), - .AXI_USER_WIDTH ( AxiUserWidth ) - ) slave_monitor_dv [NoSlaves-1:0](clk); - for (genvar i = 0; i < NoSlaves; i++) begin : gen_conn_dv_slaves + .AXI_ADDR_WIDTH ( TbAxiAddrWidth ), + .AXI_DATA_WIDTH ( TbAxiDataWidth ), + .AXI_ID_WIDTH ( TbAxiIdWidthSlaves ), + .AXI_USER_WIDTH ( TbAxiUserWidth ) + ) slave_monitor_dv [TbNumSlaves-1:0](clk); + for (genvar i = 0; i < TbNumSlaves; i++) begin : gen_conn_dv_slaves `AXI_ASSIGN(slave_dv[i], slave[i]) `AXI_ASSIGN_FROM_REQ(slave[i], slaves_req[i]) `AXI_ASSIGN_TO_RESP(slaves_resp[i], slave[i]) @@ -188,23 +204,23 @@ module tb_axi_xbar; // AXI Rand Masters and Slaves // ------------------------------- // Masters control simulation run time - for (genvar i = 0; i < NoMasters; i++) begin : gen_rand_master - static axi_rand_master_t axi_rand_master = new ( master_dv[i] ); + for (genvar i = 0; i < TbNumMasters; i++) begin : gen_rand_master initial begin + static axi_rand_master_t axi_rand_master = new ( master_dv[i] ); end_of_sim[i] <= 1'b0; axi_rand_master.add_memory_region(AddrMap[0].start_addr, AddrMap[xbar_cfg.NoAddrRules-1].end_addr, axi_pkg::DEVICE_NONBUFFERABLE); axi_rand_master.reset(); @(posedge rst_n); - axi_rand_master.run(NoReads, NoWrites); + axi_rand_master.run(TbNumReads, TbNumWrites); end_of_sim[i] <= 1'b1; end end - for (genvar i = 0; i < NoSlaves; i++) begin : gen_rand_slave - static axi_rand_slave_t axi_rand_slave = new( slave_dv[i] ); + for (genvar i = 0; i < TbNumSlaves; i++) begin : gen_rand_slave initial begin + static axi_rand_slave_t axi_rand_slave = new( slave_dv[i] ); axi_rand_slave.reset(); @(posedge rst_n); axi_rand_slave.run(); @@ -213,13 +229,13 @@ module tb_axi_xbar; initial begin : proc_monitor static tb_axi_xbar_pkg::axi_xbar_monitor #( - .AxiAddrWidth ( AxiAddrWidth ), - .AxiDataWidth ( AxiDataWidth ), - .AxiIdWidthMasters ( AxiIdWidthMasters ), - .AxiIdWidthSlaves ( AxiIdWidthSlaves ), - .AxiUserWidth ( AxiUserWidth ), - .NoMasters ( NoMasters ), - .NoSlaves ( NoSlaves ), + .AxiAddrWidth ( TbAxiAddrWidth ), + .AxiDataWidth ( TbAxiDataWidth ), + .AxiIdWidthMasters ( TbAxiIdWidthMasters ), + .AxiIdWidthSlaves ( TbAxiIdWidthSlaves ), + .AxiUserWidth ( TbAxiUserWidth ), + .NoMasters ( TbNumMasters ), + .NoSlaves ( TbNumSlaves ), .NoAddrRules ( xbar_cfg.NoAddrRules ), .rule_t ( rule_t ), .AddrMap ( AddrMap ), @@ -253,36 +269,36 @@ module tb_axi_xbar; // DUT //----------------------------------- axi_xbar #( - .Cfg ( xbar_cfg ), + .Cfg ( xbar_cfg ), .slv_aw_chan_t( aw_chan_mst_t ), .mst_aw_chan_t( aw_chan_slv_t ), - .w_chan_t ( w_chan_t ), - .slv_b_chan_t ( b_chan_mst_t ), - .mst_b_chan_t ( b_chan_slv_t ), + .w_chan_t ( w_chan_t ), + .slv_b_chan_t ( b_chan_mst_t ), + .mst_b_chan_t ( b_chan_slv_t ), .slv_ar_chan_t( ar_chan_mst_t ), .mst_ar_chan_t( ar_chan_slv_t ), - .slv_r_chan_t ( r_chan_mst_t ), - .mst_r_chan_t ( r_chan_slv_t ), + .slv_r_chan_t ( r_chan_mst_t ), + .mst_r_chan_t ( r_chan_slv_t ), .slv_req_t ( mst_req_t ), .slv_resp_t ( mst_resp_t ), .mst_req_t ( slv_req_t ), .mst_resp_t ( slv_resp_t ), - .rule_t (rule_t ) + .rule_t ( rule_t ) ) i_xbar_dut ( - .clk_i ( clk ), - .rst_ni ( rst_n ), - .test_i ( 1'b0 ), - .slv_ports_req_i ( masters_req ), - .slv_ports_resp_o ( masters_resp ), - .mst_ports_req_o ( slaves_req ), - .mst_ports_resp_i ( slaves_resp ), - .addr_map_i ( AddrMap ), - .en_default_mst_port_i ( '0 ), - .default_mst_port_i ( '0 ) + .clk_i ( clk ), + .rst_ni ( rst_n ), + .test_i ( 1'b0 ), + .slv_ports_req_i ( masters_req ), + .slv_ports_resp_o ( masters_resp ), + .mst_ports_req_o ( slaves_req ), + .mst_ports_resp_i ( slaves_resp ), + .addr_map_i ( AddrMap ), + .en_default_mst_port_i ( '0 ), + .default_mst_port_i ( '0 ) ); // logger for master modules - for (genvar i = 0; i < NoMasters; i++) begin : gen_master_logger + for (genvar i = 0; i < TbNumMasters; i++) begin : gen_master_logger axi_chan_logger #( .TestTime ( TestTime ), // Time after clock, where sampling happens .LoggerName( $sformatf("axi_logger_master_%0d", i)), @@ -318,7 +334,7 @@ module tb_axi_xbar; ); end // logger for slave modules - for (genvar i = 0; i < NoSlaves; i++) begin : gen_slave_logger + for (genvar i = 0; i < TbNumSlaves; i++) begin : gen_slave_logger axi_chan_logger #( .TestTime ( TestTime ), // Time after clock, where sampling happens .LoggerName( $sformatf("axi_logger_slave_%0d",i)), @@ -355,7 +371,7 @@ module tb_axi_xbar; end - for (genvar i = 0; i < NoMasters; i++) begin : gen_connect_master_monitor + for (genvar i = 0; i < TbNumMasters; i++) begin : gen_connect_master_monitor assign master_monitor_dv[i].aw_id = master[i].aw_id ; assign master_monitor_dv[i].aw_addr = master[i].aw_addr ; assign master_monitor_dv[i].aw_len = master[i].aw_len ; @@ -402,7 +418,7 @@ module tb_axi_xbar; assign master_monitor_dv[i].r_valid = master[i].r_valid ; assign master_monitor_dv[i].r_ready = master[i].r_ready ; end - for (genvar i = 0; i < NoSlaves; i++) begin : gen_connect_slave_monitor + for (genvar i = 0; i < TbNumSlaves; i++) begin : gen_connect_slave_monitor assign slave_monitor_dv[i].aw_id = slave[i].aw_id ; assign slave_monitor_dv[i].aw_addr = slave[i].aw_addr ; assign slave_monitor_dv[i].aw_len = slave[i].aw_len ; From cf5e4d23e81c867ba93859c0654299d3fb0e7298 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20R=C3=B6nninger?= Date: Mon, 29 Jun 2020 13:35:42 +0200 Subject: [PATCH 02/11] scripts:run_vsim: Add parametized axi_xbar simulation call --- scripts/run_vsim.sh | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/scripts/run_vsim.sh b/scripts/run_vsim.sh index 3c2bd76b7..fdaa27f60 100755 --- a/scripts/run_vsim.sh +++ b/scripts/run_vsim.sh @@ -103,6 +103,29 @@ exec_test() { done done ;; + axi_xbar) + for GEN_ATOP in 0 1; do + for NUM_MST in 1 2 4 6; do + for NUM_SLV in 2 7 9; do + for MST_ID_USE in 3 5; do + MST_ID=5 + for DATA_WIDTH in 64 256; do + for PIPE in 0 1; do + call_vsim tb_axi_xbar -t 1ns -voptargs="+acc" \ + -gTbNumMasters=$NUM_MST \ + -gTbNumSlaves=$NUM_SLV \ + -gTbAxiIdWidthMasters=$MST_ID \ + -gTbAxiIdUsed=$MST_ID_USE \ + -gTbAxiDataWidth=$DATA_WIDTH \ + -gTbPipeline=$PIPE \ + -gTbEnAtop=$GEN_ATOP + done + done + done + done + done + done + ;; *) call_vsim tb_$1 -t 1ns -coverage -voptargs="+acc +cover=bcesfx" ;; From 6ee0a4db6b4a45ef588c0265dd552e0f7d3a52a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20R=C3=B6nninger?= Date: Mon, 29 Jun 2020 13:48:20 +0200 Subject: [PATCH 03/11] axi_pkg: Add documentation for xbar_cfg_t --- src/axi_pkg.sv | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/axi_pkg.sv b/src/axi_pkg.sv index 712e4ca34..6e0335ab6 100644 --- a/src/axi_pkg.sv +++ b/src/axi_pkg.sv @@ -393,16 +393,39 @@ package axi_pkg; /// Configuration for `axi_xbar`. typedef struct packed { + /// Number of slave ports of the crossbar. + /// This many master modules are connected to it. int unsigned NoSlvPorts; + /// Number of master ports of the crossbar. + /// This many slave modules are connected to it. int unsigned NoMstPorts; + /// Maximum number of open transactions each master connected to the crossbar can have in + /// flight at the same time. int unsigned MaxMstTrans; + /// Maximum number of open transactions each slave connected to the crossbar can have in + /// flight at the same time. int unsigned MaxSlvTrans; + /// Determine if the internal FIFOs of the crossbar are instantiated in fallthrough mode. + /// 0: No fallthrough + /// 1: Fallthrough bit FallThrough; + /// The Latency mode of the xbar. This determines if the channels on the ports have + /// a spill register instantiated. + /// Example configurations are provided with the enum `xbar_latency_e`. xbar_latency_e LatencyMode; + /// AXI ID width of the salve ports. The ID width of the master ports is determined + /// Automatically. See `axi_mux` for details. int unsigned AxiIdWidthSlvPorts; + /// The used ID portion to determine if a different salve is used for the same ID. + /// See `axi_demux` for details. int unsigned AxiIdUsedSlvPorts; + /// AXI4+ATOP address field width. int unsigned AxiAddrWidth; + /// AXI4+ATOP data field width. int unsigned AxiDataWidth; + /// The number of address rules defined for routing of the transactions. + /// Each master port can have multiple rules, should have however at least one. + /// If a transaction can not be routed the xbar will answer with an `axi_pkg::RESP_DECERR`. int unsigned NoAddrRules; } xbar_cfg_t; From c1d516e03cefefc179a1275789a4356be84522ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20R=C3=B6nninger?= Date: Tue, 30 Jun 2020 14:24:23 +0200 Subject: [PATCH 04/11] axi_xbar: Tone down runtime of ci --- scripts/run_vsim.sh | 4 ++-- test/tb_axi_xbar.sv | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/scripts/run_vsim.sh b/scripts/run_vsim.sh index fdaa27f60..f31828097 100755 --- a/scripts/run_vsim.sh +++ b/scripts/run_vsim.sh @@ -105,8 +105,8 @@ exec_test() { ;; axi_xbar) for GEN_ATOP in 0 1; do - for NUM_MST in 1 2 4 6; do - for NUM_SLV in 2 7 9; do + for NUM_MST in 1 6; do + for NUM_SLV in 2 9; do for MST_ID_USE in 3 5; do MST_ID=5 for DATA_WIDTH in 64 256; do diff --git a/test/tb_axi_xbar.sv b/test/tb_axi_xbar.sv index 6b8eb84ba..75795cc8c 100644 --- a/test/tb_axi_xbar.sv +++ b/test/tb_axi_xbar.sv @@ -29,12 +29,12 @@ module tb_axi_xbar #( /// Number of AXI slaves connected to the xbar. (Number of master ports) parameter int unsigned TbNumSlaves = 32'd8, /// Number of write transactions per master. - parameter int unsigned TbNumWrites = 32'd1000, + parameter int unsigned TbNumWrites = 32'd100, /// Number of read transactions per master. - parameter int unsigned TbNumReads = 32'd1000, + parameter int unsigned TbNumReads = 32'd100, /// AXI4+ATOP ID wisth of the masters connected to the slave ports of the DUT. /// The ID width of the salves is calulated depending on the xbar configuration. - parameter int unsigned TbAxiIdWidthMasters = 32'd4, + parameter int unsigned TbAxiIdWidthMasters = 32'd5, /// The used ID width of the DUT. /// Has to be `TbAxiIdWidthMasters >= TbAxiIdUsed`. parameter int unsigned TbAxiIdUsed = 32'd3, From 491540ece0a9f09ccbeaa0556399d71492c07e36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20R=C3=B6nninger?= Date: Fri, 4 Dec 2020 15:37:40 +0100 Subject: [PATCH 05/11] axi_xbar: Add port/param documentation --- src/axi_xbar.sv | 105 +++++++++++++++++++++++++++++++++++------------- 1 file changed, 78 insertions(+), 27 deletions(-) diff --git a/src/axi_xbar.sv b/src/axi_xbar.sv index ae1e6ecad..d6b076ad3 100644 --- a/src/axi_xbar.sv +++ b/src/axi_xbar.sv @@ -16,38 +16,89 @@ // axi_xbar: Fully-connected AXI4+ATOP crossbar with an arbitrary number of slave and master ports. // See `doc/axi_xbar.md` for the documentation, including the definition of parameters and ports. module axi_xbar #( - parameter axi_pkg::xbar_cfg_t Cfg = '0, - parameter bit ATOPs = 1'b1, - parameter type slv_aw_chan_t = logic, - parameter type mst_aw_chan_t = logic, - parameter type w_chan_t = logic, - parameter type slv_b_chan_t = logic, - parameter type mst_b_chan_t = logic, - parameter type slv_ar_chan_t = logic, - parameter type mst_ar_chan_t = logic, - parameter type slv_r_chan_t = logic, - parameter type mst_r_chan_t = logic, - parameter type slv_req_t = logic, - parameter type slv_resp_t = logic, - parameter type mst_req_t = logic, - parameter type mst_resp_t = logic, - parameter type rule_t = axi_pkg::xbar_rule_64_t + /// Configuration struct for the crossbar see `axi_pkg` for fields and definitions. + parameter axi_pkg::xbar_cfg_t Cfg = '0, + /// Enable atomic operations support. + parameter bit ATOPs = 1'b1, + /// AXI4+ATOP AW channel struct type for the slave ports. + parameter type slv_aw_chan_t = logic, + /// AXI4+ATOP AW channel struct type for the master ports. + parameter type mst_aw_chan_t = logic, + /// AXI4+ATOP W channel struct type for all ports. + parameter type w_chan_t = logic, + /// AXI4+ATOP B channel struct type for the slave ports. + parameter type slv_b_chan_t = logic, + /// AXI4+ATOP B channel struct type for the master ports. + parameter type mst_b_chan_t = logic, + /// AXI4+ATOP AR channel struct type for the slave ports. + parameter type slv_ar_chan_t = logic, + /// AXI4+ATOP AR channel struct type for the master ports. + parameter type mst_ar_chan_t = logic, + /// AXI4+ATOP R channel struct type for the slave ports. + parameter type slv_r_chan_t = logic, + /// AXI4+ATOP R channel struct type for the master ports. + parameter type mst_r_chan_t = logic, + /// AXI4+ATOP request struct type for the slave ports. + parameter type slv_req_t = logic, + /// AXI4+ATOP response struct type for the slave ports. + parameter type slv_resp_t = logic, + /// AXI4+ATOP request struct type for the master ports. + parameter type mst_req_t = logic, + /// AXI4+ATOP response struct type for the master ports. + parameter type mst_resp_t = logic, + /// Address rule type for the address decoders from `common_cells:addr_decode`. + /// + /// Example types are provided in `axi_pkg`. + /// + /// Required struct fields: + /// + /// typedef struct packed { + /// int unsigned idx; + /// axi_addr_t start_addr; + /// axi_addr_t end_addr; + /// } rule_t; + parameter type rule_t = axi_pkg::xbar_rule_64_t, + /// Dependent parameter, do **not** override! + /// Width of the index specifying a master port. + parameter int unsigned DefaultIdxWidth = cf_math_pkg::idx_width(Cfg.NoMstPorts), + /// Dependent parameter, do **not** override! + /// Type of index for a default master port. + parameter type default_idx_t = logic [DefaultIdxWidth-1:0] ) ( - input logic clk_i, - input logic rst_ni, - input logic test_i, - input slv_req_t [Cfg.NoSlvPorts-1:0] slv_ports_req_i, - output slv_resp_t [Cfg.NoSlvPorts-1:0] slv_ports_resp_o, - output mst_req_t [Cfg.NoMstPorts-1:0] mst_ports_req_o, - input mst_resp_t [Cfg.NoMstPorts-1:0] mst_ports_resp_i, - input rule_t [Cfg.NoAddrRules-1:0] addr_map_i, - input logic [Cfg.NoSlvPorts-1:0] en_default_mst_port_i, - input logic [Cfg.NoSlvPorts-1:0][$clog2(Cfg.NoMstPorts)-1:0] default_mst_port_i + /// Clock, positive edge triggered. + input logic clk_i, + /// Asynchronous reset, active low. + input logic rst_ni, + /// Testmode enable, active high. + input logic test_i, + /// AXI4+ATOP requests to the slave ports. + input slv_req_t [Cfg.NoSlvPorts-1:0] slv_ports_req_i, + /// AXI4+ATOP responses of the slave ports. + output slv_resp_t [Cfg.NoSlvPorts-1:0] slv_ports_resp_o, + /// AXI4+ATOP requests of the master ports. + output mst_req_t [Cfg.NoMstPorts-1:0] mst_ports_req_o, + /// AXI4+ATOP responses to the master ports. + input mst_resp_t [Cfg.NoMstPorts-1:0] mst_ports_resp_i, + /// Address map array input for the crossbar. This map is global for the whole module. + /// It is used for routing the transactions to the respective master ports. + /// Each master port can have multiple different rules. + input rule_t [Cfg.NoAddrRules-1:0] addr_map_i, + /// Enables a default master port for each slave port. When this is enabled unmapped + /// transactions get issued at the master port given by `default_mst_port_i`. + /// + /// When not used, tie to `'0`. + input logic [Cfg.NoSlvPorts-1:0] en_default_mst_port_i, + /// For each slave port the default index where the transaction should be routed, if + /// for this slave port the default index functionality is enabled by setting the + /// bit `en_default_mst_port_i[slave_port_idx]` to `'1`. + /// + /// When not used, tie to `'0`. + input default_idx_t [Cfg.NoSlvPorts-1:0] default_mst_port_i ); typedef logic [Cfg.AxiAddrWidth-1:0] addr_t; // to account for the decoding error slave - typedef logic [$clog2(Cfg.NoMstPorts + 1)-1:0] mst_port_idx_t; + typedef logic [cf_math_pkg::idx_width(Cfg.NoMstPorts + 1)-1:0] mst_port_idx_t; // signals from the axi_demuxes, one index more for decode error slv_req_t [Cfg.NoSlvPorts-1:0][Cfg.NoMstPorts:0] slv_reqs; From 00c36bdea7c1aad71fd72fa5fa430c7aac75077b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20R=C3=B6nninger?= Date: Mon, 25 Jan 2021 15:55:11 +0100 Subject: [PATCH 06/11] axi_xbar: Flatten cfg parameter list and update port names --- CHANGELOG.md | 1 + src/axi_xbar.sv | 485 ++++++++++++++++++++++++++++-------------------- 2 files changed, 282 insertions(+), 204 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e423d1ac9..036023536 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - `axi_lite_to_apb`: Make pipeline registers on request and response path optional (can be enabled with the new `PipelineRequest` and `PipelineResponse` `parameter`s), and disable those pipeline registers by default. +- `axi_xbar`: Flatten and update parameter and ports according to (#153). Add inline documentation. ### Fixed diff --git a/src/axi_xbar.sv b/src/axi_xbar.sv index d6b076ad3..44ee6a070 100644 --- a/src/axi_xbar.sv +++ b/src/axi_xbar.sv @@ -13,39 +13,75 @@ // - Andreas Kurth // - Florian Zaruba +`include "axi/typedef.svh" + // axi_xbar: Fully-connected AXI4+ATOP crossbar with an arbitrary number of slave and master ports. // See `doc/axi_xbar.md` for the documentation, including the definition of parameters and ports. module axi_xbar #( - /// Configuration struct for the crossbar see `axi_pkg` for fields and definitions. - parameter axi_pkg::xbar_cfg_t Cfg = '0, + /// Number of slave ports of the crossbar. + /// This many master modules are connected to it. + parameter int unsigned NumSlvPorts = 32'd0, + /// Number of master ports of the crossbar. + /// This many slave modules are connected to it. + parameter int unsigned NumMstPorts = 32'd0, + /// AXI ID width of the slave ports. The ID width of the master ports is determined + /// Automatically. See `axi_mux` for details. + parameter int unsigned SlvPortIdWidth = 32'd0, + /// The used ID portion to determine if a different salve is used for the same ID. + /// See `axi_demux` for details. + parameter int unsigned SlvPortIdWidthUsed = 32'd0, + /// AXI4+ATOP address field width. + parameter int unsigned AddrWidth = 32'd0, + /// AXI4+ATOP data field width. + parameter int unsigned DataWidth = 32'd0, + /// AXI4+ATOP user field width. + parameter int unsigned UserWidth = 32'd0, + /// Maximum number of open transactions each master connected to the crossbar can have in + /// flight at the same time. + parameter int unsigned SlvPortMaxTxns = 32'd0, + /// Maximum number of open transactions each slave connected to the crossbar can have in + /// flight at the same time. + parameter int unsigned MstPortMaxTxns = 32'd0, + /// Determine if the internal FIFOs of the crossbar are instantiated in fallthrough mode. + /// 0: No fallthrough + /// 1: Fallthrough + parameter bit FallThrough = 32'd1, + /// The Latency mode of the xbar. This determines if the channels on the ports have + /// a spill register instantiated. + /// Example configurations are provided with the enum `xbar_latency_e`. + parameter axi_pkg::xbar_latency_e LatencyMode = axi_pkg::CUT_ALL_AX, + /// The number of address rules defined for routing of the transactions. + /// Each master port can have multiple rules, should have however at least one. + /// If a transaction can not be routed the xbar will answer with an `axi_pkg::RESP_DECERR`. + parameter int unsigned NumAddrRules = 32'd0, /// Enable atomic operations support. - parameter bit ATOPs = 1'b1, - /// AXI4+ATOP AW channel struct type for the slave ports. - parameter type slv_aw_chan_t = logic, - /// AXI4+ATOP AW channel struct type for the master ports. - parameter type mst_aw_chan_t = logic, - /// AXI4+ATOP W channel struct type for all ports. - parameter type w_chan_t = logic, - /// AXI4+ATOP B channel struct type for the slave ports. - parameter type slv_b_chan_t = logic, - /// AXI4+ATOP B channel struct type for the master ports. - parameter type mst_b_chan_t = logic, - /// AXI4+ATOP AR channel struct type for the slave ports. - parameter type slv_ar_chan_t = logic, - /// AXI4+ATOP AR channel struct type for the master ports. - parameter type mst_ar_chan_t = logic, - /// AXI4+ATOP R channel struct type for the slave ports. - parameter type slv_r_chan_t = logic, - /// AXI4+ATOP R channel struct type for the master ports. - parameter type mst_r_chan_t = logic, - /// AXI4+ATOP request struct type for the slave ports. - parameter type slv_req_t = logic, - /// AXI4+ATOP response struct type for the slave ports. - parameter type slv_resp_t = logic, - /// AXI4+ATOP request struct type for the master ports. - parameter type mst_req_t = logic, - /// AXI4+ATOP response struct type for the master ports. - parameter type mst_resp_t = logic, + parameter bit EnableAtops = 1'b1, + // /// AXI4+ATOP AW channel struct type for the slave ports. + // parameter type slv_aw_chan_t = logic, + // /// AXI4+ATOP AW channel struct type for the master ports. + // parameter type mst_aw_chan_t = logic, + // /// AXI4+ATOP W channel struct type for all ports. + // parameter type w_chan_t = logic, + // /// AXI4+ATOP B channel struct type for the slave ports. + // parameter type slv_b_chan_t = logic, + // /// AXI4+ATOP B channel struct type for the master ports. + // parameter type mst_b_chan_t = logic, + // /// AXI4+ATOP AR channel struct type for the slave ports. + // parameter type slv_ar_chan_t = logic, + // /// AXI4+ATOP AR channel struct type for the master ports. + // parameter type mst_ar_chan_t = logic, + // /// AXI4+ATOP R channel struct type for the slave ports. + // parameter type slv_r_chan_t = logic, + // /// AXI4+ATOP R channel struct type for the master ports. + // parameter type mst_r_chan_t = logic, + /// AXI4+ATOP request struct type for a single slave port. + parameter type slv_port_axi_req_t = logic, + /// AXI4+ATOP response struct type for a single slave port. + parameter type slv_port_axi_rsp_t = logic, + /// AXI4+ATOP request struct type for a single master port. + parameter type mst_port_axi_req_t = logic, + /// AXI4+ATOP response struct type for a single master port. + parameter type mst_port_axi_rsp_t = logic, /// Address rule type for the address decoders from `common_cells:addr_decode`. /// /// Example types are provided in `axi_pkg`. @@ -60,10 +96,10 @@ module axi_xbar #( parameter type rule_t = axi_pkg::xbar_rule_64_t, /// Dependent parameter, do **not** override! /// Width of the index specifying a master port. - parameter int unsigned DefaultIdxWidth = cf_math_pkg::idx_width(Cfg.NoMstPorts), - /// Dependent parameter, do **not** override! + parameter int unsigned DefaultMstPortIdxWidth = cf_math_pkg::idx_width(NumMstPorts), + /// Dependent parameter, do **not**parameter override! /// Type of index for a default master port. - parameter type default_idx_t = logic [DefaultIdxWidth-1:0] + parameter type default_mst_port_idx_t = logic [DefaultMstPortIdxWidth-1:0] ) ( /// Clock, positive edge triggered. input logic clk_i, @@ -72,56 +108,75 @@ module axi_xbar #( /// Testmode enable, active high. input logic test_i, /// AXI4+ATOP requests to the slave ports. - input slv_req_t [Cfg.NoSlvPorts-1:0] slv_ports_req_i, + input slv_port_axi_req_t [NumSlvPorts-1:0] slv_ports_req_i, /// AXI4+ATOP responses of the slave ports. - output slv_resp_t [Cfg.NoSlvPorts-1:0] slv_ports_resp_o, + output slv_port_axi_rsp_t [NumSlvPorts-1:0] slv_ports_rsp_o, /// AXI4+ATOP requests of the master ports. - output mst_req_t [Cfg.NoMstPorts-1:0] mst_ports_req_o, + output mst_port_axi_req_t [NumMstPorts-1:0] mst_ports_req_o, /// AXI4+ATOP responses to the master ports. - input mst_resp_t [Cfg.NoMstPorts-1:0] mst_ports_resp_i, + input mst_port_axi_rsp_t [NumMstPorts-1:0] mst_ports_rsp_i, /// Address map array input for the crossbar. This map is global for the whole module. /// It is used for routing the transactions to the respective master ports. /// Each master port can have multiple different rules. - input rule_t [Cfg.NoAddrRules-1:0] addr_map_i, + input rule_t [NumAddrRules-1:0] addr_map_i, /// Enables a default master port for each slave port. When this is enabled unmapped /// transactions get issued at the master port given by `default_mst_port_i`. /// /// When not used, tie to `'0`. - input logic [Cfg.NoSlvPorts-1:0] en_default_mst_port_i, + input logic [NumSlvPorts-1:0] en_default_mst_port_i, /// For each slave port the default index where the transaction should be routed, if /// for this slave port the default index functionality is enabled by setting the - /// bit `en_default_mst_port_i[slave_port_idx]` to `'1`. + /// bit `en_default_mst_ports_i[slave_port_idx]` to `'1`. /// /// When not used, tie to `'0`. - input default_idx_t [Cfg.NoSlvPorts-1:0] default_mst_port_i + input default_mst_port_idx_t [NumSlvPorts-1:0] default_mst_ports_i ); - typedef logic [Cfg.AxiAddrWidth-1:0] addr_t; - // to account for the decoding error slave - typedef logic [cf_math_pkg::idx_width(Cfg.NoMstPorts + 1)-1:0] mst_port_idx_t; + // Internal type definitions for the AXI4+ATOP channels. + localparam int unsigned MstPortIdWidth = SlvPortIdWidth + unsigned'($clog2(NumSlvPorts)); + localparam int unsigned StrbWidth = DataWidth / 32'd8; + typedef logic [SlvPortIdWidth -1:0] slv_port_axi_id_t; + typedef logic [MstPortIdWidth -1:0] mst_port_axi_id_t; + typedef logic [AddrWidth -1:0] axi_addr_t; + typedef logic [DataWidth -1:0] axi_data_t; + typedef logic [StrbWidth -1:0] axi_strb_t; + typedef logic [UserWidth -1:0] axi_user_t; - // signals from the axi_demuxes, one index more for decode error - slv_req_t [Cfg.NoSlvPorts-1:0][Cfg.NoMstPorts:0] slv_reqs; - slv_resp_t [Cfg.NoSlvPorts-1:0][Cfg.NoMstPorts:0] slv_resps; + `AXI_TYPEDEF_AW_CHAN_T(slv_port_axi_aw_t, axi_addr_t, slv_port_axi_id_t, axi_user_t) + `AXI_TYPEDEF_AW_CHAN_T(mst_port_axi_aw_t, axi_addr_t, mst_port_axi_id_t, axi_user_t) + `AXI_TYPEDEF_W_CHAN_T(axi_w_t, axi_data_t, axi_strb_t, axi_user_t) + `AXI_TYPEDEF_B_CHAN_T(slv_port_axi_b_t, slv_port_axi_id_t, axi_user_t) + `AXI_TYPEDEF_B_CHAN_T(mst_port_axi_b_t, mst_port_axi_id_t, axi_user_t) + `AXI_TYPEDEF_AR_CHAN_T(slv_port_axi_ar_t, axi_addr_t, slv_port_axi_id_t, axi_user_t) + `AXI_TYPEDEF_AR_CHAN_T(mst_port_axi_ar_t, axi_addr_t, mst_port_axi_id_t, axi_user_t) + `AXI_TYPEDEF_R_CHAN_T(slv_port_axi_r_t, axi_data_t, slv_port_axi_id_t, axi_user_t) + `AXI_TYPEDEF_R_CHAN_T(mst_port_axi_r_t, axi_data_t, mst_port_axi_id_t, axi_user_t) - // workaround for issue #133 (problem with vsim 10.6c) - localparam int unsigned cfg_NoMstPorts = Cfg.NoMstPorts; + // Account for the decoding error slave in the `axi_demux` select width. + // The `axi_demux` on a slave port always has one more master port that the number of master ports + // of the `axi_xbar`. + localparam int unsigned InternalSelectIdxWidth = cf_math_pkg::idx_width(NumMstPorts + 32'd1); + typedef logic [InternalSelectIdxWidth-1:0] internal_select_idx_t; + + // signals from the axi_demuxes, one index more for decode error + slv_port_axi_req_t [NumSlvPorts-1:0][NumMstPorts:0] slv_reqs; + slv_port_axi_rsp_t [NumSlvPorts-1:0][NumMstPorts:0] slv_rsps; // signals into the axi_muxes, are of type slave as the multiplexer extends the ID - slv_req_t [Cfg.NoMstPorts-1:0][Cfg.NoSlvPorts-1:0] mst_reqs; - slv_resp_t [Cfg.NoMstPorts-1:0][Cfg.NoSlvPorts-1:0] mst_resps; + slv_port_axi_req_t [NumMstPorts-1:0][NumSlvPorts-1:0] mst_reqs; + slv_port_axi_rsp_t [NumMstPorts-1:0][NumSlvPorts-1:0] mst_rsps; - for (genvar i = 0; i < Cfg.NoSlvPorts; i++) begin : gen_slv_port_demux - logic [$clog2(Cfg.NoMstPorts)-1:0] dec_aw, dec_ar; - mst_port_idx_t slv_aw_select, slv_ar_select; - logic dec_aw_valid, dec_aw_error; - logic dec_ar_valid, dec_ar_error; + for (genvar i = 0; unsigned'(i) < NumSlvPorts; i++) begin : gen_slv_port_demux + default_mst_port_idx_t dec_aw, dec_ar; + internal_select_idx_t slv_aw_select, slv_ar_select; + logic dec_aw_valid, dec_aw_error; + logic dec_ar_valid, dec_ar_error; addr_decode #( - .NoIndices ( Cfg.NoMstPorts ), - .NoRules ( Cfg.NoAddrRules ), - .addr_t ( addr_t ), - .rule_t ( rule_t ) + .NoIndices ( NumMstPorts ), + .NoRules ( NumAddrRules ), + .addr_t ( axi_addr_t ), + .rule_t ( rule_t ) ) i_axi_aw_decode ( .addr_i ( slv_ports_req_i[i].aw.addr ), .addr_map_i ( addr_map_i ), @@ -129,14 +184,14 @@ module axi_xbar #( .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 ( default_mst_ports_i[i] ) ); addr_decode #( - .NoIndices ( Cfg.NoMstPorts ), - .addr_t ( addr_t ), - .NoRules ( Cfg.NoAddrRules ), - .rule_t ( rule_t ) + .NoIndices ( NumMstPorts ), + .NoRules ( NumAddrRules ), + .addr_t ( axi_addr_t ), + .rule_t ( rule_t ) ) i_axi_ar_decode ( .addr_i ( slv_ports_req_i[i].ar.addr ), .addr_map_i ( addr_map_i ), @@ -144,13 +199,13 @@ module axi_xbar #( .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 ( default_mst_ports_i[i] ) ); assign slv_aw_select = (dec_aw_error) ? - mst_port_idx_t'(Cfg.NoMstPorts) : mst_port_idx_t'(dec_aw); + internal_select_idx_t'(NumMstPorts) : internal_select_idx_t'(dec_aw); assign slv_ar_select = (dec_ar_error) ? - mst_port_idx_t'(Cfg.NoMstPorts) : mst_port_idx_t'(dec_ar); + internal_select_idx_t'(NumMstPorts) : internal_select_idx_t'(dec_ar); // make sure that the default slave does not get changed, if there is an unserved Ax // pragma translate_off @@ -158,117 +213,117 @@ module axi_xbar #( `ifndef XSIM default disable iff (~rst_ni); default_aw_mst_port_en: assert property( - @(posedge clk_i) (slv_ports_req_i[i].aw_valid && !slv_ports_resp_o[i].aw_ready) + @(posedge clk_i) (slv_ports_req_i[i].aw_valid && !slv_ports_rsp_o[i].aw_ready) |=> $stable(en_default_mst_port_i[i])) else $fatal (1, $sformatf("It is not allowed to change the default mst port\ enable, when there is an unserved Aw beat. Slave Port: %0d", i)); default_aw_mst_port: assert property( - @(posedge clk_i) (slv_ports_req_i[i].aw_valid && !slv_ports_resp_o[i].aw_ready) - |=> $stable(default_mst_port_i[i])) + @(posedge clk_i) (slv_ports_req_i[i].aw_valid && !slv_ports_rsp_o[i].aw_ready) + |=> $stable(default_mst_ports_i[i])) else $fatal (1, $sformatf("It is not allowed to change the default mst port\ when there is an unserved Aw beat. Slave Port: %0d", i)); default_ar_mst_port_en: assert property( - @(posedge clk_i) (slv_ports_req_i[i].ar_valid && !slv_ports_resp_o[i].ar_ready) + @(posedge clk_i) (slv_ports_req_i[i].ar_valid && !slv_ports_rsp_o[i].ar_ready) |=> $stable(en_default_mst_port_i[i])) else $fatal (1, $sformatf("It is not allowed to change the enable, when\ there is an unserved Ar beat. Slave Port: %0d", i)); default_ar_mst_port: assert property( - @(posedge clk_i) (slv_ports_req_i[i].ar_valid && !slv_ports_resp_o[i].ar_ready) - |=> $stable(default_mst_port_i[i])) + @(posedge clk_i) (slv_ports_req_i[i].ar_valid && !slv_ports_rsp_o[i].ar_ready) + |=> $stable(default_mst_ports_i[i])) else $fatal (1, $sformatf("It is not allowed to change the default mst port\ when there is an unserved Ar beat. Slave Port: %0d", i)); `endif `endif // pragma translate_on axi_demux #( - .AxiIdWidth ( Cfg.AxiIdWidthSlvPorts ), // ID Width - .aw_chan_t ( slv_aw_chan_t ), // AW Channel Type - .w_chan_t ( w_chan_t ), // W Channel Type - .b_chan_t ( slv_b_chan_t ), // B Channel Type - .ar_chan_t ( slv_ar_chan_t ), // AR Channel Type - .r_chan_t ( slv_r_chan_t ), // R Channel Type - .req_t ( slv_req_t ), - .resp_t ( slv_resp_t ), - .NoMstPorts ( Cfg.NoMstPorts + 1 ), - .MaxTrans ( Cfg.MaxMstTrans ), - .AxiLookBits ( Cfg.AxiIdUsedSlvPorts ), - .FallThrough ( Cfg.FallThrough ), - .SpillAw ( Cfg.LatencyMode[9] ), - .SpillW ( Cfg.LatencyMode[8] ), - .SpillB ( Cfg.LatencyMode[7] ), - .SpillAr ( Cfg.LatencyMode[6] ), - .SpillR ( Cfg.LatencyMode[5] ) + .AxiIdWidth ( SlvPortIdWidth ), // ID Width + .aw_chan_t ( slv_port_axi_aw_t ), // AW Channel Type + .w_chan_t ( axi_w_t ), // W Channel Type + .b_chan_t ( slv_port_axi_b_t ), // B Channel Type + .ar_chan_t ( slv_port_axi_ar_t ), // AR Channel Type + .r_chan_t ( slv_port_axi_r_t ), // R Channel Type + .req_t ( slv_port_axi_req_t ), + .resp_t ( slv_port_axi_rsp_t ), + .NoMstPorts ( NumMstPorts + 32'd1 ), + .MaxTrans ( SlvPortMaxTxns ), + .AxiLookBits ( SlvPortIdWidthUsed ), + .FallThrough ( FallThrough ), + .SpillAw ( LatencyMode[9] ), + .SpillW ( LatencyMode[8] ), + .SpillB ( LatencyMode[7] ), + .SpillAr ( LatencyMode[6] ), + .SpillR ( LatencyMode[5] ) ) i_axi_demux ( .clk_i, // Clock .rst_ni, // Asynchronous reset active low .test_i, // Testmode enable - .slv_req_i ( slv_ports_req_i[i] ), - .slv_aw_select_i ( slv_aw_select ), - .slv_ar_select_i ( slv_ar_select ), - .slv_resp_o ( slv_ports_resp_o[i] ), - .mst_reqs_o ( slv_reqs[i] ), - .mst_resps_i ( slv_resps[i] ) + .slv_req_i ( slv_ports_req_i[i] ), + .slv_aw_select_i ( slv_aw_select ), + .slv_ar_select_i ( slv_ar_select ), + .slv_resp_o ( slv_ports_rsp_o[i] ), + .mst_reqs_o ( slv_reqs[i] ), + .mst_resps_i ( slv_rsps[i] ) ); axi_err_slv #( - .AxiIdWidth ( Cfg.AxiIdWidthSlvPorts ), - .req_t ( slv_req_t ), - .resp_t ( slv_resp_t ), - .Resp ( axi_pkg::RESP_DECERR ), - .ATOPs ( ATOPs ), - .MaxTrans ( 4 ) // Transactions terminate at this slave, so minimize - // resource consumption by accepting only a few - // transactions at a time. + .AxiIdWidth ( SlvPortIdWidth ), + .req_t ( slv_port_axi_req_t ), + .resp_t ( slv_port_axi_rsp_t ), + .Resp ( axi_pkg::RESP_DECERR ), + .ATOPs ( EnableAtops ), + .MaxTrans ( 32'd4 ) // Transactions terminate at this slave, so minimize + // resource consumption by accepting only a few + // transactions at a time. ) i_axi_err_slv ( .clk_i, // Clock .rst_ni, // Asynchronous reset active low .test_i, // Testmode enable // slave port - .slv_req_i ( slv_reqs[i][Cfg.NoMstPorts] ), - .slv_resp_o ( slv_resps[i][cfg_NoMstPorts] ) + .slv_req_i ( slv_reqs[i][NumMstPorts] ), + .slv_resp_o ( slv_rsps[i][NumMstPorts] ) ); end // cross all channels - 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 - assign mst_reqs[j][i] = slv_reqs[i][j]; - assign slv_resps[i][j] = mst_resps[j][i]; + for (genvar i = 0; unsigned'(i) < NumSlvPorts; i++) begin : gen_xbar_slv_cross + for (genvar j = 0; unsigned'(j) < NumMstPorts; j++) begin : gen_xbar_mst_cross + assign mst_reqs[j][i] = slv_reqs[i][j]; + assign slv_rsps[i][j] = mst_rsps[j][i]; end end - for (genvar i = 0; i < Cfg.NoMstPorts; i++) begin : gen_mst_port_mux + for (genvar i = 0; unsigned'(i) < NumMstPorts; i++) begin : gen_mst_port_mux axi_mux #( - .SlvAxiIDWidth ( Cfg.AxiIdWidthSlvPorts ), // ID width of the slave ports - .slv_aw_chan_t ( slv_aw_chan_t ), // AW Channel Type, slave ports - .mst_aw_chan_t ( mst_aw_chan_t ), // AW Channel Type, master port - .w_chan_t ( w_chan_t ), // W Channel Type, all ports - .slv_b_chan_t ( slv_b_chan_t ), // B Channel Type, slave ports - .mst_b_chan_t ( mst_b_chan_t ), // B Channel Type, master port - .slv_ar_chan_t ( slv_ar_chan_t ), // AR Channel Type, slave ports - .mst_ar_chan_t ( mst_ar_chan_t ), // AR Channel Type, master port - .slv_r_chan_t ( slv_r_chan_t ), // R Channel Type, slave ports - .mst_r_chan_t ( mst_r_chan_t ), // R Channel Type, master port - .slv_req_t ( slv_req_t ), - .slv_resp_t ( slv_resp_t ), - .mst_req_t ( mst_req_t ), - .mst_resp_t ( mst_resp_t ), - .NoSlvPorts ( Cfg.NoSlvPorts ), // Number of Masters for the module - .MaxWTrans ( Cfg.MaxSlvTrans ), - .FallThrough ( Cfg.FallThrough ), - .SpillAw ( Cfg.LatencyMode[4] ), - .SpillW ( Cfg.LatencyMode[3] ), - .SpillB ( Cfg.LatencyMode[2] ), - .SpillAr ( Cfg.LatencyMode[1] ), - .SpillR ( Cfg.LatencyMode[0] ) + .SlvAxiIDWidth ( SlvPortIdWidth ), // ID width of the slave ports + .slv_aw_chan_t ( slv_port_axi_aw_t ), // AW Channel Type, slave ports + .mst_aw_chan_t ( mst_port_axi_aw_t ), // AW Channel Type, master port + .w_chan_t ( axi_w_t ), // W Channel Type, all ports + .slv_b_chan_t ( slv_port_axi_b_t ), // B Channel Type, slave ports + .mst_b_chan_t ( mst_port_axi_b_t ), // B Channel Type, master port + .slv_ar_chan_t ( slv_port_axi_ar_t ), // AR Channel Type, slave ports + .mst_ar_chan_t ( mst_port_axi_ar_t ), // AR Channel Type, master port + .slv_r_chan_t ( slv_port_axi_r_t ), // R Channel Type, slave ports + .mst_r_chan_t ( mst_port_axi_r_t ), // R Channel Type, master port + .slv_req_t ( slv_port_axi_req_t ), + .slv_resp_t ( slv_port_axi_rsp_t ), + .mst_req_t ( mst_port_axi_req_t ), + .mst_resp_t ( mst_port_axi_rsp_t ), + .NoSlvPorts ( NumSlvPorts ), // Number of Masters for the module + .MaxWTrans ( MstPortMaxTxns ), + .FallThrough ( FallThrough ), + .SpillAw ( LatencyMode[4] ), + .SpillW ( LatencyMode[3] ), + .SpillB ( LatencyMode[2] ), + .SpillAr ( LatencyMode[1] ), + .SpillR ( LatencyMode[0] ) ) i_axi_mux ( .clk_i, // Clock .rst_ni, // Asynchronous reset active low .test_i, // Test Mode enable - .slv_reqs_i ( mst_reqs[i] ), - .slv_resps_o ( mst_resps[i] ), - .mst_req_o ( mst_ports_req_o[i] ), - .mst_resp_i ( mst_ports_resp_i[i] ) + .slv_reqs_i ( mst_reqs[i] ), + .slv_resps_o ( mst_rsps[i] ), + .mst_req_o ( mst_ports_req_o[i] ), + .mst_resp_i ( mst_ports_rsp_i[i] ) ); end @@ -276,10 +331,10 @@ module axi_xbar #( `ifndef VERILATOR `ifndef XSIM initial begin : check_params - id_slv_req_ports: assert ($bits(slv_ports_req_i[0].aw.id ) == Cfg.AxiIdWidthSlvPorts) else - $fatal(1, $sformatf("Slv_req and aw_chan id width not equal.")); - id_slv_resp_ports: assert ($bits(slv_ports_resp_o[0].r.id) == Cfg.AxiIdWidthSlvPorts) else - $fatal(1, $sformatf("Slv_req and aw_chan id width not equal.")); + id_slv_req_ports: assert ($bits(slv_ports_req_i[0].aw.id) == SlvPortIdWidth) else + $fatal(1, $sformatf("slv_ports_req_i.aw.id and SlvPortIdWidth not equal.")); + id_slv_rsp_ports: assert ($bits(slv_ports_rsp_o[0].r.id) == SlvPortIdWidth) else + $fatal(1, $sformatf("slv_ports_rsp_o.r.id and SlvPortIdWidth not equal.")); end `endif `endif @@ -287,88 +342,110 @@ module axi_xbar #( endmodule `include "axi/assign.svh" -`include "axi/typedef.svh" +/// This is the interface wrapper for `axi_xbar`. Ports and parameters are analog to `axxi_xbar`. +/// The AXI4+ATOP master and slave ports are structured here as interfaces. +/// Indexing of the interface is big-endian. This module does the little-endian indexing +/// for the port structs. module axi_xbar_intf #( - parameter int unsigned AXI_USER_WIDTH = 0, - parameter axi_pkg::xbar_cfg_t Cfg = '0, - parameter type rule_t = axi_pkg::xbar_rule_64_t + parameter int unsigned NumSlvPorts = 32'd0, + parameter int unsigned NumMstPorts = 32'd0, + parameter int unsigned SlvPortIdWidth = 32'd0, + parameter int unsigned SlvPortIdWidthUsed = 32'd0, + parameter int unsigned AddrWidth = 32'd0, + parameter int unsigned DataWidth = 32'd0, + parameter int unsigned UserWidth = 32'd0, + parameter int unsigned SlvPortMaxTxns = 32'd0, + parameter int unsigned MstPortMaxTxns = 32'd0, + parameter bit FallThrough = 32'd1, + parameter axi_pkg::xbar_latency_e LatencyMode = axi_pkg::CUT_ALL_AX, + parameter int unsigned NumAddrRules = 32'd0, + parameter bit EnableAtops = 1'b1, + parameter type rule_t = axi_pkg::xbar_rule_64_t, + /// Dependent parameter, do **not** override! + parameter int unsigned DefaultMstPortIdxWidth = cf_math_pkg::idx_width(NumMstPorts), + /// Dependent parameter, do **not**parameter override! + parameter type default_mst_port_idx_t = logic [DefaultMstPortIdxWidth-1:0] ) ( - input logic clk_i, - input logic rst_ni, - input logic test_i, - AXI_BUS.Slave slv_ports [Cfg.NoSlvPorts-1:0], - AXI_BUS.Master mst_ports [Cfg.NoMstPorts-1:0], - input rule_t [Cfg.NoAddrRules-1:0] addr_map_i, - input logic [Cfg.NoSlvPorts-1:0] en_default_mst_port_i, - input logic [Cfg.NoSlvPorts-1:0][$clog2(Cfg.NoMstPorts)-1:0] default_mst_port_i + input logic clk_i, + input logic rst_ni, + input logic test_i, + AXI_BUS.Slave slv_ports[NumSlvPorts], + AXI_BUS.Master mst_ports[NumMstPorts], + input rule_t [NumAddrRules-1:0] addr_map_i, + input logic [NumSlvPorts -1:0] en_default_mst_port_i, + input default_mst_port_idx_t [NumSlvPorts -1:0] default_mst_ports_i ); - localparam int unsigned AxiIdWidthMstPorts = Cfg.AxiIdWidthSlvPorts + $clog2(Cfg.NoSlvPorts); + // Internal type definitions for the AXI4+ATOP channels. + localparam int unsigned MstPortIdWidth = SlvPortIdWidth + unsigned'($clog2(NumSlvPorts)); + localparam int unsigned StrbWidth = DataWidth / 32'd8; + typedef logic [SlvPortIdWidth -1:0] slv_port_axi_id_t; + typedef logic [MstPortIdWidth -1:0] mst_port_axi_id_t; + typedef logic [AddrWidth -1:0] axi_addr_t; + typedef logic [DataWidth -1:0] axi_data_t; + typedef logic [StrbWidth -1:0] axi_strb_t; + typedef logic [UserWidth -1:0] axi_user_t; - typedef logic [AxiIdWidthMstPorts -1:0] id_mst_t; - typedef logic [Cfg.AxiIdWidthSlvPorts -1:0] id_slv_t; - typedef logic [Cfg.AxiAddrWidth -1:0] addr_t; - typedef logic [Cfg.AxiDataWidth -1:0] data_t; - typedef logic [Cfg.AxiDataWidth/8 -1:0] strb_t; - typedef logic [AXI_USER_WIDTH -1:0] user_t; + `AXI_TYPEDEF_AW_CHAN_T(slv_port_axi_aw_t, axi_addr_t, slv_port_axi_id_t, axi_user_t) + `AXI_TYPEDEF_AW_CHAN_T(mst_port_axi_aw_t, axi_addr_t, mst_port_axi_id_t, axi_user_t) + `AXI_TYPEDEF_W_CHAN_T(axi_w_t, axi_data_t, axi_strb_t, axi_user_t) + `AXI_TYPEDEF_B_CHAN_T(slv_port_axi_b_t, slv_port_axi_id_t, axi_user_t) + `AXI_TYPEDEF_B_CHAN_T(mst_port_axi_b_t, mst_port_axi_id_t, axi_user_t) + `AXI_TYPEDEF_AR_CHAN_T(slv_port_axi_ar_t, axi_addr_t, slv_port_axi_id_t, axi_user_t) + `AXI_TYPEDEF_AR_CHAN_T(mst_port_axi_ar_t, axi_addr_t, mst_port_axi_id_t, axi_user_t) + `AXI_TYPEDEF_R_CHAN_T(slv_port_axi_r_t, axi_data_t, slv_port_axi_id_t, axi_user_t) + `AXI_TYPEDEF_R_CHAN_T(mst_port_axi_r_t, axi_data_t, mst_port_axi_id_t, axi_user_t) - `AXI_TYPEDEF_AW_CHAN_T(mst_aw_chan_t, addr_t, id_mst_t, user_t) - `AXI_TYPEDEF_AW_CHAN_T(slv_aw_chan_t, addr_t, id_slv_t, user_t) - `AXI_TYPEDEF_W_CHAN_T(w_chan_t, data_t, strb_t, user_t) - `AXI_TYPEDEF_B_CHAN_T(mst_b_chan_t, id_mst_t, user_t) - `AXI_TYPEDEF_B_CHAN_T(slv_b_chan_t, id_slv_t, user_t) - `AXI_TYPEDEF_AR_CHAN_T(mst_ar_chan_t, addr_t, id_mst_t, user_t) - `AXI_TYPEDEF_AR_CHAN_T(slv_ar_chan_t, addr_t, id_slv_t, user_t) - `AXI_TYPEDEF_R_CHAN_T(mst_r_chan_t, data_t, id_mst_t, user_t) - `AXI_TYPEDEF_R_CHAN_T(slv_r_chan_t, data_t, id_slv_t, user_t) - `AXI_TYPEDEF_REQ_T(mst_req_t, mst_aw_chan_t, w_chan_t, mst_ar_chan_t) - `AXI_TYPEDEF_REQ_T(slv_req_t, slv_aw_chan_t, w_chan_t, slv_ar_chan_t) - `AXI_TYPEDEF_RESP_T(mst_resp_t, mst_b_chan_t, mst_r_chan_t) - `AXI_TYPEDEF_RESP_T(slv_resp_t, slv_b_chan_t, slv_r_chan_t) + `AXI_TYPEDEF_REQ_T(slv_port_axi_req_t, slv_port_axi_aw_t, axi_w_t, slv_port_axi_ar_t) + `AXI_TYPEDEF_REQ_T(mst_port_axi_req_t, mst_port_axi_aw_t, axi_w_t, mst_port_axi_ar_t) + `AXI_TYPEDEF_RESP_T(slv_port_axi_rsp_t, slv_port_axi_b_t, slv_port_axi_r_t) + `AXI_TYPEDEF_RESP_T(mst_port_axi_rsp_t, mst_port_axi_b_t, mst_port_axi_r_t) - mst_req_t [Cfg.NoMstPorts-1:0] mst_reqs; - mst_resp_t [Cfg.NoMstPorts-1:0] mst_resps; - slv_req_t [Cfg.NoSlvPorts-1:0] slv_reqs; - slv_resp_t [Cfg.NoSlvPorts-1:0] slv_resps; + slv_port_axi_req_t [NumSlvPorts-1:0] slv_reqs; + slv_port_axi_rsp_t [NumSlvPorts-1:0] slv_rsps; + mst_port_axi_req_t [NumMstPorts-1:0] mst_reqs; + mst_port_axi_rsp_t [NumMstPorts-1:0] mst_rsps; - for (genvar i = 0; i < Cfg.NoMstPorts; i++) begin : gen_assign_mst - `AXI_ASSIGN_FROM_REQ(mst_ports[i], mst_reqs[i]) - `AXI_ASSIGN_TO_RESP(mst_resps[i], mst_ports[i]) + for (genvar i = 0; unsigned'(i) < NumSlvPorts; i++) begin : gen_assign_slv + `AXI_ASSIGN_TO_REQ(slv_reqs[i], slv_ports[i]) + `AXI_ASSIGN_FROM_RESP(slv_ports[i], slv_rsps[i]) end - for (genvar i = 0; i < Cfg.NoSlvPorts; i++) begin : gen_assign_slv - `AXI_ASSIGN_TO_REQ(slv_reqs[i], slv_ports[i]) - `AXI_ASSIGN_FROM_RESP(slv_ports[i], slv_resps[i]) + for (genvar i = 0; unsigned'(i) < NumMstPorts; i++) begin : gen_assign_mst + `AXI_ASSIGN_FROM_REQ(mst_ports[i], mst_reqs[i]) + `AXI_ASSIGN_TO_RESP(mst_rsps[i], mst_ports[i]) end axi_xbar #( - .Cfg (Cfg), - .slv_aw_chan_t ( slv_aw_chan_t ), - .mst_aw_chan_t ( mst_aw_chan_t ), - .w_chan_t ( w_chan_t ), - .slv_b_chan_t ( slv_b_chan_t ), - .mst_b_chan_t ( mst_b_chan_t ), - .slv_ar_chan_t ( slv_ar_chan_t ), - .mst_ar_chan_t ( mst_ar_chan_t ), - .slv_r_chan_t ( slv_r_chan_t ), - .mst_r_chan_t ( mst_r_chan_t ), - .slv_req_t ( slv_req_t ), - .slv_resp_t ( slv_resp_t ), - .mst_req_t ( mst_req_t ), - .mst_resp_t ( mst_resp_t ), - .rule_t ( rule_t ) + .NumSlvPorts ( NumSlvPorts ), + .NumMstPorts ( NumMstPorts ), + .SlvPortIdWidth ( SlvPortIdWidth ), + .SlvPortIdWidthUsed ( SlvPortIdWidthUsed ), + .AddrWidth ( AddrWidth ), + .DataWidth ( DataWidth ), + .UserWidth ( UserWidth ), + .SlvPortMaxTxns ( SlvPortMaxTxns ), + .MstPortMaxTxns ( MstPortMaxTxns ), + .FallThrough ( FallThrough ), + .LatencyMode ( LatencyMode ), + .NumAddrRules ( NumAddrRules ), + .EnableAtops ( EnableAtops ), + .slv_port_axi_req_t ( slv_port_axi_req_t ), + .slv_port_axi_rsp_t ( slv_port_axi_rsp_t ), + .mst_port_axi_req_t ( mst_port_axi_req_t ), + .mst_port_axi_rsp_t ( mst_port_axi_rsp_t ), + .rule_t ( rule_t ) ) i_xbar ( .clk_i, .rst_ni, .test_i, - .slv_ports_req_i (slv_reqs ), - .slv_ports_resp_o (slv_resps), - .mst_ports_req_o (mst_reqs ), - .mst_ports_resp_i (mst_resps), + .slv_ports_req_i ( slv_reqs ), + .slv_ports_rsp_o ( slv_rsps ), + .mst_ports_req_o ( mst_reqs ), + .mst_ports_rsp_i ( mst_rsps ), .addr_map_i, .en_default_mst_port_i, - .default_mst_port_i + .default_mst_ports_i ); - endmodule From 0c185b9db3c192adcc17493167ee57015eebf07c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20R=C3=B6nninger?= Date: Mon, 25 Jan 2021 15:56:22 +0100 Subject: [PATCH 07/11] axi_xbar:test: Update according to changed parameters and ports --- scripts/run_vsim.sh | 17 ++- test/tb_axi_xbar.sv | 235 ++++++++++------------------------- test/tb_axi_xbar_pkg.sv | 264 ++++++++++++++++++++-------------------- 3 files changed, 204 insertions(+), 312 deletions(-) diff --git a/scripts/run_vsim.sh b/scripts/run_vsim.sh index f31828097..7546e8d3f 100755 --- a/scripts/run_vsim.sh +++ b/scripts/run_vsim.sh @@ -110,16 +110,13 @@ exec_test() { for MST_ID_USE in 3 5; do MST_ID=5 for DATA_WIDTH in 64 256; do - for PIPE in 0 1; do - call_vsim tb_axi_xbar -t 1ns -voptargs="+acc" \ - -gTbNumMasters=$NUM_MST \ - -gTbNumSlaves=$NUM_SLV \ - -gTbAxiIdWidthMasters=$MST_ID \ - -gTbAxiIdUsed=$MST_ID_USE \ - -gTbAxiDataWidth=$DATA_WIDTH \ - -gTbPipeline=$PIPE \ - -gTbEnAtop=$GEN_ATOP - done + call_vsim tb_axi_xbar -t 1ns -voptargs="+acc" \ + -gTbNumMasters=$NUM_MST \ + -gTbNumSlaves=$NUM_SLV \ + -gTbAxiIdWidthMasters=$MST_ID \ + -gTbAxiIdUsed=$MST_ID_USE \ + -gTbAxiDataWidth=$DATA_WIDTH \ + -gTbEnableAtops=$GEN_ATOP done done done diff --git a/test/tb_axi_xbar.sv b/test/tb_axi_xbar.sv index 75795cc8c..8699664b6 100644 --- a/test/tb_axi_xbar.sv +++ b/test/tb_axi_xbar.sv @@ -40,10 +40,8 @@ module tb_axi_xbar #( parameter int unsigned TbAxiIdUsed = 32'd3, /// Data width of the AXI channels. parameter int unsigned TbAxiDataWidth = 32'd64, - /// Pipeline stages in the xbar itself. (Between Demux and mux) - parameter int unsigned TbPipeline = 32'd1, /// Eanable ATOP generation - parameter bit TbEnAtop = 1'b1 + parameter bit TbEnableAtops = 1'b1 ); // TB timing parameters @@ -55,26 +53,20 @@ module tb_axi_xbar #( localparam int unsigned TbAxiIdWidthSlaves = TbAxiIdWidthMasters + $clog2(TbNumMasters); localparam int unsigned TbAxiAddrWidth = 32'd32; localparam int unsigned TbAxiStrbWidth = TbAxiDataWidth / 8; - localparam int unsigned TbAxiUserWidth = 5; - // In the bench can change this variables which are set here freely, - localparam axi_pkg::xbar_cfg_t xbar_cfg = '{ - NoSlvPorts: TbNumMasters, - NoMstPorts: TbNumSlaves, - MaxMstTrans: 10, - MaxSlvTrans: 6, - FallThrough: 1'b0, - LatencyMode: axi_pkg::CUT_ALL_AX, - PipelineStages: TbPipeline, - AxiIdWidthSlvPorts: TbAxiIdWidthMasters, - AxiIdUsedSlvPorts: TbAxiIdUsed, - AxiAddrWidth: TbAxiAddrWidth, - AxiDataWidth: TbAxiDataWidth, - NoAddrRules: TbNumSlaves - }; + localparam int unsigned TbAxiUserWidth = 32'd5; + // In the bench can change these variables which are set here freely, + // Set all XBAR parameter here, even if they do not change per default. + // Makes sure that they are properly propageted through the interface wrapper. + localparam int unsigned TbSlvPortMaxTxns = 32'd10; + localparam int unsigned TbMstPortMaxTxns = 32'd6; + localparam int unsigned TbFallThrough = 1'b0; + localparam int unsigned TbLatencyMode = axi_pkg::NO_LATENCY; + localparam int unsigned TbNumAddrRules = TbNumSlaves; + typedef logic [TbAxiIdWidthMasters-1:0] id_mst_t; typedef logic [TbAxiIdWidthSlaves-1:0] id_slv_t; typedef logic [TbAxiAddrWidth-1:0] addr_t; - typedef axi_pkg::xbar_rule_32_t rule_t; // Has to be the same width as axi addr + typedef axi_pkg::xbar_rule_32_t tb_addr_rule_t; // Has to be the same width as axi addr typedef logic [TbAxiDataWidth-1:0] data_t; typedef logic [TbAxiStrbWidth-1:0] strb_t; typedef logic [TbAxiUserWidth-1:0] user_t; @@ -96,11 +88,11 @@ module tb_axi_xbar #( `AXI_TYPEDEF_RESP_T(slv_resp_t, b_chan_slv_t, r_chan_slv_t) // Each slave has its own address range: - localparam rule_t [xbar_cfg.NoAddrRules-1:0] AddrMap = addr_map_gen(); + localparam tb_addr_rule_t [TbNumAddrRules-1:0] AddrMap = addr_map_gen(); - function rule_t [xbar_cfg.NoAddrRules-1:0] addr_map_gen (); - for (int unsigned i = 0; i < xbar_cfg.NoAddrRules; i++) begin - addr_map_gen[i] = rule_t'{ + function tb_addr_rule_t [TbNumAddrRules-1:0] addr_map_gen (); + for (int unsigned i = 0; i < TbNumAddrRules; i++) begin + addr_map_gen[i] = tb_addr_rule_t'{ idx: unsigned'(i), start_addr: i * 32'h0000_2000, end_addr: (i+1) * 32'h0000_2000, @@ -121,7 +113,7 @@ module tb_axi_xbar #( // Maximum number of read and write transactions in flight .MAX_READ_TXNS ( 20 ), .MAX_WRITE_TXNS ( 20 ), - .AXI_ATOPS ( TbEnAtop ) + .AXI_ATOPS ( TbEnableAtops ) ) axi_rand_master_t; typedef axi_test::axi_rand_slave #( // AXI interface parameters @@ -158,23 +150,24 @@ module tb_axi_xbar #( .AXI_DATA_WIDTH ( TbAxiDataWidth ), .AXI_ID_WIDTH ( TbAxiIdWidthMasters ), .AXI_USER_WIDTH ( TbAxiUserWidth ) - ) master [TbNumMasters-1:0] (); + ) master [TbNumMasters] (); AXI_BUS_DV #( .AXI_ADDR_WIDTH ( TbAxiAddrWidth ), .AXI_DATA_WIDTH ( TbAxiDataWidth ), .AXI_ID_WIDTH ( TbAxiIdWidthMasters ), .AXI_USER_WIDTH ( TbAxiUserWidth ) - ) master_dv [TbNumMasters-1:0] (clk); + ) master_dv [TbNumMasters] (clk); AXI_BUS_DV #( .AXI_ADDR_WIDTH ( TbAxiAddrWidth ), .AXI_DATA_WIDTH ( TbAxiDataWidth ), .AXI_ID_WIDTH ( TbAxiIdWidthMasters ), .AXI_USER_WIDTH ( TbAxiUserWidth ) - ) master_monitor_dv [TbNumMasters-1:0] (clk); - for (genvar i = 0; i < TbNumMasters; i++) begin : gen_conn_dv_masters + ) master_monitor_dv [TbNumMasters] (clk); + for (genvar i = 0; unsigned'(i) < TbNumMasters; i++) begin : gen_conn_dv_masters `AXI_ASSIGN (master[i], master_dv[i]) + `AXI_ASSIGN_MONITOR(master_monitor_dv[i], master[i]) `AXI_ASSIGN_TO_REQ(masters_req[i], master[i]) - `AXI_ASSIGN_FROM_RESP(master[i], masters_resp[i]) + `AXI_ASSIGN_TO_RESP(masters_resp[i], master[i]) end AXI_BUS #( @@ -182,34 +175,35 @@ module tb_axi_xbar #( .AXI_DATA_WIDTH ( TbAxiDataWidth ), .AXI_ID_WIDTH ( TbAxiIdWidthSlaves ), .AXI_USER_WIDTH ( TbAxiUserWidth ) - ) slave [TbNumSlaves-1:0] (); + ) slave [TbNumSlaves] (); AXI_BUS_DV #( .AXI_ADDR_WIDTH ( TbAxiAddrWidth ), .AXI_DATA_WIDTH ( TbAxiDataWidth ), .AXI_ID_WIDTH ( TbAxiIdWidthSlaves ), .AXI_USER_WIDTH ( TbAxiUserWidth ) - ) slave_dv [TbNumSlaves-1:0](clk); + ) slave_dv [TbNumSlaves](clk); AXI_BUS_DV #( .AXI_ADDR_WIDTH ( TbAxiAddrWidth ), .AXI_DATA_WIDTH ( TbAxiDataWidth ), .AXI_ID_WIDTH ( TbAxiIdWidthSlaves ), .AXI_USER_WIDTH ( TbAxiUserWidth ) - ) slave_monitor_dv [TbNumSlaves-1:0](clk); - for (genvar i = 0; i < TbNumSlaves; i++) begin : gen_conn_dv_slaves + ) slave_monitor_dv [TbNumSlaves](clk); + for (genvar i = 0; unsigned'(i) < TbNumSlaves; i++) begin : gen_conn_dv_slaves `AXI_ASSIGN(slave_dv[i], slave[i]) - `AXI_ASSIGN_FROM_REQ(slave[i], slaves_req[i]) + `AXI_ASSIGN_MONITOR(slave_monitor_dv[i], slave[i]) + `AXI_ASSIGN_TO_REQ(slaves_req[i], slave[i]) `AXI_ASSIGN_TO_RESP(slaves_resp[i], slave[i]) end // ------------------------------- // AXI Rand Masters and Slaves // ------------------------------- // Masters control simulation run time - for (genvar i = 0; i < TbNumMasters; i++) begin : gen_rand_master + for (genvar i = 0; unsigned'(i) < TbNumMasters; i++) begin : gen_rand_master initial begin static axi_rand_master_t axi_rand_master = new ( master_dv[i] ); end_of_sim[i] <= 1'b0; axi_rand_master.add_memory_region(AddrMap[0].start_addr, - AddrMap[xbar_cfg.NoAddrRules-1].end_addr, + AddrMap[TbNumAddrRules-1].end_addr, axi_pkg::DEVICE_NONBUFFERABLE); axi_rand_master.reset(); @(posedge rst_n); @@ -218,7 +212,7 @@ module tb_axi_xbar #( end end - for (genvar i = 0; i < TbNumSlaves; i++) begin : gen_rand_slave + for (genvar i = 0; unsigned'(i) < TbNumSlaves; i++) begin : gen_rand_slave initial begin static axi_rand_slave_t axi_rand_slave = new( slave_dv[i] ); axi_rand_slave.reset(); @@ -229,23 +223,23 @@ module tb_axi_xbar #( initial begin : proc_monitor static tb_axi_xbar_pkg::axi_xbar_monitor #( - .AxiAddrWidth ( TbAxiAddrWidth ), - .AxiDataWidth ( TbAxiDataWidth ), - .AxiIdWidthMasters ( TbAxiIdWidthMasters ), - .AxiIdWidthSlaves ( TbAxiIdWidthSlaves ), - .AxiUserWidth ( TbAxiUserWidth ), - .NoMasters ( TbNumMasters ), - .NoSlaves ( TbNumSlaves ), - .NoAddrRules ( xbar_cfg.NoAddrRules ), - .rule_t ( rule_t ), - .AddrMap ( AddrMap ), - .TimeTest ( TestTime ) + .AddrWidth ( TbAxiAddrWidth ), + .DataWidth ( TbAxiDataWidth ), + .SlvPortIdWidth ( TbAxiIdWidthMasters ), + .MstPortIdWidth ( TbAxiIdWidthSlaves ), + .UserWidth ( TbAxiUserWidth ), + .NumSlvPorts ( TbNumMasters ), + .NumMstPorts ( TbNumSlaves ), + .NumAddrRules ( TbNumAddrRules ), + .rule_t ( tb_addr_rule_t ), + .AddrMap ( AddrMap ), + .TestTime ( TestTime ) ) monitor = new( master_monitor_dv, slave_monitor_dv ); fork monitor.run(); do begin #TestTime; - if(end_of_sim == '1) begin + if (end_of_sim == '1) begin monitor.print_result(); $stop(); end @@ -268,37 +262,34 @@ module tb_axi_xbar #( //----------------------------------- // DUT //----------------------------------- - axi_xbar #( - .Cfg ( xbar_cfg ), - .slv_aw_chan_t( aw_chan_mst_t ), - .mst_aw_chan_t( aw_chan_slv_t ), - .w_chan_t ( w_chan_t ), - .slv_b_chan_t ( b_chan_mst_t ), - .mst_b_chan_t ( b_chan_slv_t ), - .slv_ar_chan_t( ar_chan_mst_t ), - .mst_ar_chan_t( ar_chan_slv_t ), - .slv_r_chan_t ( r_chan_mst_t ), - .mst_r_chan_t ( r_chan_slv_t ), - .slv_req_t ( mst_req_t ), - .slv_resp_t ( mst_resp_t ), - .mst_req_t ( slv_req_t ), - .mst_resp_t ( slv_resp_t ), - .rule_t ( rule_t ) + axi_xbar_intf #( + .NumSlvPorts ( TbNumMasters ), + .NumMstPorts ( TbNumSlaves ), + .SlvPortIdWidth ( TbAxiIdWidthMasters ), + .SlvPortIdWidthUsed ( TbAxiIdUsed ), + .AddrWidth ( TbAxiAddrWidth ), + .DataWidth ( TbAxiDataWidth ), + .UserWidth ( TbAxiUserWidth ), + .SlvPortMaxTxns ( TbSlvPortMaxTxns ), + .MstPortMaxTxns ( TbMstPortMaxTxns ), + .FallThrough ( TbFallThrough ), + .LatencyMode ( TbLatencyMode ), + .NumAddrRules ( TbNumAddrRules ), + .EnableAtops ( TbEnableAtops ), + .rule_t ( tb_addr_rule_t ) ) i_xbar_dut ( .clk_i ( clk ), .rst_ni ( rst_n ), .test_i ( 1'b0 ), - .slv_ports_req_i ( masters_req ), - .slv_ports_resp_o ( masters_resp ), - .mst_ports_req_o ( slaves_req ), - .mst_ports_resp_i ( slaves_resp ), + .slv_ports ( master ), + .mst_ports ( slave ), .addr_map_i ( AddrMap ), .en_default_mst_port_i ( '0 ), - .default_mst_port_i ( '0 ) + .default_mst_ports_i ( '0 ) ); // logger for master modules - for (genvar i = 0; i < TbNumMasters; i++) begin : gen_master_logger + for (genvar i = 0; unsigned'(i) < TbNumMasters; i++) begin : gen_master_logger axi_chan_logger #( .TestTime ( TestTime ), // Time after clock, where sampling happens .LoggerName( $sformatf("axi_logger_master_%0d", i)), @@ -334,7 +325,7 @@ module tb_axi_xbar #( ); end // logger for slave modules - for (genvar i = 0; i < TbNumSlaves; i++) begin : gen_slave_logger + for (genvar i = 0; unsigned'(i) < TbNumSlaves; i++) begin : gen_slave_logger axi_chan_logger #( .TestTime ( TestTime ), // Time after clock, where sampling happens .LoggerName( $sformatf("axi_logger_slave_%0d",i)), @@ -369,100 +360,4 @@ module tb_axi_xbar #( .r_ready_i ( slaves_req[i].r_ready ) ); end - - - for (genvar i = 0; i < TbNumMasters; i++) begin : gen_connect_master_monitor - assign master_monitor_dv[i].aw_id = master[i].aw_id ; - assign master_monitor_dv[i].aw_addr = master[i].aw_addr ; - assign master_monitor_dv[i].aw_len = master[i].aw_len ; - assign master_monitor_dv[i].aw_size = master[i].aw_size ; - assign master_monitor_dv[i].aw_burst = master[i].aw_burst ; - assign master_monitor_dv[i].aw_lock = master[i].aw_lock ; - assign master_monitor_dv[i].aw_cache = master[i].aw_cache ; - assign master_monitor_dv[i].aw_prot = master[i].aw_prot ; - assign master_monitor_dv[i].aw_qos = master[i].aw_qos ; - assign master_monitor_dv[i].aw_region = master[i].aw_region; - assign master_monitor_dv[i].aw_atop = master[i].aw_atop ; - assign master_monitor_dv[i].aw_user = master[i].aw_user ; - assign master_monitor_dv[i].aw_valid = master[i].aw_valid ; - assign master_monitor_dv[i].aw_ready = master[i].aw_ready ; - assign master_monitor_dv[i].w_data = master[i].w_data ; - assign master_monitor_dv[i].w_strb = master[i].w_strb ; - assign master_monitor_dv[i].w_last = master[i].w_last ; - assign master_monitor_dv[i].w_user = master[i].w_user ; - assign master_monitor_dv[i].w_valid = master[i].w_valid ; - assign master_monitor_dv[i].w_ready = master[i].w_ready ; - assign master_monitor_dv[i].b_id = master[i].b_id ; - assign master_monitor_dv[i].b_resp = master[i].b_resp ; - assign master_monitor_dv[i].b_user = master[i].b_user ; - assign master_monitor_dv[i].b_valid = master[i].b_valid ; - assign master_monitor_dv[i].b_ready = master[i].b_ready ; - assign master_monitor_dv[i].ar_id = master[i].ar_id ; - assign master_monitor_dv[i].ar_addr = master[i].ar_addr ; - assign master_monitor_dv[i].ar_len = master[i].ar_len ; - assign master_monitor_dv[i].ar_size = master[i].ar_size ; - assign master_monitor_dv[i].ar_burst = master[i].ar_burst ; - assign master_monitor_dv[i].ar_lock = master[i].ar_lock ; - assign master_monitor_dv[i].ar_cache = master[i].ar_cache ; - assign master_monitor_dv[i].ar_prot = master[i].ar_prot ; - assign master_monitor_dv[i].ar_qos = master[i].ar_qos ; - assign master_monitor_dv[i].ar_region = master[i].ar_region; - assign master_monitor_dv[i].ar_user = master[i].ar_user ; - assign master_monitor_dv[i].ar_valid = master[i].ar_valid ; - assign master_monitor_dv[i].ar_ready = master[i].ar_ready ; - assign master_monitor_dv[i].r_id = master[i].r_id ; - assign master_monitor_dv[i].r_data = master[i].r_data ; - assign master_monitor_dv[i].r_resp = master[i].r_resp ; - assign master_monitor_dv[i].r_last = master[i].r_last ; - assign master_monitor_dv[i].r_user = master[i].r_user ; - assign master_monitor_dv[i].r_valid = master[i].r_valid ; - assign master_monitor_dv[i].r_ready = master[i].r_ready ; - end - for (genvar i = 0; i < TbNumSlaves; i++) begin : gen_connect_slave_monitor - assign slave_monitor_dv[i].aw_id = slave[i].aw_id ; - assign slave_monitor_dv[i].aw_addr = slave[i].aw_addr ; - assign slave_monitor_dv[i].aw_len = slave[i].aw_len ; - assign slave_monitor_dv[i].aw_size = slave[i].aw_size ; - assign slave_monitor_dv[i].aw_burst = slave[i].aw_burst ; - assign slave_monitor_dv[i].aw_lock = slave[i].aw_lock ; - assign slave_monitor_dv[i].aw_cache = slave[i].aw_cache ; - assign slave_monitor_dv[i].aw_prot = slave[i].aw_prot ; - assign slave_monitor_dv[i].aw_qos = slave[i].aw_qos ; - assign slave_monitor_dv[i].aw_region = slave[i].aw_region; - assign slave_monitor_dv[i].aw_atop = slave[i].aw_atop ; - assign slave_monitor_dv[i].aw_user = slave[i].aw_user ; - assign slave_monitor_dv[i].aw_valid = slave[i].aw_valid ; - assign slave_monitor_dv[i].aw_ready = slave[i].aw_ready ; - assign slave_monitor_dv[i].w_data = slave[i].w_data ; - assign slave_monitor_dv[i].w_strb = slave[i].w_strb ; - assign slave_monitor_dv[i].w_last = slave[i].w_last ; - assign slave_monitor_dv[i].w_user = slave[i].w_user ; - assign slave_monitor_dv[i].w_valid = slave[i].w_valid ; - assign slave_monitor_dv[i].w_ready = slave[i].w_ready ; - assign slave_monitor_dv[i].b_id = slave[i].b_id ; - assign slave_monitor_dv[i].b_resp = slave[i].b_resp ; - assign slave_monitor_dv[i].b_user = slave[i].b_user ; - assign slave_monitor_dv[i].b_valid = slave[i].b_valid ; - assign slave_monitor_dv[i].b_ready = slave[i].b_ready ; - assign slave_monitor_dv[i].ar_id = slave[i].ar_id ; - assign slave_monitor_dv[i].ar_addr = slave[i].ar_addr ; - assign slave_monitor_dv[i].ar_len = slave[i].ar_len ; - assign slave_monitor_dv[i].ar_size = slave[i].ar_size ; - assign slave_monitor_dv[i].ar_burst = slave[i].ar_burst ; - assign slave_monitor_dv[i].ar_lock = slave[i].ar_lock ; - assign slave_monitor_dv[i].ar_cache = slave[i].ar_cache ; - assign slave_monitor_dv[i].ar_prot = slave[i].ar_prot ; - assign slave_monitor_dv[i].ar_qos = slave[i].ar_qos ; - assign slave_monitor_dv[i].ar_region = slave[i].ar_region; - assign slave_monitor_dv[i].ar_user = slave[i].ar_user ; - assign slave_monitor_dv[i].ar_valid = slave[i].ar_valid ; - assign slave_monitor_dv[i].ar_ready = slave[i].ar_ready ; - assign slave_monitor_dv[i].r_id = slave[i].r_id ; - assign slave_monitor_dv[i].r_data = slave[i].r_data ; - assign slave_monitor_dv[i].r_resp = slave[i].r_resp ; - assign slave_monitor_dv[i].r_last = slave[i].r_last ; - assign slave_monitor_dv[i].r_user = slave[i].r_user ; - assign slave_monitor_dv[i].r_valid = slave[i].r_valid ; - assign slave_monitor_dv[i].r_ready = slave[i].r_ready ; - end -endmodule +endmodule : tb_axi_xbar diff --git a/test/tb_axi_xbar_pkg.sv b/test/tb_axi_xbar_pkg.sv index d46a09515..26dd08856 100644 --- a/test/tb_axi_xbar_pkg.sv +++ b/test/tb_axi_xbar_pkg.sv @@ -19,81 +19,81 @@ package tb_axi_xbar_pkg; class axi_xbar_monitor #( - parameter int unsigned AxiAddrWidth, - parameter int unsigned AxiDataWidth, - parameter int unsigned AxiIdWidthMasters, - parameter int unsigned AxiIdWidthSlaves, - parameter int unsigned AxiUserWidth, - parameter int unsigned NoMasters, - parameter int unsigned NoSlaves, - parameter int unsigned NoAddrRules, + parameter int unsigned AddrWidth, + parameter int unsigned DataWidth, + parameter int unsigned SlvPortIdWidth, + parameter int unsigned MstPortIdWidth, + parameter int unsigned UserWidth, + parameter int unsigned NumSlvPorts, + parameter int unsigned NumMstPorts, + parameter int unsigned NumAddrRules, parameter type rule_t, - parameter rule_t [NoAddrRules-1:0] AddrMap, + parameter rule_t [NumAddrRules-1:0] AddrMap, // Stimuli application and test time - parameter time TimeTest + parameter time TestTime ); - typedef logic [AxiIdWidthMasters-1:0] mst_axi_id_t; - typedef logic [AxiIdWidthSlaves-1:0] slv_axi_id_t; - typedef logic [AxiAddrWidth-1:0] axi_addr_t; + typedef logic [SlvPortIdWidth-1:0] slv_port_axi_id_t; + typedef logic [MstPortIdWidth-1:0] mst_port_axi_id_t; + typedef logic [AddrWidth-1:0] axi_addr_t; - typedef logic [$clog2(NoMasters)-1:0] idx_mst_t; - typedef int unsigned idx_slv_t; // from rule_t + typedef logic [$clog2(NumSlvPorts)-1:0] idx_mst_t; // Index of conected master + typedef int unsigned idx_slv_t; // Connected salve index from rule_t typedef struct packed { - mst_axi_id_t mst_axi_id; - logic last; + slv_port_axi_id_t mst_axi_id; + logic last; } master_exp_t; typedef struct packed { - slv_axi_id_t slv_axi_id; - axi_addr_t slv_axi_addr; - axi_pkg::len_t slv_axi_len; + mst_port_axi_id_t slv_axi_id; + axi_addr_t slv_axi_addr; + axi_pkg::len_t slv_axi_len; } exp_ax_t; typedef struct packed { - slv_axi_id_t slv_axi_id; - logic last; + mst_port_axi_id_t slv_axi_id; + logic last; } slave_exp_t; typedef rand_id_queue_pkg::rand_id_queue #( - .data_t ( master_exp_t ), - .ID_WIDTH ( AxiIdWidthMasters ) + .data_t ( master_exp_t ), + .ID_WIDTH ( SlvPortIdWidth ) ) master_exp_queue_t; typedef rand_id_queue_pkg::rand_id_queue #( - .data_t ( exp_ax_t ), - .ID_WIDTH ( AxiIdWidthSlaves ) + .data_t ( exp_ax_t ), + .ID_WIDTH ( MstPortIdWidth ) ) ax_queue_t; typedef rand_id_queue_pkg::rand_id_queue #( - .data_t ( slave_exp_t ), - .ID_WIDTH ( AxiIdWidthSlaves ) + .data_t ( slave_exp_t ), + .ID_WIDTH ( MstPortIdWidth ) ) slave_exp_queue_t; //----------------------------------------- // Monitoring virtual interfaces //----------------------------------------- virtual AXI_BUS_DV #( - .AXI_ADDR_WIDTH ( AxiAddrWidth ), - .AXI_DATA_WIDTH ( AxiDataWidth ), - .AXI_ID_WIDTH ( AxiIdWidthMasters ), - .AXI_USER_WIDTH ( AxiUserWidth ) - ) masters_axi [NoMasters-1:0]; + .AXI_ADDR_WIDTH ( AddrWidth ), + .AXI_DATA_WIDTH ( DataWidth ), + .AXI_ID_WIDTH ( SlvPortIdWidth ), + .AXI_USER_WIDTH ( UserWidth ) + ) slv_ports[NumSlvPorts]; virtual AXI_BUS_DV #( - .AXI_ADDR_WIDTH ( AxiAddrWidth ), - .AXI_DATA_WIDTH ( AxiDataWidth ), - .AXI_ID_WIDTH ( AxiIdWidthSlaves ), - .AXI_USER_WIDTH ( AxiUserWidth ) - ) slaves_axi [NoSlaves-1:0]; + .AXI_ADDR_WIDTH ( AddrWidth ), + .AXI_DATA_WIDTH ( DataWidth ), + .AXI_ID_WIDTH ( MstPortIdWidth ), + .AXI_USER_WIDTH ( UserWidth ) + ) mst_ports[NumMstPorts]; //----------------------------------------- // Queues and FIFOs to hold the expected ids //----------------------------------------- // Write transactions - ax_queue_t exp_aw_queue [NoSlaves-1:0]; - slave_exp_t exp_w_fifo [NoSlaves-1:0][$]; - slave_exp_t act_w_fifo [NoSlaves-1:0][$]; - master_exp_queue_t exp_b_queue [NoMasters-1:0]; + ax_queue_t exp_aw_queue [NumMstPorts-1:0]; + slave_exp_t exp_w_fifo [NumMstPorts-1:0][$]; + slave_exp_t act_w_fifo [NumMstPorts-1:0][$]; + master_exp_queue_t exp_b_queue [NumSlvPorts-1:0]; // Read transactions - ax_queue_t exp_ar_queue [NoSlaves-1:0]; - master_exp_queue_t exp_r_queue [NoMasters-1:0]; + ax_queue_t exp_ar_queue [NumMstPorts-1:0]; + master_exp_queue_t exp_r_queue [NumSlvPorts-1:0]; //----------------------------------------- // Bookkeeping @@ -108,29 +108,29 @@ package tb_axi_xbar_pkg; //----------------------------------------- function new( virtual AXI_BUS_DV #( - .AXI_ADDR_WIDTH ( AxiAddrWidth ), - .AXI_DATA_WIDTH ( AxiDataWidth ), - .AXI_ID_WIDTH ( AxiIdWidthMasters ), - .AXI_USER_WIDTH ( AxiUserWidth ) - ) axi_masters_vif [NoMasters-1:0], + .AXI_ADDR_WIDTH ( AddrWidth ), + .AXI_DATA_WIDTH ( DataWidth ), + .AXI_ID_WIDTH ( SlvPortIdWidth ), + .AXI_USER_WIDTH ( UserWidth ) + ) slv_ports_vif[NumSlvPorts], virtual AXI_BUS_DV #( - .AXI_ADDR_WIDTH ( AxiAddrWidth ), - .AXI_DATA_WIDTH ( AxiDataWidth ), - .AXI_ID_WIDTH ( AxiIdWidthSlaves ), - .AXI_USER_WIDTH ( AxiUserWidth ) - ) axi_slaves_vif [NoSlaves-1:0] + .AXI_ADDR_WIDTH ( AddrWidth ), + .AXI_DATA_WIDTH ( DataWidth ), + .AXI_ID_WIDTH ( MstPortIdWidth ), + .AXI_USER_WIDTH ( UserWidth ) + ) mst_ports_vif[NumMstPorts] ); begin - this.masters_axi = axi_masters_vif; - this.slaves_axi = axi_slaves_vif; + this.slv_ports = slv_ports_vif; + this.mst_ports = mst_ports_vif; this.tests_expected = 0; this.tests_conducted = 0; this.tests_failed = 0; - for (int unsigned i = 0; i < NoMasters; i++) begin + for (int unsigned i = 0; i < NumSlvPorts; i++) begin this.exp_b_queue[i] = new; this.exp_r_queue[i] = new; end - for (int unsigned i = 0; i < NoSlaves; i++) begin + for (int unsigned i = 0; i < NumMstPorts; i++) begin this.exp_aw_queue[i] = new; this.exp_ar_queue[i] = new; end @@ -140,12 +140,12 @@ package tb_axi_xbar_pkg; // when start the testing task cycle_start; - #TimeTest; + #TestTime; endtask // when is cycle finished task cycle_end; - @(posedge masters_axi[0].clk_i); + @(posedge slv_ports[0].clk_i); endtask // This task monitors a slave ports of the crossbar. Every time an AW beat is seen @@ -155,50 +155,50 @@ package tb_axi_xbar_pkg; task automatic monitor_mst_aw(input int unsigned i); idx_slv_t to_slave_idx; exp_ax_t exp_aw; - slv_axi_id_t exp_aw_id; + mst_port_axi_id_t exp_aw_id; bit decerr; master_exp_t exp_b; - if (masters_axi[i].aw_valid && masters_axi[i].aw_ready) begin + if (slv_ports[i].aw_valid && slv_ports[i].aw_ready) begin // check if it should go to a decerror decerr = 1'b1; - for (int unsigned j = 0; j < NoAddrRules; j++) begin - if ((masters_axi[i].aw_addr >= AddrMap[j].start_addr) && - (masters_axi[i].aw_addr < AddrMap[j].end_addr)) begin + for (int unsigned j = 0; j < NumAddrRules; j++) begin + if ((slv_ports[i].aw_addr >= AddrMap[j].start_addr) && + (slv_ports[i].aw_addr < AddrMap[j].end_addr)) begin to_slave_idx = idx_slv_t'(AddrMap[j].idx); decerr = 1'b0; end end // send the exp aw beat down into the queue of the slave when no decerror if (!decerr) begin - exp_aw_id = {idx_mst_t'(i), masters_axi[i].aw_id}; + exp_aw_id = {idx_mst_t'(i), slv_ports[i].aw_id}; // $display("Test exp aw_id: %b",exp_aw_id); exp_aw = '{slv_axi_id: exp_aw_id, - slv_axi_addr: masters_axi[i].aw_addr, - slv_axi_len: masters_axi[i].aw_len }; + slv_axi_addr: slv_ports[i].aw_addr, + slv_axi_len: slv_ports[i].aw_len }; this.exp_aw_queue[to_slave_idx].push(exp_aw_id, exp_aw); incr_expected_tests(3); $display("%0tns > Master %0d: AW to Slave %0d: Axi ID: %b", - $time, i, to_slave_idx, masters_axi[i].aw_id); + $time, i, to_slave_idx, slv_ports[i].aw_id); end else begin $display("%0tns > Master %0d: AW to Decerror: Axi ID: %b", - $time, i, to_slave_idx, masters_axi[i].aw_id); + $time, i, to_slave_idx, slv_ports[i].aw_id); end // populate the expected b queue anyway - exp_b = '{mst_axi_id: masters_axi[i].aw_id, last: 1'b1}; - this.exp_b_queue[i].push(masters_axi[i].aw_id, exp_b); + exp_b = '{mst_axi_id: slv_ports[i].aw_id, last: 1'b1}; + this.exp_b_queue[i].push(slv_ports[i].aw_id, exp_b); incr_expected_tests(1); $display(" Expect B response."); // inject expected r beats on this id, if it is an atop - if(masters_axi[i].aw_atop[5]) begin + if(slv_ports[i].aw_atop[5]) begin // push the required r beats into the right fifo (reuse the exp_b variable) - $display(" Expect R response, len: %0d.", masters_axi[i].aw_len); - for (int unsigned j = 0; j <= masters_axi[i].aw_len; j++) begin - exp_b = (j == masters_axi[i].aw_len) ? - '{mst_axi_id: masters_axi[i].aw_id, last: 1'b1} : - '{mst_axi_id: masters_axi[i].aw_id, last: 1'b0}; - this.exp_r_queue[i].push(masters_axi[i].aw_id, exp_b); + $display(" Expect R response, len: %0d.", slv_ports[i].aw_len); + for (int unsigned j = 0; j <= slv_ports[i].aw_len; j++) begin + exp_b = (j == slv_ports[i].aw_len) ? + '{mst_axi_id: slv_ports[i].aw_id, last: 1'b1} : + '{mst_axi_id: slv_ports[i].aw_id, last: 1'b0}; + this.exp_r_queue[i].push(slv_ports[i].aw_id, exp_b); incr_expected_tests(1); end end @@ -212,34 +212,34 @@ package tb_axi_xbar_pkg; exp_ax_t exp_aw; slave_exp_t exp_slv_w; // $display("%0t > Was triggered: aw_valid %b, aw_ready: %b", - // $time(), slaves_axi[i].aw_valid, slaves_axi[i].aw_ready); - if (slaves_axi[i].aw_valid && slaves_axi[i].aw_ready) begin + // $time(), mst_ports[i].aw_valid, mst_ports[i].aw_ready); + if (mst_ports[i].aw_valid && mst_ports[i].aw_ready) begin // test if the aw beat was expected - exp_aw = this.exp_aw_queue[i].pop_id(slaves_axi[i].aw_id); + exp_aw = this.exp_aw_queue[i].pop_id(mst_ports[i].aw_id); $display("%0tns > Slave %0d: AW Axi ID: %b", - $time, i, slaves_axi[i].aw_id); - if (exp_aw.slv_axi_id != slaves_axi[i].aw_id) begin + $time, i, mst_ports[i].aw_id); + if (exp_aw.slv_axi_id != mst_ports[i].aw_id) begin incr_failed_tests(1); - $warning("Slave %0d: Unexpected AW with ID: %b", i, slaves_axi[i].aw_id); + $error("Slave %0d: Unexpected AW with ID: %b", i, mst_ports[i].aw_id); end - if (exp_aw.slv_axi_addr != slaves_axi[i].aw_addr) begin + if (exp_aw.slv_axi_addr != mst_ports[i].aw_addr) begin incr_failed_tests(1); - $warning("Slave %0d: Unexpected AW with ID: %b and ADDR: %h, exp: %h", - i, slaves_axi[i].aw_id, slaves_axi[i].aw_addr, exp_aw.slv_axi_addr); + $error("Slave %0d: Unexpected AW with ID: %b and ADDR: %h, exp: %h", + i, mst_ports[i].aw_id, mst_ports[i].aw_addr, exp_aw.slv_axi_addr); end - if (exp_aw.slv_axi_len != slaves_axi[i].aw_len) begin + if (exp_aw.slv_axi_len != mst_ports[i].aw_len) begin incr_failed_tests(1); - $warning("Slave %0d: Unexpected AW with ID: %b and LEN: %h, exp: %h", - i, slaves_axi[i].aw_id, slaves_axi[i].aw_len, exp_aw.slv_axi_len); + $error("Slave %0d: Unexpected AW with ID: %b and LEN: %h, exp: %h", + i, mst_ports[i].aw_id, mst_ports[i].aw_len, exp_aw.slv_axi_len); end incr_conducted_tests(3); // push the required w beats into the right fifo - incr_expected_tests(slaves_axi[i].aw_len + 1); - for (int unsigned j = 0; j <= slaves_axi[i].aw_len; j++) begin - exp_slv_w = (j == slaves_axi[i].aw_len) ? - '{slv_axi_id: slaves_axi[i].aw_id, last: 1'b1} : - '{slv_axi_id: slaves_axi[i].aw_id, last: 1'b0}; + incr_expected_tests(mst_ports[i].aw_len + 1); + for (int unsigned j = 0; j <= mst_ports[i].aw_len; j++) begin + exp_slv_w = (j == mst_ports[i].aw_len) ? + '{slv_axi_id: mst_ports[i].aw_id, last: 1'b1} : + '{slv_axi_id: mst_ports[i].aw_id, last: 1'b0}; this.exp_w_fifo[i].push_back(exp_slv_w); end end @@ -248,9 +248,9 @@ package tb_axi_xbar_pkg; // This task just pushes every W beat that gets sent on a master port in its respective fifo. task automatic monitor_slv_w(input int unsigned i); slave_exp_t act_slv_w; - if (slaves_axi[i].w_valid && slaves_axi[i].w_ready) begin - // $display("%0t > W beat on Slave %0d, last flag: %b", $time, i, slaves_axi[i].w_last); - act_slv_w = '{last: slaves_axi[i].w_last , default:'0}; + if (mst_ports[i].w_valid && mst_ports[i].w_ready) begin + // $display("%0t > W beat on Slave %0d, last flag: %b", $time, i, mst_ports[i].w_last); + act_slv_w = '{last: mst_ports[i].w_last , default:'0}; this.act_w_fifo[i].push_back(act_slv_w); end endtask : monitor_slv_w @@ -268,7 +268,7 @@ package tb_axi_xbar_pkg; incr_conducted_tests(1); if(exp_w.last != act_w.last) begin incr_failed_tests(1); - $warning("Slave %d: unexpected W beat last flag %b, expected: %b.", + $error("Slave %d: unexpected W beat last flag %b, expected: %b.", i, act_w.last, exp_w.last); end end @@ -277,20 +277,20 @@ package tb_axi_xbar_pkg; // This task checks if a B response is allowed on a slave port of the crossbar. task automatic monitor_mst_b(input int unsigned i); master_exp_t exp_b; - mst_axi_id_t axi_b_id; - if (masters_axi[i].b_valid && masters_axi[i].b_ready) begin + slv_port_axi_id_t axi_b_id; + if (slv_ports[i].b_valid && slv_ports[i].b_ready) begin incr_conducted_tests(1); - axi_b_id = masters_axi[i].b_id; + axi_b_id = slv_ports[i].b_id; $display("%0tns > Master %0d: Got last B with id: %b", $time, i, axi_b_id); if (this.exp_b_queue[i].empty()) begin incr_failed_tests(1); - $warning("Master %d: unexpected B beat with ID: %b detected!", i, axi_b_id); + $error("Master %d: unexpected B beat with ID: %b detected!", i, axi_b_id); end else begin exp_b = this.exp_b_queue[i].pop_id(axi_b_id); if (axi_b_id != exp_b.mst_axi_id) begin incr_failed_tests(1); - $warning("Master: %d got unexpected B with ID: %b", i, axi_b_id); + $error("Master: %d got unexpected B with ID: %b", i, axi_b_id); end end end @@ -301,25 +301,25 @@ package tb_axi_xbar_pkg; // Emphasis on the last flag. We will detect reordering, if the last flags do not match, // as each `random` burst tend to have a different length. task automatic monitor_mst_ar(input int unsigned i); - mst_axi_id_t mst_axi_id; + slv_port_axi_id_t mst_axi_id; axi_addr_t mst_axi_addr; axi_pkg::len_t mst_axi_len; idx_slv_t exp_slv_idx; - slv_axi_id_t exp_slv_axi_id; + mst_port_axi_id_t exp_slv_axi_id; exp_ax_t exp_slv_ar; master_exp_t exp_mst_r; logic exp_decerr; - if (masters_axi[i].ar_valid && masters_axi[i].ar_ready) begin + if (slv_ports[i].ar_valid && slv_ports[i].ar_ready) begin exp_decerr = 1'b1; - mst_axi_id = masters_axi[i].ar_id; - mst_axi_addr = masters_axi[i].ar_addr; - mst_axi_len = masters_axi[i].ar_len; + mst_axi_id = slv_ports[i].ar_id; + mst_axi_addr = slv_ports[i].ar_addr; + mst_axi_len = slv_ports[i].ar_len; exp_slv_axi_id = {idx_mst_t'(i), mst_axi_id}; exp_slv_idx = '0; - for (int unsigned j = 0; j < NoAddrRules; j++) begin + for (int unsigned j = 0; j < NumAddrRules; j++) begin if ((mst_axi_addr >= AddrMap[j].start_addr) && (mst_axi_addr < AddrMap[j].end_addr)) begin exp_slv_idx = AddrMap[j].idx; exp_decerr = 1'b0; @@ -340,7 +340,7 @@ package tb_axi_xbar_pkg; incr_expected_tests(1); end // push the required r beats into the right fifo - $display(" Expect R response, len: %0d.", masters_axi[i].ar_len); + $display(" Expect R response, len: %0d.", slv_ports[i].ar_len); for (int unsigned j = 0; j <= mst_axi_len; j++) begin exp_mst_r = (j == mst_axi_len) ? '{mst_axi_id: mst_axi_id, last: 1'b1} : '{mst_axi_id: mst_axi_id, last: 1'b0}; @@ -354,10 +354,10 @@ package tb_axi_xbar_pkg; // expected. task automatic monitor_slv_ar(input int unsigned i); exp_ax_t exp_slv_ar; - slv_axi_id_t slv_axi_id; - if (slaves_axi[i].ar_valid && slaves_axi[i].ar_ready) begin + mst_port_axi_id_t slv_axi_id; + if (mst_ports[i].ar_valid && mst_ports[i].ar_ready) begin incr_conducted_tests(1); - slv_axi_id = slaves_axi[i].ar_id; + slv_axi_id = mst_ports[i].ar_id; if (this.exp_ar_queue[i].empty()) begin incr_failed_tests(1); end else begin @@ -366,7 +366,7 @@ package tb_axi_xbar_pkg; $display("%0tns > Slave %0d: AR Axi ID: %b", $time, i, slv_axi_id); if (exp_slv_ar.slv_axi_id != slv_axi_id) begin incr_failed_tests(1); - $warning("Slave %d: Unexpected AR with ID: %b", i, slv_axi_id); + $error("Slave %d: Unexpected AR with ID: %b", i, slv_axi_id); end end end @@ -376,28 +376,28 @@ package tb_axi_xbar_pkg; // which are determined by the sequence of previously sent AR vectors. task automatic monitor_mst_r(input int unsigned i); master_exp_t exp_mst_r; - mst_axi_id_t mst_axi_r_id; + slv_port_axi_id_t mst_axi_r_id; logic mst_axi_r_last; - if (masters_axi[i].r_valid && masters_axi[i].r_ready) begin + if (slv_ports[i].r_valid && slv_ports[i].r_ready) begin incr_conducted_tests(1); - mst_axi_r_id = masters_axi[i].r_id; - mst_axi_r_last = masters_axi[i].r_last; + mst_axi_r_id = slv_ports[i].r_id; + mst_axi_r_last = slv_ports[i].r_last; if (mst_axi_r_last) begin $display("%0tns > Master %0d: Got last R with id: %b", $time, i, mst_axi_r_id); end if (this.exp_r_queue[i].empty()) begin incr_failed_tests(1); - $warning("Master %d: unexpected R beat with ID: %b detected!", i, mst_axi_r_id); + $error("Master %d: unexpected R beat with ID: %b detected!", i, mst_axi_r_id); end else begin exp_mst_r = this.exp_r_queue[i].pop_id(mst_axi_r_id); if (mst_axi_r_id != exp_mst_r.mst_axi_id) begin incr_failed_tests(1); - $warning("Master: %d got unexpected R with ID: %b", i, mst_axi_r_id); + $error("Master: %d got unexpected R with ID: %b", i, mst_axi_r_id); end if (mst_axi_r_last != exp_mst_r.last) begin incr_failed_tests(1); - $warning("Master: %d got unexpected R with ID: %b and last flag: %b", + $error("Master: %d got unexpected R with ID: %b and last flag: %b", i, mst_axi_r_id, mst_axi_r_last); end end @@ -436,48 +436,48 @@ package tb_axi_xbar_pkg; // execute all processes that put something into the queues PushMon: fork proc_mst_aw: begin - for (int unsigned i = 0; i < NoMasters; i++) begin + for (int unsigned i = 0; i < NumSlvPorts; i++) begin monitor_mst_aw(i); end end proc_mst_ar: begin - for (int unsigned i = 0; i < NoMasters; i++) begin + for (int unsigned i = 0; i < NumSlvPorts; i++) begin monitor_mst_ar(i); end end join : PushMon // this one pops and pushes something proc_slv_aw: begin - for (int unsigned i = 0; i < NoSlaves; i++) begin + for (int unsigned i = 0; i < NumMstPorts; i++) begin monitor_slv_aw(i); end end proc_slv_w: begin - for (int unsigned i = 0; i < NoSlaves; i++) begin + for (int unsigned i = 0; i < NumMstPorts; i++) begin monitor_slv_w(i); end end // These only pop somethong from the queses PopMon: fork proc_mst_b: begin - for (int unsigned i = 0; i < NoMasters; i++) begin + for (int unsigned i = 0; i < NumSlvPorts; i++) begin monitor_mst_b(i); end end proc_slv_ar: begin - for (int unsigned i = 0; i < NoSlaves; i++) begin + for (int unsigned i = 0; i < NumMstPorts; i++) begin monitor_slv_ar(i); end end proc_mst_r: begin - for (int unsigned i = 0; i < NoMasters; i++) begin + for (int unsigned i = 0; i < NumSlvPorts; i++) begin monitor_mst_r(i); end end join : PopMon // check the slave W fifos last proc_check_slv_w: begin - for (int unsigned i = 0; i < NoSlaves; i++) begin + for (int unsigned i = 0; i < NumMstPorts; i++) begin check_slv_w(i); end end From 0eec8a69af6cf1b2fc483ee177b73c04d99d548c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20R=C3=B6nninger?= Date: Tue, 26 Jan 2021 11:50:46 +0100 Subject: [PATCH 08/11] axi_xbar: Update inline documentation --- src/axi_xbar.sv | 244 ++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 203 insertions(+), 41 deletions(-) diff --git a/src/axi_xbar.sv b/src/axi_xbar.sv index 44ee6a070..f055a98a7 100644 --- a/src/axi_xbar.sv +++ b/src/axi_xbar.sv @@ -15,20 +15,152 @@ `include "axi/typedef.svh" -// axi_xbar: Fully-connected AXI4+ATOP crossbar with an arbitrary number of slave and master ports. -// See `doc/axi_xbar.md` for the documentation, including the definition of parameters and ports. +/// # AXI4+ATOP Fully-Connected Crossbar +/// +/// `axi_xbar` is a fully-connected crossbar that implements the full AXI4 specification plus atomic +/// operations (ATOPs) from AXI5 (E1.1). +/// +/// +/// ## Design Overview +/// +/// `axi_xbar` is a fully-connected crossbar, which means that each master module that is connected +/// to a *slave port* for of the crossbar has direct wires to all slave modules that are connected +/// to the *master ports* of the crossbar. +/// A block-diagram of the crossbar is shown below: +/// +/// ![Block-diagram showing the design of the full AXI4 Crossbar.](doc/axi_xbar.png +/// "Block-diagram showing the design of the full AXI4 Crossbar.") +/// +/// The crossbar has a configurable number of slave and master ports. +/// +/// The ID width of the master ports is **wider** than that of the slave ports. The additional ID +/// bits are used by the internal multiplexers to route responses. The ID width of the master ports +/// must be `AxiIdWidthSlvPorts + $clog_2(NoSlvPorts)`. +/// +/// +/// ## Address Map +/// +/// One address map is shared by all master ports. The *address map* contains an arbitrary number +/// of rules (but at least one). Each *rule* maps one address range to one master port. Multiple +/// rules can map to the same master port. The address ranges of two rules may overlap: in case two +/// address ranges overlap, the rule at the higher (more significant) position in the address map +/// prevails. +/// +/// Each address range includes the start address but does **not** include the end address. +/// That is, an address *matches* an address range if and only if +/// ``` +/// addr >= start_addr && addr < end_addr +/// ``` +/// The start address must be less than or equal to the end address. +/// +/// The address map can be defined and changed at run time (it is an input signal to the crossbar). +/// However, the address map must not be changed while any AW or AR channel of any slave port is +/// valid. +/// +/// [`addr_decode`](https://github.com/pulp-platform/common_cells/blob/master/src/addr_decode.sv) +/// module is used for decoding the address map. +/// +/// +/// ## Decode Errors and Default Slave Port +/// +/// Each slave port has its own internal *decode error slave* module. If the address of a +/// transaction does not match any rule, the transaction is routed to that decode error slave +/// module. That module absorbs each transaction and responds with a decode error (with the proper +/// number of beats). The data of each read response beat is `32'hBADCAB1E` (zero-extended or +/// truncated to match the data width). +/// +/// Each slave port can have a default master port. If the default master port is enabled for a +/// slave port, any address on that slave port that does not match any rule is routed to the default +/// master port instead of the decode error slave. The default master port can be enabled and +/// changed at run time (it is an input signal to the crossbar), and the same restrictions as for +/// the address map apply. +/// +/// +/// ## Ordering and Stalls +/// +/// When one slave port receives two transactions with the same ID and direction (i.e., both read or +/// both write) but targeting two different master ports, it will not accept the second transaction +/// until the first has completed. During this time, the crossbar stalls the AR or AW channel of +/// that slave port. To determine whether two transactions have the same ID, the +/// `AxiIdUsedSlvPorts` least-significant bits are compared. That parameter can be set to the full +/// `AxiIdWidthSlvPorts` to avoid false ID conflicts, or it can be set to a lower value to reduce +/// area and delay at the cost of more false conflicts. +/// +/// The reason for this ordering constraint is that AXI transactions with the same ID and direction +/// must remain ordered. If this crossbar would forward both transactions described above, the +/// second master port could get a response before the first one, and the crossbar would have to +/// reorder the responses before returning them on the master port. However, for efficiency +/// reasons, this crossbar does not have reorder buffers. +/// +/// +/// ## Verification Methodology +/// +/// This module has been verified with a directed random verification testbench, described and +/// implemented in [`tb_axi_xbar`](module.tb_axi_xbar) and +/// [`tb_axi_xbar_pkg`](package.tb_axi_xbar_pkg). +/// +/// +/// ## Design Rationale for No Pipelining Inside Crossbar +/// +/// Inserting spill registers between [`axi_demux`](module.axi_demux) and +/// [`axi_mux`](module.axi_mux) seems attractive to further reduce the length of combinatorial paths +/// in the crossbar. However, this can lead to deadlocks in the W channel where two different +/// [`axi_mux`](module.axi_mux) at the master ports would circular wait on two different +/// [`axi_demux`](module.axi_demux). In fact, spill registers between the switching modules causes +/// all four deadlock criteria to be met. Recall that the criteria are: +/// +/// 1. Mutual Exclusion +/// 2. Hold and Wait +/// 3. No Preemption +/// 4. Circular Wait +/// +/// The first criterion is given by the nature of a multiplexer on the W channel: all W beats have +/// to arrive in the same order as the AW beats regardless of the ID at the slave module. Thus, the +/// different master ports of the multiplexer exclude each other because the order is given by the +/// arbitration tree of the AW channel. +/// +/// The second and third criterion are inherent to the AXI protocol: For (2), the valid signal has +/// to be held high until the ready signal goes high. For (3), AXI does not allow interleaving of +/// W beats and requires W bursts to be in the same order as AW beats. +/// +/// The fourth criterion is thus the only one that can be broken to prevent deadlocks. However, +/// inserting a spill register between a master port of the [`axi_demux`](module.axi_demux) and a +/// slave port of the [[`axi_mux`](module.axi_mux) can lead to a circular dependency inside the +/// W FIFOs. This comes from the particular way the round robin arbiter from the AW channel in the +/// multiplexer defines its priorities. It is constructed in a way by giving each of its slave +/// ports an increasing priority and then comparing pairwise down till a winner is chosen. When the +/// winner gets transferred, the priority state is advanced by one position, preventing starvation. +/// +/// The problem can be shown with an example. Assume an arbitration tree with 10 inputs. Two +/// requests want to be served in the same clock cycle. The one with the higher priority wins and +/// the priority state advances. In the next cycle again the same two inputs have a request +/// waiting. Again it is possible that the same port as last time wins as the priority shifted only +/// one position further. This can lead in conjunction with the other arbitration trees in the +/// other muxes of the crossbar to the circular dependencies inside the FIFOs. Removing the spill +/// register between the demultiplexer and multiplexer forces the switching decision into the +/// W FIFOs in the same clock cycle. This leads to a strict ordering of the switching decision, +/// thus preventing the circular wait. +/// module axi_xbar #( - /// Number of slave ports of the crossbar. - /// This many master modules are connected to it. + /// The number of AXI slave ports of the crossbar. + /// (In other words, how many AXI master modules can be attached). parameter int unsigned NumSlvPorts = 32'd0, - /// Number of master ports of the crossbar. - /// This many slave modules are connected to it. + /// The number of AXI master ports of the crossbar. + /// (In other words, how many AXI slave modules can be attached). parameter int unsigned NumMstPorts = 32'd0, - /// AXI ID width of the slave ports. The ID width of the master ports is determined - /// Automatically. See `axi_mux` for details. + /// AXI ID width of the slave ports. + /// + /// This parameter also determines the corresponding value for `MstPortIdWidth` . + /// Routing of responses is done by extending the ID by the index of the slave port witch accepted + /// the transaction. See [`axi_mux`](module.axi_mux) for details. parameter int unsigned SlvPortIdWidth = 32'd0, - /// The used ID portion to determine if a different salve is used for the same ID. - /// See `axi_demux` for details. + /// The number of slave port ID bits (starting at the least significant) the crossbar uses to + /// determine the uniqueness of an AXI ID (see section *Ordering and Stalls* above). + /// + /// This value *must* follow `SlvPortIdWidth >= SlvPortIdWidthUsed && SlvPortIdWidthUsed > 0`. + /// + /// Setting this to small values leads to less area, however on an increased stalling rate + /// due to ID collisions. parameter int unsigned SlvPortIdWidthUsed = 32'd0, /// AXI4+ATOP address field width. parameter int unsigned AddrWidth = 32'd0, @@ -36,44 +168,48 @@ module axi_xbar #( parameter int unsigned DataWidth = 32'd0, /// AXI4+ATOP user field width. parameter int unsigned UserWidth = 32'd0, - /// Maximum number of open transactions each master connected to the crossbar can have in - /// flight at the same time. + /// Maximum number of open transactions each master connected to the crossbar can have + /// [in flight](doc/#in-flight) at the same time. parameter int unsigned SlvPortMaxTxns = 32'd0, - /// Maximum number of open transactions each slave connected to the crossbar can have in - /// flight at the same time. + /// Maximum number of open transactions each slave connected to the crossbar can have + /// [in flight](../doc#in-flight) per ID at the same time. parameter int unsigned MstPortMaxTxns = 32'd0, - /// Determine if the internal FIFOs of the crossbar are instantiated in fallthrough mode. + /// Routing decisions on the AW channel fall through to the W channel. Enabling this allows the + /// crossbar to accept a W beat in the same cycle as the corresponding AW beat, but it increases + /// the combinatorial path of the W channel with logic from the AW channel. + /// + /// Setting this to `0` prevents logic on the AW channel from extending into the W channel. + /// /// 0: No fallthrough /// 1: Fallthrough parameter bit FallThrough = 32'd1, - /// The Latency mode of the xbar. This determines if the channels on the ports have - /// a spill register instantiated. - /// Example configurations are provided with the enum `xbar_latency_e`. + /// The `LatencyMode` parameter allows to insert spill registers after each channel + /// (AW, W, B, AR, and R) of each master port (i.e., each [`axi_mux`](module.axi_mux)) and before + /// each channel of each slave port (i.e., each [`axi_demux`](module.axi_demux)). + /// Spill registers cut combinatorial paths, so this parameter reduces the length of combinatorial + /// paths through the crossbar. + /// + /// Some common configurations are given in the [`xbar_latency_e` `enum`](package.axi_pkg). + /// The recommended configuration (`axi_pkg::CUT_ALL_AX`) is to have a latency of 2 on the AW and + /// AR channels because these channels have the most combinatorial logic on them. + /// Additionally, `FallThrough` should be set to `0` to prevent logic on the AW channel from + /// extending combinatorial paths on the W channel. However, it is possible to run the crossbar + /// in a fully combinatorial configuration by setting `LatencyMode` to `NO_LATENCY` and + /// `FallThrough` to `1`. + /// + /// If two crossbars are connected in both directions, meaning both have one of their master ports + /// connected to a slave port of the other, the `LatencyMode` of both crossbars must be set to + /// either `CUT_SLV_PORTS`, `CUT_MST_PORTS`, or `CUT_ALL_PORTS`. Any other latency mode will lead + /// to timing loops on the uncut channels between the two crossbars. The latency mode of the two + /// crossbars does not have to be identical. parameter axi_pkg::xbar_latency_e LatencyMode = axi_pkg::CUT_ALL_AX, /// The number of address rules defined for routing of the transactions. - /// Each master port can have multiple rules, should have however at least one. + /// Each master port can have multiple rules, should have however at least one or be the + /// *default master port* of at least one slave port. /// If a transaction can not be routed the xbar will answer with an `axi_pkg::RESP_DECERR`. parameter int unsigned NumAddrRules = 32'd0, /// Enable atomic operations support. parameter bit EnableAtops = 1'b1, - // /// AXI4+ATOP AW channel struct type for the slave ports. - // parameter type slv_aw_chan_t = logic, - // /// AXI4+ATOP AW channel struct type for the master ports. - // parameter type mst_aw_chan_t = logic, - // /// AXI4+ATOP W channel struct type for all ports. - // parameter type w_chan_t = logic, - // /// AXI4+ATOP B channel struct type for the slave ports. - // parameter type slv_b_chan_t = logic, - // /// AXI4+ATOP B channel struct type for the master ports. - // parameter type mst_b_chan_t = logic, - // /// AXI4+ATOP AR channel struct type for the slave ports. - // parameter type slv_ar_chan_t = logic, - // /// AXI4+ATOP AR channel struct type for the master ports. - // parameter type mst_ar_chan_t = logic, - // /// AXI4+ATOP R channel struct type for the slave ports. - // parameter type slv_r_chan_t = logic, - // /// AXI4+ATOP R channel struct type for the master ports. - // parameter type mst_r_chan_t = logic, /// AXI4+ATOP request struct type for a single slave port. parameter type slv_port_axi_req_t = logic, /// AXI4+ATOP response struct type for a single slave port. @@ -84,7 +220,7 @@ module axi_xbar #( parameter type mst_port_axi_rsp_t = logic, /// Address rule type for the address decoders from `common_cells:addr_decode`. /// - /// Example types are provided in `axi_pkg`. + /// Example types are provided in [`axi_pkg`](package.axi_pkg). /// /// Required struct fields: /// @@ -102,6 +238,8 @@ module axi_xbar #( parameter type default_mst_port_idx_t = logic [DefaultMstPortIdxWidth-1:0] ) ( /// Clock, positive edge triggered. + /// + /// All other signals (except `rst_ni`) are synchronous to this signal. input logic clk_i, /// Asynchronous reset, active low. input logic rst_ni, @@ -121,6 +259,7 @@ module axi_xbar #( input rule_t [NumAddrRules-1:0] addr_map_i, /// Enables a default master port for each slave port. When this is enabled unmapped /// transactions get issued at the master port given by `default_mst_port_i`. + /// Each bit index corresponds to the index of a master port and is ordered little-endian (downto). /// /// When not used, tie to `'0`. input logic [NumSlvPorts-1:0] en_default_mst_port_i, @@ -343,37 +482,60 @@ endmodule `include "axi/assign.svh" -/// This is the interface wrapper for `axi_xbar`. Ports and parameters are analog to `axxi_xbar`. +/// This is the interface wrapper for `axi_xbar`. Ports and parameters are analog to `axi_xbar`, +/// see [`axi_xbar` documentation](module.axi_xbar). /// The AXI4+ATOP master and slave ports are structured here as interfaces. -/// Indexing of the interface is big-endian. This module does the little-endian indexing -/// for the port structs. +/// +/// The indexing of the master and slave port interface arrays is big-endian. module axi_xbar_intf #( + /// See [`axi_xbar`](module.axi_xbar). parameter int unsigned NumSlvPorts = 32'd0, + /// See [`axi_xbar`](module.axi_xbar). parameter int unsigned NumMstPorts = 32'd0, + /// See [`axi_xbar`](module.axi_xbar). parameter int unsigned SlvPortIdWidth = 32'd0, + /// See [`axi_xbar`](module.axi_xbar). parameter int unsigned SlvPortIdWidthUsed = 32'd0, + /// See [`axi_xbar`](module.axi_xbar). parameter int unsigned AddrWidth = 32'd0, + /// See [`axi_xbar`](module.axi_xbar). parameter int unsigned DataWidth = 32'd0, + /// See [`axi_xbar`](module.axi_xbar). parameter int unsigned UserWidth = 32'd0, + /// See [`axi_xbar`](module.axi_xbar). parameter int unsigned SlvPortMaxTxns = 32'd0, + /// See [`axi_xbar`](module.axi_xbar). parameter int unsigned MstPortMaxTxns = 32'd0, + /// See [`axi_xbar`](module.axi_xbar). parameter bit FallThrough = 32'd1, + /// See [`axi_xbar`](module.axi_xbar). parameter axi_pkg::xbar_latency_e LatencyMode = axi_pkg::CUT_ALL_AX, + /// See [`axi_xbar`](module.axi_xbar). parameter int unsigned NumAddrRules = 32'd0, + /// See [`axi_xbar`](module.axi_xbar). parameter bit EnableAtops = 1'b1, + /// See [`axi_xbar`](module.axi_xbar). parameter type rule_t = axi_pkg::xbar_rule_64_t, /// Dependent parameter, do **not** override! parameter int unsigned DefaultMstPortIdxWidth = cf_math_pkg::idx_width(NumMstPorts), /// Dependent parameter, do **not**parameter override! parameter type default_mst_port_idx_t = logic [DefaultMstPortIdxWidth-1:0] ) ( + /// See [`axi_xbar`](module.axi_xbar). input logic clk_i, + /// See [`axi_xbar`](module.axi_xbar). input logic rst_ni, + /// See [`axi_xbar`](module.axi_xbar). input logic test_i, + /// Unpacked, big-endian (upto) array of slave port interfaces. AXI_BUS.Slave slv_ports[NumSlvPorts], + /// Unpacked, big-endian (upto) array of master port interfaces. AXI_BUS.Master mst_ports[NumMstPorts], + /// See [`axi_xbar`](module.axi_xbar). input rule_t [NumAddrRules-1:0] addr_map_i, + /// See [`axi_xbar`](module.axi_xbar). input logic [NumSlvPorts -1:0] en_default_mst_port_i, + /// See [`axi_xbar`](module.axi_xbar). input default_mst_port_idx_t [NumSlvPorts -1:0] default_mst_ports_i ); From 1bdf3ed8abcc65fbb75cd9db717a23e3d84ecee4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20R=C3=B6nninger?= Date: Mon, 1 Feb 2021 10:32:28 +0100 Subject: [PATCH 09/11] axi_xbar: Add suggestions from (#157) --- docs/axi_xbar.png | Bin 0 -> 173320 bytes docs/svg/axi_xbar.svg | 2334 +++++++++++++++++++++++++++++++++++++++++ src/axi_xbar.sv | 55 +- 3 files changed, 2351 insertions(+), 38 deletions(-) create mode 100644 docs/axi_xbar.png create mode 100644 docs/svg/axi_xbar.svg diff --git a/docs/axi_xbar.png b/docs/axi_xbar.png new file mode 100644 index 0000000000000000000000000000000000000000..0f5583270352c742ad0a116d2d31d60de0dd813e GIT binary patch literal 173320 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�Lftz9rd|7nxDV7bBtR-N-dozp7UB`sL_ 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + aw_addr + ar_addr + slv_port [3] + + + + + + + + + mst_port [3] + + + + + + + + + + + + + + + + + aw_addr + ar_addr + slv_port [2] + + + + + + + + + mst_port [2] + + + + axi_demux + + axi_decerr + + addr_decode + addr_decode + + + + + + + + + + + + + + + aw_addr + ar_addr + slv_port [1] + + + + + + + + + mst_port [1] + + + + axi_demux + + axi_decerr + + addr_decode + addr_decode + + + + + + + + + + + + + + + aw_addr + ar_addr + slv_port [0] + + + + + + + + mst_port [0] + + + + axi_demux + + axi_decerr + + addr_decode + addr_decode + + + + + + + + + + + + + + + + + addr_map + + + + + + + + + default_mst_port[3] + + + default_mst_port[2] + + + default_mst_port[1] + + + default_mst_port[0] + + + + + + + + + + + + + + + + + + + + + axi_demux + + axi_decerr + + addr_decode + addr_decode + + axi_mux + + axi_mux + + axi_mux + + axi_mux + + + + + + diff --git a/src/axi_xbar.sv b/src/axi_xbar.sv index f055a98a7..181fd1365 100644 --- a/src/axi_xbar.sv +++ b/src/axi_xbar.sv @@ -15,20 +15,17 @@ `include "axi/typedef.svh" -/// # AXI4+ATOP Fully-Connected Crossbar +/// Fully-connected crossbar that implements AXI4 plus atomic operations (ATOPs) from AXI5 (E1.1). /// -/// `axi_xbar` is a fully-connected crossbar that implements the full AXI4 specification plus atomic -/// operations (ATOPs) from AXI5 (E1.1). /// -/// -/// ## Design Overview +/// # Design Overview /// /// `axi_xbar` is a fully-connected crossbar, which means that each master module that is connected /// to a *slave port* for of the crossbar has direct wires to all slave modules that are connected /// to the *master ports* of the crossbar. /// A block-diagram of the crossbar is shown below: /// -/// ![Block-diagram showing the design of the full AXI4 Crossbar.](doc/axi_xbar.png +/// ![Block-diagram showing the design of the full AXI4 Crossbar.](docs/axi_xbar.png /// "Block-diagram showing the design of the full AXI4 Crossbar.") /// /// The crossbar has a configurable number of slave and master ports. @@ -38,7 +35,7 @@ /// must be `AxiIdWidthSlvPorts + $clog_2(NoSlvPorts)`. /// /// -/// ## Address Map +/// # Address Map /// /// One address map is shared by all master ports. The *address map* contains an arbitrary number /// of rules (but at least one). Each *rule* maps one address range to one master port. Multiple @@ -49,7 +46,7 @@ /// Each address range includes the start address but does **not** include the end address. /// That is, an address *matches* an address range if and only if /// ``` -/// addr >= start_addr && addr < end_addr +/// addr >= start_addr && addr < end_addr /// ``` /// The start address must be less than or equal to the end address. /// @@ -61,7 +58,7 @@ /// module is used for decoding the address map. /// /// -/// ## Decode Errors and Default Slave Port +/// # Decode Errors and Default Slave Port /// /// Each slave port has its own internal *decode error slave* module. If the address of a /// transaction does not match any rule, the transaction is routed to that decode error slave @@ -76,7 +73,7 @@ /// the address map apply. /// /// -/// ## Ordering and Stalls +/// # Ordering and Stalls /// /// When one slave port receives two transactions with the same ID and direction (i.e., both read or /// both write) but targeting two different master ports, it will not accept the second transaction @@ -93,14 +90,14 @@ /// reasons, this crossbar does not have reorder buffers. /// /// -/// ## Verification Methodology +/// # Verification Methodology /// /// This module has been verified with a directed random verification testbench, described and /// implemented in [`tb_axi_xbar`](module.tb_axi_xbar) and /// [`tb_axi_xbar_pkg`](package.tb_axi_xbar_pkg). /// /// -/// ## Design Rationale for No Pipelining Inside Crossbar +/// # Design Rationale for No Pipelining Inside Crossbar /// /// Inserting spill registers between [`axi_demux`](module.axi_demux) and /// [`axi_mux`](module.axi_mux) seems attractive to further reduce the length of combinatorial paths @@ -125,7 +122,7 @@ /// /// The fourth criterion is thus the only one that can be broken to prevent deadlocks. However, /// inserting a spill register between a master port of the [`axi_demux`](module.axi_demux) and a -/// slave port of the [[`axi_mux`](module.axi_mux) can lead to a circular dependency inside the +/// slave port of the [`axi_mux`](module.axi_mux) can lead to a circular dependency inside the /// W FIFOs. This comes from the particular way the round robin arbiter from the AW channel in the /// multiplexer defines its priorities. It is constructed in a way by giving each of its slave /// ports an increasing priority and then comparing pairwise down till a winner is chosen. When the @@ -168,10 +165,10 @@ module axi_xbar #( parameter int unsigned DataWidth = 32'd0, /// AXI4+ATOP user field width. parameter int unsigned UserWidth = 32'd0, - /// Maximum number of open transactions each master connected to the crossbar can have + /// Maximum number of open transactions each slave port of the crossbar can have /// [in flight](doc/#in-flight) at the same time. parameter int unsigned SlvPortMaxTxns = 32'd0, - /// Maximum number of open transactions each slave connected to the crossbar can have + /// Maximum number of open transactions each master port the crossbar can have /// [in flight](../doc#in-flight) per ID at the same time. parameter int unsigned MstPortMaxTxns = 32'd0, /// Routing decisions on the AW channel fall through to the W channel. Enabling this allows the @@ -224,20 +221,22 @@ module axi_xbar #( /// /// Required struct fields: /// + /// ```systemverilog /// typedef struct packed { /// int unsigned idx; /// axi_addr_t start_addr; /// axi_addr_t end_addr; /// } rule_t; + /// ``` parameter type rule_t = axi_pkg::xbar_rule_64_t, /// Dependent parameter, do **not** override! /// Width of the index specifying a master port. parameter int unsigned DefaultMstPortIdxWidth = cf_math_pkg::idx_width(NumMstPorts), - /// Dependent parameter, do **not**parameter override! + /// Dependent parameter, do **not** override! /// Type of index for a default master port. parameter type default_mst_port_idx_t = logic [DefaultMstPortIdxWidth-1:0] ) ( - /// Clock, positive edge triggered. + /// Clock, rising edge triggered. /// /// All other signals (except `rst_ni`) are synchronous to this signal. input logic clk_i, @@ -265,7 +264,7 @@ module axi_xbar #( input logic [NumSlvPorts-1:0] en_default_mst_port_i, /// For each slave port the default index where the transaction should be routed, if /// for this slave port the default index functionality is enabled by setting the - /// bit `en_default_mst_ports_i[slave_port_idx]` to `'1`. + /// bit `en_default_mst_ports_i[slave_port_idx]` to `1'b1`. /// /// When not used, tie to `'0`. input default_mst_port_idx_t [NumSlvPorts-1:0] default_mst_ports_i @@ -488,54 +487,34 @@ endmodule /// /// The indexing of the master and slave port interface arrays is big-endian. module axi_xbar_intf #( - /// See [`axi_xbar`](module.axi_xbar). parameter int unsigned NumSlvPorts = 32'd0, - /// See [`axi_xbar`](module.axi_xbar). parameter int unsigned NumMstPorts = 32'd0, - /// See [`axi_xbar`](module.axi_xbar). parameter int unsigned SlvPortIdWidth = 32'd0, - /// See [`axi_xbar`](module.axi_xbar). parameter int unsigned SlvPortIdWidthUsed = 32'd0, - /// See [`axi_xbar`](module.axi_xbar). parameter int unsigned AddrWidth = 32'd0, - /// See [`axi_xbar`](module.axi_xbar). parameter int unsigned DataWidth = 32'd0, - /// See [`axi_xbar`](module.axi_xbar). parameter int unsigned UserWidth = 32'd0, - /// See [`axi_xbar`](module.axi_xbar). parameter int unsigned SlvPortMaxTxns = 32'd0, - /// See [`axi_xbar`](module.axi_xbar). parameter int unsigned MstPortMaxTxns = 32'd0, - /// See [`axi_xbar`](module.axi_xbar). parameter bit FallThrough = 32'd1, - /// See [`axi_xbar`](module.axi_xbar). parameter axi_pkg::xbar_latency_e LatencyMode = axi_pkg::CUT_ALL_AX, - /// See [`axi_xbar`](module.axi_xbar). parameter int unsigned NumAddrRules = 32'd0, - /// See [`axi_xbar`](module.axi_xbar). parameter bit EnableAtops = 1'b1, - /// See [`axi_xbar`](module.axi_xbar). parameter type rule_t = axi_pkg::xbar_rule_64_t, /// Dependent parameter, do **not** override! parameter int unsigned DefaultMstPortIdxWidth = cf_math_pkg::idx_width(NumMstPorts), /// Dependent parameter, do **not**parameter override! parameter type default_mst_port_idx_t = logic [DefaultMstPortIdxWidth-1:0] ) ( - /// See [`axi_xbar`](module.axi_xbar). input logic clk_i, - /// See [`axi_xbar`](module.axi_xbar). input logic rst_ni, - /// See [`axi_xbar`](module.axi_xbar). input logic test_i, /// Unpacked, big-endian (upto) array of slave port interfaces. AXI_BUS.Slave slv_ports[NumSlvPorts], /// Unpacked, big-endian (upto) array of master port interfaces. AXI_BUS.Master mst_ports[NumMstPorts], - /// See [`axi_xbar`](module.axi_xbar). input rule_t [NumAddrRules-1:0] addr_map_i, - /// See [`axi_xbar`](module.axi_xbar). input logic [NumSlvPorts -1:0] en_default_mst_port_i, - /// See [`axi_xbar`](module.axi_xbar). input default_mst_port_idx_t [NumSlvPorts -1:0] default_mst_ports_i ); From 9326602f65678e68397e92b89510649ede29211c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20R=C3=B6nninger?= Date: Thu, 4 Feb 2021 10:13:48 +0100 Subject: [PATCH 10/11] axi_xbar: Fix picture link in inline doc --- src/axi_xbar.sv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/axi_xbar.sv b/src/axi_xbar.sv index 181fd1365..71ef29a82 100644 --- a/src/axi_xbar.sv +++ b/src/axi_xbar.sv @@ -25,7 +25,7 @@ /// to the *master ports* of the crossbar. /// A block-diagram of the crossbar is shown below: /// -/// ![Block-diagram showing the design of the full AXI4 Crossbar.](docs/axi_xbar.png +/// ![Block-diagram showing the design of the full AXI4 Crossbar.](axi_xbar.png /// "Block-diagram showing the design of the full AXI4 Crossbar.") /// /// The crossbar has a configurable number of slave and master ports. From 1927ea0fa86c3e78af6aff5647f09e0f70224015 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20R=C3=B6nninger?= Date: Thu, 4 Feb 2021 10:17:09 +0100 Subject: [PATCH 11/11] axi_xbar: Remove redundant documentation The documentation for `axi_xbar` is now auto generated from the source file. The diagram has been moved to docs:. It is no longer necessary to keep these files. --- CHANGELOG.md | 2 + doc/axi_xbar.md | 108 -- doc/axi_xbar.png | Bin 173320 -> 0 bytes doc/svg/axi_xbar.svg | 2334 ------------------------------------------ 4 files changed, 2 insertions(+), 2442 deletions(-) delete mode 100644 doc/axi_xbar.md delete mode 100644 doc/axi_xbar.png delete mode 100644 doc/svg/axi_xbar.svg diff --git a/CHANGELOG.md b/CHANGELOG.md index 036023536..855e62b19 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. with the new `PipelineRequest` and `PipelineResponse` `parameter`s), and disable those pipeline registers by default. - `axi_xbar`: Flatten and update parameter and ports according to (#153). Add inline documentation. + - Remove `doc/axi_xbar.md`. + - Move `doc/svg/axi_xbar.svg` and `doc/axi_xbar.png` to `docs/`. ### Fixed diff --git a/doc/axi_xbar.md b/doc/axi_xbar.md deleted file mode 100644 index 98770c533..000000000 --- a/doc/axi_xbar.md +++ /dev/null @@ -1,108 +0,0 @@ -# AXI4+ATOP Fully-Connected Crossbar - -`axi_xbar` is a fully-connected crossbar that implements the full AXI4 specification plus atomic operations (ATOPs) from AXI5. - - -## Design Overview - -`axi_xbar` is a fully-connected crossbar, which means that each master module that is connected to a *slave port* for of the crossbar has direct wires to all slave modules that are connected to the *master ports* of the crossbar. -A block-diagram of the crossbar is shown below: - -![Block-diagram showing the design of the full AXI4 Crossbar.](axi_xbar.png "Block-diagram showing the design of the full AXI4 Crossbar.") - -The crossbar has a configurable number of slave and master ports. - -The ID width of the master ports is wider than that of the slave ports. The additional ID bits are used by the internal multiplexers to route responses. The ID width of the master ports must be `AxiIdWidthSlvPorts + $clog_2(NoSlvPorts)`. - - -## Address Map - -One address map is shared by all master ports. The *address map* contains an arbitrary number of rules (but at least one). Each *rule* maps one address range to one master port. Multiple rules can map to the same master port. The address ranges of two rules may overlap: in case two address ranges overlap, the rule at the higher (more significant) position in the address map prevails. - -Each address range includes the start address but does **not** include the end address. That is, an address *matches* an address range if and only if -``` - addr >= start_addr && addr < end_addr -``` -The start address must be less than or equal to the end address. - -The address map can be defined and changed at run time (it is an input signal to the crossbar). However, the address map must not be changed while any AW or AR channel of any slave port is valid. - - -## Decode Errors and Default Slave Port - -Each slave port has its own internal *decode error slave* module. If the address of a transaction does not match any rule, the transaction is routed to that decode error slave module. That module absorbs each transaction and responds with a decode error (with the proper number of beats). The data of each read response beat is `32'hBADCAB1E` (zero-extended or truncated to match the data width). - -Each slave port can have a default master port. If the default master port is enabled for a slave port, any address on that slave port that does not match any rule is routed to the default master port instead of the decode error slave. The default master port can be enabled and changed at run time (it is an input signal to the crossbar), and the same restrictions as for the address map apply. - - -## Configuration - -The crossbar is configured through the `Cfg` parameter with a `axi_pkg::xbar_cfg_t` struct. That struct has the following fields: - -| Name | Type | Definition | -|:---------------------|:-------------------|:-----------| -| `NoSlvPorts` | `int unsigned` | The number of AXI slave ports of the crossbar (in other words, how many AXI master modules can be attached). | -| `NoMstPorts` | `int unsigned` | The number of AXI master ports of the crossbar (in other words, how many AXI slave modules can be attached). | -| `MaxMstTrans` | `int unsigned` | Each slave port can have at most this many transactions [in flight](../doc#in-flight). | -| `MaxSlvTrans` | `int unsigned` | Each master port can have at most this many transactions per ID [in flight](../doc#in-flight). | -| `FallThrough` | `bit` | Routing decisions on the AW channel fall through to the W channel. Enabling this allows the crossbar to accept a W beat in the same cycle as the corresponding AW beat, but it increases the combinatorial path of the W channel with logic from the AW channel. | -| `LatencyMode` | `enum logic [9:0]` | Latency on the individual channels, defined in detail in section *Pipelining and Latency* below. | -| `AxiIdWidthSlvPorts` | `int unsigned` | The AXI ID width of the slave ports. | -| `AxiIdUsedSlvPorts` | `int unsigned` | The number of slave port ID bits (starting at the least significant) the crossbar uses to determine the uniqueness of an AXI ID (see section *Ordering and Stalls* below). This value has to be less or equal than `AxiIdWidthSlvPorts`. | -| `AxiAddrWidth` | `int unsigned` | The AXI address width. | -| `AxiDataWidth` | `int unsigned` | The AXI data width. | -| `NoAddrRules` | `int unsigned` | The number of address map rules. | - -The other parameters are types to define the ports of the crossbar. The `*_chan_t` and `*_req_t`/`*_resp_t` types must be bound in accordance to the configuration with the `AXI_TYPEDEF` macros defined in `axi/typedef.svh`. The `rule_t` type must be bound to an address decoding rule with the same address width as in the configuration, and `axi_pkg` contains definitions for 64- and 32-bit addresses. - -### Pipelining and Latency - -The `LatencyMode` parameter allows to insert spill registers after each channel (AW, W, B, AR, and R) of each master port (i.e., each multiplexer) and before each channel of each slave port (i.e., each demultiplexer). Spill registers cut combinatorial paths, so this parameter reduces the length of combinatorial paths through the crossbar. - -Some common configurations are given in the `xbar_latency_e` `enum`. The recommended configuration (`CUT_ALL_AX`) is to have a latency of 2 on the AW and AR channels because these channels have the most combinatorial logic on them. Additionally, `FallThrough` should be set to `0` to prevent logic on the AW channel from extending combinatorial paths on the W channel. However, it is possible to run the crossbar in a fully combinatorial configuration by setting `LatencyMode` to `NO_LATENCY` and `FallThrough` to `1`. - -If two crossbars are connected in both directions, meaning both have one of their master ports connected to a slave port of the other, the `LatencyMode` of both crossbars must be set to either `CUT_SLV_PORTS`, `CUT_MST_PORTS`, or `CUT_ALL_PORTS`. Any other latency mode will lead to timing loops on the uncut channels between the two crossbars. The latency mode of the two crossbars does not have to be identical. - - -## Ports - -| Name | Description | -|:------------------------|:------------| -| `clk_i` | Clock to which all other signals (except `rst_ni`) are synchronous. | -| `rst_ni` | Reset, asynchronous, active-low. | -| `test_i` | Test mode enable (active-high). | -| `slv_ports_*` | Array of slave ports of the crossbar. The array index of each port is the index of the slave port. This index will be prepended to all requests at one of the master ports. | -| `mst_ports_*` | Array of master ports of the crossbar. The array index of each port is the index of the master port. | -| `addr_map_i` | Address map of the crossbar (see section *Address Map* above). | -| `en_default_mst_port_i` | One bit per slave port that defines whether the default master port is active for that slave port (see section *Decode Errors and Default Slave Port* above). | -| `default_mst_port_i` | One master port index per slave port that defines the default master port for that slave port (if active). | - - -## Ordering and Stalls - -When one slave port receives two transactions with the same ID and direction (i.e., both read or both write) but targeting two different master ports, it will not accept the second transaction until the first has completed. During this time, the crossbar stalls the AR or AW channel of that slave port. To determine whether two transactions have the same ID, the `AxiIdUsedSlvPorts` least-significant bits are compared. That parameter can be set to the full `AxiIdWidthSlvPorts` to avoid false ID conflicts, or it can be set to a lower value to reduce area and delay at the cost of more false conflicts. - -The reason for this ordering constraint is that AXI transactions with the same ID and direction must remain ordered. If this crossbar would forward both transactions described above, the second master port could get a response before the first one, and the crossbar would have to reorder the responses before returning them on the master port. However, for efficiency reasons, this crossbar does not have reorder buffers. - - -## Verification Methodology - -This module has been verified with a directed random verification testbench, described and implemented in `test/tb_axi_xbar.sv`. - - -## Design Rationale for No Pipelining Inside Crossbar - -Inserting spill registers between demuxers and muxers seems attractive to further reduce the length of combinatorial paths in the crossbar. However, this can lead to deadlocks in the W channel where two different muxes at the master ports would circular wait on two different demuxes (TODO). In fact, spill registers between the switching modules causes all four deadlock criteria to be met. Recall that the criteria are: - -1. Mutual Exclusion -2. Hold and Wait -3. No Preemption -4. Circular Wait - -The first criterion is given by the nature of a multiplexer on the W channel: all W beats have to arrive in the same order as the AW beats regardless of the ID at the slave module. Thus, the different master ports of the multiplexer exclude each other because the order is given by the arbitration tree of the AW channel. - -The second and third criterion are inherent to the AXI protocol: For (2), the valid signal has to be held high until the ready signal goes high. For (3), AXI does not allow interleaving of W beats and requires W bursts to be in the same order as AW beats. - -The fourth criterion is thus the only one that can be broken to prevent deadlocks. However, inserting a spill register between a master port of the demultiplexer and a slave port of the multiplexer can lead to a circular dependency inside the W FIFOs. This comes from the particular way the round robin arbiter from the AW channel in the multiplexer defines its priorities. It is constructed in a way by giving each of its slave ports an increasing priority and then comparing pairwise down till a winner is chosen. When the winner gets transferred, the priority state is advanced by one position, preventing starvation. - -The problem can be shown with an example. Assume an arbitration tree with 10 inputs. Two requests want to be served in the same clock cycle. The one with the higher priority wins and the priority state advances. In the next cycle again the same two inputs have a request waiting. Again it is possible that the same port as last time wins as the priority shifted only one position further. This can lead in conjunction with the other arbitration trees in the other muxes of the crossbar to the circular dependencies inside the FIFOs. Removing the spill register between the demultiplexer and multiplexer forces the switching decision into the W FIFOs in the same clock cycle. This leads to a strict ordering of the switching decision, thus preventing the circular wait. diff --git a/doc/axi_xbar.png b/doc/axi_xbar.png deleted file mode 100644 index 0f5583270352c742ad0a116d2d31d60de0dd813e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 173320 zcmb@uWmJ_>*EYHl1VuuSZfPk&xiQ-(mE@ZD9lJtfVKZ#cMbMp7xBz2E%$^()SZ=a1u?RX4{C+IW-qw2o$f zE=~m8dj{rY7qZeCFB&%lOWQ1}wME7L`+>JLo{~YZ{`*n#WE+G_qy0_UZwxPH^GmRH>v-76J>O_7~Oww!g3d&%&8Le)~wOrVlxwM_@XjGwjN``?IE7@?cAzph3y@)YT`+1=l z5+X1|%s**75WroYN0IkoAroxQf$=8%SW!_g6kSX5j0_dr)L+ch9UB+$tyV@%EYJ4C zxe{DMZAtOyO;hlDG59c-DftI?J!Y3RQ|F!=b|5O7PK)YoK_tp-`9BsXgvN|mv5u@6 z*jT(DB>yUS^TG8(HzPimYbz-k>>QpgAiqVrxprOx5)e?((u-`LBr+5U$@E2u`WDjT zs5Um)_Q|<1NHW9#f=0?iMoFolVO=QM)VX_j*4FHE$W{A$BJOd?^{>`wk}Ec;f=kJ< z7I7cyE@v=Eu&`n`>X!OlmCRhMo)8kg{OUY8H`_)~qI?K}kuG zk0>c72A|HDuYd9}df)N#`a#!=S)#*ruNAAH);ayZ#}gtz#>f|%-+t>oCQgu=Jaf#M z>f<#01uT6i^6s0_y4FUO+h55R+s>I+lDZt=yoa3hl`(IfJA##xnf$2`P~Lco@NcW{8ZfQIQa6@2O;D+2aHJ4_(|Y&X8hd5 z?UjgWt``{@hOT#Y^XgVn^Bo>N{g-R6i~ZJ)&^_OWvmJj#loTOyB2?WSg!$kA@7tHS z1Y;HgkuOk1^9>+|hQaa#tyK@PH4sBWf)Q!-?^s}M<3q^bPFmA*Yr1#X=asp$v$_;rUl!!~uPMRcGT-G3~J=p^F>7+_RzT@u8ZiG z*A}I|Cvr>vpKTnWh17ViF6@auVTj^aZf;XbVcZ_qQ zqJ9tL;v7C)!QV3ZOofMawHe57F8cd!m}?-JUfE5wOtN=#`hP}8wTjeLQ@7pw_+n9J z%MfaB9nOx3Z6Ozni_I6O7fH#eU+CNz)$_xpBG=%MaJ=5`yNiAvtDvtv+x!$qV{MM! zAtAc!aB0IS*0Up0R|vV+KXBhs>?I1Mt!-vf--qz>W^vCq{h0F{>1n}HRfRHkRl2mj z9IgXHe+&*b3vRj?Ja$k}V_ux~Gg_Is%FV)1|Hmfb8V%~RZD?yw^b^=xpqg516zMUW zuh8MBg2gS8$xj1!T|M-%u`1gLkIE-gIx&H#BkyrkH7Lj4LPEP((IP(vwA2W_kpzx> zX8CN=^!*HpfdK`Lcp;CarD;$v%wwzN;b}>Od;>EVyUIPskCc*oH|)ysfEpK@)`>JU zC(Q6auc+ugsdc?>Z1m=2*xs>ovBGcU@?pqE4Ak*ur`$f>Z&XpQ)xpL=LL;Qid^k^) zrN*^wexBwlWH+w1?FduDG)sRb|;zt1ja0Pa~&Wt=x+|7k6i{cdIWS{a|TiW>|Rr z*@P#L7@YRgClj-L!Tv;qXn|}YjAt?F65Y}LC=>}N+za%R3}AIakmove7F{-dOsh)wX3Tul4FwS!k=gSE|gi()=~HA@25G3uciBl8>=OB zz_+(YZ?4Z}q!EN}U(z#uPq>mx{pC8+>OZq1^q`xx?3{cTTfv@!zntL_gdhSff30<5$ z^*H|?$mVijbLY*#@M|#&oBeyjR2NHwY}4n{FVzY$Iq%+8m2dUZnYO`4KAQH+S`>C9 zYE`BfpfNBfl&W}OxgM|xJDU8uZ9KoOCFRMwYku2E;XTRHtO;X3-$a;m&AfHL*_$c# zKGy;ZcSP6-cmdyNxpT2@l$BMzabtM*F73j5zAc-or5%-mkCh-^<%W`hm4N@G^6=lx zfuY6DgQl1~(Ba!XTWpovTfbk_Ss(GQYNm6;Ph0MeB)b=O{=67ZW-|)7vn2CUZ2Ikb zFscJNnAPx(-YJPEUP-ly<4K95)WLpRC$UIFxz6WyMKpWwyc5FXcFL1^$B*`W5|pqq6vC`Zi7xI zr`&Q-YaiEg*>3>9p`q(v9RL32xZXP3Z9{%<$ZEE$qzPs>HiD1#YZ#bLOmY`qHqo0_|r+N73s>t*h9zn0YMx`?pa4J}nu z{nBz!sOF$uVQnh9YKg)pJPT&y$SxG!3;V#TLjw%PF#Ev3gp~A?c;( z%~HZiiC=UQensEMGQJa5)IvrqVv{k?+A-@8$rEHuo2#Y>i65;@ zy7bY)H?nw&RyW&Z0`%nyM|r~4P10W8O58?066mOxobctWpAJTs)^7{W!|;6 zd!5%}Byno9tz6`(r$ODwy?-pM{M{RA>;_o4g*r5%_-HVv;+=K$d0ZUqu2Bq5Najo8 zwuXCCii_XxT|E43AY=a8Q!eG#-d@8OrO}n#Xd&fQWtlK)>RASU9q;HeR%x#i-GZji z-58;+!uRy{`bOnFl%tLAa*LBDaUDA_YX?pEpP(5$8#?*?#hMa~WL}lQ21U){nesOl z7F9#MmB*DwMoFt(=H#QN9 zYNMU6@vOsJ--PZ|?@2Fl<~VbPedKL^}71;4a53w%((@FhdA$-SeL2}qp?=COuDY8JHo^D5fXAB z0-I@I4X_&0{y4d1&65gl2Yk$vhdiNXV=yEL>BWcmy6~y6;T)Rh1US?uqo8;(P_5WF?x#@)!DrR|q$+f<$&*Hc@$-<) zgZW-=ZXBG1?Y#qTDmOIYsJa?^6_ZpMbKiUU>7D>DwU|%z&4#<&N~Dk;>`4Bv(O zi@$wwm?FpMeFrhk-ZUuxMhbRd<<(6@_(~ju3Sts{L%(rUNCg=(Z=ABxbai9W3~QEJ z<*9?d{xow#dw+YYq-7A?Sm@xD0sG*X&gh)ovOd_(Mab>JaX9BFSK2#ZRnJ_{3nBrd zL|@{O`^lJ?nSHsc6T|00RfQ(&=qw7u9rfwYNIfQp3ckt)zBksK!&hx6Gvf)CB?$Ky z!q1!4p{gW*)1grp^R9cDUrK=E{`J$=FpHXKXNTsn@iY#md)IU^NII9G zpr{M&R8~=#6$7;WWCI#14^{h=w9TAjDe^u06dvZ=I9Y&qE`!-ZKQaVhA?v;E3fkP|s@M0i?Jd<*Ndce`SXL9rOpnzfob_9Y;qM%)^BG-fDZ$#3VX<9##n;rF?2DQWCCVrTimr#gqLspc#CUbCbdJ0$fT`;=ZLd-VA)93~N0WQX&IHn5 zg>f%_*Z=eSFT7h>*+kR_F6HiZS%$-g5I3hPuSd?2f0tLnooAo9)@95|V6trRX1zjt z%`%&BcsjOyC4QKb`pFHdqy5S8QxqA$Ji|5zpYY%3&>aQ*K(C@3vXU4yK-;7yDMfT5w#mR{g zpdDAvT6i@T$5PRRAS3s!9v-ekh0jz~s9FfVw=NQ`%&N7+W z8Tf4Vw^t;a4bA92y-NB`-P2jOlvGAsZr}S#**=&3@0tX-x$;Olt7}i^JfPQZ^L*3t zh&?i}y>kLHRdNL7vtnvqgeyWT+e=2q+-uS=MC1o81`Td!8^RwC=sFA4{*pW3ha z4)QxtX=xRlC%AsMP8;Y|g1&iyTGjN{wt1TOp}D<1m%NdZMV@#Rq59h4%);8MaShM9 zKmX&~ak3DYZ_D*f78^Kj4tihig@rgc^`!Lk$PP~LL5WXx$@7z*UnPw^4%(#N&G@GG z{P^^#Dzu!C{a5fIV`9YRy!NYo03sipaa7QCWYgZvh8uN33cO2*vot!9b-4VNA{HR~_9 z*{(R9Mpm_)QT!2p`9S7N;~`lq^twGvo}0tF-pX7ZwqrF-NgfvRY+B}I$d^xOt6`6e zb1I#WCcgWPN)>di{ade07(0iM7D-G;p7M%ywT!8Vs_Lk;(JE@beiLH-|>sBb#9evC>_@sa9g`&Ooso$ z;Pz>RJz-~-6T5xrWRTp1+tz32JRnYy{pF2<{JG}lvQfGdq$-URYx5f1rin{ z3dG$jts+|Vvn>W>Nr`<2DXjb#&KsGfa$)s|;o^no2EKaUz{MC|9gptJZ|n~$Z2QYi z&Z8iv3}&E6&>7BiUbLE&w{Gr~wr_6Ajuxj@wJFBM5)#e?Iy5%XTwQb#N73=WZIH!F z`M$S$vMya(7xZFW+&!?ZoXj~&O3r$wFyB7SiX~&FA$EUMvSCkvee^y+u~dI%ArtPQ zkBoRPRCv{O`C&DV7%wS=FQtv*L^}6OQPf|Reg=k4#E$H?$7%h(l%~m}cg}iG+g-pm zL$%a)DyzxYMcpXArDbks#(^VarXQEXr=%{3iky5eblt;T*Xi@DMQ+{3?%x_gy_$c| zm>O?sf8nlEHdVdMD`ddhCii3MVof8R&HWjf4lU0fMRz`65#+IL9KMfqwJ$%d{bGLO zVvMhwm2UVqmF|`5Y@mG_?kVI3iu@d~&mz)1SBQ(^3y)>Cy0oLq$m3uvh z&YhpIM*6d^c1l~oddrg7vBphX1yR?tn5&o9JZ{%(GeTNk#Ae_Fz%N(KgkuTetHB`G zcH>o+5P>6spg}UGKQd^Q*iK8Qpzis*x~p4~*cYEUu1|3`=(5Xk>io+`+1-Jo?;)ob zGnNj8*Gp{{{TMo_-2DRG=ZZZOQ|i43Gc*nK)~n{LyjGr0P6F2QRz;q>OXjzpz2}PZ zA~Ub1$XwFmR>)TOLGR)&XN4`-(|7KjA=3Sr2S3sw4YjZ%{VnV_ALatLhvw?=Z^%qIXIkvbf(i`Ls zP+tGU)Mv9dG)6aq#L?22ku?mQLU&Egw>8bBTnv&@^5cu9-&8nAD@#(R# z#gX(6CXO$Y`+g^rfT?i{-~CFDsOoZ|taB|rt*=U7;<23N%ThO(sVJ6tni8ECXD%9KzShb(;2XjLiuemY8uW&FGw2ZEfp>ANIJV!>s4%ixaGdV(1x1 z@o1~p6?{kVWbQVEXY_Zu7k3-m?Y6g5&R;rnWN<~LpEtwotMjvS-B7<6TS#_|4(C)y z6K57KT$b+{{Y&p;*HK^UBHyU-n7{uc5TSR7=dx~AXQ&zwD$iYIo2jb90M6)DZ-%?X zY!Wjx@*#5y8MbZlLyDoKuB$E&?sJyFrRjYXbpCZgG;oZ%+T^Kl;7t;n@HB!Hn!Y)dLgW2YJ}m}@)YpBqO3IBP z_v zPqg{y47ZI=Zf-@jer$U2ybos2gn~#MIxKk7`?}!Vuc0%%+OZb_QNGlHomRrrxY@U5 z6}KE-E2Bb+3WaJ%=DDk_(L;jF`D*5o8y}j_>tP+EevoOkUv4+n z(%Db2htkH8#g672Eku>YgIp%jv${r&+Tl13oeILzi}Ib#-q*M(dkha#qa#&}@6J7Rs;FO!V&^V;(?wfDlhW#}Nn^yedt%>77Zs`A z@V?n^P`JAVm5h@xw+5N-T{Tj>QM*ZyW$<4@G&Z&wMEaR*d-tnAOqq(wMFR$`X6H{z z%h}=%ugJ*XhHk@6v|?xL)fgzOs!jWg^4x7KU(iWT6JRYquWW+jjf_y2^L~j*>r4Mm z{i?W#iPv8bi*Oni*#CVm@!>j2V86!=RVwg2^i^&Rkl)OK>#X%Q*Hv#k&G2j`E??b z*-eDpduiU4hD9d@U0g+?!sY2Qn(tsR)>oeey3@Qw+05<+O^Gn?`gC>Pu}$ z#~mf-TvAguRnZ8RZk4yUMspQLv&H2M8jfYA9rB;Oh$n`>Q5hqnZn>i+hXH%qg}o|+ z5eRD2=JUH24!vPKA$5M|X;YHYTD=j)pVmMV9tct+N z$y)mtfu;*;%AuIppK?}QE|Yram~ivnDsyZNq6;3!a}x7^6rt1S>yt-EBNM$74F@s} zm^9B*GcmpH>&}S+MdQ*&^D^&i_v<9_dT?oIEO6CzW(s+-Vd^vfQ^wU62GI3=>ud}) z#jL%b(^Hp6?=Y>xMFXqC7f{W*M-S}^-rwEd{C3=J6_E~@IsfH#X=IL&t;(maW_~lv zSkiz2+9(RXx~_}N;s`QIE@}xWmsRuQa5Q$aK9ak&q&0h`*mIFLBG}_E@M@d)Mt?*B zXUt&~aEmw(le1B^eh}^IlooN{WqWRjnxiD2p*F?ugcyUH^Zb>`PSi?HA z_bxWLM6pF|_@daoIjKOaJ`0mh_-VZx9`U_1`sQE~_Vnm{qAOuty+uVOx6tvz=B(}` zi@i^FshPr3Am%UByI^vY)c9fgcqqPs)l3e6yI_b-cQ9(oi#?V2^78WSiM#u|Y6EBRbqIM&rsd4@b|}N zFKJR=$+lML%Mc{JxwvUXY;Acc7Q#S{Q+FGL?=kaJW_qjRg`%QTpGOkYEqY$s?VTY9 zGR5iH2LZgtTG?1n#1BV*-n&M%o@=6|MSGcWvQG=9lGi8raC=oTRmwz!K@* zf#0M);zX&&!A*l}Qr)$2wDSU`pKnCU*KSGO&BuPf{C&{GlfdylWa|BrdTm&bm{{$B zv|c#AW#9(?LH_fx6e2=jokChD)Ra+9D&)jAWp=d(YdWlCb5=tRS>WmyHS69R`WO>i zJG&j>p(^utM=)*w1TOv-a$nuTZUMQ^?re`OVRvc4f9$${#mE_if>u%(B4q!$>>DK5 zKf^4!!vMgc)sHJbXz<5$UA=T!xAz}RmDi$(x_|IG`duu<5AE!j-p0lja~o@njY|i~ zE5_WA&b@k>MJp8_Kfb3``MEc7{Jj3b=WOZs-_-HvXSf<)JVomoj_b9(oHx1A!lXOO zc&b(R#oV7)Fv_s;&|>)u$ z&NhGUwI4iR-=B>VGbUi!o@iLE`?D=W!tzGsASC&-j(^(S6_izr$<24gDPm^@F4*cM zQK?Nsc6Hek5Ya%yB|9HSikoYFr=&>H^5VOTOmVq3O@=npvA({I>V?CooJBabu&^^5 zRHx>56SuV%)A7Yi?2+Te_H6O(x%*8e=^lo{LXro5C%W+HeevSnuh1JbbGMQ{)nLIq zhZqyI56U6uzPp4Ug**MTy#xfT1Z?(&vyW!0i5d9>MGUjd?uSaAJ^SMMzD>nv{qAOb z?18*y#rc3tuxq1N5Ru(ussL-Td}8h3wZV zfZ%5rEZT=k&&F+C?N+{eL6p&#(D+?A1kXlZB}}NVo*7IUowq8bh;4w*#8KP+U(I*U zT*~d)P9(3>LmQg}`7=D+s|7QzFWtI^bXBQ!xDhsJOfC*I7Dq>$nk*3|=zf2}PM_AZ;>V&@VaS=z3?p`MTP{A_3PxLRL7>Mp8hU{~NswcPMQ z{`;7^C3ZR;W1rnkSWvBJkLCcOz(nqwSM{4+fELb#-ILq4z=PuAo>kMACOK5`RTjLCN-0(+VM%OikH~fUP0wsS(_P6M z8oIAjw}|yyF5Uv#m4>S@Bsl34T^F_OcwnUtS##e08`=BGCL~XtF-DzU?u<}wOIAsb zIrxl+lCS=x8pWdb^61>xmj{~O-Rl2$182tLv)=;4wuO;D?q}#zbxqSH8`@zOHM;CI!90ER{`%widO@r1` zrn2N`%D(n=E#4!0Z7vyoP2cM{oM^nU>27|=iFVn&ajm)&cdvE%;nC>jNLMELwEn2s zh>|XaUqf4&=hNNwx(=$d1T2`)`75!lll(`lrm-J#ptdRg)(!e7oYA-uc}~Bl8VQqm zhRZD%eGM>D_*Lc{!p{#)%mDl;#1}}|zfK9&wf?%zVxIsaqU&uf2W@o3_dXnrGpMYr zQ_*{+H-E|4C1w>yrh{)3H;f^6^I995f@pk!I5<78ar{nkT*mQ!Zhq-zY;J0#zMttD z{q-w~5Z@Ui$@w7orLb>Pu&7ybA;XrVjw&_ERc#@WAk)B+TcPUe?O~utPcZ*QGu0h> zhm>0T{R{(H6Hxy?f3D#-tJ?xR%<)~ot+ zi@W!9t43lrR-LGIgry~k-FMf$y;l1Zw`n~Yw}q%AjLaSTw^ofOvl4TBhSWf>ArOEI zQxmqwe6jL4CB>x5jV*xg@kFF!9Ycc6HRZ`zX%*jq-nq8RdOYD=M!i^dKX2C_Sx z`O9au6vp9AyzT^8&RVBxA=CV3d&VfYH^ zFkhjcV2WghXu3_$WhNr(-8eut1`fWc(I65Z4Y7dvh^m~hnAGRkK#Hg$=8^YjY=9>G`}}W7V^}>=l5errCdY zx;USGysU2f115s!#Wpu>_JkWD8o)`=t3SUQ3=0v*UVT&NPxJBdrQ;iq1)~p2W%v_! zze?i<2*l&7-tj!$Xy0@>=ZTc+K6i#5K{N>cgNRl64#Hc5SXA|+$F=5q( zG)?uo$z)JMvvJIW>NaurmnAEd^9@U7`oWu)T4w-vzFUNU~18*IWi-aTZc8>PR zm>W#CwDbpmaGLSy?e&|ssMcvJKzZAQBJx+|`g!#^Ni07j8bnT*d;R@fGQX;sH3w*+w@ zMVr*w7!#b-B&+eBE50|bkK`EdoRuZ(7*0Gyzt}l0F|o01Ljz&i13`k5i-)kJnumzt z=WhW>TIU20Z7>te z?k)o~y{>{n)PcnZM#y6=1*jdt>t{47W;Jf~fR0(PuuzQvJP>0Pc}LhP3TJ5(VBmnT zsFN3qh2{P``rJxX+?y0Y4@PD_iR;x3!4aKlZN_?hWHx$q|37MHm^|gS;)css6u=tu zE?B`!)w9`(I(aNk&s>)use-d9&;x(m^Bczs^k-N~v)*1u)n%G{+)3lBew2Vgl>gz% z&7JdflfJmPtza9KI{0hD-%u+tvHih*!!IE@YQOo?is(Oh+0jQd`|w3ag!G(zz3g34 zOrMSzIQ}Gtf=o3hthk{BR?K25ZvoSeQPU3)As6mICUhpoWJebpTaNmUvvh>sZ&yZ7 z?l)JZAio!$Ct)y<;7Cb{f}^gn@@T0iy{qU$ks$|R_=D-$J7RGmJ)>hOa&9jDs7!*e z(q;Hr#`3V+^4uF>p6VOJ;9X>ley*<8t$8=FoC&KZkdCK8OTEMKc7Xht6df%1xT*0J zIlx|lexs&?00Z~(WkP>@SE1egDB38=iMQhb#9vC9lNG2s=l4bi49TDOO~%Z49lqPR3j4Cv4YPq0WxXvOw-11KBFe%6saR!1ue zEV0(|kU;Dy@~WYd(85d|LVr~5a_=yHd%xj7&tx$%8^)Rn5^ymVDM7@|pb%#7&*h#H z`p#K?Zo`X$c)((MU-M6@DOg$zj+IC@|H9Xne9m>S?$JkNr!aUmnlYZ^uNn3CqUlam zCoO!SraY$q7_}dW(8`P`@yRMl6>!{+I{o#glD*OTqscqc10@=q1OQuDDHw19ks$&? zEAJy@H<2L(cu5hvValKZh*+0kD#h__i&u=2vgUWu*F_;aj*@N8mwp{e@tpyA+;6*& zDn31ug-H}O^+Ln0`35!xkt(mzZQX=e=#fD0RUxSluv-;evx^AKx@ni&er|9JaC5K_ z<~&?{1Mx^_5}X6!!8hJ8i=6?ddRbphphhxr^l)-?L z+XkU%s#2_U)(g#(=u)A~=6Z2{A}MeBu9ZQv8vVk(ZOP}s8CNy(w4sG$8K|ZWQUU1-cvBgd18y3N!71Cf4j0kL z-mliYgpkuv=zl!VIB*ggr<<7J<6(PsKQ7t4g-1TVSTD`n{45A3E(y=Whq{ki;Ly#O`_V4<_4vnvUtonQXIxRYB-k2GQI0Y=U zQ&ArCI3h=jmz9zqLmA3eE=3;!5D;iU6ky}6F8yECvm1(P!ujy2!O&738MTlB>?oAc z6RnlkUfKgQGNgy<5nZnTCSmBj{@NrdiL#9#?0Ih!>zmx@g%98j^!U^l9djQ)uQX7# zP&E}j8%Ag&$oPlL?twYs`9(~OtUyByt-00;ubHRzMR2&n>z+wW#GF@l-itpEFI>E5 zVgU_$+YapE^C?*XVN>wte<j{syj3{k^O7CB^SSGfv}-B!u`HBQUe3=5hZHp197{mzx*Gnz8mTuhiB+ zR{iPyr2eCYJ-R;&M4+J$q?fphBr}0UVc1`9P(GQw=bqy?A;FF`^1zG+yT7wzLU$Z> z0ZR1}L8zI4Al=XNTZDK^zFSgs(Bs+_0oGb;di5lY{;j#&zMDDLV;G1^z+0&+Puk|; zqolkrE7!JvND;qWi*A1hp=ij)$;{hp%}}8`+M;1!UhRbKh>1nH9VLxxy4h*8uY$CN zNw6N1-$B7}d5!z^A7RDrM^}~c6vbub${I>Urjfc`F0?}r+xYzHK9@U7LoDKBce@rF zP-=9oZoBM8B&>V?TJI%#0X7H9-)BTfAdmoZ_y=*l;zx6Lump#&3|!VDCFoo8hog?3 z(Ax4vR;268Pr!dnX(U50UWSGUyf2>qYKw934WTtb5M?Pe_Lcoc)^G?anuNS5q0gW| z(SI%)yuIT`fNan@cN(8wrS#ibfy3^hZ@g)^D9O z+&_}kCnnp5W{F?Lxi1l8De35?IpA3g&?Ymjf7|%(zVqvQrLGW}`lDkkeW=HP{Oct62E92{b)n4evXG@cjf`mDFz1iaQV$p_ zlQK!fHi@wH(0S|o7mXjZVMfBFYYz~;)@G%H~rmKbB%4e5w*!Y#<>)h5%(#IGMpt?cV61d7R=fk#yHXpGf0*0?~9_VVy`*G?LV*0aMSL_ni_Vdp8^foEA8mfG$J8voa5(f7m2Y1qzD73%PwqkJAH~cXwCZZh z_99{Gvvq3*j4r@`oj7z;ea{WzK+j3g^;M36suy%J_nSn$A%~b)M)%Nc_fH-RI65zu z67*W4^XH(I%^4s0TU-1HFi&xk`%S!UyVbdkg)cSmKQ;&2ljU}OMR=vpfV*2gf&X8!~n0`l%~&K4hpAXA@-_%t$T#NmA_c{b9{=JvXMDkkFA2|jRbjibkePo^H$=kZx-2qoCF;Ja$MSU+UY$E1#ZPWNRr%}q2nXHn1t+&WXh2#`=Wmt^^%3>nkpYE}!vC?>iO#(NGHn;$ z1XIvq^zU6s8Mmj*9^3}~BS2VGv@V={Jeu_P($?sYzpHDk9v}QI-Vqyn4gBCrcwmEF zVc`=<8Q>@t{pEWC$uBJJKA)3Cy5edv4GGzlbp>wGc2{@OZuQP_-3Yj9WXM=5^HfGE z0_54b=`1E?cH$W5>U*_Ud>a}?bv!z(?}R|0<6(MN(-1!j1B3Z45bn)07GbDCoC%M7 zP>=As*CkI{fsR8&$}lc&|C1r{XeoWe?Z)I1xCbQc7JT@Z5?+2-I5b#X49?cKZNXvB z0fNX@ZcvIPh%O-*Xf9{}z)^*DT8wv$0=NIy7;<=V-lm0BUP4BM727=%nqKyC*a(H$u0UGPNvl~|Fk|6nO1_L%A zMq>gzWeV7DfsqoRG^0Zfx!hh0@gVtba}wwy2M$uvP&(Lx;7gl(iU29<l;+U=i4Lh)J@TwXn3Rc*MvqQDC9 z(4ojCoQu0#X0CKu6o~BZ1aWC}X5q=RP`^cA6lC-fPaLu0)XHr}P?8$&!+*Fr-w=5v z!bli?k7h#Y7dM7q%uHbx*DrU^J~gv zf1E05py=B9Q}c(;X?d7qMJ3@a7xnNwMyAnTCpY58mw@G$hX)_ypYaU(s-r*2T~C6?fT#Oe1w#fW&&pfKnZR|T`GQ263~MA;pLWsw2QuTLdx##m03oY{Qg>|G41NaJrx4v zjZrMb4<$IN8zjEbBIE{w!4hL4KuT%(wEP;S>sxJb{m*B_QD7QL6wH|dZhJdqNuddO z8Dy%D^|GJ zm?}t80h)%x9(08Qp4+%w&RCw-*Is0RS)@gUVg@M!Vm<`b@uAj?i;2c}3yi;q?+D5~ zC#d+MA_h&Sr(5UhTIINVjlm-LbuyiC4t8fkjB|tXIa4`GnSbyRgMh>r86hQbO@G+O zc+AVl-$3OpvXmOzIO0Qsi{R6T*eMpO8?(N z^-nO1^&$YOE*F<3w!bp2;V)@5!J-9xMi1&zb0+@sWaF#m4}gdUhs1aWCli>={hSyR-ZHoGF;^qCgUTa%XmfI$8yP+8S&5`^``{=_j z0KR(kSw4+Ouu~^mAhcii!wNQ_0!U7q(byP%Sy1nc_@~{!SO-|k#RN0QlgAvuX)mZi z@W*S)3#YrY*4wK``wV~fOsv+I0=biVB}K?=N05ZFVSNB$!54VCW0C@+*vE-3033m$ z9WqzHZyylwOVZ4uP^lRF0xT@ULqFz-eEuiDz`OY5-`tT(F4uwj7 zMAdt&*gUdq=Eo32NeXrwk7W#xK2cDJ)Vv-gEE=?WukQZbfwBK+Y_9V60fg z?(mo(fe2SzVBKT5ki-Z>8XieBDd0K7qAkr20QRb0W&5S9QU z5O9hMb9H2RP_=`fFRQn=@_=q+EHCm;WOu2SUa%6CWse5(Do>k(Sv}za@N5O?Vv{Lb zavoIfb8-w@LPfO-Xel2>Z~gY2mE3+7k!TcSyr%t5-w1y z*AukA+*}P$7BP|l>(3}0hq%g09gM% z%fSLUWVcIA5IenSa~DY)3fP;kui}BQf{*KoPM<~pv1}>n1eM@k&e)#v>0^yT z&_z~SzFuZFaL<>{qrkE!Ac9T7IhNQ$3qVt3_AzRXgPDFsORm?Yg(QpQA4ePUh)qng zZA)J-KTs=3xvT@VDoyO+I_-ZZjV4 zOZdw0%WCw;TOZ4gjv=3+OKRiVaLINtv%L1lCAP7JUVa(jWY#wZ5Wb4ix636({K&9; zXW&a3{%2kvVaY`N4S4a()^?7bzmL0x&%by8)UYcx+-Ijp*5_U6QVNfkU(M!+gF?L) zMx+kKjb+hPTrm<$|M$a7Bz782*D2P^YUAtIZGKqteZ$D|`OGkl)1>u}7VB%=GW;oo;+1@#iO9ve}c6Bqr+VX)V#?^3gS_m+| zv7es`>0uYV<2Z!JA7B0WzANA&y8=&SW;UpCDb`I&--|PfB{s^gd}V1_;kZ3^PQ%ZP z*Imk)ntrpO4mCbl-EnD>cH+~xX!+BrD#?Z?L)=vO1d7$5;p8sii zb&`<>axfhZkOHz4gVzGL{u|e1S)gZ9*~qwQ?8T?^o*_1c$xpsW5#eV6Wj>qX--@$rBZ@(C=AC&9+ zuO+@OBz94W?SOc;T-mI48FmiZAQ}1M{)kD|@n3P1@bZG*3ORl3np-nAeI+*L>9iQe zBL!!RU3lb-Maj!A-P}r^#Dw8y!Yw*W{E9nzIuRbiW@33CpAIAC-Wt4Hm%LxJt@?$w zU7{K%pxGokk->aQPO)LtJq z_WQ~(li3i@UB@aBv#&4}pMt(kak(b|Y?EM%HTWOa!fc#5- zv36iPd%oowq^87F`V{qanSHU#Jt^=Sm=}x^^zuxv4EjC)a@*}}-09mYk{ti8_8`;4 zthQL5IQ)`zcr0Nc2iT{?=c^J0#I55xi16TjUj)zQyGO3UgTD>#(;*F~;MyvD{BOFIE^>)_rt{XL+jk*#WKL{C_zf(TE%k*jlg^4wS6uQ0PbUB$DjtKZJ= zFo0M1j9la2x%^?NZ3B6|^VV#0UN7~o%8(0fY$6Hm1PGb)q3@YjLYCmfA zcfT6>^XUU>#Q-D6AVejJG`#oO{6vKG&tiD^jkEcmK1mEQ2y=7O-=}1<@^|m=<6X{G z+P1}V+ay$cMnN7y_ml6sM=q&Kx}BU%4&Obj9({!Gna;P#zrhiUE!dsTj~i>aetE=e zkB1tNzvLck4Y+*k9wysR>A(+K!QtKmp zjaR+KpJu*WpBJxv8Q-Ut$WmMF@L->tFHhJw$*pYEnq@#*9{O z9ahYNXBGM3fE3W-p(kHiGo?%x;S~QzMR#oG+Y3Mh+%a$ZOS+;`fA)5vL)RH4@M#&J z0hG=+JfZCKfv8l(??N`UoD8$_l_J)1WA2*!OS40rTwL5{hy77%sv3QP2E@qqSDR^O z;_TJK<7u*l6-R@?in{)L+36O6R>`hCT3P4CuG3tpi{fb}poD_JX-Cm%A)VAvRQ#ze z$KP%xr*Yo6EyS&4_(o+Q$eclUQB~7lIpUS<^8c5t^!-jy<+H*TvXCjck8Y|0ACRs} z|Bx5)huqoc{Hm&*ZW!%%l(YQHi^qbIph=*@i&21K*5vT7;nj`4gT~#g_W?J1(+zF1 ztq%RDZZs8zp5Ff<;q_6FzT>T)u=@<)WdNq9*Krc+FE!1}(<_}%>l_{ZchG?k!DZ*S zi1QTneOjx_HZRcB!y)}JT7%f_;}(7@kNF+D3r}F7r93fX>cnQ-UW@ zW#H0EVzpWjP{GFGn~2y~1M%7K56#e_kwE}5{tBRtKpmnj5sKOdl;!>}x=sDJC#<&zasx~`l+*?Na_0UA+p|1DrCUgt$k%Pt`TEhj zBhkQiW}la&G+8_I@hvm6)p=U2p_&uG8zo1Ey~<8gnc)@-D^c9m=Fcpx&ol4Gk6V*YyGx*MPv81vfomV2$UzCqis1+V{5KZ?;f4E~CACsY^7o<<(Ughy0uqm# z`%U(BhCn)WQyi5@iIyUB7$x&LfyyJL?uWX8AuWBFwMGIMT#&S_od`=a&)x_?akt3| zxNVLi5x6xkNFFg91OV7+(a3=PEw7BsBZD>#me>ld1ug%**hPyzBM~X;NDne>H9x{kSF{|-*eM}o!zo& zNGR7dV>WOb)4Ag_!*E7L1EfQ?&~8qX?+fyr6zt_I+Afu>sXUGw)d(Rzp<&Jfzuvhh zn^W30mT@+g$(5ZRpI^^T_?13q{XG*sF|0ghb}T3WA?$WV-g-dbL4Y)Ym`zr2lpdg} zE-|;p%!+3M1q5|je7U%12@`KrR_Cn}G*f#d(0(_4j!Bv&j+gy*e-1l1h^yoTZ%wjy z#p2!CFBP0p?3Y(GVHF$Ux`8aOU``fw>I*X@q|ExxV-^eUP@|@(&7qiN*0d2mw}C*o zi+a#ZI=84H9+tH9;^AO4uoG9t%bo`z93;^?ch(6Fsvd}Bq#kK(W_5RKXny|mB|ZO! zg-J!9J?bqp${_E_BP9`orgGq029Ld1JDim|X`f6yWf$jy=b>7#^E%3Ye#Uu%5UC}- zu>I~Y*q|(1ZYx6IQm>8XZWo}LHfT71B2WQuTV~4&7hsXo6)lp98C0$UR&*FcaPc2`zNc58ShyM2NVcfibm1+L{ar~ZWbJ0Be ztIR6e_q+Q;5jmlFb4&j2nI)nLIRN-$i{J;UA}M;kzHs5%SG!CmZZS}c^5^F@6jvhD zl>sJsI4L{ib#m1&j9;_U3G`ZI9bcrF>ncUu5ZRQ_>9K(NJNB3e>9+UW1>+}zq_iVk z9wrJc6AP2R8Cu;hRldS0wHzOQ`;*g{=H~q`i*$<4ki~!1?iLyNZ!@%fT~2(~Tqa@~ zl9m~>HKG!6#1(>7GqFi{e-=5+HLP;g8-3IwE3$vVtv*@>f$lD6_Ui<^PqWv)j_WSo ze;Tb#7!G80uWZz;yKGu2L1*GmPFhDruNx<`8&8`?;*|h{D~SX=YYv>K{J(Gpy!!ua z-*o8T#-g+{O2@@cuQU_+YXIt{;_P!@KEu+f;0c*zN z%VVQ>a>`M~II=V_4dLUg`g^7U2O2EG%Celx;||l`_?kgu?6{B>G6BcHq8egCIPj1f z?e*DL^r}2%@j~HipBoh}*9X_KWkgI{nvgIkwd=jJ99txr^f2`K(K?XD`_Y~y_;hjh zshfuT*un_=hMrsuY0`4Jtj`*vA;1*69kiqtw-=W~IfS=Gc z);1h7`{)H>PFwJshTc^Tgkk)5&OS&_pwAo6#~CoANQ| z<+4BVERI0T$2O3$^3F~2_1N%jBd~t<_Lf}irbDdSwtwKde(mt6{%Q|C&+zgJ{h6EA z(xS2yL8Q9v^LP__&M86O2zRA>HYu**reUCvjU+33mGuL)?|!bT@O*!x&lP5MVb*6E zn4&|%9XeR&@4xekrK<`59sQiAlcT$L612ke^QQJciqC^K`#~sHm|FM9;k+MKa;%OQ zf2Kd$@DNNAvF4#)QHol9VAeAJsXm(R6^fTUJ-u^lKa58vPbn%_Tl>`5;i={-onkBNq=h>FRaVhHG1c zZ9jZ}+1QJy)*WT#Y7COYCR6n2`zGcPtFT%QnKUR^#WFYfT^!WG?QozASLxr=goy*XrB2gT@%wX8Bja##?m+1W`w4xo zabS#A^=Q+Pq&*#8SDk|GwdsAM5y<}~Qf-EkR5)1et|7{YDs0j*#%BhC)*I*d9(ir8 zdUi{A|1}%H@9yI1Ndlz(k}X&m3Nf$-L=pY()s2bo-!llmuST-N(mx$^!1nNfp8p|A zd{ywy#(Fy>tHfZN9iTKnVp@0Ei?o!{{FIhyS_ddQGhu_X{!kiiZRoj1VcAM+YDdSS zAIIt;_s0W=gpC+m#(b5jwnR{+@z=wViAsIu6b1(P<~1et_X=d+UnEh8kkve&Cz32?HNCeISs>5_+A3*_xWu_PBK^f zaETX};Y3Zx8n7t>#a|1eW{*@CO6Q?}J&yI-e$nj^fYQ)h=M5W(9w|IjX54x}hl@bA zcb1Tx${Rv4ff@Z*yTPK-b6(0@lXM63#O&zaa3#h9jYakaQc_t-9yaV2Z$c8jv8!5P zj~NOoh5%!KS#lXcxo~Rg@{*l6V`4U5FxT15QUlwC@F~e$X1#PBbcy_L$3pBs@D(~_ z)FL6Q%XROwiMBWm#jX2^J|^dSfYgcL-KR6&uPf7}SR^Dmq|SiT>Ak?dpnLzhyCqWHT!@0hUhjAbd_znoH*77VHA0lI zH}`RreATE?j7d z#{S?NJD`T7*{*#v+~dvciGc#;TTA`)K89t*ai2l!sbB-uS z*+&_|^EFil=3ZU|@|A{q;R|b20U%`|&uv$sUpZgx#(h9{HTP|TJRUB0k$WO2rvV||LO2EXPy_Dy^UYKQJIHi#b{X$_- z6|_e{0<3(7);wC1%}+ygz)eveHxSNNi)9%nFmQ|6Mxyp!`MbEx$l19#*z3Ak**S#@ zmF?Q-Mz|8nG5LsHp`~)q%1Z2!f?VG2fZ6Wf+N;Y9!5(>b*?Hx`PY!HsRyoe>J|&3> ztZE>u66fS5mkJ{coZ|Msz&5uo*=JjCiBR1oxAuC4fBZ%F=+3Qy6hVSNWMoLyL%X?d zzJZ0;fIuVzJQEScOD7!gJbU)EHQewgPR;s@dr`4G(8S1)x-x&?1O;UkOG~Sxi22On zd`wr@1^U^lPbkoz;^btS1+R^7Jbq>sBFg-lx(2KPmxh(DtnDuzbXCeuT#}Li7}S7_ zr|r&VIVCIr?^7hAxzP%1jyvyfYV<6Vq6+sOAYq-X^%otOKAdl@iyzj;x9?+dx{`Aj z%6hh?XhRO6>3~Zf;@r1iLB}LR%n>z2|LqZW7ohCS4^-2|1l1qBiGy~>^2OdE0~)r#r$hHF>_3}@!B>r zOEGQpIiMM^0Ca91I-*2`(!qTfiJ4*8q(-|VN(|axjiMa&>#cl!9^Pz19loqk48C~- z0$4oY{`)%{5za1i;Un3$?@`H{g(uixM;C;-Dx}ZR1=+x01j&{82~VQ-Bjr;|?;iU7 z!%(yQ;hx_NTmJe1l5$7?rI~6udu@BByQq2fS#<)OTWEORk<_B?ik` z`_BbhZM1{@Q~v=QKaY|-S8KTgcOEv}f7mBj;36krKoJLg?`){1`v2?PC_PjHD3%Kz zcLwc5{&zMx&SBl3BUb+#Kiltda#Uq1IH3iDm=;?7+P{)LuKy{J5 zbOZNa%38n&p#6W>5uO20u}p-OHtPj5WrM~J1Tiz=r3z0d!Gt9mJ!!oEZq~ma|Isf~ zAKK;FV8|{zx3{I2Ak;H6q7)TM#BVW%3ru8xih;C@dYwxTsOre<;;S7u?cml##>m7s z`1Su#{=E$?pnZ~f;l{Lo*nhh5LMs^M&3`_&oG7Ioq`&^OSat@ZgV-RKqxL;4zv@R|N-YUsbsSl+`8G`Yv zeZacF#V(@T90mJ0F>@0lZF7B;3xOAA6leZANx~idUO08xU_@bHDC}i0^(y^0GfTzU z;_bT=Nlyf}VDN>8y7}(&EmRvALUf!_Y?v3yYj17(Fd^S0DA2z|FV0fRY0nJSH><`Kgg|8J3m7`-{`Z^}N`-t?l|Hq-i%uPco-mAoXH!YQ~3d;^Tt zr}y~Xh63T=D;ikNHHvpVN4Cb}MwB=g{(VKOV&ZKm@0BU~Td&eJH_J-L*N(#RGu_@W z3YWKe{+eUVS?B z)rN&{;BuZptqOs)#Jg!$>~y)SULoQ>cEvdq1LdR&IBM~q)%2F^Ik8QCv$Y?h`l}KS zH0gR2VS(j0P0xhM*%gF$8(W*^R0nNIe9x@qumqUV0=hl{K5nR!U-_ZCQ70&>octtw z9~0EVUxXoq9GYV-MRkP{?&=vJFs&=2spO7LqS76oX*n?!eaYVW31cn2&Xt*>-XaS2 zpfz8(wGD{Z=gq0Vb&}Ce^8OJheZ?F!-1sIntJmj@g3i@qY!fg0s$%|*SW9T z|Ay;W7cbiCA6Q z>QRA57%&mCna@9h24-pf(5~QX9@Ahj7D&3vP~uw77X^2RHHUVrpEEN6zk;Hana2W% zHgnA7*Y}IDA}9feTev%lN;!D8-ZBVB91$KNsChLHyy}VYMK*U!qT9b{NnWv#>+<5b z(MI~1*VaPdWQN}6_Q?zVY!jI_k=0lUI%{YU$QX4L?sAw!<8{6j-!pFvrMSJn3}O>G zT>RiqrVQ$7%ux95#oNoi`yy3MMU+rEyP->lNg6LKW2bU8NZz13RH;vp|Bm*bpiv0= zA-0a>Pd%gKnxBLcHc;=7pbv0JZhi0R9k)>55ThuhntJ)fh^TQ|SeQ*k)x47dbZLtm z{VA;aCC6h5>nH6|RF_-v34dF5DgV_-??YY>XWVo7k-DQ#CKK<>g?liIDosyM(q@4x zC-+{E-0`is(jYE5f!{rS4HzYgU0yEm%#qA;)t$Vv%jsQIKsq0<-PZZjrGz`**`lq4 z71P-ggrHcjsX#|Rlf5hF#$lObl@he)%H!~I$e!Z_wi!wRRI05m%$!b3_JPeFv*1-9 zoEBeF5}|~L4pXFO(SdQ<6sJ`iECWM>*o64-m%?;x#g&G#4{!$q=Lv$Oz?3vNP>5C; zAzfSs#lA7Qb0j-uP9&%odyIUjGlA>eg~bHjd72z(9a}c^!5I5!1*5@Qsx?GeEZ1OQrf}yq>OfdL zim__jtap9|Uyq+~b)gxF>h0g?yf{41R@pb&NDT7cozx&rDtrbVk1p|70z?lFA(?Wm zZ;r=l8;yCik|e@&Q-fovJK48?m?a&ZaK96=BIep^OQK>HxL7rQbKJ+H;Pw*|^_Vxj zx(uV5nUpJ}HZz-&DlOQ>rmX1d#Al3b-rY90I^9u}JiFy@$el+0s1mzzJNi2Zwlm2u zvb#ZpT2&Q#tC%S_WYA(FP^8Pkl==WI5%S}zo2B9e=hZAlG2{c7KHX6JR zoewqxDV5OF00&}XNmQKTJ0Jwi>>H4N(*!A=C;pJLyV#hY&F{d|&Zj?2;0vR4fX%ww7inJS?X!f>=1e*A_6q$bvgF>_+@{b zzqH%$L7>atP&S;y{26^CIG`Crntq^n&&@b-U|N{Jfi&R zsmV#P{P|{k?npQc3?v%PX~!{b<7v*mFerfF>$v#T)`s5Xd3d&0z>VmTE2d_4s905h%_G}t6au;&C#R0gxw1`O9Xa&jySzV1yctT0;&6lFh0tn zJ-=e1_SR3%aI$xO5yzndCO@8$9CCU-gf%plWq)TVD#~p1@Gvu}EUq|YW(hrIiH3-Z zutb9gp8i9?nVQVaJ-k898A0lG->ufl;dvw!g9wJUO zQLs|t{B*b0g=?BTj@uy8^+wj+!W^wP@qK7E20AA3Ca4qISP3tvx=dsZ=Og6z$&-u@&sDdiHUUbT|gZVK%R5aZZ;)Nxz-0 zctF=4f8$D-a3}3WMiG90eq{DE?siyRld(~w7jmPg|7fb!7OSqIv)!1mY`1ZX!T3Eh zoEQ;2|0!e7?8apDQ!({l_64uaPXpN~I7KcZPaMy_7X@Eyl9Cuut2;gt52J@rkEKc> z@YSxAYqLTiQ`Fw4?_#DV%eBcT7#Z}ly^4Tpz%n=wtui>0zen?fwA{ic0zs00J5o)L z1|oKz?F$&B^Db@NLt~9%wYTq&@;-ir6+(N9BIX$HVCB8#q_Olht8X53hsVrG{ye4!^&PO zj(9^y=RgD&*g-O;d&hB%+Au{&F%q z)Ha!IdL9nJO3&Ps)^P(KIBP?3+sOmP{RHvlB|SPKA|F-;JFu~u?CbONk%^g^_kS*- zTbm_pxn2FaEBhtK`WB=ZqsA0?a~u>+q1Y_y!Z6kNKCvFH$=@haF&S3- zxF~(~@D+~FFd7Af=xN2tmB;(={gVWZlQ?O8lIYwK0ivFWC|^?2Hb9n?F_`>-Oi%Ny zs8$!3t_8d*LW2P0`EOM069*~LGmq$C|S!P+fOJbC+}^2m$&Jo zUPsd-4yY$^HX9ZoY~75fO-y`+V;_x+%V|~Oo?I6ZIh)owchupXIA|XfL=aJ|n7_-- zg=x!#^Y)AJsPUTk8EBxZTpJ5!cHVM8#{eIUOuCpZmYJojT+BC_nZKRh&j-?*V`eGa z^y>FqY~}VFY-u4$`pn6|5X#5=^9N|LvAi|=dZi;cVBv%jv_BbR=+fLcI?cVObzlh85n8yYZGC0i;jv&IY+@2E-yrQf%jpYv4fXkVt2xO^N0kjZX{=gN$kr5w8B z<8cGB(^^;0ZZ?9lsJW+Mq*EfyI)bP{%U2fdxK`Cbp|;C@>EJQoS%|}iU>mjnX5_Rm z7qH^2ljncB2tYtM_X~)o0H~ub0=@7=jg$?cB+RZ=QuV%l0Cm=E2PE^ zKm1RYl8G4oZ&!W}{rO}E+4^F0`rxJ~(AB|bZ$-0X*dDlL)`s8U?KS{T<11Xx%2e!z zyuLKZ&ir~;v{WVX#=Pjh#YX~e{W9Mt$H@%=)X@pyUVZh@4}m41Be^T_)nO2Tm3ouN z3Bu1S4Tal=HFT^>Bv>Hp66;HlAV^p4cZszwSC7ZbNvzt5400J$pW~%;hiXOg2k(76 zdd+s%+!Woc2n>2gY)VA`msCFGkzqJK2;U0dkoqM6w$$EVkRG+kX;ZId3H`{Pcw6bb z{6C>HhP(Awg-{lV3UK$DsC0tHN z_qS^e8v|GS1nO{Yq=+e0%I}+-{rv{O{hsJ5Z#!T8dQJLf3EaM6( zEmg@784J~*gcY+f20P6K=D}vbsEZBuPn~ooCdL#yIA~lm8>J8vs3=56l((*#0$gdT z1Ed#m(O&0`mC9QpWI&KG>(cqeg=O&i5Mk;7Eed6p9`p8S$f-l&j3!DV&<_8<@B_xf zfl^-z^i6zbr9Lz&0}a2T{0Ja1qld=|FxI0fN)I~gqA9EyZ#zVOx;#Iqez>|V_C!zd zc-Q6ZLm{M+Xz6vlr2Z8oF}zsA(Z;#8qjlawYy{F^Y5R|W=riYae|XwsPZ@ucmwpQq z0WhVKAQb~4SjmOdKXBs!nG+aSCLjT=s;hUi6++JO{9BAuwT$U%^nUyz?bQB*>oLF8v`~>`xP6j(qkvr8!O7C2CQsk!(ZJzdH=(z2m4)Q>P z-Cq<7PKdznUzN;@sZ|IcmBm%n&e~5|wA@$y_%(B@jTAlV03w>reIUYL)r!gRZE@kW zbd8pLj0`25n)<#QwKMMgH)eiNbk5 zzx_kt1gml_)r|4qIoF%Ofil2x4xadj(ZWpbmw((YMV6aT0B(BocT{;wfG49j3V&Zu zO_FBxCDbaaBb{@X;El?S+L_?t#A{7}hrvzkj*Hy*%G)xG}4-1np+!%Ta4< zx9wM|sECMoCuHFdeV^T*31K-FfBrLNl+4zHBd%cwxwat-a9C4<&Fa>dkco@0smKzN z%U5?lvMJ_L@kQdj8BJE7k>GKp9+QpO75Wo-fh zk?idKlLy$1WIF9hNi%&PRTu;g>1(RaHijGcV|>NRS`@07&w=9^e}T(UU1Ef-Nt&{YCs*L?22v z`u>|{vnbk}zhva7&?U(8v%z-O$Di0-pg7ENQ{TuI&UTW((e;~Z z$vwt6@sh|3F3(MZg`}revqFZI&d+?2&ef(-wdIztU);+y0NMq_x^_M#^~WKGvZ%P0 z`(C#*Eou1TJeS-x`ey%^A*%fpYW_PgtGDt0pSu71`>pZd2Ois`+?=7c9td76X-N{PN*@kOA!-uge0DKl_R3<|wh>P1}NF(t7As+c;nz^9Zl=c({%l?I;wlFj8Ku;bb=lblw=+M!Aa&)uYDL( zHJBXlZD)^z#eeZ8Yand1+m}2P7?o+t+j4 z)_t+}o?-?o-N*k#`dcm^cI4~f)JSbBQrumd%nVI@aeKP}%qe+-Ggv)zQ9Io-y#ghei7WdH(%7x_^q5^hsO z;2u@)uVR#o4d|9oKmtfepZiDtG)PVZJYfpwm5UoW z!EESfDO+0-pR)w7T~}5{{L|ComAOV1Jq_tf*MZogO2@51-n}b&HTM|K_7dyhJdf4f z>u;c+l^!eRzQK8m56>R3bJqd%C4lZME-65)K3WWXGNtIy2py<#h_Q>(zi(}cb&~I0 z<+L#VCpiE#S0WO^4|5HYs`h?QwdbBTcJc2RAl$DDKhp072{(Zg#dH9V6s3xsdC9yY z8u&Pi_?YnGGkNV*H1w6ltRK>h4Pfzt$w*-yn|2S1Rx28g%!Wf28g%wtXVr*Knnr|~ z52iUeuF;uAG$v&ojT|UU({OTxIXA8buLnV2`}UOX@6HpBBBLr>&|;{k@;X~v6OIg8 zYBp&Pqq#gefRh)aA<4QYdr`JbxK}AqOFDO}- zN+6)XH#?|Gdz%!R+jMqXUuMmgm!c0(PM$y8O@E6+W=VuCS?shXr2YgL2nEOz0tNiX zvpp?6YR){GV`Mi`evI)>`n#dNlwd@}sm}=r$Wwa10p&9d4PngrHIl<>ftjUA&eu*a znTu;A|7XoM-Wi>70AO}{vcN+QYwo|yd<5?;N`o-Zc?9RNb)5&zK2;VSK2PUc4^EG= zLnB8nY(MyTP49?kS4~|w(a;Ru;?y#Fc$7WxSV{>nbRx{-PmeHy-b30k5VW95no-N5 zQ(r3ob3@xK>%hz0bw{{-fZkrl1%*lu#^^f}J09`p91@r;-bNo9i*h>C)mUI9HWn8{ z`x5?WSQFtI*L}y&oS@C;paM;aQ6r|~Z;ocMGfm6R(ht5Zve#eaHB@ld^3WD}KPsmA zg}2ocx5Y6CuU;W*WV0k-fGg}99t*;bJ-x2q8v?VGLH`HW>+^=3p8vh{Z+#d#a*BvK zG2uscR4dp#BHQ*)8+5^}I`2>Ux#?U0+dD%K9U>w|NM;wVuqCwn+Y_#2`Aat?#{C6% zs--Paw3rw%t&>^OAW=Inet7WrFAbqCNcK67Zztv5sW>$k-jof+d^NN<=>F2{&8EV~ z&JH*b6~!W40G6i7tIsp~KS7pF;d^*dKtrh2+-NUk7e-d>(9$FCxa5!tosJ5W99~Y$r6!T;jm1Z@&LNdS_Q@RLI_)BKL9p9>G=5 zc!b1^EH!&@Q8G#s;>SfT(VLm>o@;K2dbXm;>T(T0OVdZG0Lrw6eT!dQR8 zmKK~JWTW>sl#3O=~h}FkpDR5>8M=pO&tXO0k5Z; z`OP$i3R&I!7m?5E=YG9`akSJg>^Z8aQ+fRBn{V&8`Rw;-81y_rce~Ho33Ze6JPlkB|bW#)DGThK8dhEleeu-SVNGR&4tNV#R!6? zbK5cEoeCrCKd3FIVx>N+v!m?l!0Szi@39}xtKB)`e1hzrf&u{!5ne)e>O`@Z{)hq` zU8n_R+jYJ?Zcf-Un*e)$!UW{n-0>u7ayx(38G*MaP<7xFrv!f)rrL`Og4Y94t`f!!w<3+PRa&2j68>$^ zz>AG}R`bidyc7;3-(~Xh_Q$DwMgt*a=eeA)XA+(6V2fO%ywMb@^mlmcDB88z`t&Y{ z(H|*o>Rb7p)tk)xXRGx;L^(_`SuqDVBCV7v=MMfA{*E4QeZ6oV>-XIOQl{>o7cK$$ z;dwV30^JcQI8rbM=OMb+MR;!Gu5znxH_s1&vw4jP&1ZlFJh2;r*IzlFVL*BK`PC#B)d;?6sBoj>pQG2vR-NJ%vc8y$)vDjq6G7t0|;`cnKL19?7x z_}M{g%Q#QBD30qgIlF!hgGDJ@Zy(^_yv3;SsXS=y3iuY6(WMwP4S@@n31X#6b?`Yw z&l&0roWrqtWA)H-G4X^H>5I_fjVW-4UtwNs zAdR?$%k6oo=Sq`slA@a;g@c%B1jXMgghjZS73APE+|k9Uh0=eA{Pp>-bxT@&&{oEW z@7`Yd;acAeD@ed&vPfRu8|}Ea>)sB0c=b?#Zx2U>7&|J8fFpGW`!qvhV1v}1)Hnc@ zm+Ryvm7q*L$z>YJ`M#Bjz_WG~Br;b;40wJYL2tJ4L5*r@3u8CdjbFhzOPM{>#zB#0 z63I9vB0*0dsP_>mTsupAH~Ujw_?*$}l9_%n(*Py`Ezf1LWi-U&dUGm~*g#p28ZwDF8SVXZ7*I-KHH<8XaTf?^G+=Dvyyw0~0 zj2>C$LnPp)Jk8SSx$f{kD>dqQm%oM9Bb*ve3IpgAd5Mcdb`u$p>#Lyi7wV&ay)0Rb zmu+8>7Dt9s?p$f=3i;(0{OBq&F0{VTW!B(5AXi#L2wkh} zK!0X?7UOO`aEhFzLDStQxgU)qivdJHjz_D+Zvl}XiHlff*Yg{Ifddq9ODQPR6}i<2 z-u=KbwBCH!7RXFfgE>(RME$q!I8@CDba-M15N@9Vt_^Ux&ZCiMLnfhDo1SCssP3(= zlrU+D&9}x?tHU*&%`9MXxTF9dwG#~w zzEC4IF%{)BIUCf>2Cp4GWg*V`0IJ*!yimu-yal40xn}-ArC{yX=P&>Ci{O{0PpOorKqptd1t1{aOTy`R$DPLO%2 z5kF8*UYytr;lZ>=6F7vtzg(g_%=*DQeoli`@WRboQN8V5y$6RPjtin2i(P= z3C?pVnEHC3FuXdEO5Pk}!vTT6rRz58+3Br>4gC5vs+EWElm%kXa9Nq0YfpE1;N7vt zEI9$vRR_+QErZ+S+nt{4Pk`GDL`#HO-M^Bf01=_V=S0=H>#LcJMF__8 zB)yt#d6&bHA1`ivDJ`-2>}5- z*b{z^HMQZ|7Q-=mjR~FOare*3*LzCGT}z4Vu!8;M;1H|**ZSKVNT0FxMBii|z9rOQ z(^U_B*&qRMSmqp&2Mvm^*nt@p_lpUL#6HZ)QUm->uA|4=Dtj8X%9H?ih_n_H_Plr)ZYi5$?!+AiN`3-on zHwNvPAk;+aszpm~+Sa=rf0MM{yL_g}F8jw&gcsbXZs~({|=*OgVz$n%ve3R^Owzme4!IU3C;U71y-J+fAW4oR4SgXN{(qhMQWV! zztty+uY@iI5<*!R1f}O+^6zrl-F>^aZ0@Br<1;{hl=f-*Zc(Q~3}fZ03z=tq{8j(3 z7e^*~TzD(y*rceZ!eeT%TALT{ov+;hT`?0ksSd}txqC~qK4IYgygu6?O=aOGaqJ?E zmi7H;KR6H&0snhK4M3g|99{$4B4Ti_=a8FL4B-xZHfD9o)`!@j9vNoo%ufa$h46;7K2O=7M-r`6*2gJAZEb5YnO+b7CtQ4y?TQ3~!0%S% zrmmNKdkY1n{lIrg+dW<&U@|fbBT)Cc6w*W9?TMMCs()dnKA9F0-F}Ut1d>9TF!k{! zsOkC1;j)ZK-Ymkuqctr!Ap_4WUcs^cGMAfRH92JL`Rnm^p0Sl>tS~R+;OGIJ@q+%Ze$3V9nHUb!e$s3Er^I#^J@ORlFioUlo|$iIE=7JZ2C zg5H_N)3>OKv)&F3bEJV0EgP;(%~f-rMDJrl8V5I?OAYf}Hoj0_wneq|vb-V4Av>2- zf*@IRZ=IdwFj4*P(!F%TkbyUXyEz;RaR7-SP=o5*|5j%%%5|z;auUD7t)5u<+H32F zzXGL})~Co!ZXR!Ji;-DC9!X*&M?6k742WlkvccyIna8XATFT3MSk!qlF2q3#_!Miz zlAx-$Rrf7aS$U-kH*v=(ISq2o)1Ro<^PU&Wuv}Pboz;SLkF6Ho`YZ@i^tkF3d*ARp zHiEwa;XolyeXC8-VBh{@$h#m@;Yo|H*M0l9a3rm&!tEG299)M(t8q$mzGF>DJ;RDO z$1*SOAgsV_W8?{kT8RD}%kQFdO*ceQ4tDIbt43pSB~0Wq%GhkAF-jHK#?4gY)z@EB z=OBZ<%htf^pj50M;D`|-Wn}nC;SS-??}4gJU8^tiR@zCRJqh`(aU;96CcEK*#2b&& z;&f&H+nc_0(NMV+EKsAOtI>1J9F3W~iD_l+va45eL^1tLpOKpHUOC9?m12x0kS*ny znLV@1V$C(HI~hVlFLX^m0kvcZkVYEJj=$`#&CtK9N$wa7J&jj_ySJdj*!pna;5V6_ zs$h)avh{pgBodWPGwpRPp2H!v_)^nG!@qKOsf`_k%+Iy;;}tTn{n^3DHH+lyNaZN- zob+E;n#M;40p+nyuHo)5ky!uF2dg!0)bEDxE@g`Y;or&U3OQp2Q&+M{-s?D~&!HauZ1|NB71YIb;roT$Bm*(gOWLdFVPRIe5z$KKd~h0AA{#|L z**X7*vbT<^YVF#_Hz1;bbfzwC%-uD~7zkX+oGlrYJ_r33R$DG%7&Ffz40c+O5orINDl~MX?(f2`(oAGO7 zuMhO5NCHCE|DJir>7uTZ1|*Go9(Bw)xS-TTTKca_)%ctF*AvbSM!VX&(Dr;vJ3Wg2 zh+WTp>bF@gRZSn8U+Hv;{~$X*>N_^o7EOAUnXHwc!xRsy!Lo}qNf8xtuJ7P|d5Su* zgQBbALz%3Fd#%-9iMmH?XBQRnt}T%bVJz~s)t?^pV%@yZv!;?>GCR!7uVf^;X>~<& z7{dU!DOGdWT@GXHuJ%C}i7Lia(2L?;FG;EXII4o87e)eAxlcFwr8N01HAhDwy}CVh zt4#vl_sKzWPY|p4h3iR~kH!h<4g*QPDLYpxxuV5wGwn;+l_!V@!!UznMJhNf z>1PSC4MRHk`;WBo{tsSzqH?xFGSQmqkYx+GB7OIFG1xS=bMP!T`pJh|^jWNp{*(KcHK zCwWYkT;QW?;)RG*i%Gv#j?>YbGQZO#=Pj}^8s7R5HHqVT41KsllIU80d+Vh1{C@1> zQ@SfYqN6)2xY#@v*LrH>eUGnk5s&)`@D#p3Q&?N}ADoOJw8I%c%=3-cAz3jWA5URT z#ccfPskPH<19VY+dn;nlydiYK`vLZ-a0P4DDV2#OEsb{~pDjyIOPA6??Zcx=Pi~Wh z6tmAoCv_ntDasVfd&MgqRV@CdH3pjfsD!;b-`M1?tj9!-=NkRAW=;4PgX$JXBzVzt zX00w#Pe`APR99o}->P(Y)1P>ABEUvcjl7oku6pBJ?5H(TGi8ajmZa+leB>j?s!`5JnvH0q^AF?Qw()%)fBpf_HI7w0 z$MHkJ{^;FweIc7;R-qJDOz!my286s~3-hX)uBoGHIqo=?5ra}o7sU?m@YoadTU~SPWSkn}(mHRAN{j7L1RQ`O(WIYXd4)4_crJRLkCn#3Xmg z1-CM(rfZq;fwakYF{vVKzcg9*)|`?zHM)Pvd+9waNqLx~pAn=Aqz%~v@y({yes(N~ zP4NIz%-7naEdtM)K>7T+sm;kVlb(LaD_QI0X3AV%<9M&!F@Hy7r=^Xe1fCk6dM|Sn zr9JjK+6$B#BYu0+GJ+Qs!l3YaiK}9~@6@=z(*vD+A!im;iT|=KmDi*x|MMz>H>V|3 z<$stMI-!47hV_4aykp5J1FYu%rD}h6;K0a#UjfJT0!z^UYEML5#g*@WK8{Xi0LlJ; zwWrdpy-dJE{nZEM@tOAOrH`*gKI0{PKk-LXHR(7;1@w zkE*gOul_aqPz+nRH2=t~z9yU@j!nA}M>pW&a|)s3PNBwuyg|n8X38BN%O4lP#2KDs z5uwk-O73xu>L!BC4NiIG{RK}CT{cY9 zy9L6N9z4K)@$&h1TZz5CKIN8vr`Z6(A>UPAH0Rc|)Kx$4-4-9Qrh{$UTbt^*>3>VB zf4NU$8~IiqnOSyb$XnoIm-#s`&+Pie?1JMps8;nT^7CYs zm;_48cjvdaj?lw9#1qeZ2vD3IpYjD78*?yT%jpP?rDO1z1$R!8WL9nI9b{o!$ifyugIs6CzFrL1nE?9osAY;UCs&ZHC`7QENK zxyUc`q`4*at9NI49F^H^z61T0i(%}l5MBzB)&|2Z$@FO`1!<s&& z(>i{hiHffx?(uvv_`rV?W6Ba*DB#!(+GX@s2`5b{^m>_wWypDAmGSoi+E=Z>(tH2o zh146*yMJJLOk=NXR1Cj|X11&5wNng?)BCFp1mU5D?{uHC#Wk*!4Cm{^rHsDDpwaiR zx?6;euEnl4@OW;ZGK+3ZaW|k~eyeEGN|aw5-_hjxPWKv{VZev(;rw3wJ=31TT)-ljqmEAL9|y_>K1&IJn8wH)Xv4#Sl&I9|7&!~Gi^T5 z#FqQ#Yd!su3u@RaJs;j_yX9*&K63A^*gpzFM&O-}+i3cGO>-OVoUFlQCZz(=C;FXi zpDOZW3q+`60|d2GDhvOR=^G5P*$C#e_T_gO=(vP&7A?=&s-Ul%+GtzdDiD!{MidSH z`BwS6!DNe^vW)+HJ^TOt`uqQWy|8338O17^D8iYyTyYm#ev_}#_HRr7bmzV{tF8+l z3$aqZsGSFd%NbBs?6n`C+RP^F=%5Q|=$KM0lC`?@PnZwuDzm zN7bSE@q871Etjy4qW``u{$s9e`bWo&eIh{JVYE=+r9jj|y_1dabH3(>3kJIdZh}_7 zmN;|&?Toqozny{4|IC1K|4-lGWz821htYMj?j=XqvMtH^Dzq@t9eK-dAN>2P|9Sb( zz+0+l=Ujo|`lIFcGap*{pO?;ptY#$qIr;rTaEVAyG@&Q|_hr85m-n%}p^2JUt9_ZeLlem4{H7MJ#|+B9_#3( zBqw%q$8K?CaI&DA6;6UVxgTM0v|YlOYOp@6J(%43^q;>4VuplHBMU}X6RsZmEvWrZ zzXz_Cx<=SCB`s!TmDM6s1lNOH03Xl6ujP%u`F0OG*_L5*w(RT0blQ~Ecs>jajoaPrx$iZzT(RUDEJQbdeR!{_^+-EML*JkB zx}~xXY}(o+D*p#X*mB*UU|HwZe!k{AXttFBT_C!q1@o@}}t z=r#Tb%wiEKKS0Rxj(7xM6=CfhC@ zr)PGf@VTe|{`8t&C!6iBPqs)Hp@9vh|It}H2Mc~Zu0ZtBBMXL|0OW^?|Bz`H|2xMD zAJVaZw(Gjp*aS!r{;FI0347z;w;?Cr-7EN?Pv%2QDex=(IsKjPF*-`LPX;Oy6SLTL z-A2E_np5j}knuP4apXmh)-y)$2wo+8�Lftz9rd|7nxDV7bBtR-N-dozp7UB`sL_ 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - aw_addr - ar_addr - slv_port [3] - - - - - - - - - mst_port [3] - - - - - - - - - - - - - - - - - aw_addr - ar_addr - slv_port [2] - - - - - - - - - mst_port [2] - - - - axi_demux - - axi_decerr - - addr_decode - addr_decode - - - - - - - - - - - - - - - aw_addr - ar_addr - slv_port [1] - - - - - - - - - mst_port [1] - - - - axi_demux - - axi_decerr - - addr_decode - addr_decode - - - - - - - - - - - - - - - aw_addr - ar_addr - slv_port [0] - - - - - - - - mst_port [0] - - - - axi_demux - - axi_decerr - - addr_decode - addr_decode - - - - - - - - - - - - - - - - - addr_map - - - - - - - - - default_mst_port[3] - - - default_mst_port[2] - - - default_mst_port[1] - - - default_mst_port[0] - - - - - - - - - - - - - - - - - - - - - axi_demux - - axi_decerr - - addr_decode - addr_decode - - axi_mux - - axi_mux - - axi_mux - - axi_mux - - - - - -