From 4102b71e33bca9760d175c2034ff1c412eac536c Mon Sep 17 00:00:00 2001 From: bernerl Date: Thu, 27 Feb 2025 12:46:21 +0100 Subject: [PATCH 1/6] axi_burst_splitter: add single beat atop support --- CHANGELOG.md | 3 + src/axi_burst_splitter.sv | 115 ++++++++++++++++++++------------------ 2 files changed, 64 insertions(+), 54 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 747c92051..82d9eb6e5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,9 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## Unreleased +### Changed +- Add optional single beat atop support to `axi_burst_splitter`. + ### Added - Add `axi_burst_unwrap`. #326 diff --git a/src/axi_burst_splitter.sv b/src/axi_burst_splitter.sv index 4f3626ebc..390577f87 100644 --- a/src/axi_burst_splitter.sv +++ b/src/axi_burst_splitter.sv @@ -22,14 +22,15 @@ /// /// - This module does not support wrapping ([`axi_pkg::BURST_WRAP`](package.axi_pkg)) bursts and /// responds to such bursts with slave error(s). -/// - This module does not support atomic operations (ATOPs) and responds to ATOPs with a slave -/// error. Place an [`axi_atop_filter`](module.axi_atop_filter) before this module if upstream -/// modules can generate ATOPs. +/// - This module does not support atomic bursts and responds to these with a slave +/// error. It can however support atomic single beat transactions. module axi_burst_splitter #( // Maximum number of AXI read bursts outstanding at the same time parameter int unsigned MaxReadTxns = 32'd0, // Maximum number of AXI write bursts outstanding at the same time parameter int unsigned MaxWriteTxns = 32'd0, + // If single-beat ATOPs are supported, will then allow unmatched ids to pass upstream + parameter bit SingleBeatAtopSupport = 1'b0, // Internal ID queue can work in two bandwidth modes: see id_queue.sv for details parameter bit FullBW = 0, // AXI Bus Types @@ -100,10 +101,10 @@ module axi_burst_splitter #( function bit txn_supported(axi_pkg::atop_t atop, axi_pkg::burst_t burst, axi_pkg::cache_t cache, axi_pkg::len_t len); // Single-beat transactions do not need splitting, so all are supported. - if (len == '0) return 1'b1; + if (len == '0 && (SingleBeatAtopSupport || atop[5:4] == axi_pkg::ATOP_NONE)) return 1'b1; // Wrapping bursts are currently not supported. if (burst == axi_pkg::BURST_WRAP) return 1'b0; - // ATOPs are not supported. + // ATOP bursts are not supported. if (atop != '0) return 1'b0; // The AXI Spec (A3.4.1) only allows splitting non-modifiable transactions .. if (!axi_pkg::modifiable(cache)) begin @@ -123,7 +124,7 @@ module axi_burst_splitter #( .axi_req_t ( axi_req_t ), .axi_resp_t ( axi_resp_t ), .Resp ( axi_pkg::RESP_SLVERR ), - .ATOPs ( 1'b0 ), // The burst splitter does not support ATOPs. + .ATOPs ( 1'b1 ), .MaxTrans ( 1 ) // Splitting bursts implies a low-performance bus. ) i_err_slv ( .clk_i, @@ -139,16 +140,18 @@ module axi_burst_splitter #( logic w_cnt_dec, w_cnt_req, w_cnt_gnt, w_cnt_err; axi_pkg::len_t w_cnt_len; axi_burst_splitter_ax_chan #( - .chan_t ( aw_chan_t ), - .IdWidth ( IdWidth ), - .MaxTxns ( MaxWriteTxns ), - .FullBW ( FullBW ) + .chan_t ( aw_chan_t ), + .IdWidth ( IdWidth ), + .MaxTxns ( MaxWriteTxns ), + .FullBW ( FullBW ), + .SingleBeatAtopSupport ( SingleBeatAtopSupport ) ) i_axi_burst_splitter_aw_chan ( .clk_i, .rst_ni, .ax_i ( act_req.aw ), .ax_valid_i ( act_req.aw_valid ), .ax_ready_o ( act_resp.aw_ready ), + .ax_is_atop_i ( |act_req.aw.atop ), .ax_o ( mst_req_o.aw ), .ax_valid_o ( mst_req_o.aw_valid ), .ax_ready_i ( mst_resp_i.aw_ready ), @@ -191,24 +194,22 @@ module axi_burst_splitter #( BReady: begin if (mst_resp_i.b_valid) begin w_cnt_req = 1'b1; - if (w_cnt_gnt) begin - if (w_cnt_len == 8'd0) begin - act_resp.b = mst_resp_i.b; - if (w_cnt_err) begin - act_resp.b.resp = axi_pkg::RESP_SLVERR; - end - act_resp.b_valid = 1'b1; - w_cnt_dec = 1'b1; - if (act_req.b_ready) begin - mst_req_o.b_ready = 1'b1; - end else begin - b_state_d = BWait; - b_err_d = w_cnt_err; - end - end else begin + if (w_cnt_len == 8'd0 || !w_cnt_gnt) begin + act_resp.b = mst_resp_i.b; + if (w_cnt_err && w_cnt_gnt) begin + act_resp.b.resp = axi_pkg::RESP_SLVERR; + end + act_resp.b_valid = 1'b1; + w_cnt_dec = w_cnt_gnt; + if (act_req.b_ready) begin mst_req_o.b_ready = 1'b1; - w_cnt_dec = 1'b1; + end else begin + b_state_d = BWait; + b_err_d = w_cnt_err; end + end else begin + mst_req_o.b_ready = 1'b1; + w_cnt_dec = 1'b1; end end end @@ -234,16 +235,18 @@ module axi_burst_splitter #( logic r_cnt_dec, r_cnt_req, r_cnt_gnt; axi_pkg::len_t r_cnt_len; axi_burst_splitter_ax_chan #( - .chan_t ( ar_chan_t ), - .IdWidth ( IdWidth ), - .MaxTxns ( MaxReadTxns ), - .FullBW ( FullBW ) + .chan_t ( ar_chan_t ), + .IdWidth ( IdWidth ), + .MaxTxns ( MaxReadTxns ), + .FullBW ( FullBW ), + .SingleBeatAtopSupport ( SingleBeatAtopSupport ) ) i_axi_burst_splitter_ar_chan ( .clk_i, .rst_ni, .ax_i ( act_req.ar ), .ax_valid_i ( act_req.ar_valid ), .ax_ready_o ( act_resp.ar_ready ), + .ax_is_atop_i ( 1'b0 ), .ax_o ( mst_req_o.ar ), .ax_valid_o ( mst_req_o.ar_valid ), .ax_ready_i ( mst_resp_i.ar_ready ), @@ -278,20 +281,18 @@ module axi_burst_splitter #( // that burst, ... if (mst_resp_i.r_valid) begin r_cnt_req = 1'b1; - if (r_cnt_gnt) begin - r_last_d = (r_cnt_len == 8'd0); - act_resp.r.last = r_last_d; - // Decrement the counter. - r_cnt_dec = 1'b1; - // Try to forward the beat upstream. - act_resp.r_valid = 1'b1; - if (act_req.r_ready) begin - // Acknowledge downstream. - mst_req_o.r_ready = 1'b1; - end else begin - // Wait for upstream to become ready. - r_state_d = RWait; - end + r_last_d = (r_cnt_len == 8'd0) || !r_cnt_gnt; + act_resp.r.last = r_last_d; + // Decrement the counter if there is one + r_cnt_dec = r_cnt_gnt; + // Try to forward the beat upstream. + act_resp.r_valid = 1'b1; + if (act_req.r_ready) begin + // Acknowledge downstream. + mst_req_o.r_ready = 1'b1; + end else begin + // Wait for upstream to become ready. + r_state_d = RWait; end end end @@ -329,9 +330,11 @@ module axi_burst_splitter #( txn_supported('0, slv_req_i.ar.burst, slv_req_i.ar.cache, slv_req_i.ar.len) ) else $warning("Unsupported AR transaction received, returning slave error!"); assume property (@(posedge clk_i) slv_req_i.aw_valid |-> - slv_req_i.aw.atop == '0 || slv_req_i.aw.atop[5:4] == axi_pkg::ATOP_ATOMICSTORE - ) else $fatal(1, "Unsupported ATOP that gives rise to a R response received,\ - cannot respond in protocol-compliant manner!"); + slv_req_i.aw.atop[5:4] == axi_pkg::ATOP_NONE || + SingleBeatAtopSupport || + slv_req_i.aw.atop[5:4] == axi_pkg::ATOP_ATOMICSTORE + ) else $fatal(1, {"Unsupported ATOP that gives rise to a R response received,", + "cannot respond in protocol-compliant manner!"}); // Outputs assert property (@(posedge clk_i) mst_req_o.aw_valid |-> mst_req_o.aw.len == '0) else $fatal(1, "AW burst longer than a single beat emitted!"); @@ -351,6 +354,7 @@ module axi_burst_splitter_ax_chan #( parameter int unsigned IdWidth = 0, parameter int unsigned MaxTxns = 0, parameter bit FullBW = 0, + parameter bit SingleBeatAtopSupport = 1'b0, parameter type id_t = logic[IdWidth-1:0] ) ( input logic clk_i, @@ -359,6 +363,7 @@ module axi_burst_splitter_ax_chan #( input chan_t ax_i, input logic ax_valid_i, output logic ax_ready_o, + input logic ax_is_atop_i, output chan_t ax_o, output logic ax_valid_o, input logic ax_ready_i, @@ -375,9 +380,10 @@ module axi_burst_splitter_ax_chan #( logic cnt_alloc_req, cnt_alloc_gnt; axi_burst_splitter_counters #( - .MaxTxns ( MaxTxns ), - .FullBW ( FullBW ), - .IdWidth ( IdWidth ) + .MaxTxns ( MaxTxns ), + .FullBW ( FullBW ), + .SingleBeatAtopSupport ( SingleBeatAtopSupport ), + .IdWidth ( IdWidth ) ) i_axi_burst_splitter_counters ( .clk_i, .rst_ni, @@ -412,7 +418,7 @@ module axi_burst_splitter_ax_chan #( ax_valid_o = 1'b1; // As soon as downstream is ready, allocate a counter and acknowledge upstream. if (ax_ready_i) begin - cnt_alloc_req = 1'b1; + cnt_alloc_req = SingleBeatAtopSupport ? ax_is_atop_i : 1'b1; ax_ready_o = 1'b1; end end else begin // Splitting required. @@ -467,6 +473,7 @@ module axi_burst_splitter_counters #( parameter int unsigned MaxTxns = 0, parameter bit FullBW = 0, parameter int unsigned IdWidth = 0, + parameter bit SingleBeatAtopSupport = 0, parameter type id_t = logic [IdWidth-1:0] ) ( input logic clk_i, @@ -549,7 +556,7 @@ module axi_burst_splitter_counters #( assign alloc_gnt_o = idq_inp_gnt & |(cnt_free); assign cnt_gnt_o = idq_oup_gnt & idq_oup_valid; logic [8:0] read_len; - assign read_len = cnt_oup[cnt_r_idx] - 1; + assign read_len = cnt_gnt_o ? cnt_oup[cnt_r_idx] - 1 : '0; assign cnt_len_o = read_len[7:0]; assign idq_oup_pop = cnt_req_i & cnt_gnt_o & cnt_dec_i & (cnt_len_o == 8'd0); @@ -563,7 +570,7 @@ module axi_burst_splitter_counters #( end always_comb begin err_d = err_q; - cnt_err_o = err_q[cnt_r_idx]; + cnt_err_o = err_q[cnt_r_idx] & cnt_gnt_o; if (cnt_req_i && cnt_gnt_o && cnt_set_err_i) begin err_d[cnt_r_idx] = 1'b1; cnt_err_o = 1'b1; @@ -578,7 +585,7 @@ module axi_burst_splitter_counters #( `ifndef VERILATOR // pragma translate_off - assume property (@(posedge clk_i) idq_oup_gnt |-> idq_oup_valid) + assume property (@(posedge clk_i) idq_oup_gnt |-> idq_oup_valid || SingleBeatAtopSupport) else $warning("Invalid output at ID queue, read not granted!"); // pragma translate_on `endif From e5d48c0319cd1d68c242132f85fd4252df9125ee Mon Sep 17 00:00:00 2001 From: bernerl Date: Fri, 28 Feb 2025 13:36:11 +0100 Subject: [PATCH 2/6] bugfix: only allocate counter if not atomic --- src/axi_burst_splitter.sv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/axi_burst_splitter.sv b/src/axi_burst_splitter.sv index 390577f87..b745cb7ed 100644 --- a/src/axi_burst_splitter.sv +++ b/src/axi_burst_splitter.sv @@ -418,7 +418,7 @@ module axi_burst_splitter_ax_chan #( ax_valid_o = 1'b1; // As soon as downstream is ready, allocate a counter and acknowledge upstream. if (ax_ready_i) begin - cnt_alloc_req = SingleBeatAtopSupport ? ax_is_atop_i : 1'b1; + cnt_alloc_req = SingleBeatAtopSupport ? ~ax_is_atop_i : 1'b1; ax_ready_o = 1'b1; end end else begin // Splitting required. From afcbbf1abb3b1784f1b75637636680cf6a512cab Mon Sep 17 00:00:00 2001 From: bernerl Date: Fri, 28 Feb 2025 13:37:06 +0100 Subject: [PATCH 3/6] rename parameter SingleBeatAtopSupport to AtopSupport, cleanup assertions --- src/axi_burst_splitter.sv | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/src/axi_burst_splitter.sv b/src/axi_burst_splitter.sv index b745cb7ed..548bea1c7 100644 --- a/src/axi_burst_splitter.sv +++ b/src/axi_burst_splitter.sv @@ -30,7 +30,7 @@ module axi_burst_splitter #( // Maximum number of AXI write bursts outstanding at the same time parameter int unsigned MaxWriteTxns = 32'd0, // If single-beat ATOPs are supported, will then allow unmatched ids to pass upstream - parameter bit SingleBeatAtopSupport = 1'b0, + parameter bit AtopSupport = 1'b0, // Internal ID queue can work in two bandwidth modes: see id_queue.sv for details parameter bit FullBW = 0, // AXI Bus Types @@ -101,7 +101,7 @@ module axi_burst_splitter #( function bit txn_supported(axi_pkg::atop_t atop, axi_pkg::burst_t burst, axi_pkg::cache_t cache, axi_pkg::len_t len); // Single-beat transactions do not need splitting, so all are supported. - if (len == '0 && (SingleBeatAtopSupport || atop[5:4] == axi_pkg::ATOP_NONE)) return 1'b1; + if (len == '0 && (AtopSupport || atop[5:4] == axi_pkg::ATOP_NONE)) return 1'b1; // Wrapping bursts are currently not supported. if (burst == axi_pkg::BURST_WRAP) return 1'b0; // ATOP bursts are not supported. @@ -144,7 +144,7 @@ module axi_burst_splitter #( .IdWidth ( IdWidth ), .MaxTxns ( MaxWriteTxns ), .FullBW ( FullBW ), - .SingleBeatAtopSupport ( SingleBeatAtopSupport ) + .AtopSupport ( AtopSupport ) ) i_axi_burst_splitter_aw_chan ( .clk_i, .rst_ni, @@ -239,7 +239,7 @@ module axi_burst_splitter #( .IdWidth ( IdWidth ), .MaxTxns ( MaxReadTxns ), .FullBW ( FullBW ), - .SingleBeatAtopSupport ( SingleBeatAtopSupport ) + .AtopSupport ( AtopSupport ) ) i_axi_burst_splitter_ar_chan ( .clk_i, .rst_ni, @@ -329,12 +329,16 @@ module axi_burst_splitter #( assume property (@(posedge clk_i) slv_req_i.ar_valid |-> txn_supported('0, slv_req_i.ar.burst, slv_req_i.ar.cache, slv_req_i.ar.len) ) else $warning("Unsupported AR transaction received, returning slave error!"); - assume property (@(posedge clk_i) slv_req_i.aw_valid |-> - slv_req_i.aw.atop[5:4] == axi_pkg::ATOP_NONE || - SingleBeatAtopSupport || - slv_req_i.aw.atop[5:4] == axi_pkg::ATOP_ATOMICSTORE - ) else $fatal(1, {"Unsupported ATOP that gives rise to a R response received,", - "cannot respond in protocol-compliant manner!"}); + if (AtopSupport) begin : gen_atop_support_assertion + assume property (@(posedge clk_i) slv_req_i.aw_valid |-> + slv_req_i.aw.atop[5:4] == axi_pkg::ATOP_NONE || + slv_req_i.aw.len == '0 + ) else $fatal(1, {"ATOP burst received, which are not supported: returning slave error!"}); + end else begin : gen_no_atop_support_assertion + assume property (@(posedge clk_i) slv_req_i.aw_valid |-> + slv_req_i.aw.atop[5:4] == axi_pkg::ATOP_NONE + ) else $fatal(1, {"ATOP received but not supported: returning slave error!"}); + end // Outputs assert property (@(posedge clk_i) mst_req_o.aw_valid |-> mst_req_o.aw.len == '0) else $fatal(1, "AW burst longer than a single beat emitted!"); @@ -354,7 +358,7 @@ module axi_burst_splitter_ax_chan #( parameter int unsigned IdWidth = 0, parameter int unsigned MaxTxns = 0, parameter bit FullBW = 0, - parameter bit SingleBeatAtopSupport = 1'b0, + parameter bit AtopSupport = 1'b0, parameter type id_t = logic[IdWidth-1:0] ) ( input logic clk_i, @@ -382,7 +386,7 @@ module axi_burst_splitter_ax_chan #( axi_burst_splitter_counters #( .MaxTxns ( MaxTxns ), .FullBW ( FullBW ), - .SingleBeatAtopSupport ( SingleBeatAtopSupport ), + .AtopSupport ( AtopSupport ), .IdWidth ( IdWidth ) ) i_axi_burst_splitter_counters ( .clk_i, @@ -418,7 +422,7 @@ module axi_burst_splitter_ax_chan #( ax_valid_o = 1'b1; // As soon as downstream is ready, allocate a counter and acknowledge upstream. if (ax_ready_i) begin - cnt_alloc_req = SingleBeatAtopSupport ? ~ax_is_atop_i : 1'b1; + cnt_alloc_req = AtopSupport ? ~ax_is_atop_i : 1'b1; ax_ready_o = 1'b1; end end else begin // Splitting required. @@ -473,7 +477,7 @@ module axi_burst_splitter_counters #( parameter int unsigned MaxTxns = 0, parameter bit FullBW = 0, parameter int unsigned IdWidth = 0, - parameter bit SingleBeatAtopSupport = 0, + parameter bit AtopSupport = 0, parameter type id_t = logic [IdWidth-1:0] ) ( input logic clk_i, @@ -585,7 +589,7 @@ module axi_burst_splitter_counters #( `ifndef VERILATOR // pragma translate_off - assume property (@(posedge clk_i) idq_oup_gnt |-> idq_oup_valid || SingleBeatAtopSupport) + assume property (@(posedge clk_i) idq_oup_gnt |-> idq_oup_valid || AtopSupport) else $warning("Invalid output at ID queue, read not granted!"); // pragma translate_on `endif From a9d676928c4a6ce8021b2913b1f68e10f620e246 Mon Sep 17 00:00:00 2001 From: bernerl Date: Fri, 28 Feb 2025 13:40:12 +0100 Subject: [PATCH 4/6] cleanup: dont reuse ax_d --- src/axi_burst_splitter.sv | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/axi_burst_splitter.sv b/src/axi_burst_splitter.sv index 548bea1c7..11573d240 100644 --- a/src/axi_burst_splitter.sv +++ b/src/axi_burst_splitter.sv @@ -436,9 +436,9 @@ module axi_burst_splitter_ax_chan #( ax_valid_o = 1'b1; if (ax_ready_i) begin // Reduce number of bursts still to be sent by one and increment address. - ax_d.len--; - if (ax_d.burst == axi_pkg::BURST_INCR) begin - ax_d.addr += (1 << ax_d.size); + ax_d.len = ax_i.len - 1; + if (ax_i.burst == axi_pkg::BURST_INCR) begin + ax_d.addr = ax_i.addr + (1 << ax_i.size); end end state_d = Busy; @@ -456,9 +456,9 @@ module axi_burst_splitter_ax_chan #( state_d = Idle; end else begin // Otherwise, continue with the next burst. - ax_d.len--; + ax_d.len = ax_q.len - 1; if (ax_q.burst == axi_pkg::BURST_INCR) begin - ax_d.addr += (1 << ax_q.size); + ax_d.addr = ax_q.addr + (1 << ax_q.size); end end end From 56ddb6a043c8e3bd85a87fdc865de6b3e0d38a14 Mon Sep 17 00:00:00 2001 From: bernerl Date: Wed, 5 Mar 2025 16:48:34 +0100 Subject: [PATCH 5/6] axi_burst_splitter: propagate id_queue parameter CutOupPopInpGnt --- src/axi_burst_splitter.sv | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/src/axi_burst_splitter.sv b/src/axi_burst_splitter.sv index 11573d240..4b02195d2 100644 --- a/src/axi_burst_splitter.sv +++ b/src/axi_burst_splitter.sv @@ -30,9 +30,11 @@ module axi_burst_splitter #( // Maximum number of AXI write bursts outstanding at the same time parameter int unsigned MaxWriteTxns = 32'd0, // If single-beat ATOPs are supported, will then allow unmatched ids to pass upstream - parameter bit AtopSupport = 1'b0, + parameter bit AtopSupport = 0, // Internal ID queue can work in two bandwidth modes: see id_queue.sv for details parameter bit FullBW = 0, + // Internal ID queue parameter: if 1, cannot allocate a new ID if full but being popped + parameter bit CutOupPopInpGnt = 0, // AXI Bus Types parameter int unsigned AddrWidth = 32'd0, parameter int unsigned DataWidth = 32'd0, @@ -144,6 +146,7 @@ module axi_burst_splitter #( .IdWidth ( IdWidth ), .MaxTxns ( MaxWriteTxns ), .FullBW ( FullBW ), + .CutOupPopInpGnt ( CutOupPopInpGnt ), .AtopSupport ( AtopSupport ) ) i_axi_burst_splitter_aw_chan ( .clk_i, @@ -239,6 +242,7 @@ module axi_burst_splitter #( .IdWidth ( IdWidth ), .MaxTxns ( MaxReadTxns ), .FullBW ( FullBW ), + .CutOupPopInpGnt ( CutOupPopInpGnt ), .AtopSupport ( AtopSupport ) ) i_axi_burst_splitter_ar_chan ( .clk_i, @@ -358,7 +362,8 @@ module axi_burst_splitter_ax_chan #( parameter int unsigned IdWidth = 0, parameter int unsigned MaxTxns = 0, parameter bit FullBW = 0, - parameter bit AtopSupport = 1'b0, + parameter bit CutOupPopInpGnt = 0, + parameter bit AtopSupport = 0, parameter type id_t = logic[IdWidth-1:0] ) ( input logic clk_i, @@ -384,10 +389,11 @@ module axi_burst_splitter_ax_chan #( logic cnt_alloc_req, cnt_alloc_gnt; axi_burst_splitter_counters #( - .MaxTxns ( MaxTxns ), - .FullBW ( FullBW ), - .AtopSupport ( AtopSupport ), - .IdWidth ( IdWidth ) + .MaxTxns ( MaxTxns ), + .FullBW ( FullBW ), + .CutOupPopInpGnt ( CutOupPopInpGnt ), + .AtopSupport ( AtopSupport ), + .IdWidth ( IdWidth ) ) i_axi_burst_splitter_counters ( .clk_i, .rst_ni, @@ -476,6 +482,7 @@ endmodule module axi_burst_splitter_counters #( parameter int unsigned MaxTxns = 0, parameter bit FullBW = 0, + parameter bit CutOupPopInpGnt = 0, parameter int unsigned IdWidth = 0, parameter bit AtopSupport = 0, parameter type id_t = logic [IdWidth-1:0] @@ -533,10 +540,11 @@ module axi_burst_splitter_counters #( logic idq_inp_req, idq_inp_gnt, idq_oup_gnt, idq_oup_valid, idq_oup_pop; id_queue #( - .ID_WIDTH ( $bits(id_t) ), - .CAPACITY ( MaxTxns ), - .data_t ( cnt_idx_t ), - .FULL_BW ( FullBW ) + .ID_WIDTH ( $bits(id_t) ), + .CAPACITY ( MaxTxns ), + .data_t ( cnt_idx_t ), + .FULL_BW ( FullBW ), + .CUT_OUP_POP_INP_GNT ( CutOupPopInpGnt ) ) i_idq ( .clk_i, .rst_ni, From 9fe2225b2b080e93e712f2eaf870a48ced16d9e1 Mon Sep 17 00:00:00 2001 From: bernerl Date: Wed, 26 Mar 2025 14:44:23 +0100 Subject: [PATCH 6/6] Changelog: move axi_burst_splitter change to correct location --- CHANGELOG.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 82d9eb6e5..c14dea955 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,9 +7,6 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## Unreleased -### Changed -- Add optional single beat atop support to `axi_burst_splitter`. - ### Added - Add `axi_burst_unwrap`. #326 @@ -19,6 +16,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### Changed - Add random user signal generation for llc-partition test. #315 - Update `common_verification` from `v0.2.4` to `v0.2.5`. +- Add optional single beat atop support to `axi_burst_splitter`. ## 0.39.6 - 2024-12-04 ### Added