mirror of
https://github.com/retroSoC/retroSoC.git
synced 2026-11-04 22:32:36 +00:00
The vendored BIU streams a writeback's W data as soon as the victim buffer offers it (AXI-legal W-before-AW), while the AW still waits in awbuf for the serializing 128->64 downsizer to finish the previous write (the ~200-cycle SDRAM write response latency). The Mini HP fabric behind the pad is single-outstanding (downsizer + MMIO demux + target guard, no WID), so the early W beats are absorbed into the previous write's burst; each write's AW then arrives to find its W already consumed by the previous write's stream. The cascade persists until the LSU freezes (its fills block behind the SDRAM write channel, which is parked waiting for the orphaned write's W data), leaving a final orphaned AW whose W beats never come: the target guard parks in WriteStream, the SDRAM core parks in its write-data state and blocks the pending read fill, and the C906 stalls at the next LSU-serializing instruction. Event-level tracing pinned the mechanism: with the guard parked, the C906 write side is fully idle (victim buffer idle, store buffer idle, BIU write-selection FIFO empty, zero W beats presented at the 128-bit port for the wedged write) while the guard and the SDRAM controller both hold the orphaned write's AW. The rtl/mini/ip_overrides/aq_biu_write_channel.v override gates the W stream on the burst's AW having been issued on the pad (pad-issued-AW vs completed-W-burst order counters), restoring the AW-before-W order the fabric requires without touching the vendored checkout. The generator registers the override under the pinned sha256 guard, and the Makefile stamps it as a dependency. Evidence: the deterministic wedge payload and the no-fence control run unbounded (previously wedged at ~22 rounds); hp-smoke-sim and hp-rtthread-sim pass (SIM_TEST_PASS code=0); hp-linux-sim completes userspace acceptance (Run /init as init process, HP_LINUX_INIT_PASS, retroSoC HP Linux ready, HP_LINUX_READY, SIM_TEST_PASS code=0, 1.63 G emulator cycles, status: passed with no missing markers); pytest tests/test_hp_platform.py passes 20/20. docs/hp-rv64-validation.md records the mechanism and the acceptance.
843 lines
32 KiB
Verilog
843 lines
32 KiB
Verilog
// retroSoC controlled override of the vendored OpenC906 aq_biu_write_channel.v.
|
|
//
|
|
// Source: openc906 dependency (dependencies.lock.json "openc906"),
|
|
// C906_RTL_FACTORY/gen_rtl/biu/rtl/aq_biu_write_channel.v
|
|
// revision b0c06eb1f8b3bae663bd8b87eac89ff48e68a57f
|
|
// License: Apache-2.0 (T-Head Semiconductor)
|
|
//
|
|
// retroSoC change (Mini HP fabric contract): upstream streams a write's W
|
|
// data as soon as the LSU offers it, even while the AW still waits in awbuf
|
|
// for a busy downstream slave (AXI-legal W-before-AW). The Mini HP fabric
|
|
// behind the pad is single-outstanding (serializing 128->64 downsizer + MMIO
|
|
// demux + target guard) and cannot attribute early W beats without a WID, so
|
|
// the early beats land in the prior write's burst, the queued AW is orphaned,
|
|
// and the write channel wedges. The override gates the W stream on the
|
|
// burst's AW having been issued on the pad (retro_aw_issued_q /
|
|
// retro_wburst_done_q below). Everything else is byte-identical to upstream.
|
|
// Keep in sync when the lock revision changes.
|
|
|
|
/*Copyright 2020-2021 T-Head Semiconductor Co., Ltd.
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
*/
|
|
|
|
// &Depend("cpu_cfig.h"); @17
|
|
|
|
// &ModuleBeg; @19
|
|
module aq_biu_write_channel(
|
|
ar_hit_wtable,
|
|
araddr,
|
|
arcache,
|
|
aw_hit_wtable,
|
|
awaddr,
|
|
awburst,
|
|
awcache,
|
|
awlen,
|
|
awlock,
|
|
awprot,
|
|
awready,
|
|
awsize,
|
|
awvalid,
|
|
axim_clk_en,
|
|
biu_clk,
|
|
biu_pad_awaddr,
|
|
biu_pad_awburst,
|
|
biu_pad_awcache,
|
|
biu_pad_awid,
|
|
biu_pad_awlen,
|
|
biu_pad_awlock,
|
|
biu_pad_awprot,
|
|
biu_pad_awsize,
|
|
biu_pad_awvalid,
|
|
biu_pad_bready,
|
|
biu_pad_wdata,
|
|
biu_pad_wlast,
|
|
biu_pad_wstrb,
|
|
biu_pad_wvalid,
|
|
cp0_biu_icg_en,
|
|
cpurst_b,
|
|
forever_cpuclk,
|
|
pad_biu_awready,
|
|
pad_biu_bid,
|
|
pad_biu_bresp,
|
|
pad_biu_bvalid,
|
|
pad_biu_wready,
|
|
pad_yy_icg_scan_en,
|
|
wdata,
|
|
wlast,
|
|
wready,
|
|
write_channel_clk_en,
|
|
wstrb,
|
|
wtable_no_op,
|
|
wvalid
|
|
);
|
|
|
|
// &Ports; @20
|
|
input [39 :0] araddr;
|
|
input [3 :0] arcache;
|
|
input [39 :0] awaddr;
|
|
input [1 :0] awburst;
|
|
input [3 :0] awcache;
|
|
input [1 :0] awlen;
|
|
input awlock;
|
|
input [2 :0] awprot;
|
|
input [2 :0] awsize;
|
|
input awvalid;
|
|
input axim_clk_en;
|
|
input biu_clk;
|
|
input cp0_biu_icg_en;
|
|
input cpurst_b;
|
|
input forever_cpuclk;
|
|
input pad_biu_awready;
|
|
input [7 :0] pad_biu_bid;
|
|
input [1 :0] pad_biu_bresp;
|
|
input pad_biu_bvalid;
|
|
input pad_biu_wready;
|
|
input pad_yy_icg_scan_en;
|
|
input [127:0] wdata;
|
|
input wlast;
|
|
input [15 :0] wstrb;
|
|
input wvalid;
|
|
output ar_hit_wtable;
|
|
output aw_hit_wtable;
|
|
output awready;
|
|
output [39 :0] biu_pad_awaddr;
|
|
output [1 :0] biu_pad_awburst;
|
|
output [3 :0] biu_pad_awcache;
|
|
output [7 :0] biu_pad_awid;
|
|
output [7 :0] biu_pad_awlen;
|
|
output biu_pad_awlock;
|
|
output [2 :0] biu_pad_awprot;
|
|
output [2 :0] biu_pad_awsize;
|
|
output biu_pad_awvalid;
|
|
output biu_pad_bready;
|
|
output [127:0] biu_pad_wdata;
|
|
output biu_pad_wlast;
|
|
output [15 :0] biu_pad_wstrb;
|
|
output biu_pad_wvalid;
|
|
output wready;
|
|
output write_channel_clk_en;
|
|
output wtable_no_op;
|
|
|
|
// &Regs; @21
|
|
reg awbuf_vld;
|
|
reg bbuf_vld;
|
|
reg [3 :0] bid;
|
|
reg [39 :0] biu_pad_awaddr;
|
|
reg [1 :0] biu_pad_awburst;
|
|
reg [3 :0] biu_pad_awcache;
|
|
reg [7 :0] biu_pad_awid;
|
|
reg [7 :0] biu_pad_awlen;
|
|
reg biu_pad_awlock;
|
|
reg [2 :0] biu_pad_awprot;
|
|
reg [2 :0] biu_pad_awsize;
|
|
reg [127:0] biu_pad_wdata;
|
|
reg biu_pad_wlast;
|
|
reg [15 :0] biu_pad_wstrb;
|
|
reg wbuf_vld;
|
|
reg [3 :0] wtable_create_ptr;
|
|
// retroSoC override: pad-order counters for the write W-after-AW gate.
|
|
reg [3 :0] retro_aw_issued_q;
|
|
reg [3 :0] retro_wburst_done_q;
|
|
|
|
// &Wires; @22
|
|
wire ar_hit_wtable;
|
|
wire [15 :0] ar_hit_wtable_addr;
|
|
wire [15 :0] ar_hit_wtable_so;
|
|
wire [39 :0] araddr;
|
|
wire [3 :0] arcache;
|
|
wire aw_hit_wtable;
|
|
wire [15 :0] aw_hit_wtable_addr;
|
|
wire [15 :0] aw_hit_wtable_so;
|
|
wire [39 :0] awaddr;
|
|
wire awbuf_create_en;
|
|
wire awbuf_pop_en;
|
|
wire [1 :0] awburst;
|
|
wire [3 :0] awcache;
|
|
wire awclk;
|
|
wire [1 :0] awlen;
|
|
wire awlock;
|
|
wire [2 :0] awprot;
|
|
wire awready;
|
|
wire [2 :0] awsize;
|
|
wire awvalid;
|
|
wire axim_clk_en;
|
|
wire bbuf_create_en;
|
|
wire bbuf_pop_en;
|
|
wire biu_clk;
|
|
wire biu_pad_awvalid;
|
|
wire biu_pad_bready;
|
|
wire biu_pad_wvalid;
|
|
wire cp0_biu_icg_en;
|
|
wire cpurst_b;
|
|
wire forever_cpuclk;
|
|
wire pad_biu_awready;
|
|
wire [7 :0] pad_biu_bid;
|
|
wire pad_biu_bvalid;
|
|
wire pad_biu_wready;
|
|
wire pad_yy_icg_scan_en;
|
|
wire wbuf_create_en;
|
|
wire wbuf_pop_en;
|
|
wire wclk;
|
|
wire [127:0] wdata;
|
|
wire wlast;
|
|
wire wready;
|
|
wire retro_w_ordered;
|
|
wire retro_w_burst_end;
|
|
wire write_channel_clk_en;
|
|
wire [15 :0] wstrb;
|
|
wire [9 :0] wtable_create_addr;
|
|
wire wtable_create_burst;
|
|
wire [15 :0] wtable_create_en;
|
|
wire [15 :0] wtable_create_sel;
|
|
wire wtable_create_so;
|
|
wire [15 :0] wtable_entry_vld;
|
|
wire wtable_full;
|
|
wire wtable_no_op;
|
|
wire [15 :0] wtable_pop_en;
|
|
wire wvalid;
|
|
|
|
|
|
parameter PADDR = 40;
|
|
parameter DEPTH = 16;
|
|
|
|
//==========================================================
|
|
// address and so check
|
|
//==========================================================
|
|
|
|
assign ar_hit_wtable = (|ar_hit_wtable_addr[DEPTH-1:0]) |
|
|
(|ar_hit_wtable_so[DEPTH-1:0]);
|
|
|
|
assign aw_hit_wtable = (|aw_hit_wtable_addr[DEPTH-1:0]) |
|
|
(|aw_hit_wtable_so[DEPTH-1:0]);
|
|
|
|
//==============================================================================
|
|
// AW channel
|
|
//==============================================================================
|
|
// &Force("bus","awid",3,0); @40
|
|
// &Force("output","awready"); @41
|
|
|
|
assign awready = (!awbuf_vld | pad_biu_awready) & !wtable_full & axim_clk_en;
|
|
|
|
assign awbuf_create_en = awvalid & awready;
|
|
assign awbuf_pop_en = awbuf_vld & pad_biu_awready & axim_clk_en;
|
|
|
|
always @(posedge biu_clk or negedge cpurst_b)
|
|
begin
|
|
if (!cpurst_b)
|
|
awbuf_vld <= 1'b0;
|
|
else if (axim_clk_en) begin
|
|
if (awbuf_create_en)
|
|
awbuf_vld <= 1'b1;
|
|
else if (awbuf_pop_en)
|
|
awbuf_vld <= 1'b0;
|
|
else
|
|
awbuf_vld <= awbuf_vld;
|
|
end
|
|
end
|
|
|
|
assign biu_pad_awvalid = awbuf_vld;
|
|
|
|
always @(posedge awclk or negedge cpurst_b)
|
|
begin
|
|
if (!cpurst_b)begin
|
|
biu_pad_awaddr[PADDR-1:0] <= {PADDR{1'b0}};
|
|
biu_pad_awsize[2:0] <= 3'b0;
|
|
biu_pad_awlen[7:0] <= 8'b0;
|
|
biu_pad_awburst[1:0] <= 2'b0;
|
|
biu_pad_awcache[3:0] <= 4'b0;
|
|
biu_pad_awprot[2:0] <= 3'b0;
|
|
biu_pad_awlock <= 1'b0;
|
|
biu_pad_awid[7:0] <= 8'b0;
|
|
|
|
end
|
|
else if (awbuf_create_en & axim_clk_en) begin
|
|
biu_pad_awaddr[PADDR-1:0] <= awaddr[PADDR-1:0];
|
|
biu_pad_awsize[2:0] <= awsize[2:0];
|
|
biu_pad_awlen[7:0] <= {6'b0, awlen[1:0]};
|
|
biu_pad_awburst[1:0] <= awburst[1:0];
|
|
biu_pad_awcache[3:0] <= awcache[3:0];
|
|
biu_pad_awprot[2:0] <= awprot[2:0];
|
|
biu_pad_awlock <= awlock;
|
|
biu_pad_awid[7:0] <= {4'b0,wtable_create_ptr[3:0]};
|
|
end
|
|
end
|
|
|
|
|
|
//==============================================================================
|
|
// W channel
|
|
//==============================================================================
|
|
// retroSoC override: hold a write burst's W data until its AW has been issued
|
|
// on the pad. The vendored BIU streams W as soon as the LSU offers it while
|
|
// the AW can still wait in awbuf for a busy downstream slave; on a
|
|
// single-outstanding fabric the early W beats are absorbed into the prior
|
|
// write's burst, orphaning this write's AW downstream and wedging the write
|
|
// channel. Count pad-issued AWs against completed W bursts: a W burst may
|
|
// stream only once its AW is out. In-order AW/W keeps the wrapped comparison
|
|
// exact (the counters never drift apart by more than the wsel depth).
|
|
assign retro_w_ordered = (retro_aw_issued_q != retro_wburst_done_q);
|
|
assign retro_w_burst_end = wvalid & wready & wlast;
|
|
|
|
always @(posedge biu_clk or negedge cpurst_b)
|
|
begin
|
|
if (!cpurst_b) begin
|
|
retro_aw_issued_q <= 4'b0;
|
|
retro_wburst_done_q <= 4'b0;
|
|
end
|
|
else if (axim_clk_en) begin
|
|
if (awbuf_pop_en)
|
|
retro_aw_issued_q <= retro_aw_issued_q + 4'b1;
|
|
if (retro_w_burst_end)
|
|
retro_wburst_done_q <= retro_wburst_done_q + 4'b1;
|
|
end
|
|
end
|
|
|
|
assign wready = (!wbuf_vld | pad_biu_wready) & axim_clk_en & retro_w_ordered;
|
|
|
|
assign wbuf_create_en = wvalid & (!wbuf_vld | pad_biu_wready) & retro_w_ordered;
|
|
assign wbuf_pop_en = wbuf_vld & pad_biu_wready & axim_clk_en;
|
|
|
|
always @(posedge biu_clk or negedge cpurst_b)
|
|
begin
|
|
if (!cpurst_b)
|
|
wbuf_vld <= 1'b0;
|
|
else if (axim_clk_en) begin
|
|
if (wbuf_create_en)
|
|
wbuf_vld <= 1'b1;
|
|
else if (wbuf_pop_en)
|
|
wbuf_vld <= 1'b0;
|
|
else
|
|
wbuf_vld <= wbuf_vld;
|
|
end
|
|
end
|
|
|
|
assign biu_pad_wvalid = wbuf_vld;
|
|
|
|
always @(posedge wclk or negedge cpurst_b)
|
|
begin
|
|
if (!cpurst_b) begin
|
|
biu_pad_wstrb[15:0] <= 16'b0;
|
|
biu_pad_wdata[127:0] <= 128'b0;
|
|
biu_pad_wlast <= 1'b0;
|
|
end
|
|
else if (wbuf_create_en & axim_clk_en) begin
|
|
biu_pad_wstrb[15:0] <= wstrb[15:0];
|
|
biu_pad_wdata[127:0] <= wdata[127:0];
|
|
biu_pad_wlast <= wlast;
|
|
end
|
|
end
|
|
|
|
//==============================================================================
|
|
// B channel
|
|
//==============================================================================
|
|
// &Force("bus", "pad_biu_bid",7,0); @131
|
|
// &Force("input","pad_biu_bresp"); @132
|
|
// &Force("bus","pad_biu_bresp",1,0); @133
|
|
|
|
assign biu_pad_bready = 1'b1;
|
|
|
|
assign bbuf_create_en = axim_clk_en & pad_biu_bvalid;
|
|
assign bbuf_pop_en = bbuf_vld;
|
|
|
|
always @(posedge biu_clk or negedge cpurst_b)
|
|
begin
|
|
if (!cpurst_b)
|
|
bbuf_vld <= 1'b0;
|
|
else if (bbuf_create_en)
|
|
bbuf_vld <= 1'b1;
|
|
else if (bbuf_pop_en)
|
|
bbuf_vld <= 1'b0;
|
|
end
|
|
|
|
always @(posedge biu_clk or negedge cpurst_b)
|
|
begin
|
|
if (!cpurst_b)
|
|
bid[3:0] <= 4'b0;
|
|
else if (bbuf_create_en)
|
|
bid[3:0] <= pad_biu_bid[3:0];
|
|
end
|
|
|
|
assign wtable_pop_en[DEPTH-1:0] = (16'b1 << bid[3:0]) & {DEPTH{bbuf_vld}};
|
|
|
|
//==============================================================================
|
|
// write table
|
|
//==============================================================================
|
|
|
|
always @(posedge awclk or negedge cpurst_b)
|
|
begin
|
|
if (!cpurst_b)
|
|
wtable_create_ptr[3:0] <= 4'b0;
|
|
else if (awbuf_create_en)
|
|
wtable_create_ptr[3:0] <= wtable_create_ptr[3:0] + 4'b1;
|
|
end
|
|
|
|
assign wtable_full = wtable_entry_vld[wtable_create_ptr[3:0]];
|
|
|
|
assign wtable_create_sel[DEPTH-1:0] = 16'b1 << wtable_create_ptr[3:0] ;
|
|
assign wtable_create_en[DEPTH-1:0] = wtable_create_sel[DEPTH-1:0] & {16{awbuf_create_en}};
|
|
assign wtable_create_addr[9:0] = awaddr[13:4];
|
|
assign wtable_create_so = !awcache[1];
|
|
assign wtable_create_burst = awlen[1:0] == 2'b11;
|
|
//no_op
|
|
assign wtable_no_op = ~(|wtable_entry_vld[DEPTH-1:0]);
|
|
|
|
//==============================================================================
|
|
// ICG
|
|
//==============================================================================
|
|
assign write_channel_clk_en = bbuf_create_en | bbuf_pop_en |
|
|
wbuf_create_en | wbuf_pop_en |
|
|
awbuf_create_en | awbuf_pop_en;
|
|
|
|
// &Instance("gated_clk_cell", "x_aq_biu_aw_gated_clk"); @189
|
|
gated_clk_cell x_aq_biu_aw_gated_clk (
|
|
.clk_in (forever_cpuclk ),
|
|
.clk_out (awclk ),
|
|
.external_en (1'b0 ),
|
|
.global_en (1'b1 ),
|
|
.local_en (awbuf_create_en ),
|
|
.module_en (cp0_biu_icg_en ),
|
|
.pad_yy_icg_scan_en (pad_yy_icg_scan_en)
|
|
);
|
|
|
|
// &Connect(.clk_in (forever_cpuclk), @190
|
|
// .external_en (1'b0), @191
|
|
// .global_en (1'b1), @192
|
|
// .module_en (cp0_biu_icg_en), @193
|
|
// .local_en (awbuf_create_en), @194
|
|
// .clk_out (awclk)); @195
|
|
|
|
// &Instance("gated_clk_cell", "x_aq_biu_w_gated_clk"); @197
|
|
gated_clk_cell x_aq_biu_w_gated_clk (
|
|
.clk_in (forever_cpuclk ),
|
|
.clk_out (wclk ),
|
|
.external_en (1'b0 ),
|
|
.global_en (1'b1 ),
|
|
.local_en (wbuf_create_en ),
|
|
.module_en (cp0_biu_icg_en ),
|
|
.pad_yy_icg_scan_en (pad_yy_icg_scan_en)
|
|
);
|
|
|
|
// &Connect(.clk_in (forever_cpuclk), @198
|
|
// .external_en (1'b0), @199
|
|
// .global_en (1'b1), @200
|
|
// .module_en (cp0_biu_icg_en), @201
|
|
// .local_en (wbuf_create_en), @202
|
|
// .clk_out (wclk)); @203
|
|
//==============================================================================
|
|
// write table Instance
|
|
//==============================================================================
|
|
// &ConnRule(s/_x$/[0]/); @207
|
|
// &Instance("aq_biu_wt_entry","x_aq_biu_wt_entry_0"); @208
|
|
aq_biu_wt_entry x_aq_biu_wt_entry_0 (
|
|
.ar_hit_wtable_addr_x (ar_hit_wtable_addr[0]),
|
|
.ar_hit_wtable_so_x (ar_hit_wtable_so[0] ),
|
|
.araddr (araddr ),
|
|
.arcache (arcache ),
|
|
.aw_hit_wtable_addr_x (aw_hit_wtable_addr[0]),
|
|
.aw_hit_wtable_so_x (aw_hit_wtable_so[0] ),
|
|
.awaddr (awaddr ),
|
|
.awcache (awcache ),
|
|
.awlen (awlen ),
|
|
.cp0_biu_icg_en (cp0_biu_icg_en ),
|
|
.cpurst_b (cpurst_b ),
|
|
.forever_cpuclk (forever_cpuclk ),
|
|
.pad_yy_icg_scan_en (pad_yy_icg_scan_en ),
|
|
.wtable_create_addr (wtable_create_addr ),
|
|
.wtable_create_burst (wtable_create_burst ),
|
|
.wtable_create_en_x (wtable_create_en[0] ),
|
|
.wtable_create_so (wtable_create_so ),
|
|
.wtable_entry_vld_x (wtable_entry_vld[0] ),
|
|
.wtable_pop_en_x (wtable_pop_en[0] )
|
|
);
|
|
|
|
|
|
// &ConnRule(s/_x$/[1]/); @210
|
|
// &Instance("aq_biu_wt_entry","x_aq_biu_wt_entry_1"); @211
|
|
aq_biu_wt_entry x_aq_biu_wt_entry_1 (
|
|
.ar_hit_wtable_addr_x (ar_hit_wtable_addr[1]),
|
|
.ar_hit_wtable_so_x (ar_hit_wtable_so[1] ),
|
|
.araddr (araddr ),
|
|
.arcache (arcache ),
|
|
.aw_hit_wtable_addr_x (aw_hit_wtable_addr[1]),
|
|
.aw_hit_wtable_so_x (aw_hit_wtable_so[1] ),
|
|
.awaddr (awaddr ),
|
|
.awcache (awcache ),
|
|
.awlen (awlen ),
|
|
.cp0_biu_icg_en (cp0_biu_icg_en ),
|
|
.cpurst_b (cpurst_b ),
|
|
.forever_cpuclk (forever_cpuclk ),
|
|
.pad_yy_icg_scan_en (pad_yy_icg_scan_en ),
|
|
.wtable_create_addr (wtable_create_addr ),
|
|
.wtable_create_burst (wtable_create_burst ),
|
|
.wtable_create_en_x (wtable_create_en[1] ),
|
|
.wtable_create_so (wtable_create_so ),
|
|
.wtable_entry_vld_x (wtable_entry_vld[1] ),
|
|
.wtable_pop_en_x (wtable_pop_en[1] )
|
|
);
|
|
|
|
|
|
// &ConnRule(s/_x$/[2]/); @213
|
|
// &Instance("aq_biu_wt_entry","x_aq_biu_wt_entry_2"); @214
|
|
aq_biu_wt_entry x_aq_biu_wt_entry_2 (
|
|
.ar_hit_wtable_addr_x (ar_hit_wtable_addr[2]),
|
|
.ar_hit_wtable_so_x (ar_hit_wtable_so[2] ),
|
|
.araddr (araddr ),
|
|
.arcache (arcache ),
|
|
.aw_hit_wtable_addr_x (aw_hit_wtable_addr[2]),
|
|
.aw_hit_wtable_so_x (aw_hit_wtable_so[2] ),
|
|
.awaddr (awaddr ),
|
|
.awcache (awcache ),
|
|
.awlen (awlen ),
|
|
.cp0_biu_icg_en (cp0_biu_icg_en ),
|
|
.cpurst_b (cpurst_b ),
|
|
.forever_cpuclk (forever_cpuclk ),
|
|
.pad_yy_icg_scan_en (pad_yy_icg_scan_en ),
|
|
.wtable_create_addr (wtable_create_addr ),
|
|
.wtable_create_burst (wtable_create_burst ),
|
|
.wtable_create_en_x (wtable_create_en[2] ),
|
|
.wtable_create_so (wtable_create_so ),
|
|
.wtable_entry_vld_x (wtable_entry_vld[2] ),
|
|
.wtable_pop_en_x (wtable_pop_en[2] )
|
|
);
|
|
|
|
|
|
// &ConnRule(s/_x$/[3]/); @216
|
|
// &Instance("aq_biu_wt_entry","x_aq_biu_wt_entry_3"); @217
|
|
aq_biu_wt_entry x_aq_biu_wt_entry_3 (
|
|
.ar_hit_wtable_addr_x (ar_hit_wtable_addr[3]),
|
|
.ar_hit_wtable_so_x (ar_hit_wtable_so[3] ),
|
|
.araddr (araddr ),
|
|
.arcache (arcache ),
|
|
.aw_hit_wtable_addr_x (aw_hit_wtable_addr[3]),
|
|
.aw_hit_wtable_so_x (aw_hit_wtable_so[3] ),
|
|
.awaddr (awaddr ),
|
|
.awcache (awcache ),
|
|
.awlen (awlen ),
|
|
.cp0_biu_icg_en (cp0_biu_icg_en ),
|
|
.cpurst_b (cpurst_b ),
|
|
.forever_cpuclk (forever_cpuclk ),
|
|
.pad_yy_icg_scan_en (pad_yy_icg_scan_en ),
|
|
.wtable_create_addr (wtable_create_addr ),
|
|
.wtable_create_burst (wtable_create_burst ),
|
|
.wtable_create_en_x (wtable_create_en[3] ),
|
|
.wtable_create_so (wtable_create_so ),
|
|
.wtable_entry_vld_x (wtable_entry_vld[3] ),
|
|
.wtable_pop_en_x (wtable_pop_en[3] )
|
|
);
|
|
|
|
|
|
// &ConnRule(s/_x$/[4]/); @219
|
|
// &Instance("aq_biu_wt_entry","x_aq_biu_wt_entry_4"); @220
|
|
aq_biu_wt_entry x_aq_biu_wt_entry_4 (
|
|
.ar_hit_wtable_addr_x (ar_hit_wtable_addr[4]),
|
|
.ar_hit_wtable_so_x (ar_hit_wtable_so[4] ),
|
|
.araddr (araddr ),
|
|
.arcache (arcache ),
|
|
.aw_hit_wtable_addr_x (aw_hit_wtable_addr[4]),
|
|
.aw_hit_wtable_so_x (aw_hit_wtable_so[4] ),
|
|
.awaddr (awaddr ),
|
|
.awcache (awcache ),
|
|
.awlen (awlen ),
|
|
.cp0_biu_icg_en (cp0_biu_icg_en ),
|
|
.cpurst_b (cpurst_b ),
|
|
.forever_cpuclk (forever_cpuclk ),
|
|
.pad_yy_icg_scan_en (pad_yy_icg_scan_en ),
|
|
.wtable_create_addr (wtable_create_addr ),
|
|
.wtable_create_burst (wtable_create_burst ),
|
|
.wtable_create_en_x (wtable_create_en[4] ),
|
|
.wtable_create_so (wtable_create_so ),
|
|
.wtable_entry_vld_x (wtable_entry_vld[4] ),
|
|
.wtable_pop_en_x (wtable_pop_en[4] )
|
|
);
|
|
|
|
|
|
// &ConnRule(s/_x$/[5]/); @222
|
|
// &Instance("aq_biu_wt_entry","x_aq_biu_wt_entry_5"); @223
|
|
aq_biu_wt_entry x_aq_biu_wt_entry_5 (
|
|
.ar_hit_wtable_addr_x (ar_hit_wtable_addr[5]),
|
|
.ar_hit_wtable_so_x (ar_hit_wtable_so[5] ),
|
|
.araddr (araddr ),
|
|
.arcache (arcache ),
|
|
.aw_hit_wtable_addr_x (aw_hit_wtable_addr[5]),
|
|
.aw_hit_wtable_so_x (aw_hit_wtable_so[5] ),
|
|
.awaddr (awaddr ),
|
|
.awcache (awcache ),
|
|
.awlen (awlen ),
|
|
.cp0_biu_icg_en (cp0_biu_icg_en ),
|
|
.cpurst_b (cpurst_b ),
|
|
.forever_cpuclk (forever_cpuclk ),
|
|
.pad_yy_icg_scan_en (pad_yy_icg_scan_en ),
|
|
.wtable_create_addr (wtable_create_addr ),
|
|
.wtable_create_burst (wtable_create_burst ),
|
|
.wtable_create_en_x (wtable_create_en[5] ),
|
|
.wtable_create_so (wtable_create_so ),
|
|
.wtable_entry_vld_x (wtable_entry_vld[5] ),
|
|
.wtable_pop_en_x (wtable_pop_en[5] )
|
|
);
|
|
|
|
|
|
// &ConnRule(s/_x$/[6]/); @225
|
|
// &Instance("aq_biu_wt_entry","x_aq_biu_wt_entry_6"); @226
|
|
aq_biu_wt_entry x_aq_biu_wt_entry_6 (
|
|
.ar_hit_wtable_addr_x (ar_hit_wtable_addr[6]),
|
|
.ar_hit_wtable_so_x (ar_hit_wtable_so[6] ),
|
|
.araddr (araddr ),
|
|
.arcache (arcache ),
|
|
.aw_hit_wtable_addr_x (aw_hit_wtable_addr[6]),
|
|
.aw_hit_wtable_so_x (aw_hit_wtable_so[6] ),
|
|
.awaddr (awaddr ),
|
|
.awcache (awcache ),
|
|
.awlen (awlen ),
|
|
.cp0_biu_icg_en (cp0_biu_icg_en ),
|
|
.cpurst_b (cpurst_b ),
|
|
.forever_cpuclk (forever_cpuclk ),
|
|
.pad_yy_icg_scan_en (pad_yy_icg_scan_en ),
|
|
.wtable_create_addr (wtable_create_addr ),
|
|
.wtable_create_burst (wtable_create_burst ),
|
|
.wtable_create_en_x (wtable_create_en[6] ),
|
|
.wtable_create_so (wtable_create_so ),
|
|
.wtable_entry_vld_x (wtable_entry_vld[6] ),
|
|
.wtable_pop_en_x (wtable_pop_en[6] )
|
|
);
|
|
|
|
|
|
// &ConnRule(s/_x$/[7]/); @228
|
|
// &Instance("aq_biu_wt_entry","x_aq_biu_wt_entry_7"); @229
|
|
aq_biu_wt_entry x_aq_biu_wt_entry_7 (
|
|
.ar_hit_wtable_addr_x (ar_hit_wtable_addr[7]),
|
|
.ar_hit_wtable_so_x (ar_hit_wtable_so[7] ),
|
|
.araddr (araddr ),
|
|
.arcache (arcache ),
|
|
.aw_hit_wtable_addr_x (aw_hit_wtable_addr[7]),
|
|
.aw_hit_wtable_so_x (aw_hit_wtable_so[7] ),
|
|
.awaddr (awaddr ),
|
|
.awcache (awcache ),
|
|
.awlen (awlen ),
|
|
.cp0_biu_icg_en (cp0_biu_icg_en ),
|
|
.cpurst_b (cpurst_b ),
|
|
.forever_cpuclk (forever_cpuclk ),
|
|
.pad_yy_icg_scan_en (pad_yy_icg_scan_en ),
|
|
.wtable_create_addr (wtable_create_addr ),
|
|
.wtable_create_burst (wtable_create_burst ),
|
|
.wtable_create_en_x (wtable_create_en[7] ),
|
|
.wtable_create_so (wtable_create_so ),
|
|
.wtable_entry_vld_x (wtable_entry_vld[7] ),
|
|
.wtable_pop_en_x (wtable_pop_en[7] )
|
|
);
|
|
|
|
|
|
// &ConnRule(s/_x$/[8]/); @231
|
|
// &Instance("aq_biu_wt_entry","x_aq_biu_wt_entry_8"); @232
|
|
aq_biu_wt_entry x_aq_biu_wt_entry_8 (
|
|
.ar_hit_wtable_addr_x (ar_hit_wtable_addr[8]),
|
|
.ar_hit_wtable_so_x (ar_hit_wtable_so[8] ),
|
|
.araddr (araddr ),
|
|
.arcache (arcache ),
|
|
.aw_hit_wtable_addr_x (aw_hit_wtable_addr[8]),
|
|
.aw_hit_wtable_so_x (aw_hit_wtable_so[8] ),
|
|
.awaddr (awaddr ),
|
|
.awcache (awcache ),
|
|
.awlen (awlen ),
|
|
.cp0_biu_icg_en (cp0_biu_icg_en ),
|
|
.cpurst_b (cpurst_b ),
|
|
.forever_cpuclk (forever_cpuclk ),
|
|
.pad_yy_icg_scan_en (pad_yy_icg_scan_en ),
|
|
.wtable_create_addr (wtable_create_addr ),
|
|
.wtable_create_burst (wtable_create_burst ),
|
|
.wtable_create_en_x (wtable_create_en[8] ),
|
|
.wtable_create_so (wtable_create_so ),
|
|
.wtable_entry_vld_x (wtable_entry_vld[8] ),
|
|
.wtable_pop_en_x (wtable_pop_en[8] )
|
|
);
|
|
|
|
|
|
// &ConnRule(s/_x$/[9]/); @234
|
|
// &Instance("aq_biu_wt_entry","x_aq_biu_wt_entry_9"); @235
|
|
aq_biu_wt_entry x_aq_biu_wt_entry_9 (
|
|
.ar_hit_wtable_addr_x (ar_hit_wtable_addr[9]),
|
|
.ar_hit_wtable_so_x (ar_hit_wtable_so[9] ),
|
|
.araddr (araddr ),
|
|
.arcache (arcache ),
|
|
.aw_hit_wtable_addr_x (aw_hit_wtable_addr[9]),
|
|
.aw_hit_wtable_so_x (aw_hit_wtable_so[9] ),
|
|
.awaddr (awaddr ),
|
|
.awcache (awcache ),
|
|
.awlen (awlen ),
|
|
.cp0_biu_icg_en (cp0_biu_icg_en ),
|
|
.cpurst_b (cpurst_b ),
|
|
.forever_cpuclk (forever_cpuclk ),
|
|
.pad_yy_icg_scan_en (pad_yy_icg_scan_en ),
|
|
.wtable_create_addr (wtable_create_addr ),
|
|
.wtable_create_burst (wtable_create_burst ),
|
|
.wtable_create_en_x (wtable_create_en[9] ),
|
|
.wtable_create_so (wtable_create_so ),
|
|
.wtable_entry_vld_x (wtable_entry_vld[9] ),
|
|
.wtable_pop_en_x (wtable_pop_en[9] )
|
|
);
|
|
|
|
|
|
// &ConnRule(s/_x$/[10]/); @237
|
|
// &Instance("aq_biu_wt_entry","x_aq_biu_wt_entry_10"); @238
|
|
aq_biu_wt_entry x_aq_biu_wt_entry_10 (
|
|
.ar_hit_wtable_addr_x (ar_hit_wtable_addr[10]),
|
|
.ar_hit_wtable_so_x (ar_hit_wtable_so[10] ),
|
|
.araddr (araddr ),
|
|
.arcache (arcache ),
|
|
.aw_hit_wtable_addr_x (aw_hit_wtable_addr[10]),
|
|
.aw_hit_wtable_so_x (aw_hit_wtable_so[10] ),
|
|
.awaddr (awaddr ),
|
|
.awcache (awcache ),
|
|
.awlen (awlen ),
|
|
.cp0_biu_icg_en (cp0_biu_icg_en ),
|
|
.cpurst_b (cpurst_b ),
|
|
.forever_cpuclk (forever_cpuclk ),
|
|
.pad_yy_icg_scan_en (pad_yy_icg_scan_en ),
|
|
.wtable_create_addr (wtable_create_addr ),
|
|
.wtable_create_burst (wtable_create_burst ),
|
|
.wtable_create_en_x (wtable_create_en[10] ),
|
|
.wtable_create_so (wtable_create_so ),
|
|
.wtable_entry_vld_x (wtable_entry_vld[10] ),
|
|
.wtable_pop_en_x (wtable_pop_en[10] )
|
|
);
|
|
|
|
|
|
// &ConnRule(s/_x$/[11]/); @240
|
|
// &Instance("aq_biu_wt_entry","x_aq_biu_wt_entry_11"); @241
|
|
aq_biu_wt_entry x_aq_biu_wt_entry_11 (
|
|
.ar_hit_wtable_addr_x (ar_hit_wtable_addr[11]),
|
|
.ar_hit_wtable_so_x (ar_hit_wtable_so[11] ),
|
|
.araddr (araddr ),
|
|
.arcache (arcache ),
|
|
.aw_hit_wtable_addr_x (aw_hit_wtable_addr[11]),
|
|
.aw_hit_wtable_so_x (aw_hit_wtable_so[11] ),
|
|
.awaddr (awaddr ),
|
|
.awcache (awcache ),
|
|
.awlen (awlen ),
|
|
.cp0_biu_icg_en (cp0_biu_icg_en ),
|
|
.cpurst_b (cpurst_b ),
|
|
.forever_cpuclk (forever_cpuclk ),
|
|
.pad_yy_icg_scan_en (pad_yy_icg_scan_en ),
|
|
.wtable_create_addr (wtable_create_addr ),
|
|
.wtable_create_burst (wtable_create_burst ),
|
|
.wtable_create_en_x (wtable_create_en[11] ),
|
|
.wtable_create_so (wtable_create_so ),
|
|
.wtable_entry_vld_x (wtable_entry_vld[11] ),
|
|
.wtable_pop_en_x (wtable_pop_en[11] )
|
|
);
|
|
|
|
|
|
// &ConnRule(s/_x$/[12]/); @243
|
|
// &Instance("aq_biu_wt_entry","x_aq_biu_wt_entry_12"); @244
|
|
aq_biu_wt_entry x_aq_biu_wt_entry_12 (
|
|
.ar_hit_wtable_addr_x (ar_hit_wtable_addr[12]),
|
|
.ar_hit_wtable_so_x (ar_hit_wtable_so[12] ),
|
|
.araddr (araddr ),
|
|
.arcache (arcache ),
|
|
.aw_hit_wtable_addr_x (aw_hit_wtable_addr[12]),
|
|
.aw_hit_wtable_so_x (aw_hit_wtable_so[12] ),
|
|
.awaddr (awaddr ),
|
|
.awcache (awcache ),
|
|
.awlen (awlen ),
|
|
.cp0_biu_icg_en (cp0_biu_icg_en ),
|
|
.cpurst_b (cpurst_b ),
|
|
.forever_cpuclk (forever_cpuclk ),
|
|
.pad_yy_icg_scan_en (pad_yy_icg_scan_en ),
|
|
.wtable_create_addr (wtable_create_addr ),
|
|
.wtable_create_burst (wtable_create_burst ),
|
|
.wtable_create_en_x (wtable_create_en[12] ),
|
|
.wtable_create_so (wtable_create_so ),
|
|
.wtable_entry_vld_x (wtable_entry_vld[12] ),
|
|
.wtable_pop_en_x (wtable_pop_en[12] )
|
|
);
|
|
|
|
|
|
// &ConnRule(s/_x$/[13]/); @246
|
|
// &Instance("aq_biu_wt_entry","x_aq_biu_wt_entry_13"); @247
|
|
aq_biu_wt_entry x_aq_biu_wt_entry_13 (
|
|
.ar_hit_wtable_addr_x (ar_hit_wtable_addr[13]),
|
|
.ar_hit_wtable_so_x (ar_hit_wtable_so[13] ),
|
|
.araddr (araddr ),
|
|
.arcache (arcache ),
|
|
.aw_hit_wtable_addr_x (aw_hit_wtable_addr[13]),
|
|
.aw_hit_wtable_so_x (aw_hit_wtable_so[13] ),
|
|
.awaddr (awaddr ),
|
|
.awcache (awcache ),
|
|
.awlen (awlen ),
|
|
.cp0_biu_icg_en (cp0_biu_icg_en ),
|
|
.cpurst_b (cpurst_b ),
|
|
.forever_cpuclk (forever_cpuclk ),
|
|
.pad_yy_icg_scan_en (pad_yy_icg_scan_en ),
|
|
.wtable_create_addr (wtable_create_addr ),
|
|
.wtable_create_burst (wtable_create_burst ),
|
|
.wtable_create_en_x (wtable_create_en[13] ),
|
|
.wtable_create_so (wtable_create_so ),
|
|
.wtable_entry_vld_x (wtable_entry_vld[13] ),
|
|
.wtable_pop_en_x (wtable_pop_en[13] )
|
|
);
|
|
|
|
|
|
// &ConnRule(s/_x$/[14]/); @249
|
|
// &Instance("aq_biu_wt_entry","x_aq_biu_wt_entry_14"); @250
|
|
aq_biu_wt_entry x_aq_biu_wt_entry_14 (
|
|
.ar_hit_wtable_addr_x (ar_hit_wtable_addr[14]),
|
|
.ar_hit_wtable_so_x (ar_hit_wtable_so[14] ),
|
|
.araddr (araddr ),
|
|
.arcache (arcache ),
|
|
.aw_hit_wtable_addr_x (aw_hit_wtable_addr[14]),
|
|
.aw_hit_wtable_so_x (aw_hit_wtable_so[14] ),
|
|
.awaddr (awaddr ),
|
|
.awcache (awcache ),
|
|
.awlen (awlen ),
|
|
.cp0_biu_icg_en (cp0_biu_icg_en ),
|
|
.cpurst_b (cpurst_b ),
|
|
.forever_cpuclk (forever_cpuclk ),
|
|
.pad_yy_icg_scan_en (pad_yy_icg_scan_en ),
|
|
.wtable_create_addr (wtable_create_addr ),
|
|
.wtable_create_burst (wtable_create_burst ),
|
|
.wtable_create_en_x (wtable_create_en[14] ),
|
|
.wtable_create_so (wtable_create_so ),
|
|
.wtable_entry_vld_x (wtable_entry_vld[14] ),
|
|
.wtable_pop_en_x (wtable_pop_en[14] )
|
|
);
|
|
|
|
|
|
// &ConnRule(s/_x$/[15]/); @252
|
|
// &Instance("aq_biu_wt_entry","x_aq_biu_wt_entry_15"); @253
|
|
aq_biu_wt_entry x_aq_biu_wt_entry_15 (
|
|
.ar_hit_wtable_addr_x (ar_hit_wtable_addr[15]),
|
|
.ar_hit_wtable_so_x (ar_hit_wtable_so[15] ),
|
|
.araddr (araddr ),
|
|
.arcache (arcache ),
|
|
.aw_hit_wtable_addr_x (aw_hit_wtable_addr[15]),
|
|
.aw_hit_wtable_so_x (aw_hit_wtable_so[15] ),
|
|
.awaddr (awaddr ),
|
|
.awcache (awcache ),
|
|
.awlen (awlen ),
|
|
.cp0_biu_icg_en (cp0_biu_icg_en ),
|
|
.cpurst_b (cpurst_b ),
|
|
.forever_cpuclk (forever_cpuclk ),
|
|
.pad_yy_icg_scan_en (pad_yy_icg_scan_en ),
|
|
.wtable_create_addr (wtable_create_addr ),
|
|
.wtable_create_burst (wtable_create_burst ),
|
|
.wtable_create_en_x (wtable_create_en[15] ),
|
|
.wtable_create_so (wtable_create_so ),
|
|
.wtable_entry_vld_x (wtable_entry_vld[15] ),
|
|
.wtable_pop_en_x (wtable_pop_en[15] )
|
|
);
|
|
|
|
|
|
// &ModuleEnd; @255
|
|
endmodule
|
|
|
|
|