Merge pull request #275 from antmicro/pcza/ql-qlf-k6n10f-tdp-sim-update
ql-qlf: k6n10f: update TDP36K simulation models
diff --git a/ql-qlf-plugin/Makefile b/ql-qlf-plugin/Makefile
index 30200bf..67a58e6 100644
--- a/ql-qlf-plugin/Makefile
+++ b/ql-qlf-plugin/Makefile
@@ -49,7 +49,7 @@
$(QLF_K6N10F_DIR)/brams.txt \
$(QLF_K6N10F_DIR)/cells_sim.v \
$(QLF_K6N10F_DIR)/sram1024x18.v \
- $(QLF_K6N10F_DIR)/TDP18Kx18_FIFO.v \
+ $(QLF_K6N10F_DIR)/TDP18K_FIFO.v \
$(QLF_K6N10F_DIR)/ufifo_ctl.v \
$(QLF_K6N10F_DIR)/ffs_map.v \
$(QLF_K6N10F_DIR)/dsp_map.v \
diff --git a/ql-qlf-plugin/qlf_k6n10f/TDP18K_FIFO.v b/ql-qlf-plugin/qlf_k6n10f/TDP18K_FIFO.v
new file mode 100644
index 0000000..4179268
--- /dev/null
+++ b/ql-qlf-plugin/qlf_k6n10f/TDP18K_FIFO.v
@@ -0,0 +1,341 @@
+// Copyright 2020-2022 F4PGA Authors
+//
+// 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.
+//
+// SPDX-License-Identifier: Apache-2.0
+
+`default_nettype wire
+module TDP18K_FIFO (
+ RMODE_A_i,
+ RMODE_B_i,
+ WMODE_A_i,
+ WMODE_B_i,
+ WEN_A_i,
+ WEN_B_i,
+ REN_A_i,
+ REN_B_i,
+ CLK_A_i,
+ CLK_B_i,
+ BE_A_i,
+ BE_B_i,
+ ADDR_A_i,
+ ADDR_B_i,
+ WDATA_A_i,
+ WDATA_B_i,
+ RDATA_A_o,
+ RDATA_B_o,
+ EMPTY_o,
+ EPO_o,
+ EWM_o,
+ UNDERRUN_o,
+ FULL_o,
+ FMO_o,
+ FWM_o,
+ OVERRUN_o,
+ FLUSH_ni,
+ FMODE_i,
+);
+ parameter SYNC_FIFO_i = 1'b0;
+ parameter POWERDN_i = 1'b0;
+ parameter SLEEP_i = 1'b0;
+ parameter PROTECT_i = 1'b0;
+ parameter UPAF_i = 11'b0;
+ parameter UPAE_i = 11'b0;
+
+ input wire [2:0] RMODE_A_i;
+ input wire [2:0] RMODE_B_i;
+ input wire [2:0] WMODE_A_i;
+ input wire [2:0] WMODE_B_i;
+ input wire WEN_A_i;
+ input wire WEN_B_i;
+ input wire REN_A_i;
+ input wire REN_B_i;
+ (* clkbuf_sink *)
+ input wire CLK_A_i;
+ (* clkbuf_sink *)
+ input wire CLK_B_i;
+ input wire [1:0] BE_A_i;
+ input wire [1:0] BE_B_i;
+ input wire [13:0] ADDR_A_i;
+ input wire [13:0] ADDR_B_i;
+ input wire [17:0] WDATA_A_i;
+ input wire [17:0] WDATA_B_i;
+ output reg [17:0] RDATA_A_o;
+ output reg [17:0] RDATA_B_o;
+ output wire EMPTY_o;
+ output wire EPO_o;
+ output wire EWM_o;
+ output wire UNDERRUN_o;
+ output wire FULL_o;
+ output wire FMO_o;
+ output wire FWM_o;
+ output wire OVERRUN_o;
+ input wire FLUSH_ni;
+ input wire FMODE_i;
+ reg [17:0] wmsk_a;
+ reg [17:0] wmsk_b;
+ wire [8:0] addr_a;
+ wire [8:0] addr_b;
+ reg [4:0] addr_a_d;
+ reg [4:0] addr_b_d;
+ wire [17:0] ram_rdata_a;
+ wire [17:0] ram_rdata_b;
+ reg [17:0] aligned_wdata_a;
+ reg [17:0] aligned_wdata_b;
+ wire ren_o;
+ wire [10:0] ff_raddr;
+ wire [10:0] ff_waddr;
+ wire [13:0] ram_addr_a;
+ wire [13:0] ram_addr_b;
+ wire [3:0] ram_waddr_a;
+ wire [3:0] ram_waddr_b;
+ wire initn;
+ wire smux_rclk;
+ wire smux_wclk;
+ wire real_fmode;
+ wire [3:0] raw_fflags;
+ reg [1:0] fifo_rmode;
+ reg [1:0] fifo_wmode;
+ wire smux_clk_a;
+ wire smux_clk_b;
+ wire ram_ren_a;
+ wire ram_ren_b;
+ wire ram_wen_a;
+ wire ram_wen_b;
+ wire cen_a;
+ wire cen_b;
+ wire cen_a_n;
+ wire cen_b_n;
+ wire ram_wen_a_n;
+ wire ram_wen_b_n;
+ localparam MODE_9 = 3'b001;
+ always @(*) begin
+ fifo_rmode = (RMODE_B_i == MODE_9 ? 2'b10 : 2'b01);
+ fifo_wmode = (WMODE_A_i == MODE_9 ? 2'b10 : 2'b01);
+ end
+ assign smux_clk_a = CLK_A_i;
+ assign smux_clk_b = CLK_B_i;
+ assign real_fmode = FMODE_i;
+ assign ram_ren_b = real_fmode ? ren_o : REN_B_i;
+ assign ram_wen_a = FMODE_i ? ~FULL_o & WEN_A_i : WEN_A_i;
+ assign ram_ren_a = FMODE_i ? 0 : REN_A_i;
+ assign ram_wen_b = FMODE_i ? 1'b0 : WEN_B_i;
+ assign cen_b = ram_ren_b | ram_wen_b;
+ assign cen_a = ram_ren_a | ram_wen_a;
+ assign ram_waddr_b = real_fmode ? {ff_raddr[0], 3'b000} : ADDR_B_i[3:0];
+ assign ram_waddr_a = real_fmode ? {ff_waddr[0], 3'b000} : ADDR_A_i[3:0];
+ assign ram_addr_b = real_fmode ? {ff_raddr[10:0], 3'h0} : {ADDR_B_i[13:4], addr_b_d[3:0]};
+ assign ram_addr_a = real_fmode ? {ff_waddr[10:0], 3'h0} : {ADDR_A_i[13:4], addr_a_d[3:0]};
+ always @(posedge CLK_A_i) addr_a_d[3:0] <= ADDR_A_i[3:0];
+ always @(posedge CLK_B_i) addr_b_d[3:0] <= ADDR_B_i[3:0];
+ assign cen_a_n = ~cen_a;
+ assign ram_wen_a_n = ~ram_wen_a;
+ assign cen_b_n = ~cen_b;
+ assign ram_wen_b_n = ~ram_wen_b;
+
+ sram1024x18 uram(
+ .clk_a(smux_clk_a),
+ .cen_a(cen_a_n),
+ .wen_a(ram_wen_a_n),
+ .addr_a(ram_addr_a[13:4]),
+ .wmsk_a(wmsk_a),
+ .wdata_a(aligned_wdata_a),
+ .rdata_a(ram_rdata_a),
+ .clk_b(smux_clk_b),
+ .cen_b(cen_b_n),
+ .wen_b(ram_wen_b_n),
+ .addr_b(ram_addr_b[13:4]),
+ .wmsk_b(wmsk_b),
+ .wdata_b(aligned_wdata_b),
+ .rdata_b(ram_rdata_b)
+ );
+ fifo_ctl #(
+ .ADDR_WIDTH(11),
+ .FIFO_WIDTH(2),
+ .DEPTH(6)
+ ) fifo_ctl(
+ .rclk(smux_clk_b),
+ .rst_R_n(FLUSH_ni),
+ .wclk(smux_clk_a),
+ .rst_W_n(FLUSH_ni),
+ .ren(REN_B_i),
+ .wen(ram_wen_a),
+ .sync(SYNC_FIFO_i),
+ .rmode(fifo_rmode),
+ .wmode(fifo_wmode),
+ .ren_o(ren_o),
+ .fflags({FULL_o, FMO_o, FWM_o, OVERRUN_o, EMPTY_o, EPO_o, EWM_o, UNDERRUN_o}),
+ .raddr(ff_raddr),
+ .waddr(ff_waddr),
+ .upaf(UPAF_i),
+ .upae(UPAE_i)
+ );
+ localparam MODE_1 = 3'b101;
+ localparam MODE_18 = 3'b010;
+ localparam MODE_2 = 3'b110;
+ localparam MODE_4 = 3'b100;
+ always @(*) begin : WDATA_MODE_SEL
+ if (ram_wen_a == 1) begin
+ case (WMODE_A_i)
+ MODE_18: begin
+ aligned_wdata_a = WDATA_A_i;
+ {wmsk_a[17], wmsk_a[15:8]} = (FMODE_i ? 9'h000 : (BE_A_i[1] ? 9'h000 : 9'h1ff));
+ {wmsk_a[16], wmsk_a[7:0]} = (FMODE_i ? 9'h000 : (BE_A_i[0] ? 9'h000 : 9'h1ff));
+ end
+ MODE_9: begin
+ aligned_wdata_a = {{2 {WDATA_A_i[16]}}, {2 {WDATA_A_i[7:0]}}};
+ {wmsk_a[17], wmsk_a[15:8]} = (ram_waddr_a[3] ? 9'h000 : 9'h1ff);
+ {wmsk_a[16], wmsk_a[7:0]} = (ram_waddr_a[3] ? 9'h1ff : 9'h000);
+ end
+ MODE_4: begin
+ aligned_wdata_a = {2'b00, {4 {WDATA_A_i[3:0]}}};
+ wmsk_a[17:16] = 2'b00;
+ wmsk_a[15:12] = (ram_waddr_a[3:2] == 2'b11 ? 4'h0 : 4'hf);
+ wmsk_a[11:8] = (ram_waddr_a[3:2] == 2'b10 ? 4'h0 : 4'hf);
+ wmsk_a[7:4] = (ram_waddr_a[3:2] == 2'b01 ? 4'h0 : 4'hf);
+ wmsk_a[3:0] = (ram_waddr_a[3:2] == 2'b00 ? 4'h0 : 4'hf);
+ end
+ MODE_2: begin
+ aligned_wdata_a = {2'b00, {8 {WDATA_A_i[1:0]}}};
+ wmsk_a[17:16] = 2'b00;
+ wmsk_a[15:14] = (ram_waddr_a[3:1] == 3'b111 ? 2'h0 : 2'h3);
+ wmsk_a[13:12] = (ram_waddr_a[3:1] == 3'b110 ? 2'h0 : 2'h3);
+ wmsk_a[11:10] = (ram_waddr_a[3:1] == 3'b101 ? 2'h0 : 2'h3);
+ wmsk_a[9:8] = (ram_waddr_a[3:1] == 3'b100 ? 2'h0 : 2'h3);
+ wmsk_a[7:6] = (ram_waddr_a[3:1] == 3'b011 ? 2'h0 : 2'h3);
+ wmsk_a[5:4] = (ram_waddr_a[3:1] == 3'b010 ? 2'h0 : 2'h3);
+ wmsk_a[3:2] = (ram_waddr_a[3:1] == 3'b001 ? 2'h0 : 2'h3);
+ wmsk_a[1:0] = (ram_waddr_a[3:1] == 3'b000 ? 2'h0 : 2'h3);
+ end
+ MODE_1: begin
+ aligned_wdata_a = {2'b00, {16 {WDATA_A_i[0]}}};
+ wmsk_a = 18'h0ffff;
+ wmsk_a[{1'b0, ram_waddr_a[3:0]}] = 0;
+ end
+ default: wmsk_a = 18'h3ffff;
+ endcase
+ end
+ else begin
+ aligned_wdata_a = 18'h00000;
+ wmsk_a = 18'h3ffff;
+ end
+ if (ram_wen_b == 1)
+ case (WMODE_B_i)
+ MODE_18: begin
+ aligned_wdata_b = WDATA_B_i;
+ {wmsk_b[17], wmsk_b[15:8]} = (BE_B_i[1] ? 9'h000 : 9'h1ff);
+ {wmsk_b[16], wmsk_b[7:0]} = (BE_B_i[0] ? 9'h000 : 9'h1ff);
+ end
+ MODE_9: begin
+ aligned_wdata_b = {{2 {WDATA_B_i[16]}}, {2 {WDATA_B_i[7:0]}}};
+ {wmsk_b[17], wmsk_b[15:8]} = (ram_waddr_b[3] ? 9'h000 : 9'h1ff);
+ {wmsk_b[16], wmsk_b[7:0]} = (ram_waddr_b[3] ? 9'h1ff : 9'h000);
+ end
+ MODE_4: begin
+ aligned_wdata_b = {2'b00, {4 {WDATA_B_i[3:0]}}};
+ wmsk_b[17:16] = 2'b00;
+ wmsk_b[15:12] = (ram_waddr_b[3:2] == 2'b11 ? 4'h0 : 4'hf);
+ wmsk_b[11:8] = (ram_waddr_b[3:2] == 2'b10 ? 4'h0 : 4'hf);
+ wmsk_b[7:4] = (ram_waddr_b[3:2] == 2'b01 ? 4'h0 : 4'hf);
+ wmsk_b[3:0] = (ram_waddr_b[3:2] == 2'b00 ? 4'h0 : 4'hf);
+ end
+ MODE_2: begin
+ aligned_wdata_b = {2'b00, {8 {WDATA_B_i[1:0]}}};
+ wmsk_b[17:16] = 2'b00;
+ wmsk_b[15:14] = (ram_waddr_b[3:1] == 3'b111 ? 2'h0 : 2'h3);
+ wmsk_b[13:12] = (ram_waddr_b[3:1] == 3'b110 ? 2'h0 : 2'h3);
+ wmsk_b[11:10] = (ram_waddr_b[3:1] == 3'b101 ? 2'h0 : 2'h3);
+ wmsk_b[9:8] = (ram_waddr_b[3:1] == 3'b100 ? 2'h0 : 2'h3);
+ wmsk_b[7:6] = (ram_waddr_b[3:1] == 3'b011 ? 2'h0 : 2'h3);
+ wmsk_b[5:4] = (ram_waddr_b[3:1] == 3'b010 ? 2'h0 : 2'h3);
+ wmsk_b[3:2] = (ram_waddr_b[3:1] == 3'b001 ? 2'h0 : 2'h3);
+ wmsk_b[1:0] = (ram_waddr_b[3:1] == 3'b000 ? 2'h0 : 2'h3);
+ end
+ MODE_1: begin
+ aligned_wdata_b = {2'b00, {16 {WDATA_B_i[0]}}};
+ wmsk_b = 18'h0ffff;
+ wmsk_b[{1'b0, ram_waddr_b[3:0]}] = 0;
+ end
+ default: wmsk_b = 18'h3ffff;
+ endcase
+ else begin
+ aligned_wdata_b = 18'b000000000000000000;
+ wmsk_b = 18'h3ffff;
+ end
+ end
+ always @(*) begin : RDATA_A_MODE_SEL
+ case (RMODE_A_i)
+ default: RDATA_A_o = 18'h00000;
+ MODE_18: RDATA_A_o = ram_rdata_a;
+ MODE_9: begin
+ {RDATA_A_o[17], RDATA_A_o[15:8]} = 9'h000;
+ {RDATA_A_o[16], RDATA_A_o[7:0]} = (ram_addr_a[3] ? {ram_rdata_a[17], ram_rdata_a[15:8]} : {ram_rdata_a[16], ram_rdata_a[7:0]});
+ end
+ MODE_4: begin
+ RDATA_A_o[17:4] = 14'h0000;
+ case (ram_addr_a[3:2])
+ 3: RDATA_A_o[3:0] = ram_rdata_a[15:12];
+ 2: RDATA_A_o[3:0] = ram_rdata_a[11:8];
+ 1: RDATA_A_o[3:0] = ram_rdata_a[7:4];
+ 0: RDATA_A_o[3:0] = ram_rdata_a[3:0];
+ endcase
+ end
+ MODE_2: begin
+ RDATA_A_o[17:2] = 16'h0000;
+ case (ram_addr_a[3:1])
+ 7: RDATA_A_o[1:0] = ram_rdata_a[15:14];
+ 6: RDATA_A_o[1:0] = ram_rdata_a[13:12];
+ 5: RDATA_A_o[1:0] = ram_rdata_a[11:10];
+ 4: RDATA_A_o[1:0] = ram_rdata_a[9:8];
+ 3: RDATA_A_o[1:0] = ram_rdata_a[7:6];
+ 2: RDATA_A_o[1:0] = ram_rdata_a[5:4];
+ 1: RDATA_A_o[1:0] = ram_rdata_a[3:2];
+ 0: RDATA_A_o[1:0] = ram_rdata_a[1:0];
+ endcase
+ end
+ MODE_1: begin
+ RDATA_A_o[17:1] = 17'h00000;
+ RDATA_A_o[0] = ram_rdata_a[ram_addr_a[3:0]];
+ end
+ endcase
+ end
+ always @(*)
+ case (RMODE_B_i)
+ default: RDATA_B_o = 18'h15566;
+ MODE_18: RDATA_B_o = ram_rdata_b;
+ MODE_9: begin
+ {RDATA_B_o[17], RDATA_B_o[15:8]} = 9'b000000000;
+ {RDATA_B_o[16], RDATA_B_o[7:0]} = (ram_addr_b[3] ? {ram_rdata_b[17], ram_rdata_b[15:8]} : {ram_rdata_b[16], ram_rdata_b[7:0]});
+ end
+ MODE_4:
+ case (ram_addr_b[3:2])
+ 3: RDATA_B_o[3:0] = ram_rdata_b[15:12];
+ 2: RDATA_B_o[3:0] = ram_rdata_b[11:8];
+ 1: RDATA_B_o[3:0] = ram_rdata_b[7:4];
+ 0: RDATA_B_o[3:0] = ram_rdata_b[3:0];
+ endcase
+ MODE_2:
+ case (ram_addr_b[3:1])
+ 7: RDATA_B_o[1:0] = ram_rdata_b[15:14];
+ 6: RDATA_B_o[1:0] = ram_rdata_b[13:12];
+ 5: RDATA_B_o[1:0] = ram_rdata_b[11:10];
+ 4: RDATA_B_o[1:0] = ram_rdata_b[9:8];
+ 3: RDATA_B_o[1:0] = ram_rdata_b[7:6];
+ 2: RDATA_B_o[1:0] = ram_rdata_b[5:4];
+ 1: RDATA_B_o[1:0] = ram_rdata_b[3:2];
+ 0: RDATA_B_o[1:0] = ram_rdata_b[1:0];
+ endcase
+ MODE_1: RDATA_B_o[0] = ram_rdata_b[{1'b0, ram_addr_b[3:0]}];
+ endcase
+endmodule
+`default_nettype none
diff --git a/ql-qlf-plugin/qlf_k6n10f/TDP18Kx18_FIFO.v b/ql-qlf-plugin/qlf_k6n10f/TDP18Kx18_FIFO.v
deleted file mode 100644
index a68e88e..0000000
--- a/ql-qlf-plugin/qlf_k6n10f/TDP18Kx18_FIFO.v
+++ /dev/null
@@ -1,363 +0,0 @@
-// Copyright 2020-2022 F4PGA Authors
-//
-// 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.
-//
-// SPDX-License-Identifier: Apache-2.0
-
-module TDP18K_FIFO (
- RMODE_A,
- RMODE_B,
- WMODE_A,
- WMODE_B,
- WEN_A,
- WEN_B,
- REN_A,
- REN_B,
- CLK_A,
- CLK_B,
- BE_A,
- BE_B,
- ADDR_A,
- ADDR_B,
- WDATA_A,
- WDATA_B,
- RDATA_A,
- RDATA_B,
- EMPTY,
- EPO,
- EWM,
- UNDERRUN,
- FULL,
- FMO,
- FWM,
- OVERRUN,
- FLUSH,
- RAM_ID,
- FMODE,
- PL_INIT,
- PL_ENA,
- PL_WEN,
- PL_REN,
- PL_CLK,
- PL_ADDR,
- PL_DATA_IN,
- PL_DATA_OUT
-);
- parameter SYNC_FIFO = 1'b0;
- parameter POWERDN = 1'b0;
- parameter SLEEP = 1'b0;
- parameter PROTECT = 1'b0;
- parameter UPAF = 11'b0;
- parameter UPAE = 11'b0;
-
- input wire [2:0] RMODE_A;
- input wire [2:0] RMODE_B;
- input wire [2:0] WMODE_A;
- input wire [2:0] WMODE_B;
- input wire WEN_A;
- input wire WEN_B;
- input wire REN_A;
- input wire REN_B;
- (* clkbuf_sink *)
- input wire CLK_A;
- (* clkbuf_sink *)
- input wire CLK_B;
- input wire [1:0] BE_A;
- input wire [1:0] BE_B;
- input wire [13:0] ADDR_A;
- input wire [13:0] ADDR_B;
- input wire [17:0] WDATA_A;
- input wire [17:0] WDATA_B;
- output reg [17:0] RDATA_A;
- output reg [17:0] RDATA_B;
- output wire EMPTY;
- output wire EPO;
- output wire EWM;
- output wire UNDERRUN;
- output wire FULL;
- output wire FMO;
- output wire FWM;
- output wire OVERRUN;
- input wire FLUSH;
- input wire [15:0] RAM_ID;
- input wire FMODE;
- input PL_INIT;
- input PL_ENA;
- input PL_WEN;
- input PL_REN;
- input PL_CLK;
- input [31:0] PL_ADDR;
- input [17:0] PL_DATA_IN;
- output reg [17:0] PL_DATA_OUT;
- reg [17:0] wmsk_a;
- reg [17:0] wmsk_b;
- wire [8:0] addr_a;
- wire [8:0] addr_b;
- reg [4:0] addr_a_d;
- reg [4:0] addr_b_d;
- wire [17:0] ram_rdata_a;
- wire [17:0] ram_rdata_b;
- reg [17:0] aligned_wdata_a;
- reg [17:0] aligned_wdata_b;
- wire ren_o;
- wire [10:0] ff_raddr;
- wire [10:0] ff_waddr;
- wire [13:0] ram_addr_a;
- wire [13:0] ram_addr_b;
- wire [3:0] ram_waddr_a;
- wire [3:0] ram_waddr_b;
- wire preload;
- wire my_id;
- wire initn;
- wire smux_rclk;
- wire smux_wclk;
- wire real_fmode;
- wire [3:0] raw_fflags;
- reg [1:0] fifo_rmode;
- reg [1:0] fifo_wmode;
- wire smux_clk_a;
- wire smux_clk_b;
- wire ram_ren_a;
- wire ram_ren_b;
- wire ram_wen_a;
- wire ram_wen_b;
- wire cen_a;
- wire cen_b;
- localparam MODE_9 = 3'b101;
- always @(*) begin
- fifo_rmode = (RMODE_B == MODE_9 ? 2'b10 : 2'b01);
- fifo_wmode = (WMODE_A == MODE_9 ? 2'b10 : 2'b01);
- end
- assign my_id = (PL_ADDR[31:16] == RAM_ID) | PL_INIT;
- assign preload = (PROTECT ? 1'b0 : my_id & PL_ENA);
- assign smux_clk_a = (preload ? PL_CLK : CLK_A);
- assign smux_clk_b = (preload ? 0 : (FMODE ? (SYNC_FIFO ? CLK_A : CLK_B) : CLK_B));
- assign real_fmode = (preload ? 1'b0 : FMODE);
- assign ram_ren_b = (preload ? PL_REN : (real_fmode ? ren_o : REN_B));
- assign ram_wen_a = (preload ? PL_WEN : (FMODE ? ~FULL & WEN_A : WEN_A));
- assign ram_ren_a = (preload ? 1'b1 : (FMODE ? 0 : REN_A));
- assign ram_wen_b = (preload ? 1'b1 : (FMODE ? 1'b0 : WEN_B));
- assign cen_b = ram_ren_b | ram_wen_b;
- assign cen_a = ram_ren_a | ram_wen_a;
- assign ram_waddr_b = (preload ? 4'b0000 : (real_fmode ? {ff_raddr[0], 3'b000} : ADDR_B[3:0]));
- assign ram_waddr_a = (preload ? 4'b0000 : (real_fmode ? {ff_waddr[0], 3'b000} : ADDR_A[3:0]));
- assign ram_addr_b = (preload ? {PL_ADDR[10:0], 3'h0} : (real_fmode ? {ff_raddr[10:0], 3'h0} : {ADDR_B[13:4], addr_b_d[3:0]}));
- assign ram_addr_a = (preload ? {PL_ADDR[10:0], 3'h0} : (real_fmode ? {ff_waddr[10:0], 3'b000} : {ADDR_A[13:4], addr_a_d[3:0]}));
- always @(posedge CLK_A) addr_a_d[3:0] <= ADDR_A[3:0];
- always @(posedge CLK_B) addr_b_d[3:0] <= ADDR_B[3:0];
- sram1024x18 uram(
- .clk_a(smux_clk_a),
- .cen_a(~cen_a),
- .wen_a(~ram_wen_a),
- .addr_a(ram_addr_a[13:4]),
- .wmsk_a(wmsk_a),
- .wdata_a(aligned_wdata_a),
- .rdata_a(ram_rdata_a),
- .clk_b(smux_clk_b),
- .cen_b(~cen_b),
- .wen_b(~ram_wen_b),
- .addr_b(ram_addr_b[13:4]),
- .wmsk_b(wmsk_b),
- .wdata_b(aligned_wdata_b),
- .rdata_b(ram_rdata_b)
- );
- fifo_ctl #(
- .ADDR_WIDTH(11),
- .FIFO_WIDTH(2)
- ) fifo_ctl(
- .rclk(smux_clk_b),
- .rst_R_n(~FLUSH),
- .wclk(smux_clk_a),
- .rst_W_n(~FLUSH),
- .ren(REN_B),
- .wen(ram_wen_a),
- .depth(3'b000),
- .sync(SYNC_FIFO),
- .rmode(fifo_rmode),
- .wmode(fifo_wmode),
- .ren_o(ren_o),
- .fflags({FULL, FMO, FWM, OVERRUN, EMPTY, EPO, EWM, UNDERRUN}),
- .raddr(ff_raddr),
- .waddr(ff_waddr),
- .upaf(UPAF),
- .upae(UPAE)
- );
- always @(*) begin : PRELOAD_DATA
- if (preload & ram_ren_a)
- PL_DATA_OUT = ram_rdata_a;
- else
- PL_DATA_OUT = PL_DATA_IN;
- end
- localparam MODE_1 = 3'b001;
- localparam MODE_18 = 3'b110;
- localparam MODE_2 = 3'b010;
- localparam MODE_4 = 3'b100;
- always @(*) begin : WDATA_MODE_SEL
- if (ram_wen_a == 1) begin
- if (preload) begin
- aligned_wdata_a = PL_DATA_IN;
- wmsk_a = 18'h00000;
- end
- else
- case (WMODE_A)
- MODE_18: begin
- aligned_wdata_a = WDATA_A;
- {wmsk_a[17], wmsk_a[15:8]} = (FMODE ? 9'h000 : (BE_A[1] ? 9'h000 : 9'h1ff));
- {wmsk_a[16], wmsk_a[7:0]} = (FMODE ? 9'h000 : (BE_A[0] ? 9'h000 : 9'h1ff));
- end
- MODE_9: begin
- aligned_wdata_a = {{2 {WDATA_A[8]}}, {2 {WDATA_A[7:0]}}};
- {wmsk_a[17], wmsk_a[15:8]} = (ram_waddr_a[3] ? 9'h000 : 9'h1ff);
- {wmsk_a[16], wmsk_a[7:0]} = (ram_waddr_a[3] ? 9'h1ff : 9'h000);
- end
- MODE_4: begin
- aligned_wdata_a = {2'b00, {4 {WDATA_A[3:0]}}};
- wmsk_a[17:16] = 2'b11;
- wmsk_a[15:12] = (ram_waddr_a[3:2] == 2'b11 ? 4'h0 : 4'hf);
- wmsk_a[11:8] = (ram_waddr_a[3:2] == 2'b10 ? 4'h0 : 4'hf);
- wmsk_a[7:4] = (ram_waddr_a[3:2] == 2'b01 ? 4'h0 : 4'hf);
- wmsk_a[3:0] = (ram_waddr_a[3:2] == 2'b00 ? 4'h0 : 4'hf);
- end
- MODE_2: begin
- aligned_wdata_a = {2'b00, {8 {WDATA_A[1:0]}}};
- wmsk_a[17:16] = 2'b11;
- wmsk_a[15:14] = (ram_waddr_a[3:1] == 3'b111 ? 2'h0 : 2'h3);
- wmsk_a[13:12] = (ram_waddr_a[3:1] == 3'b110 ? 2'h0 : 2'h3);
- wmsk_a[11:10] = (ram_waddr_a[3:1] == 3'b101 ? 2'h0 : 2'h3);
- wmsk_a[9:8] = (ram_waddr_a[3:1] == 3'b100 ? 2'h0 : 2'h3);
- wmsk_a[7:6] = (ram_waddr_a[3:1] == 3'b011 ? 2'h0 : 2'h3);
- wmsk_a[5:4] = (ram_waddr_a[3:1] == 3'b010 ? 2'h0 : 2'h3);
- wmsk_a[3:2] = (ram_waddr_a[3:1] == 3'b001 ? 2'h0 : 2'h3);
- wmsk_a[1:0] = (ram_waddr_a[3:1] == 3'b000 ? 2'h0 : 2'h3);
- end
- MODE_1: begin
- aligned_wdata_a = {2'b00, {16 {WDATA_A[0]}}};
- wmsk_a = 18'h3ffff;
- wmsk_a[{1'b0, ram_waddr_a[3:0]}] = 0;
- end
- default: wmsk_a = 18'h3ffff;
- endcase
- end
- else begin
- aligned_wdata_a = 18'h00000;
- wmsk_a = 18'h3ffff;
- end
- if (ram_wen_b == 1)
- case (WMODE_B)
- MODE_18: begin
- aligned_wdata_b = WDATA_B;
- {wmsk_b[17], wmsk_b[15:8]} = (BE_B[1] ? 9'h000 : 9'h1ff);
- {wmsk_b[16], wmsk_b[7:0]} = (BE_B[0] ? 9'h000 : 9'h1ff);
- end
- MODE_9: begin
- aligned_wdata_b = {{2 {WDATA_B[8]}}, {2 {WDATA_B[7:0]}}};
- {wmsk_b[17], wmsk_b[15:8]} = (ram_waddr_b[3] ? 9'h000 : 9'h1ff);
- {wmsk_b[16], wmsk_b[7:0]} = (ram_waddr_b[3] ? 9'h1ff : 9'h000);
- end
- MODE_4: begin
- aligned_wdata_b = {2'b00, {4 {WDATA_B[3:0]}}};
- wmsk_b[17:16] = 2'b11;
- wmsk_b[15:12] = (ram_waddr_b[3:2] == 2'b11 ? 4'h0 : 4'hf);
- wmsk_b[11:8] = (ram_waddr_b[3:2] == 2'b10 ? 4'h0 : 4'hf);
- wmsk_b[7:4] = (ram_waddr_b[3:2] == 2'b01 ? 4'h0 : 4'hf);
- wmsk_b[3:0] = (ram_waddr_b[3:2] == 2'b00 ? 4'h0 : 4'hf);
- end
- MODE_2: begin
- aligned_wdata_b = {2'b00, {8 {WDATA_B[1:0]}}};
- wmsk_b[17:16] = 2'b11;
- wmsk_b[15:14] = (ram_waddr_b[3:1] == 3'b111 ? 2'h0 : 2'h3);
- wmsk_b[13:12] = (ram_waddr_b[3:1] == 3'b110 ? 2'h0 : 2'h3);
- wmsk_b[11:10] = (ram_waddr_b[3:1] == 3'b101 ? 2'h0 : 2'h3);
- wmsk_b[9:8] = (ram_waddr_b[3:1] == 3'b100 ? 2'h0 : 2'h3);
- wmsk_b[7:6] = (ram_waddr_b[3:1] == 3'b011 ? 2'h0 : 2'h3);
- wmsk_b[5:4] = (ram_waddr_b[3:1] == 3'b010 ? 2'h0 : 2'h3);
- wmsk_b[3:2] = (ram_waddr_b[3:1] == 3'b001 ? 2'h0 : 2'h3);
- wmsk_b[1:0] = (ram_waddr_b[3:1] == 3'b000 ? 2'h0 : 2'h3);
- end
- MODE_1: begin
- aligned_wdata_b = {2'b00, {16 {WDATA_B[0]}}};
- wmsk_b = 18'h3ffff;
- wmsk_b[{1'b0, ram_waddr_b[3:0]}] = 0;
- end
- default: wmsk_b = 18'h3ffff;
- endcase
- else begin
- aligned_wdata_b = 18'b000000000000000000;
- wmsk_b = 18'h3ffff;
- end
- end
- always @(*) begin : RDATA_A_MODE_SEL
- case (RMODE_A)
- default: RDATA_A = 18'h00000;
- MODE_18: RDATA_A = ram_rdata_a;
- MODE_9: begin
- RDATA_A[17:9] = 9'h000;
- RDATA_A[8:0] = (ram_addr_a[3] ? {ram_rdata_a[17], ram_rdata_a[15:8]} : {ram_rdata_a[16], ram_rdata_a[7:0]});
- end
- MODE_4: begin
- RDATA_A[17:4] = 14'h0000;
- case (ram_addr_a[3:2])
- 3: RDATA_A[3:0] = ram_rdata_a[15:12];
- 2: RDATA_A[3:0] = ram_rdata_a[11:8];
- 1: RDATA_A[3:0] = ram_rdata_a[7:4];
- 0: RDATA_A[3:0] = ram_rdata_a[3:0];
- endcase
- end
- MODE_2: begin
- RDATA_A[17:2] = 16'h0000;
- case (ram_addr_a[3:1])
- 7: RDATA_A[1:0] = ram_rdata_a[15:14];
- 6: RDATA_A[1:0] = ram_rdata_a[13:12];
- 5: RDATA_A[1:0] = ram_rdata_a[11:10];
- 4: RDATA_A[1:0] = ram_rdata_a[9:8];
- 3: RDATA_A[1:0] = ram_rdata_a[7:6];
- 2: RDATA_A[1:0] = ram_rdata_a[5:4];
- 1: RDATA_A[1:0] = ram_rdata_a[3:2];
- 0: RDATA_A[1:0] = ram_rdata_a[1:0];
- endcase
- end
- MODE_1: begin
- RDATA_A[17:1] = 17'h00000;
- RDATA_A[0] = ram_rdata_a[ram_addr_a[3:0]];
- end
- endcase
- end
- always @(*)
- case (RMODE_B)
- default: RDATA_B = 18'h15566;
- MODE_18: RDATA_B = ram_rdata_b;
- MODE_9: begin
- RDATA_B[17:9] = 1'sb1;
- RDATA_B[8:0] = (ram_addr_b[3] ? {ram_rdata_b[17], ram_rdata_b[15:8]} : {ram_rdata_b[16], ram_rdata_b[7:0]});
- end
- MODE_4:
- case (ram_addr_b[3:2])
- 3: RDATA_B[3:0] = ram_rdata_b[15:12];
- 2: RDATA_B[3:0] = ram_rdata_b[11:8];
- 1: RDATA_B[3:0] = ram_rdata_b[7:4];
- 0: RDATA_B[3:0] = ram_rdata_b[3:0];
- endcase
- MODE_2:
- case (ram_addr_b[3:1])
- 7: RDATA_B[1:0] = ram_rdata_b[15:14];
- 6: RDATA_B[1:0] = ram_rdata_b[13:12];
- 5: RDATA_B[1:0] = ram_rdata_b[11:10];
- 4: RDATA_B[1:0] = ram_rdata_b[9:8];
- 3: RDATA_B[1:0] = ram_rdata_b[7:6];
- 2: RDATA_B[1:0] = ram_rdata_b[5:4];
- 1: RDATA_B[1:0] = ram_rdata_b[3:2];
- 0: RDATA_B[1:0] = ram_rdata_b[1:0];
- endcase
- MODE_1: RDATA_B[0] = ram_rdata_b[ram_addr_b[3:0]];
- endcase
-endmodule
diff --git a/ql-qlf-plugin/qlf_k6n10f/brams_map.v b/ql-qlf-plugin/qlf_k6n10f/brams_map.v
index 798ebbe..821cc44 100644
--- a/ql-qlf-plugin/qlf_k6n10f/brams_map.v
+++ b/ql-qlf-plugin/qlf_k6n10f/brams_map.v
@@ -14,12 +14,12 @@
//
// SPDX-License-Identifier: Apache-2.0
-`define MODE_36 3'b111 // 36 or 32-bit
-`define MODE_18 3'b110 // 18 or 16-bit
-`define MODE_9 3'b101 // 9 or 8-bit
+`define MODE_36 3'b011 // 36 or 32-bit
+`define MODE_18 3'b010 // 18 or 16-bit
+`define MODE_9 3'b001 // 9 or 8-bit
`define MODE_4 3'b100 // 4-bit
-`define MODE_2 3'b010 // 32-bit
-`define MODE_1 3'b001 // 32-bit
+`define MODE_2 3'b110 // 32-bit
+`define MODE_1 3'b101 // 32-bit
module \$__QLF_FACTOR_BRAM36_TDP (A1ADDR, A1DATA, A1EN, B1ADDR, B1DATA, B1EN, C1ADDR, C1DATA, C1EN, CLK1, CLK2, D1ADDR, D1DATA, D1EN);
parameter CFG_ABITS = 10;
@@ -53,22 +53,6 @@
wire FLUSH1;
wire FLUSH2;
wire SPLIT;
- wire [15:0] RAM_ID;
-
- wire PL_INIT_i;
- wire PL_ENA_i;
- wire PL_REN_i;
- wire PL_CLK_i;
- wire [1:0] PL_WEN_i;
- wire [23:0] PL_ADDR_i;
- wire [35:0] PL_DATA_i;
- reg PL_INIT_o;
- reg PL_ENA_o;
- reg PL_REN_o;
- reg PL_CLK_o;
- reg [1:0] PL_WEN_o;
- reg [23:0] PL_ADDR_o;
- wire [35:0] PL_DATA_o;
wire [14:CFG_ABITS] A1ADDR_CMPL = {15-CFG_ABITS{1'b0}};
wire [14:CFG_ABITS] B1ADDR_CMPL = {15-CFG_ABITS{1'b0}};
@@ -157,17 +141,9 @@
assign SPLIT = 1'b0;
assign FLUSH1 = 1'b0;
assign FLUSH2 = 1'b0;
- assign RAM_ID = 16'b0;
- assign PL_INIT_i = 1'b0;
- assign PL_ENA_i = 1'b0;
- assign PL_REN_i = 1'b0;
- assign PL_CLK_i = 1'b0;
- assign PL_WEN_i = 2'b0;
- assign PL_ADDR_i = 24'b0;
- assign PL_DATA_i = 36'b0;
-
- TDP_BRAM36 _TECHMAP_REPLACE_ (
+ TDP36K _TECHMAP_REPLACE_ (
+ .RESET_ni(1'b1),
.WDATA_A1_i(B1DATA[17:0]),
.WDATA_A2_i(B1DATA[35:18]),
.RDATA_A1_o(A1DATA_TOTAL[17:0]),
@@ -199,24 +175,7 @@
.BE_B2_i({D1EN[3],D1EN[2]}),
.FLUSH1_i(FLUSH1),
- .FLUSH2_i(FLUSH2),
- .RAM_ID_i(RAM_ID),
-
- .PL_INIT_i(PL_INIT_i),
- .PL_ENA_i(PL_ENA_i),
- .PL_WEN_i(PL_WEN_i),
- .PL_REN_i(PL_REN_i),
- .PL_CLK_i(PL_CLK_i),
- .PL_ADDR_i(PL_ADDR_i),
- .PL_DATA_i(PL_DATA_i),
- .PL_INIT_o(PL_INIT_o),
- .PL_ENA_o(PL_ENA_o),
- .PL_WEN_o(PL_WEN_o),
- .PL_REN_o(PL_REN_o),
- .PL_CLK_o(PL_CLK_o),
- .PL_ADDR_o(),
- .PL_DATA_o(PL_DATA_o)
-
+ .FLUSH2_i(FLUSH2)
);
endmodule
@@ -383,22 +342,6 @@
wire FLUSH1;
wire FLUSH2;
- wire [15:0] RAM_ID;
-
- wire PL_INIT_i;
- wire PL_ENA_i;
- wire PL_REN_i;
- wire PL_CLK_i;
- wire [1:0] PL_WEN_i;
- wire [23:0] PL_ADDR_i;
- wire [35:0] PL_DATA_i;
- reg PL_INIT_o;
- reg PL_ENA_o;
- reg PL_REN_o;
- reg PL_CLK_o;
- reg [1:0] PL_WEN_o;
- reg [23:0] PL_ADDR_o;
- wire [35:0] PL_DATA_o;
assign A1ADDR_CMPL = {15-CFG_ABITS{1'b0}};
assign B1ADDR_CMPL = {15-CFG_ABITS{1'b0}};
@@ -474,16 +417,9 @@
assign FLUSH1 = 1'b0;
assign FLUSH2 = 1'b0;
- assign RAM_ID = 16'b0;
- assign PL_INIT_i = 1'b0;
- assign PL_ENA_i = 1'b0;
- assign PL_REN_i = 1'b0;
- assign PL_CLK_i = 1'b0;
- assign PL_WEN_i = 2'b0;
- assign PL_ADDR_i = 24'b0;
- assign PL_DATA_i = 36'b0;
- TDP_BRAM36 _TECHMAP_REPLACE_ (
+ TDP36K _TECHMAP_REPLACE_ (
+ .RESET_ni(1'b1),
.WDATA_A1_i(18'h3FFFF),
.WDATA_A2_i(18'h3FFFF),
.RDATA_A1_o(A1DATA_TOTAL[17:0]),
@@ -515,24 +451,7 @@
.BE_B2_i(B1EN[3:2]),
.FLUSH1_i(FLUSH1),
- .FLUSH2_i(FLUSH2),
- .RAM_ID_i(RAM_ID),
-
- .PL_INIT_i(PL_INIT_i),
- .PL_ENA_i(PL_ENA_i),
- .PL_WEN_i(PL_WEN_i),
- .PL_REN_i(PL_REN_i),
- .PL_CLK_i(PL_CLK_i),
- .PL_ADDR_i(PL_ADDR_i),
- .PL_DATA_i(PL_DATA_i),
- .PL_INIT_o(PL_INIT_o),
- .PL_ENA_o(PL_ENA_o),
- .PL_WEN_o(PL_WEN_o),
- .PL_REN_o(PL_REN_o),
- .PL_CLK_o(PL_CLK_o),
- .PL_ADDR_o(),
- .PL_DATA_o(PL_DATA_o)
-
+ .FLUSH2_i(FLUSH2)
);
endmodule
diff --git a/ql-qlf-plugin/qlf_k6n10f/cells_sim.v b/ql-qlf-plugin/qlf_k6n10f/cells_sim.v
index bf1648f..c9c881e 100644
--- a/ql-qlf-plugin/qlf_k6n10f/cells_sim.v
+++ b/ql-qlf-plugin/qlf_k6n10f/cells_sim.v
@@ -495,7 +495,9 @@
endmodule
-module TDP_BRAM36 (
+`default_nettype wire
+module TDP36K (
+ RESET_ni,
WEN_A1_i,
WEN_B1_i,
REN_A1_i,
@@ -525,22 +527,7 @@
WDATA_B2_i,
RDATA_A2_o,
RDATA_B2_o,
- FLUSH2_i,
- RAM_ID_i,
- PL_INIT_i,
- PL_ENA_i,
- PL_REN_i,
- PL_CLK_i,
- PL_WEN_i,
- PL_ADDR_i,
- PL_DATA_i,
- PL_INIT_o,
- PL_ENA_o,
- PL_REN_o,
- PL_CLK_o,
- PL_WEN_o,
- PL_ADDR_o,
- PL_DATA_o
+ FLUSH2_i
);
parameter [80:0] MODE_BITS = 81'd0;
@@ -559,10 +546,10 @@
// Second 18K RAMFIFO (39 bits)
localparam [ 0:0] SYNC_FIFO2_i = MODE_BITS[41];
- localparam [ 0:0] RMODE_A2_i = MODE_BITS[44:42];
- localparam [ 0:0] RMODE_B2_i = MODE_BITS[47:45];
- localparam [ 0:0] WMODE_A2_i = MODE_BITS[50:48];
- localparam [ 0:0] WMODE_B2_i = MODE_BITS[53:51];
+ localparam [ 2:0] RMODE_A2_i = MODE_BITS[44:42];
+ localparam [ 2:0] RMODE_B2_i = MODE_BITS[47:45];
+ localparam [ 2:0] WMODE_A2_i = MODE_BITS[50:48];
+ localparam [ 2:0] WMODE_B2_i = MODE_BITS[53:51];
localparam [ 0:0] FMODE2_i = MODE_BITS[54];
localparam [ 0:0] POWERDN2_i = MODE_BITS[55];
localparam [ 0:0] SLEEP2_i = MODE_BITS[56];
@@ -718,6 +705,7 @@
parameter INIT_7E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
parameter INIT_7F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ input RESET_ni;
input wire WEN_A1_i;
input wire WEN_B1_i;
input wire REN_A1_i;
@@ -752,21 +740,6 @@
output reg [17:0] RDATA_A2_o;
output reg [17:0] RDATA_B2_o;
input wire FLUSH2_i;
- input wire [15:0] RAM_ID_i;
- input wire PL_INIT_i;
- input wire PL_ENA_i;
- input wire PL_REN_i;
- input wire PL_CLK_i;
- input wire [1:0] PL_WEN_i;
- input wire [31:0] PL_ADDR_i;
- input wire [35:0] PL_DATA_i;
- output reg PL_INIT_o;
- output reg PL_ENA_o;
- output reg PL_REN_o;
- output reg PL_CLK_o;
- output reg [1:0] PL_WEN_o;
- output reg [31:0] PL_ADDR_o;
- output reg [35:0] PL_DATA_o;
wire EMPTY2;
wire EPO2;
wire EWM2;
@@ -815,14 +788,14 @@
reg [1:0] ram_be_a2;
reg [1:0] ram_be_b1;
reg [1:0] ram_be_b2;
- reg [2:0] ram_rmode_a1;
- reg [2:0] ram_wmode_a1;
- reg [2:0] ram_rmode_b1;
- reg [2:0] ram_wmode_b1;
- reg [2:0] ram_rmode_a2;
- reg [2:0] ram_wmode_a2;
- reg [2:0] ram_rmode_b2;
- reg [2:0] ram_wmode_b2;
+ wire [2:0] ram_rmode_a1;
+ wire [2:0] ram_wmode_a1;
+ wire [2:0] ram_rmode_b1;
+ wire [2:0] ram_wmode_b1;
+ wire [2:0] ram_rmode_a2;
+ wire [2:0] ram_wmode_a2;
+ wire [2:0] ram_rmode_b2;
+ wire [2:0] ram_wmode_b2;
wire ram_ren_a1;
wire ram_ren_b1;
wire ram_ren_a2;
@@ -835,22 +808,36 @@
wire [11:0] ff_raddr;
wire [11:0] ff_waddr;
reg [35:0] fifo_rdata;
- reg [1:0] fifo_rmode;
- reg [1:0] fifo_wmode;
+ wire [1:0] fifo_rmode;
+ wire [1:0] fifo_wmode;
wire [1:0] bwl;
wire [17:0] pl_dout0;
wire [17:0] pl_dout1;
+ wire sclk_a1;
+ wire sclk_b1;
+ wire sclk_a2;
+ wire sclk_b2;
+ wire sreset;
+ wire flush1;
+ wire flush2;
+ assign sreset = RESET_ni;
+ assign flush1 = ~FLUSH1_i;
+ assign flush2 = ~FLUSH2_i;
assign ram_fmode1 = FMODE1_i & SPLIT_i;
assign ram_fmode2 = FMODE2_i & SPLIT_i;
assign smux_clk_a1 = CLK_A1_i;
assign smux_clk_b1 = (FMODE1_i ? (SYNC_FIFO1_i ? CLK_A1_i : CLK_B1_i) : CLK_B1_i);
assign smux_clk_a2 = (SPLIT_i ? CLK_A2_i : CLK_A1_i);
- assign smux_clk_b2 = (SPLIT_i ? CLK_B2_i : (FMODE1_i ? (SYNC_FIFO1_i ? CLK_A1_i : CLK_B1_i) : CLK_B1_i));
+ assign smux_clk_b2 = (SPLIT_i ? (FMODE2_i ? (SYNC_FIFO2_i ? CLK_A2_i : CLK_B2_i) : CLK_B2_i) : (FMODE1_i ? (SYNC_FIFO1_i ? CLK_A1_i : CLK_B1_i) : CLK_B1_i));
+ assign sclk_a1 = smux_clk_a1;
+ assign sclk_a2 = smux_clk_a2;
+ assign sclk_b1 = smux_clk_b1;
+ assign sclk_b2 = smux_clk_b2;
assign ram_ren_a1 = (SPLIT_i ? REN_A1_i : (FMODE1_i ? 0 : REN_A1_i));
assign ram_ren_a2 = (SPLIT_i ? REN_A2_i : (FMODE1_i ? 0 : REN_A1_i));
assign ram_ren_b1 = (SPLIT_i ? REN_B1_i : (FMODE1_i ? ren_o : REN_B1_i));
assign ram_ren_b2 = (SPLIT_i ? REN_B2_i : (FMODE1_i ? ren_o : REN_B1_i));
- localparam MODE_36 = 3'b111;
+ localparam MODE_36 = 3'b011;
assign ram_wen_a1 = (SPLIT_i ? WEN_A1_i : (FMODE1_i ? ~FULL3 & WEN_A1_i : (WMODE_A1_i == MODE_36 ? WEN_A1_i : WEN_A1_i & ~ADDR_A1_i[4])));
assign ram_wen_a2 = (SPLIT_i ? WEN_A2_i : (FMODE1_i ? ~FULL3 & WEN_A1_i : (WMODE_A1_i == MODE_36 ? WEN_A1_i : WEN_A1_i & ADDR_A1_i[4])));
assign ram_wen_b1 = (SPLIT_i ? WEN_B1_i : (WMODE_B1_i == MODE_36 ? WEN_B1_i : WEN_B1_i & ~ADDR_B1_i[4]));
@@ -860,8 +847,8 @@
assign ram_addr_a2 = (SPLIT_i ? ADDR_A2_i[13:0] : (FMODE1_i ? {ff_waddr[11:2], ff_waddr[0], 3'b000} : {ADDR_A1_i[14:5], ADDR_A1_i[3:0]}));
assign ram_addr_b2 = (SPLIT_i ? ADDR_B2_i[13:0] : (FMODE1_i ? {ff_raddr[11:2], ff_raddr[0], 3'b000} : {ADDR_B1_i[14:5], ADDR_B1_i[3:0]}));
assign bwl = (SPLIT_i ? ADDR_A1_i[4:3] : (FMODE1_i ? ff_waddr[1:0] : ADDR_A1_i[4:3]));
- localparam MODE_18 = 3'b110;
- localparam MODE_9 = 3'b101;
+ localparam MODE_18 = 3'b010;
+ localparam MODE_9 = 3'b001;
always @(*) begin : WDATA_SEL
case (SPLIT_i)
1: begin
@@ -877,8 +864,8 @@
0: begin
case (WMODE_A1_i)
MODE_36: begin
- ram_wdata_a1 = {WDATA_A2_i[15:14], WDATA_A1_i[15:0]};
- ram_wdata_a2 = {WDATA_A2_i[17:16], WDATA_A2_i[13:0], WDATA_A1_i[17:16]};
+ ram_wdata_a1 = WDATA_A1_i;
+ ram_wdata_a2 = WDATA_A2_i;
ram_be_a2 = (FMODE1_i ? 2'b11 : BE_A2_i);
ram_be_a1 = (FMODE1_i ? 2'b11 : BE_A1_i);
end
@@ -888,40 +875,22 @@
ram_be_a1 = (FMODE1_i ? (ff_waddr[1] ? 2'b00 : 2'b11) : BE_A1_i);
ram_be_a2 = (FMODE1_i ? (ff_waddr[1] ? 2'b11 : 2'b00) : BE_A1_i);
end
- MODE_9:
+ MODE_9: begin
+ ram_wdata_a1[7:0] = WDATA_A1_i[7:0];
+ ram_wdata_a1[16] = WDATA_A1_i[16];
+ ram_wdata_a1[15:8] = WDATA_A1_i[7:0];
+ ram_wdata_a1[17] = WDATA_A1_i[16];
+ ram_wdata_a2[7:0] = WDATA_A1_i[7:0];
+ ram_wdata_a2[16] = WDATA_A1_i[16];
+ ram_wdata_a2[15:8] = WDATA_A1_i[7:0];
+ ram_wdata_a2[17] = WDATA_A1_i[16];
case (bwl)
- 0: begin
- ram_wdata_a1[8:0] = (FMODE1_i ? {WDATA_A1_i[0], WDATA_A1_i[7:0]} : WDATA_A1_i[8:0]);
- ram_wdata_a1[17:9] = (FMODE1_i ? {{2 {WDATA_A1_i[8]}}, WDATA_A1_i[7:1]} : 9'b000000000);
- ram_wdata_a2[8:0] = (FMODE1_i ? {WDATA_A1_i[0], WDATA_A1_i[7:0]} : 9'b000000000);
- ram_wdata_a2[17:9] = (FMODE1_i ? {{2 {WDATA_A1_i[8]}}, WDATA_A1_i[7:1]} : 9'b000000000);
- ram_be_a1[0] = (FMODE1_i ? (ff_waddr[1:0] == 0 ? 1'b1 : 1'b0) : 1'b1);
- ram_be_a1[1] = (FMODE1_i ? (ff_waddr[1:0] == 1 ? 1'b1 : 1'b0) : 1'b0);
- ram_be_a2[0] = (FMODE1_i ? (ff_waddr[1:0] == 2 ? 1'b1 : 1'b0) : 1'b0);
- ram_be_a2[1] = (FMODE1_i ? (ff_waddr[1:0] == 3 ? 1'b1 : 1'b0) : 1'b0);
- end
- 1: begin
- ram_wdata_a1[8:0] = (FMODE1_i ? {WDATA_A1_i[0], WDATA_A1_i[7:0]} : WDATA_A1_i[8:0]);
- ram_wdata_a1[17:9] = (FMODE1_i ? {{2 {WDATA_A1_i[8]}}, WDATA_A1_i[7:1]} : 9'b000000000);
- ram_wdata_a2[8:0] = (FMODE1_i ? {WDATA_A1_i[0], WDATA_A1_i[7:0]} : 9'b000000000);
- ram_wdata_a2[17:9] = (FMODE1_i ? {{2 {WDATA_A1_i[8]}}, WDATA_A1_i[7:1]} : 9'b000000000);
- {ram_be_a2, ram_be_a1} = 4'b0010;
- end
- 2: begin
- ram_wdata_a1[8:0] = (FMODE1_i ? {WDATA_A1_i[0], WDATA_A1_i[7:0]} : 9'b000000000);
- ram_wdata_a1[17:9] = (FMODE1_i ? {{2 {WDATA_A1_i[8]}}, WDATA_A1_i[7:1]} : 9'b000000000);
- ram_wdata_a2[8:0] = (FMODE1_i ? {WDATA_A1_i[0], WDATA_A1_i[7:0]} : WDATA_A1_i[8:0]);
- ram_wdata_a2[17:9] = (FMODE1_i ? {{2 {WDATA_A1_i[8]}}, WDATA_A1_i[7:1]} : 9'b000000000);
- {ram_be_a2, ram_be_a1} = 4'b0100;
- end
- 3: begin
- ram_wdata_a1[8:0] = (FMODE1_i ? {WDATA_A1_i[0], WDATA_A1_i[7:0]} : 9'b000000000);
- ram_wdata_a1[17:9] = (FMODE1_i ? {{2 {WDATA_A1_i[8]}}, WDATA_A1_i[7:1]} : 9'b000000000);
- ram_wdata_a2[8:0] = (FMODE1_i ? {WDATA_A1_i[0], WDATA_A1_i[7:0]} : WDATA_A1_i[8:0]);
- ram_wdata_a2[17:9] = (FMODE1_i ? {{2 {WDATA_A1_i[8]}}, WDATA_A1_i[7:1]} : 9'b000000000);
- {ram_be_a2, ram_be_a1} = 4'b1000;
- end
+ 0: {ram_be_a2, ram_be_a1} = 4'b0001;
+ 1: {ram_be_a2, ram_be_a1} = 4'b0010;
+ 2: {ram_be_a2, ram_be_a1} = 4'b0100;
+ 3: {ram_be_a2, ram_be_a1} = 4'b1000;
endcase
+ end
default: begin
ram_wdata_a1 = WDATA_A1_i;
ram_wdata_a2 = WDATA_A1_i;
@@ -931,8 +900,8 @@
endcase
case (WMODE_B1_i)
MODE_36: begin
- ram_wdata_b1 = (FMODE1_i ? 18'b000000000000000000 : {WDATA_B2_i[15:14], WDATA_B1_i[15:0]});
- ram_wdata_b2 = (FMODE1_i ? 18'b000000000000000000 : {WDATA_B2_i[17:16], WDATA_B2_i[13:0], WDATA_B1_i[17:16]});
+ ram_wdata_b1 = (FMODE1_i ? 18'b000000000000000000 : WDATA_B1_i);
+ ram_wdata_b2 = (FMODE1_i ? 18'b000000000000000000 : WDATA_B2_i);
ram_be_b2 = BE_B2_i;
ram_be_b1 = BE_B1_i;
end
@@ -942,37 +911,22 @@
ram_be_b1 = BE_B1_i;
ram_be_b2 = BE_B1_i;
end
- MODE_9:
+ MODE_9: begin
+ ram_wdata_b1[7:0] = WDATA_B1_i[7:0];
+ ram_wdata_b1[16] = WDATA_B1_i[16];
+ ram_wdata_b1[15:8] = WDATA_B1_i[7:0];
+ ram_wdata_b1[17] = WDATA_B1_i[16];
+ ram_wdata_b2[7:0] = WDATA_B1_i[7:0];
+ ram_wdata_b2[16] = WDATA_B1_i[16];
+ ram_wdata_b2[15:8] = WDATA_B1_i[7:0];
+ ram_wdata_b2[17] = WDATA_B1_i[16];
case (ADDR_B1_i[4:3])
- 0: begin
- ram_wdata_b1[8:0] = WDATA_B1_i[8:0];
- ram_wdata_b1[17:9] = 9'b000000000;
- ram_wdata_b2[8:0] = 9'b000000000;
- ram_wdata_b2[17:9] = 9'b000000000;
- {ram_be_b2, ram_be_b1} = 4'b0001;
- end
- 1: begin
- ram_wdata_b1[8:0] = WDATA_B1_i[8:0];
- ram_wdata_b1[17:9] = 9'b000000000;
- ram_wdata_b2[8:0] = 9'b000000000;
- ram_wdata_b2[17:9] = 9'b000000000;
- {ram_be_b2, ram_be_b1} = 4'b0010;
- end
- 2: begin
- ram_wdata_b1[8:0] = 9'b000000000;
- ram_wdata_b1[17:9] = 9'b000000000;
- ram_wdata_b2[8:0] = WDATA_B1_i[8:0];
- ram_wdata_b2[17:9] = 9'b000000000;
- {ram_be_b2, ram_be_b1} = 4'b0100;
- end
- 3: begin
- ram_wdata_b1[8:0] = 9'b000000000;
- ram_wdata_b1[17:9] = 9'b000000000;
- ram_wdata_b2[8:0] = WDATA_B1_i[8:0];
- ram_wdata_b2[17:9] = 9'b000000000;
- {ram_be_b2, ram_be_b1} = 4'b1000;
- end
+ 0: {ram_be_b2, ram_be_b1} = 4'b0001;
+ 1: {ram_be_b2, ram_be_b1} = 4'b0010;
+ 2: {ram_be_b2, ram_be_b1} = 4'b0100;
+ 3: {ram_be_b2, ram_be_b1} = 4'b1000;
endcase
+ end
default: begin
ram_wdata_b1 = (FMODE1_i ? 18'b000000000000000000 : WDATA_B1_i);
ram_wdata_b2 = (FMODE1_i ? 18'b000000000000000000 : WDATA_B1_i);
@@ -983,43 +937,30 @@
end
endcase
end
- always @(posedge CLK_A1_i or posedge CLK_B1_i or posedge CLK_A2_i or posedge CLK_B2_i) begin
- if (!SPLIT_i) begin
- ram_rmode_a1 <= (RMODE_A1_i == MODE_36 ? MODE_18 : RMODE_A1_i);
- ram_rmode_a2 <= (RMODE_A1_i == MODE_36 ? MODE_18 : RMODE_A1_i);
- ram_wmode_a1 <= (WMODE_A1_i == MODE_36 ? MODE_18 : (FMODE1_i ? MODE_18 : WMODE_A1_i));
- ram_wmode_a2 <= (WMODE_A1_i == MODE_36 ? MODE_18 : (FMODE1_i ? MODE_18 : WMODE_A1_i));
- ram_rmode_b1 <= (RMODE_B1_i == MODE_36 ? MODE_18 : (FMODE1_i ? MODE_18 : RMODE_B1_i));
- ram_rmode_b2 <= (RMODE_B1_i == MODE_36 ? MODE_18 : (FMODE1_i ? MODE_18 : RMODE_B1_i));
- ram_wmode_b1 <= (WMODE_B1_i == MODE_36 ? MODE_18 : WMODE_B1_i);
- ram_wmode_b2 <= (WMODE_B1_i == MODE_36 ? MODE_18 : WMODE_B1_i);
- end else begin
- ram_rmode_a1 <= (RMODE_A1_i == MODE_36 ? MODE_18 : RMODE_A1_i);
- ram_rmode_a2 <= (RMODE_A2_i == MODE_36 ? MODE_18 : RMODE_A2_i);
- ram_wmode_a1 <= (WMODE_A1_i == MODE_36 ? MODE_18 : WMODE_A1_i);
- ram_wmode_a2 <= (WMODE_A2_i == MODE_36 ? MODE_18 : WMODE_A2_i);
- ram_rmode_b1 <= (RMODE_B1_i == MODE_36 ? MODE_18 : RMODE_B1_i);
- ram_rmode_b2 <= (RMODE_B2_i == MODE_36 ? MODE_18 : RMODE_B2_i);
- ram_wmode_b1 <= (WMODE_B1_i == MODE_36 ? MODE_18 : WMODE_B1_i);
- ram_wmode_b2 <= (WMODE_B2_i == MODE_36 ? MODE_18 : WMODE_B2_i);
- end
- end
+ assign ram_rmode_a1 = (SPLIT_i ? (RMODE_A1_i == MODE_36 ? MODE_18 : RMODE_A1_i) : (RMODE_A1_i == MODE_36 ? MODE_18 : RMODE_A1_i));
+ assign ram_rmode_a2 = (SPLIT_i ? (RMODE_A2_i == MODE_36 ? MODE_18 : RMODE_A2_i) : (RMODE_A1_i == MODE_36 ? MODE_18 : RMODE_A1_i));
+ assign ram_wmode_a1 = (SPLIT_i ? (WMODE_A1_i == MODE_36 ? MODE_18 : WMODE_A1_i) : (WMODE_A1_i == MODE_36 ? MODE_18 : (FMODE1_i ? MODE_18 : WMODE_A1_i)));
+ assign ram_wmode_a2 = (SPLIT_i ? (WMODE_A2_i == MODE_36 ? MODE_18 : WMODE_A2_i) : (WMODE_A1_i == MODE_36 ? MODE_18 : (FMODE1_i ? MODE_18 : WMODE_A1_i)));
+ assign ram_rmode_b1 = (SPLIT_i ? (RMODE_B1_i == MODE_36 ? MODE_18 : RMODE_B1_i) : (RMODE_B1_i == MODE_36 ? MODE_18 : (FMODE1_i ? MODE_18 : RMODE_B1_i)));
+ assign ram_rmode_b2 = (SPLIT_i ? (RMODE_B2_i == MODE_36 ? MODE_18 : RMODE_B2_i) : (RMODE_B1_i == MODE_36 ? MODE_18 : (FMODE1_i ? MODE_18 : RMODE_B1_i)));
+ assign ram_wmode_b1 = (SPLIT_i ? (WMODE_B1_i == MODE_36 ? MODE_18 : WMODE_B1_i) : (WMODE_B1_i == MODE_36 ? MODE_18 : WMODE_B1_i));
+ assign ram_wmode_b2 = (SPLIT_i ? (WMODE_B2_i == MODE_36 ? MODE_18 : WMODE_B2_i) : (WMODE_B1_i == MODE_36 ? MODE_18 : WMODE_B1_i));
always @(*) begin : FIFO_READ_SEL
case (RMODE_B1_i)
MODE_36: fifo_rdata = {ram_rdata_b2[17:16], ram_rdata_b1[17:16], ram_rdata_b2[15:0], ram_rdata_b1[15:0]};
MODE_18: fifo_rdata = (ff_raddr[1] ? {18'b000000000000000000, ram_rdata_b2} : {18'b000000000000000000, ram_rdata_b1});
MODE_9:
case (ff_raddr[1:0])
- 0: fifo_rdata = {27'b000000000000000000000000000, ram_rdata_b1[16], ram_rdata_b1[7:0]};
- 1: fifo_rdata = {27'b000000000000000000000000000, ram_rdata_b1[17], ram_rdata_b1[15:8]};
- 2: fifo_rdata = {27'b000000000000000000000000000, ram_rdata_b2[16], ram_rdata_b2[7:0]};
- 3: fifo_rdata = {27'b000000000000000000000000000, ram_rdata_b2[17], ram_rdata_b2[15:8]};
+ 0: fifo_rdata = {19'b0000000000000000000, ram_rdata_b1[16], 8'b00000000, ram_rdata_b1[7:0]};
+ 1: fifo_rdata = {19'b0000000000000000000, ram_rdata_b1[17], 8'b00000000, ram_rdata_b1[15:8]};
+ 2: fifo_rdata = {19'b0000000000000000000, ram_rdata_b2[16], 8'b00000000, ram_rdata_b2[7:0]};
+ 3: fifo_rdata = {19'b0000000000000000000, ram_rdata_b2[17], 8'b00000000, ram_rdata_b2[15:8]};
endcase
- default: fifo_rdata = {ram_rdata_b2[17:16], ram_rdata_b1[17:16], ram_rdata_b2[15:0], ram_rdata_b1[15:0]};
+ default: fifo_rdata = {ram_rdata_b2, ram_rdata_b1};
endcase
end
- localparam MODE_1 = 3'b001;
- localparam MODE_2 = 3'b010;
+ localparam MODE_1 = 3'b101;
+ localparam MODE_2 = 3'b110;
localparam MODE_4 = 3'b100;
always @(*) begin : RDATA_SEL
case (SPLIT_i)
@@ -1037,15 +978,15 @@
else
case (RMODE_A1_i)
MODE_36: begin
- RDATA_A1_o = {ram_rdata_a2[1:0], ram_rdata_a1[15:0]};
- RDATA_A2_o = {ram_rdata_a2[17:16], ram_rdata_a1[17:16], ram_rdata_a2[15:2]};
+ RDATA_A1_o = {ram_rdata_a1[17:0]};
+ RDATA_A2_o = {ram_rdata_a2[17:0]};
end
MODE_18: begin
RDATA_A1_o = (laddr_a1[4] ? ram_rdata_a2 : ram_rdata_a1);
RDATA_A2_o = 18'b000000000000000000;
end
MODE_9: begin
- RDATA_A1_o = (laddr_a1[4] ? {9'b000000000, ram_rdata_a2[8:0]} : {9'b000000000, ram_rdata_a1[8:0]});
+ RDATA_A1_o = (laddr_a1[4] ? {{2 {ram_rdata_a2[16]}}, {2 {ram_rdata_a2[7:0]}}} : {{2 {ram_rdata_a1[16]}}, {2 {ram_rdata_a1[7:0]}}});
RDATA_A2_o = 18'b000000000000000000;
end
MODE_4: begin
@@ -1070,15 +1011,15 @@
endcase
case (RMODE_B1_i)
MODE_36: begin
- RDATA_B1_o = {ram_rdata_b2[1:0], ram_rdata_b1[15:0]};
- RDATA_B2_o = {ram_rdata_b2[17:16], ram_rdata_b1[17:16], ram_rdata_b2[15:2]};
+ RDATA_B1_o = {ram_rdata_b1};
+ RDATA_B2_o = {ram_rdata_b2};
end
MODE_18: begin
RDATA_B1_o = (FMODE1_i ? fifo_rdata[17:0] : (laddr_b1[4] ? ram_rdata_b2 : ram_rdata_b1));
RDATA_B2_o = 18'b000000000000000000;
end
MODE_9: begin
- RDATA_B1_o = (FMODE1_i ? {9'b000000000, fifo_rdata[8:0]} : (laddr_b1[4] ? {9'b000000000, ram_rdata_b2[8:0]} : {9'b000000000, ram_rdata_b1[8:0]}));
+ RDATA_B1_o = (FMODE1_i ? {fifo_rdata[17:0]} : (laddr_b1[4] ? {1'b0, ram_rdata_b2[16], 8'b00000000, ram_rdata_b2[7:0]} : {1'b0, ram_rdata_b1[16], 8'b00000000, ram_rdata_b1[7:0]}));
RDATA_B2_o = 18'b000000000000000000;
end
MODE_4: begin
@@ -1097,46 +1038,37 @@
RDATA_B1_o[0] = (laddr_b1[4] ? ram_rdata_b2[0] : ram_rdata_b1[0]);
end
default: begin
- RDATA_B1_o = {ram_rdata_b2[1:0], ram_rdata_b1[15:0]};
- RDATA_B2_o = {ram_rdata_b2[17:16], ram_rdata_b1[17:16], ram_rdata_b2[15:2]};
+ RDATA_B1_o = ram_rdata_b1;
+ RDATA_B2_o = ram_rdata_b2;
end
endcase
end
endcase
end
- always @(posedge CLK_A1_i) laddr_a1 <= ADDR_A1_i;
- always @(posedge CLK_B1_i) laddr_b1 <= ADDR_B1_i;
- always @(posedge CLK_A1_i or posedge CLK_B1_i or posedge CLK_A2_i or posedge CLK_B2_i) begin
- if (WMODE_A1_i == MODE_36)
- fifo_wmode = 2'b00;
- else if (WMODE_A1_i == MODE_18)
- fifo_wmode = 2'b01;
- else if (WMODE_A1_i == MODE_9)
- fifo_wmode = 2'b10;
+ always @(posedge sclk_a1 or negedge sreset)
+ if (sreset == 0)
+ laddr_a1 <= 1'sb0;
else
- fifo_wmode = 2'b00;
-
- if (RMODE_B1_i == MODE_36)
- fifo_rmode = 2'b00;
- else if (RMODE_B1_i == MODE_18)
- fifo_rmode = 2'b01;
- else if (RMODE_B1_i == MODE_9)
- fifo_rmode = 2'b10;
+ laddr_a1 <= ADDR_A1_i;
+ always @(posedge sclk_b1 or negedge sreset)
+ if (sreset == 0)
+ laddr_b1 <= 1'sb0;
else
- fifo_rmode = 2'b00;
- end
+ laddr_b1 <= ADDR_B1_i;
+ assign fifo_wmode = ((WMODE_A1_i == MODE_36) ? 2'b00 : ((WMODE_A1_i == MODE_18) ? 2'b01 : ((WMODE_A1_i == MODE_9) ? 2'b10 : 2'b00)));
+ assign fifo_rmode = ((RMODE_B1_i == MODE_36) ? 2'b00 : ((RMODE_B1_i == MODE_18) ? 2'b01 : ((RMODE_B1_i == MODE_9) ? 2'b10 : 2'b00)));
fifo_ctl #(
.ADDR_WIDTH(12),
- .FIFO_WIDTH(3'd4)
+ .FIFO_WIDTH(3'd4),
+ .DEPTH(7)
) fifo36_ctl(
- .rclk(smux_clk_b1),
- .rst_R_n(~FLUSH1_i),
- .wclk(smux_clk_a1),
- .rst_W_n(~FLUSH1_i),
+ .rclk(sclk_b1),
+ .rst_R_n(flush1),
+ .wclk(sclk_a1),
+ .rst_W_n(flush1),
.ren(REN_B1_i),
.wen(ram_wen_a1),
.sync(SYNC_FIFO1_i),
- .depth(3'b111),
.rmode(fifo_rmode),
.wmode(fifo_wmode),
.ren_o(ren_o),
@@ -1147,110 +1079,81 @@
.upae(UPAE1_i)
);
TDP18K_FIFO #(
- .UPAF(UPAF1_i[10:0]),
- .UPAE(UPAE1_i[10:0]),
- .SYNC_FIFO(SYNC_FIFO1_i),
- .POWERDN(POWERDN1_i),
- .SLEEP(SLEEP1_i),
- .PROTECT(PROTECT1_i)
+ .UPAF_i(UPAF1_i[10:0]),
+ .UPAE_i(UPAE1_i[10:0]),
+ .SYNC_FIFO_i(SYNC_FIFO1_i),
+ .POWERDN_i(POWERDN1_i),
+ .SLEEP_i(SLEEP1_i),
+ .PROTECT_i(PROTECT1_i)
)u1(
- .RMODE_A(ram_rmode_a1),
- .RMODE_B(ram_rmode_b1),
- .WMODE_A(ram_wmode_a1),
- .WMODE_B(ram_wmode_b1),
- .WEN_A(ram_wen_a1),
- .WEN_B(ram_wen_b1),
- .REN_A(ram_ren_a1),
- .REN_B(ram_ren_b1),
- .CLK_A(smux_clk_a1),
- .CLK_B(smux_clk_b1),
- .BE_A(ram_be_a1),
- .BE_B(ram_be_b1),
- .ADDR_A(ram_addr_a1),
- .ADDR_B(ram_addr_b1),
- .WDATA_A(ram_wdata_a1),
- .WDATA_B(ram_wdata_b1),
- .RDATA_A(ram_rdata_a1),
- .RDATA_B(ram_rdata_b1),
- .EMPTY(EMPTY1),
- .EPO(EPO1),
- .EWM(EWM1),
- .UNDERRUN(UNDERRUN1),
- .FULL(FULL1),
- .FMO(FMO1),
- .FWM(FWM1),
- .OVERRUN(OVERRUN1),
- .FLUSH(FLUSH1_i),
- .RAM_ID({RAM_ID_i}),
- .FMODE(ram_fmode1),
- .PL_INIT(PL_INIT_i),
- .PL_ENA(PL_ENA_i),
- .PL_WEN(PL_WEN_i[0]),
- .PL_REN(PL_REN_i),
- .PL_CLK(PL_CLK_i),
- .PL_ADDR(PL_ADDR_i),
- .PL_DATA_IN({PL_DATA_i[33:32], PL_DATA_i[15:0]}),
- .PL_DATA_OUT(pl_dout0)
+ .RMODE_A_i(ram_rmode_a1),
+ .RMODE_B_i(ram_rmode_b1),
+ .WMODE_A_i(ram_wmode_a1),
+ .WMODE_B_i(ram_wmode_b1),
+ .WEN_A_i(ram_wen_a1),
+ .WEN_B_i(ram_wen_b1),
+ .REN_A_i(ram_ren_a1),
+ .REN_B_i(ram_ren_b1),
+ .CLK_A_i(sclk_a1),
+ .CLK_B_i(sclk_b1),
+ .BE_A_i(ram_be_a1),
+ .BE_B_i(ram_be_b1),
+ .ADDR_A_i(ram_addr_a1),
+ .ADDR_B_i(ram_addr_b1),
+ .WDATA_A_i(ram_wdata_a1),
+ .WDATA_B_i(ram_wdata_b1),
+ .RDATA_A_o(ram_rdata_a1),
+ .RDATA_B_o(ram_rdata_b1),
+ .EMPTY_o(EMPTY1),
+ .EPO_o(EPO1),
+ .EWM_o(EWM1),
+ .UNDERRUN_o(UNDERRUN1),
+ .FULL_o(FULL1),
+ .FMO_o(FMO1),
+ .FWM_o(FWM1),
+ .OVERRUN_o(OVERRUN1),
+ .FLUSH_ni(flush1),
+ .FMODE_i(ram_fmode1)
);
TDP18K_FIFO #(
- .UPAF(UPAF2_i[10:0]),
- .UPAE(UPAE2_i[10:0]),
- .SYNC_FIFO(SYNC_FIFO2_i),
- .POWERDN(POWERDN2_i),
- .SLEEP(SLEEP2_i),
- .PROTECT(PROTECT2_i)
+ .UPAF_i(UPAF2_i),
+ .UPAE_i(UPAE2_i),
+ .SYNC_FIFO_i(SYNC_FIFO2_i),
+ .POWERDN_i(POWERDN2_i),
+ .SLEEP_i(SLEEP2_i),
+ .PROTECT_i(PROTECT2_i)
)u2(
- .RMODE_A(ram_rmode_a2),
- .RMODE_B(ram_rmode_b2),
- .WMODE_A(ram_wmode_a2),
- .WMODE_B(ram_wmode_b2),
- .WEN_A(ram_wen_a2),
- .WEN_B(ram_wen_b2),
- .REN_A(ram_ren_a2),
- .REN_B(ram_ren_b2),
- .CLK_A(smux_clk_a2),
- .CLK_B(smux_clk_b2),
- .BE_A(ram_be_a2),
- .BE_B(ram_be_b2),
- .ADDR_A(ram_addr_a2),
- .ADDR_B(ram_addr_b2),
- .WDATA_A(ram_wdata_a2),
- .WDATA_B(ram_wdata_b2),
- .RDATA_A(ram_rdata_a2),
- .RDATA_B(ram_rdata_b2),
- .EMPTY(EMPTY2),
- .EPO(EPO2),
- .EWM(EWM2),
- .UNDERRUN(UNDERRUN2),
- .FULL(FULL2),
- .FMO(FMO2),
- .FWM(FWM2),
- .OVERRUN(OVERRUN2),
- .FLUSH(FLUSH2_i),
- .RAM_ID({RAM_ID_i}),
- .FMODE(ram_fmode2),
- .PL_INIT(PL_INIT_i),
- .PL_ENA(PL_ENA_i),
- .PL_WEN(PL_WEN_i[1]),
- .PL_REN(PL_REN_i),
- .PL_CLK(PL_CLK_i),
- .PL_ADDR(PL_ADDR_i),
- .PL_DATA_IN({PL_DATA_i[35:34], PL_DATA_i[31:16]}),
- .PL_DATA_OUT(pl_dout1)
+ .RMODE_A_i(ram_rmode_a2),
+ .RMODE_B_i(ram_rmode_b2),
+ .WMODE_A_i(ram_wmode_a2),
+ .WMODE_B_i(ram_wmode_b2),
+ .WEN_A_i(ram_wen_a2),
+ .WEN_B_i(ram_wen_b2),
+ .REN_A_i(ram_ren_a2),
+ .REN_B_i(ram_ren_b2),
+ .CLK_A_i(sclk_a2),
+ .CLK_B_i(sclk_b2),
+ .BE_A_i(ram_be_a2),
+ .BE_B_i(ram_be_b2),
+ .ADDR_A_i(ram_addr_a2),
+ .ADDR_B_i(ram_addr_b2),
+ .WDATA_A_i(ram_wdata_a2),
+ .WDATA_B_i(ram_wdata_b2),
+ .RDATA_A_o(ram_rdata_a2),
+ .RDATA_B_o(ram_rdata_b2),
+ .EMPTY_o(EMPTY2),
+ .EPO_o(EPO2),
+ .EWM_o(EWM2),
+ .UNDERRUN_o(UNDERRUN2),
+ .FULL_o(FULL2),
+ .FMO_o(FMO2),
+ .FWM_o(FWM2),
+ .OVERRUN_o(OVERRUN2),
+ .FLUSH_ni(flush2),
+ .FMODE_i(ram_fmode2)
);
- always @(*) begin
- if (RAM_ID_i == PL_ADDR_i[31:16])
- PL_DATA_o = (PL_REN_i ? {pl_dout1[17:16], pl_dout0[17:16], pl_dout1[15:0], pl_dout0[15:0]} : PL_DATA_i);
- else
- PL_DATA_o = PL_DATA_i;
- PL_ADDR_o = PL_ADDR_i;
- PL_INIT_o = PL_INIT_i;
- PL_ENA_o = PL_ENA_i;
- PL_WEN_o = PL_WEN_i;
- PL_REN_o = PL_REN_i;
- PL_CLK_o = PL_CLK_i;
- end
endmodule
+`default_nettype none
(* blackbox *)
module QL_DSP1 (
diff --git a/ql-qlf-plugin/qlf_k6n10f/sram1024x18.v b/ql-qlf-plugin/qlf_k6n10f/sram1024x18.v
index 60cd586..864b886 100644
--- a/ql-qlf-plugin/qlf_k6n10f/sram1024x18.v
+++ b/ql-qlf-plugin/qlf_k6n10f/sram1024x18.v
@@ -14,6 +14,7 @@
//
// SPDX-License-Identifier: Apache-2.0
+`default_nettype wire
module sram1024x18 (
clk_a,
cen_a,
@@ -130,3 +131,4 @@
rdata_a = rdata_a;
end
endmodule
+`default_nettype none
diff --git a/ql-qlf-plugin/qlf_k6n10f/ufifo_ctl.v b/ql-qlf-plugin/qlf_k6n10f/ufifo_ctl.v
index 0c1dcc0..441f6bc 100644
--- a/ql-qlf-plugin/qlf_k6n10f/ufifo_ctl.v
+++ b/ql-qlf-plugin/qlf_k6n10f/ufifo_ctl.v
@@ -14,13 +14,13 @@
//
// SPDX-License-Identifier: Apache-2.0
+`default_nettype wire
module fifo_ctl (
raddr,
waddr,
fflags,
ren_o,
sync,
- depth,
rmode,
wmode,
rclk,
@@ -34,13 +34,12 @@
);
parameter ADDR_WIDTH = 11;
parameter FIFO_WIDTH = 3'd2;
- localparam ADDR_PLUS_ONE = ADDR_WIDTH + 1;
+ parameter DEPTH = 6;
output wire [ADDR_WIDTH - 1:0] raddr;
output wire [ADDR_WIDTH - 1:0] waddr;
output wire [7:0] fflags;
output wire ren_o;
input wire sync;
- input wire [2:0] depth;
input wire [1:0] rmode;
input wire [1:0] wmode;
(* clkbuf_sink *)
@@ -53,6 +52,7 @@
input wire wen;
input wire [ADDR_WIDTH - 1:0] upaf;
input wire [ADDR_WIDTH - 1:0] upae;
+ localparam ADDR_PLUS_ONE = ADDR_WIDTH + 1;
reg [ADDR_WIDTH:0] pushtopop1;
reg [ADDR_WIDTH:0] pushtopop2;
reg [ADDR_WIDTH:0] poptopush1;
@@ -65,23 +65,26 @@
assign smux_pushtopop = (sync ? pushtopop0 : pushtopop2);
always @(posedge rclk or negedge rst_R_n)
if (~rst_R_n) begin
- pushtopop1 <= #(1) {ADDR_WIDTH + 1{1'h0}};
- pushtopop2 <= #(1) {ADDR_WIDTH + 1{1'h0}};
+ pushtopop1 <= 'h0;
+ pushtopop2 <= 'h0;
end
else begin
- pushtopop1 <= #(1) pushtopop0;
- pushtopop2 <= #(1) pushtopop1;
+ pushtopop1 = pushtopop0;
+ pushtopop2 = pushtopop1;
end
always @(posedge wclk or negedge rst_W_n)
if (~rst_W_n) begin
- poptopush1 <= #(1) {ADDR_WIDTH + 1{1'h0}};
- poptopush2 <= #(1) {ADDR_WIDTH + 1{1'h0}};
+ poptopush1 <= 'h0;
+ poptopush2 <= 'h0;
end
else begin
- poptopush1 <= #(1) poptopush0;
- poptopush2 <= #(1) poptopush1;
+ poptopush1 <= poptopush0;
+ poptopush2 <= poptopush1;
end
- fifo_push #(.ADDR_WIDTH(ADDR_WIDTH)) u_fifo_push(
+ fifo_push #(
+ .ADDR_WIDTH(ADDR_WIDTH),
+ .DEPTH(DEPTH)
+ ) u_fifo_push(
.wclk(wclk),
.wen(wen),
.rst_n(rst_W_n),
@@ -90,13 +93,13 @@
.gcout(pushtopop0),
.gcin(smux_poptopush),
.ff_waddr(waddr),
- .depth(depth),
.pushflags(fflags[7:4]),
.upaf(upaf)
);
fifo_pop #(
.ADDR_WIDTH(ADDR_WIDTH),
- .FIFO_WIDTH(FIFO_WIDTH)
+ .FIFO_WIDTH(FIFO_WIDTH),
+ .DEPTH(DEPTH)
) u_fifo_pop(
.rclk(rclk),
.ren_in(ren),
@@ -107,7 +110,6 @@
.gcout(poptopush0),
.gcin(smux_pushtopop),
.out_raddr(raddr),
- .depth(depth),
.popflags(fflags[3:0]),
.upae(upae)
);
@@ -121,22 +123,23 @@
wen,
rmode,
wmode,
- depth,
gcin,
upaf
);
parameter ADDR_WIDTH = 11;
+ parameter DEPTH = 6;
output wire [3:0] pushflags;
output wire [ADDR_WIDTH:0] gcout;
output wire [ADDR_WIDTH - 1:0] ff_waddr;
input rst_n;
+ (* clkbuf_sink *)
input wclk;
input wen;
input [1:0] rmode;
input [1:0] wmode;
- input [2:0] depth;
input [ADDR_WIDTH:0] gcin;
input [ADDR_WIDTH - 1:0] upaf;
+ localparam ADDR_PLUS_ONE = ADDR_WIDTH + 1;
reg full_next;
reg full;
reg paf_next;
@@ -165,22 +168,13 @@
wire [ADDR_WIDTH:0] tmp;
wire [ADDR_WIDTH:0] next_count;
wire [ADDR_WIDTH:0] count;
- reg [ADDR_WIDTH:0] fbytes;
+ wire [ADDR_WIDTH:0] fbytes;
genvar i;
assign next_count = fbytes - (waddr_next >= raddr_next ? waddr_next - raddr_next : (~raddr_next + waddr_next) + 1);
assign count = fbytes - (waddr >= raddr ? waddr - raddr : (~raddr + waddr) + 1);
+ assign fbytes = 1 << (DEPTH + 5);
always @(*) begin
- case (depth)
- 3'b000: fbytes = {ADDR_WIDTH + 1{1'h0}} | 12'd2048;
- 3'b001: fbytes = {ADDR_WIDTH + 1{1'h0}} | 11'd1024;
- 3'b010: fbytes = {ADDR_WIDTH + 1{1'h0}} | 10'd512;
- 3'b011: fbytes = {ADDR_WIDTH + 1{1'h0}} | 9'd256;
- 3'b100: fbytes = {ADDR_WIDTH + 1{1'h0}} | 8'd128;
- 3'b101: fbytes = {ADDR_WIDTH + 1{1'h0}} | 7'd64;
- 3'b110: fbytes = {ADDR_WIDTH + 1{1'h0}} | 6'd32;
- 3'b111: fbytes = {ADDR_WIDTH + 1{1'h0}} | 13'd4096;
- endcase
- paf_thresh = (wmode ? (wmode[0] ? upaf << 1 : upaf) : upaf << 2);
+ paf_thresh = wmode[1] ? upaf : (wmode[0] ? upaf << 1 : upaf << 2);
end
always @(*)
case (wmode)
@@ -200,24 +194,24 @@
f2 = 1'b0;
p1 = 1'b0;
p2 = 1'b0;
- q1 = next_count < paf_thresh;
- q2 = count < paf_thresh;
+ q1 = next_count < {1'b0, paf_thresh};
+ q2 = count < {1'b0, paf_thresh};
case (wmode)
2'h0:
- case (depth)
- 3'h0: begin
+ case (DEPTH)
+ 3'h6: begin
f1 = {~waddr_next[11], waddr_next[10:2]} == raddr_next[11:2];
f2 = {~waddr[11], waddr[10:2]} == raddr_next[11:2];
p1 = ((waddr_next[10:2] + 1) & 9'h1ff) == raddr_next[10:2];
p2 = ((waddr[10:2] + 1) & 9'h1ff) == raddr_next[10:2];
end
- 3'h1: begin
+ 3'h5: begin
f1 = {~waddr_next[10], waddr_next[9:2]} == raddr_next[10:2];
f2 = {~waddr[10], waddr[9:2]} == raddr_next[10:2];
p1 = ((waddr_next[9:2] + 1) & 8'hff) == raddr_next[9:2];
p2 = ((waddr[9:2] + 1) & 8'hff) == raddr_next[9:2];
end
- 3'h2: begin
+ 3'h4: begin
f1 = {~waddr_next[9], waddr_next[8:2]} == raddr_next[9:2];
f2 = {~waddr[9], waddr[8:2]} == raddr_next[9:2];
p1 = ((waddr_next[8:2] + 1) & 7'h7f) == raddr_next[8:2];
@@ -229,19 +223,19 @@
p1 = ((waddr_next[7:2] + 1) & 6'h3f) == raddr_next[7:2];
p2 = ((waddr[7:2] + 1) & 6'h3f) == raddr_next[7:2];
end
- 3'h4: begin
+ 3'h2: begin
f1 = {~waddr_next[7], waddr_next[6:2]} == raddr_next[7:2];
f2 = {~waddr[7], waddr[6:2]} == raddr_next[7:2];
p1 = ((waddr_next[6:2] + 1) & 5'h1f) == raddr_next[6:2];
p2 = ((waddr[6:2] + 1) & 5'h1f) == raddr_next[6:2];
end
- 3'h5: begin
+ 3'h1: begin
f1 = {~waddr_next[6], waddr_next[5:2]} == raddr_next[6:2];
f2 = {~waddr[6], waddr[5:2]} == raddr_next[6:2];
p1 = ((waddr_next[5:2] + 1) & 4'hf) == raddr_next[5:2];
p2 = ((waddr[5:2] + 1) & 4'hf) == raddr_next[5:2];
end
- 3'h6: begin
+ 3'h0: begin
f1 = {~waddr_next[5], waddr_next[4:2]} == raddr_next[5:2];
f2 = {~waddr[5], waddr[4:2]} == raddr_next[5:2];
p1 = ((waddr_next[4:2] + 1) & 3'h7) == raddr_next[4:2];
@@ -249,26 +243,26 @@
end
3'h7: begin
f1 = {~waddr_next[ADDR_WIDTH], waddr_next[ADDR_WIDTH - 1:2]} == raddr_next[ADDR_WIDTH:2];
- f2 = {~waddr[ADDR_WIDTH], waddr[10:2]} == raddr_next[ADDR_WIDTH:2];
+ f2 = {~waddr[ADDR_WIDTH], waddr[ADDR_WIDTH - 1:2]} == raddr_next[ADDR_WIDTH:2];
p1 = ((waddr_next[ADDR_WIDTH - 1:2] + 1) & {ADDR_WIDTH - 2 {1'b1}}) == raddr_next[ADDR_WIDTH - 1:2];
p2 = ((waddr[ADDR_WIDTH - 1:2] + 1) & {ADDR_WIDTH - 2 {1'b1}}) == raddr_next[ADDR_WIDTH - 1:2];
end
endcase
2'h1:
- case (depth)
- 3'h0: begin
+ case (DEPTH)
+ 3'h6: begin
f1 = {~waddr_next[11], waddr_next[10:1]} == raddr_next[11:1];
f2 = {~waddr[11], waddr[10:1]} == raddr_next[11:1];
p1 = ((waddr_next[10:1] + 1) & 10'h3ff) == raddr_next[10:1];
p2 = ((waddr[10:1] + 1) & 10'h3ff) == raddr_next[10:1];
end
- 3'h1: begin
+ 3'h5: begin
f1 = {~waddr_next[10], waddr_next[9:1]} == raddr_next[10:1];
f2 = {~waddr[10], waddr[9:1]} == raddr_next[10:1];
p1 = ((waddr_next[9:1] + 1) & 9'h1ff) == raddr_next[9:1];
p2 = ((waddr[9:1] + 1) & 9'h1ff) == raddr_next[9:1];
end
- 3'h2: begin
+ 3'h4: begin
f1 = {~waddr_next[9], waddr_next[8:1]} == raddr_next[9:1];
f2 = {~waddr[9], waddr[8:1]} == raddr_next[9:1];
p1 = ((waddr_next[8:1] + 1) & 8'hff) == raddr_next[8:1];
@@ -280,19 +274,19 @@
p1 = ((waddr_next[7:1] + 1) & 7'h7f) == raddr_next[7:1];
p2 = ((waddr[7:1] + 1) & 7'h7f) == raddr_next[7:1];
end
- 3'h4: begin
+ 3'h2: begin
f1 = {~waddr_next[7], waddr_next[6:1]} == raddr_next[7:1];
f2 = {~waddr[7], waddr[6:1]} == raddr_next[7:1];
p1 = ((waddr_next[6:1] + 1) & 6'h3f) == raddr_next[6:1];
p2 = ((waddr[6:1] + 1) & 6'h3f) == raddr_next[6:1];
end
- 3'h5: begin
+ 3'h1: begin
f1 = {~waddr_next[6], waddr_next[5:1]} == raddr_next[6:1];
f2 = {~waddr[6], waddr[5:1]} == raddr_next[6:1];
p1 = ((waddr_next[5:1] + 1) & 5'h1f) == raddr_next[5:1];
p2 = ((waddr[5:1] + 1) & 5'h1f) == raddr_next[5:1];
end
- 3'h6: begin
+ 3'h0: begin
f1 = {~waddr_next[5], waddr_next[4:1]} == raddr_next[5:1];
f2 = {~waddr[5], waddr[4:1]} == raddr_next[5:1];
p1 = ((waddr_next[4:1] + 1) & 4'hf) == raddr_next[4:1];
@@ -300,26 +294,26 @@
end
3'h7: begin
f1 = {~waddr_next[ADDR_WIDTH], waddr_next[ADDR_WIDTH - 1:1]} == raddr_next[ADDR_WIDTH:1];
- f2 = {~waddr[11], waddr[ADDR_WIDTH - 1:1]} == raddr_next[ADDR_WIDTH:1];
+ f2 = {~waddr[ADDR_WIDTH], waddr[ADDR_WIDTH - 1:1]} == raddr_next[ADDR_WIDTH:1];
p1 = ((waddr_next[ADDR_WIDTH - 1:1] + 1) & {ADDR_WIDTH - 1 {1'b1}}) == raddr_next[ADDR_WIDTH - 1:1];
p2 = ((waddr[ADDR_WIDTH - 1:1] + 1) & {ADDR_WIDTH - 1 {1'b1}}) == raddr_next[ADDR_WIDTH - 1:1];
end
endcase
2'h2:
- case (depth)
- 3'h0: begin
+ case (DEPTH)
+ 3'h6: begin
f1 = {~waddr_next[11], waddr_next[10:0]} == raddr_next[11:0];
f2 = {~waddr[11], waddr[10:0]} == raddr_next[11:0];
p1 = ((waddr_next[10:0] + 1) & 11'h7ff) == raddr_next[10:0];
p2 = ((waddr[10:0] + 1) & 11'h7ff) == raddr_next[10:0];
end
- 3'h1: begin
+ 3'h5: begin
f1 = {~waddr_next[10], waddr_next[9:0]} == raddr_next[10:0];
f2 = {~waddr[10], waddr[9:0]} == raddr_next[10:0];
p1 = ((waddr_next[9:0] + 1) & 10'h3ff) == raddr_next[9:0];
p2 = ((waddr[9:0] + 1) & 10'h3ff) == raddr_next[9:0];
end
- 3'h2: begin
+ 3'h4: begin
f1 = {~waddr_next[9], waddr_next[8:0]} == raddr_next[9:0];
f2 = {~waddr[9], waddr[8:0]} == raddr_next[9:0];
p1 = ((waddr_next[8:0] + 1) & 9'h1ff) == raddr_next[8:0];
@@ -331,19 +325,19 @@
p1 = ((waddr_next[7:0] + 1) & 8'hff) == raddr_next[7:0];
p2 = ((waddr[7:0] + 1) & 8'hff) == raddr_next[7:0];
end
- 3'h4: begin
+ 3'h2: begin
f1 = {~waddr_next[7], waddr_next[6:0]} == raddr_next[7:0];
f2 = {~waddr[7], waddr[6:0]} == raddr_next[7:0];
p1 = ((waddr_next[6:0] + 1) & 7'h7f) == raddr_next[6:0];
p2 = ((waddr[6:0] + 1) & 7'h7f) == raddr_next[6:0];
end
- 3'h5: begin
+ 3'h1: begin
f1 = {~waddr_next[6], waddr_next[5:0]} == raddr_next[6:0];
f2 = {~waddr[6], waddr[5:0]} == raddr_next[6:0];
p1 = ((waddr_next[5:0] + 1) & 6'h3f) == raddr_next[5:0];
p2 = ((waddr[5:0] + 1) & 6'h3f) == raddr_next[5:0];
end
- 3'h6: begin
+ 3'h0: begin
f1 = {~waddr_next[5], waddr_next[4:0]} == raddr_next[5:0];
f2 = {~waddr[5], waddr[4:0]} == raddr_next[5:0];
p1 = ((waddr_next[4:0] + 1) & 5'h1f) == raddr_next[4:0];
@@ -380,42 +374,42 @@
2'h2: gcout_next = gc8out_next;
2'h1: gcout_next = {1'b0, gc16out_next};
2'h0: gcout_next = {2'b00, gc32out_next};
- default: gcout_next = 12'h000;
+ default: gcout_next = {ADDR_PLUS_ONE {1'b0}};
endcase
else
- gcout_next = 12'h000;
+ gcout_next = {ADDR_PLUS_ONE {1'b0}};
always @(posedge wclk or negedge rst_n)
if (~rst_n) begin
- full <= #(1) 1'b0;
- fmo <= #(1) 1'b0;
- paf <= #(1) 1'b0;
- raddr <= #(1) ADDR_WIDTH + 1'h0;
+ full <= 1'b0;
+ fmo <= 1'b0;
+ paf <= 1'b0;
+ raddr <= {ADDR_PLUS_ONE {1'b0}};
end
else begin
- full <= #(1) full_next;
- fmo <= #(1) fmo_next;
- paf <= #(1) paf_next;
+ full <= full_next;
+ fmo <= fmo_next;
+ paf <= paf_next;
case (gmode)
- 0: raddr <= #(1) raddr_next & {{ADDR_WIDTH - 1 {1'b1}}, 2'b00};
- 1: raddr <= #(1) raddr_next & {{ADDR_WIDTH {1'b1}}, 1'b0};
- 2: raddr <= #(1) raddr_next & {ADDR_WIDTH + 1 {1'b1}};
- 3: raddr <= #(1) 12'h000;
+ 0: raddr <= raddr_next & {{ADDR_WIDTH - 1 {1'b1}}, 2'b00};
+ 1: raddr <= raddr_next & {{ADDR_WIDTH {1'b1}}, 1'b0};
+ 2: raddr <= raddr_next & {ADDR_WIDTH + 1 {1'b1}};
+ 3: raddr <= 12'h000;
endcase
end
assign overflow_next = full & wen;
always @(posedge wclk or negedge rst_n)
if (~rst_n)
- overflow <= #(1) 1'b0;
+ overflow <= 1'b0;
else if (wen == 1'b1)
- overflow <= #(1) overflow_next;
+ overflow <= overflow_next;
always @(posedge wclk or negedge rst_n)
if (~rst_n) begin
- waddr <= #(1) {ADDR_WIDTH + 1 {1'b0}};
- gcout_reg <= #(1) {ADDR_WIDTH + 1 {1'b0}};
+ waddr <= {ADDR_WIDTH + 1 {1'b0}};
+ gcout_reg <= {ADDR_WIDTH + 1 {1'b0}};
end
else if (wen == 1'b1) begin
- waddr <= #(1) waddr_next;
- gcout_reg <= #(1) gcout_next;
+ waddr <= waddr_next;
+ gcout_reg <= gcout_next;
end
assign gcout = gcout_reg;
generate
@@ -431,7 +425,7 @@
default: raddr_next = {ADDR_WIDTH + 1 {1'b0}};
endcase
assign ff_waddr = waddr[ADDR_WIDTH - 1:0];
- assign pushflags = (rst_n ? {full, fmo, paf, overflow} : 4'b1111);
+ assign pushflags = {full, fmo, paf, overflow};
assign waddr_next = waddr + (wmode == 2'h0 ? 'h4 : (wmode == 2'h1 ? 'h2 : 'h1));
endmodule
module fifo_pop (
@@ -445,23 +439,24 @@
rmode,
wmode,
gcin,
- depth,
upae
);
parameter ADDR_WIDTH = 11;
parameter FIFO_WIDTH = 3'd2;
+ parameter DEPTH = 6;
output wire ren_o;
output wire [3:0] popflags;
output reg [ADDR_WIDTH - 1:0] out_raddr;
output wire [ADDR_WIDTH:0] gcout;
input rst_n;
+ (* clkbuf_sink *)
input rclk;
input ren_in;
input [1:0] rmode;
input [1:0] wmode;
input [ADDR_WIDTH:0] gcin;
input [ADDR_WIDTH - 1:0] upae;
- input [2:0] depth;
+ localparam ADDR_PLUS_ONE = ADDR_WIDTH + 1;
reg empty;
reg epo;
reg pae;
@@ -491,24 +486,14 @@
wire [ADDR_WIDTH:0] raddr_next;
wire [ADDR_WIDTH - 1:0] ff_raddr_next;
wire [ADDR_WIDTH:0] tmp;
- wire [ADDR_WIDTH:0] next_count;
- wire [ADDR_WIDTH:0] count;
- reg [ADDR_WIDTH:0] fbytes;
+ wire [ADDR_PLUS_ONE:0] next_count;
+ wire [ADDR_PLUS_ONE:0] count;
+ wire [ADDR_PLUS_ONE:0] fbytes;
genvar i;
assign next_count = waddr - raddr_next;
assign count = waddr - raddr;
- always @(*)
- case (depth)
- 3'b000: fbytes = 'd2048;
- 3'b001: fbytes = 'd1024;
- 3'b010: fbytes = 'd512;
- 3'b011: fbytes = 'd256;
- 3'b100: fbytes = 'd128;
- 3'b101: fbytes = 'd64;
- 3'b110: fbytes = 'd32;
- 3'b111: fbytes = 'd4096;
- endcase
- always @(*) pae_thresh = rmode ? (rmode[0] ? upae << 1 : upae) : upae << 2;
+ assign fbytes = 1 << (DEPTH + 5);
+ always @(*) pae_thresh = rmode[1] ? upae : (rmode[0] ? upae << 1 : upae << 2);
assign ren_out = (empty ? 1'b1 : ren_in);
always @(*)
case (rmode)
@@ -522,8 +507,8 @@
e2 = 1'b0;
o1 = 1'b0;
o2 = 1'b0;
- q1 = next_count < pae_thresh;
- q2 = count < pae_thresh;
+ q1 = next_count < {1'b0, pae_thresh};
+ q2 = count < {1'b0, pae_thresh};
case (rmode)
2'h0: begin
e1 = raddr_next[ADDR_WIDTH:2] == waddr_next[ADDR_WIDTH:2];
@@ -556,14 +541,14 @@
assign pae_next = (ren_in & !empty ? q1 : q2);
always @(posedge rclk or negedge rst_n)
if (~rst_n) begin
- empty <= #(1) 1'b1;
- pae <= #(1) 1'b1;
- epo <= #(1) 1'b0;
+ empty <= 1'b1;
+ pae <= 1'b1;
+ epo <= 1'b0;
end
else begin
- empty <= #(1) empty_next;
- pae <= #(1) pae_next;
- epo <= #(1) epo_next;
+ empty <= empty_next;
+ pae <= pae_next;
+ epo <= epo_next;
end
assign gc8out_next = (raddr_next >> 1) ^ raddr_next;
assign gc16out_next = (raddr_next >> 2) ^ (raddr_next >> 1);
@@ -580,20 +565,20 @@
gcout_next = 'h0;
always @(posedge rclk or negedge rst_n)
if (~rst_n)
- waddr <= #(1) 12'h000;
+ waddr <= 12'h000;
else
- waddr <= #(1) waddr_next;
+ waddr <= waddr_next;
always @(posedge rclk or negedge rst_n)
if (~rst_n) begin
- underflow <= #(1) 1'b0;
- bwl_sel <= #(1) 2'h0;
- gcout_reg <= #(1) 12'h000;
+ underflow <= 1'b0;
+ bwl_sel <= 2'h0;
+ gcout_reg <= 12'h000;
end
else if (ren_in) begin
- underflow <= #(1) empty;
+ underflow <= empty;
if (!empty) begin
- bwl_sel <= #(1) raddr_next[1:0];
- gcout_reg <= #(1) gcout_next;
+ bwl_sel <= raddr_next[1:0];
+ gcout_reg <= gcout_next;
end
end
generate
@@ -603,32 +588,33 @@
endgenerate
always @(*)
case (gmode)
- 2'h0: waddr_next = {tmp[9:0], 2'b00} & 12'hffc;
- 2'h1: waddr_next = {tmp[10:0], 1'b0} & 12'hffe;
- 2'h2: waddr_next = {tmp[11:0]} & 12'hfff;
- default: waddr_next = 12'h000;
+ 2'h0: waddr_next = {tmp[ADDR_WIDTH - 2:0], 2'b00} & {{ADDR_WIDTH - 1 {1'b1}}, 2'b00};
+ 2'h1: waddr_next = {tmp[ADDR_WIDTH - 1:0], 1'b0} & {{ADDR_WIDTH {1'b1}}, 1'b0};
+ 2'h2: waddr_next = {tmp[ADDR_WIDTH:0]} & {ADDR_PLUS_ONE {1'b1}};
+ default: waddr_next = {ADDR_PLUS_ONE {1'b0}};
endcase
assign ff_raddr_next = ff_raddr + (rmode == 2'h0 ? 'h4 : (rmode == 2'h1 ? 'h2 : 'h1));
assign raddr_next = raddr + (rmode == 2'h0 ? 'h4 : (rmode == 2'h1 ? 'h2 : 'h1));
always @(posedge rclk or negedge rst_n)
if (~rst_n)
- ff_raddr <= #(1) 1'sb0;
+ ff_raddr <= 1'sb0;
else if (empty & ~empty_next)
- ff_raddr <= #(1) raddr_next[10:0];
+ ff_raddr <= raddr_next[ADDR_WIDTH - 1:0];
else if ((ren_in & !empty) & ~empty_next)
- ff_raddr <= #(1) ff_raddr_next;
+ ff_raddr <= ff_raddr_next;
always @(posedge rclk or negedge rst_n)
if (~rst_n)
- raddr <= #(1) 12'h000;
+ raddr <= 12'h000;
else if (ren_in & !empty)
- raddr <= #(1) raddr_next;
+ raddr <= raddr_next;
always @(*)
case (FIFO_WIDTH)
+ 3'h2: out_raddr = {ff_raddr[ADDR_WIDTH - 1:1], bwl_sel[0]};
+ 3'h4: out_raddr = {ff_raddr[ADDR_WIDTH - 1:2], bwl_sel};
default: out_raddr = ff_raddr[ADDR_WIDTH - 1:0];
- 2: out_raddr = {ff_raddr[ADDR_WIDTH - 1:1], bwl_sel[0]};
- 4: out_raddr = {ff_raddr[ADDR_WIDTH - 1:2], bwl_sel};
endcase
assign ren_o = ren_out;
assign gcout = gcout_reg;
assign popflags = {empty, epo, pae, underflow};
endmodule
+`default_nettype none
diff --git a/ql-qlf-plugin/tests/Makefile b/ql-qlf-plugin/tests/Makefile
index ad507f6..2e569bf 100644
--- a/ql-qlf-plugin/tests/Makefile
+++ b/ql-qlf-plugin/tests/Makefile
@@ -37,7 +37,8 @@
SIM_TESTS = \
qlf_k6n10f/sim_dsp_mult \
qlf_k6n10f/sim_dsp_mult_r \
- qlf_k6n10f/sim_dsp_fir
+ qlf_k6n10f/sim_dsp_fir \
+ qlf_k6n10f/sim_tc36fifo
# Those tests perform synthesis and simulation of synthesis results
POST_SYNTH_SIM_TESTS = \
diff --git a/ql-qlf-plugin/tests/qlf_k6n10f/bram_sdp/bram_sdp.tcl b/ql-qlf-plugin/tests/qlf_k6n10f/bram_sdp/bram_sdp.tcl
index 5e9379e..2a161c1 100644
--- a/ql-qlf-plugin/tests/qlf_k6n10f/bram_sdp/bram_sdp.tcl
+++ b/ql-qlf-plugin/tests/qlf_k6n10f/bram_sdp/bram_sdp.tcl
@@ -13,7 +13,7 @@
opt_clean
stat
write_verilog sim/bram_sdp_32x512_post_synth.v
-select -assert-count 1 t:TDP_BRAM36
+select -assert-count 1 t:TDP36K
select -clear
design -load bram_sdp
@@ -24,7 +24,7 @@
opt_clean
stat
write_verilog sim/bram_sdp_16x1024_post_synth.v
-select -assert-count 1 t:TDP_BRAM36
+select -assert-count 1 t:TDP36K
select -clear
design -load bram_sdp
@@ -35,7 +35,7 @@
opt_clean
stat
write_verilog sim/bram_sdp_8x2048_post_synth.v
-select -assert-count 1 t:TDP_BRAM36
+select -assert-count 1 t:TDP36K
select -clear
design -load bram_sdp
@@ -46,5 +46,5 @@
opt_clean
stat
write_verilog sim/bram_sdp_4x4096_post_synth.v
-select -assert-count 1 t:TDP_BRAM36
+select -assert-count 1 t:TDP36K
diff --git a/ql-qlf-plugin/tests/qlf_k6n10f/bram_tdp/bram_tdp.tcl b/ql-qlf-plugin/tests/qlf_k6n10f/bram_tdp/bram_tdp.tcl
index f3a5349..5fd14e4 100644
--- a/ql-qlf-plugin/tests/qlf_k6n10f/bram_tdp/bram_tdp.tcl
+++ b/ql-qlf-plugin/tests/qlf_k6n10f/bram_tdp/bram_tdp.tcl
@@ -13,7 +13,7 @@
opt_clean
stat
write_verilog sim/bram_tdp_32x512_post_synth.v
-select -assert-count 1 t:TDP_BRAM36
+select -assert-count 1 t:TDP36K
select -clear
design -load bram_tdp
@@ -24,7 +24,7 @@
opt_clean
stat
write_verilog sim/bram_tdp_16x1024_post_synth.v
-select -assert-count 1 t:TDP_BRAM36
+select -assert-count 1 t:TDP36K
select -clear
design -load bram_tdp
@@ -35,7 +35,7 @@
opt_clean
stat
write_verilog sim/bram_tdp_8x2048_post_synth.v
-select -assert-count 1 t:TDP_BRAM36
+select -assert-count 1 t:TDP36K
select -clear
design -load bram_tdp
@@ -46,5 +46,5 @@
opt_clean
stat
write_verilog sim/bram_tdp_4x4096_post_synth.v
-select -assert-count 1 t:TDP_BRAM36
+select -assert-count 1 t:TDP36K
diff --git a/ql-qlf-plugin/tests/qlf_k6n10f/sim_tc36fifo/sim_tc36fifo.v b/ql-qlf-plugin/tests/qlf_k6n10f/sim_tc36fifo/sim_tc36fifo.v
new file mode 100644
index 0000000..105967b
--- /dev/null
+++ b/ql-qlf-plugin/tests/qlf_k6n10f/sim_tc36fifo/sim_tc36fifo.v
@@ -0,0 +1,2355 @@
+// Copyright (C) 2022 The SymbiFlow Authors.
+//
+// Use of this source code is governed by a ISC-style
+// license that can be found in the LICENSE file or at
+// https://opensource.org/licenses/ISC
+//
+// SPDX-License-Identifier:ISC
+
+`include "qlf_k6n10f/cells_sim.v"
+`timescale 1ns/1ps
+
+module tb;
+ localparam [11:0] UPAE1 = 10;
+ localparam [11:0] UPAF1 = 10;
+ localparam [10:0] UPAE2 = 10;
+ localparam [10:0] UPAF2 = 10;
+ localparam [0:0] SPLIT = 0;
+ localparam [0:0] SYNC_FIFO1 = 0;
+ localparam [0:0] SYNC_FIFO2 = 0;
+ localparam [0:0] FMODE1 = 1;
+ localparam [0:0] POWERDN1 = 0;
+ localparam [0:0] SLEEP1 = 0;
+ localparam [0:0] PROTECT1 = 0;
+ localparam [0:0] FMODE2 = 0;
+ localparam [0:0] POWERDN2 = 0;
+ localparam [0:0] SLEEP2 = 0;
+ localparam [0:0] PROTECT2 = 0;
+ localparam [2:0] RMODE_A1 = MODE_36;
+ localparam [2:0] RMODE_B1 = MODE_36;
+ localparam [2:0] WMODE_A1 = MODE_36;
+ localparam [2:0] WMODE_B1 = MODE_36;
+ localparam [2:0] RMODE_A2 = MODE_36;
+ localparam [2:0] RMODE_B2 = MODE_36;
+ localparam [2:0] WMODE_A2 = MODE_36;
+ localparam [2:0] WMODE_B2 = MODE_36;
+
+ localparam W_PERIOD = 30;
+ localparam R_PERIOD = 29;
+ reg WEN_A1;
+ reg WEN_B1;
+ reg REN_A1;
+ reg REN_B1;
+ reg CLK_A1;
+ reg CLK_B1;
+ reg [1:0] BE_A1;
+ reg [1:0] BE_B1;
+ reg [14:0] ADDR_A1;
+ reg [14:0] ADDR_B1;
+ reg [17:0] WDATA_A1;
+ reg [17:0] WDATA_B1;
+ wire [17:0] RDATA_A1;
+ wire [17:0] RDATA_B1;
+ wire UNDERRUN1;
+ wire OVERRUN1;
+ wire UNDERRUN2;
+ wire OVERRUN2;
+ wire EMPTY1;
+ wire EPO1;
+ wire EWM1;
+ wire FULL1;
+ wire FMO1;
+ wire FWM1;
+ reg FLUSH1;
+ reg WEN_A2;
+ reg WEN_B2;
+ reg REN_A2;
+ reg REN_B2;
+ reg CLK_A2;
+ reg CLK_B2;
+ reg [1:0] BE_A2;
+ reg [1:0] BE_B2;
+ wire [13:0] ADDR_A2;
+ wire [13:0] ADDR_B2;
+ reg [17:0] WDATA_A2;
+ reg [17:0] WDATA_B2;
+ wire [17:0] RDATA_A2;
+ wire [17:0] RDATA_B2;
+ wire EMPTY2;
+ wire EPO2;
+ wire EWM2;
+ wire FULL2;
+ wire FMO2;
+ wire FWM2;
+ reg FLUSH2;
+ wire [17:0] RDATA_A18;
+ wire [17:0] RDATA_B18;
+ wire [8:0] RDATA_A9;
+ wire [8:0] RDATA_B9;
+ wire [35:0] expected_data_a;
+ wire [35:0] expected_data_b;
+ wire [35:0] last_expected_a;
+ wire [35:0] last_expected_b;
+ wire [17:0] last_expected_a18;
+ wire [17:0] last_expected_b18;
+ wire [8:0] last_expected_a9;
+ wire [8:0] last_expected_b9;
+ wire [14:0] last_addr_a;
+ wire [14:0] last_addr_b;
+ wire valid_a;
+ wire valid_b;
+ wire [3:0] index4_a;
+ wire [3:0] index4_b;
+ wire [1:0] index2_a;
+ wire [1:0] index2_b;
+ wire index_a;
+ wire index_b;
+ reg last_empty1;
+ wire last_empty2;
+ wire [35:0] fifo_dout;
+ wire [35:0] fifo_din;
+ localparam MODE_36 = 3'b011;
+ task fA_36x36;
+ begin
+ $display("%d: Fifo 36-bit write 36-bit read", $time);
+ FLUSH1 = 1;
+ @(posedge CLK_A1);
+ @(posedge CLK_B1);
+ FLUSH1 = 0;
+ end
+ endtask
+ task fA_push36;
+ input [35:0] data;
+ begin
+ @(negedge CLK_A1) begin
+ WDATA_A2 = data[35:18];
+ WDATA_A1 = data[17:0];
+ WEN_A1 = 1;
+ end
+ @(posedge CLK_A1)
+ #(2) WEN_A1 = 0;
+ end
+ endtask
+ task fA_pop;
+ input [35:0] expected;
+ input [35:0] msk;
+ begin
+ if (last_empty1 || EMPTY1)
+ while (EMPTY1 == 1) begin
+ @(posedge CLK_B1);
+ end
+ if (({RDATA_B2, RDATA_B1} & msk) !== expected) begin
+ $display("%d: POP FIFO ERROR: mismatch: expected = %9x mask = %5x, actuall = %9x", $time, expected, msk, {RDATA_B2, RDATA_B1});
+ error_cnt = error_cnt + 1'b1;
+ end
+ @(negedge CLK_B1) REN_B1 = 1;
+ @(posedge CLK_B1)
+ #(2) REN_B1 = 0;
+ end
+ endtask
+ integer wcount_a;
+ integer rcount_a;
+ integer state_a;
+ integer wcount_b;
+ integer rcount_b;
+ integer state_b;
+ integer error_cnt = 0;
+ initial CLK_A1 = 0;
+ initial CLK_B1 = 0;
+ initial CLK_A2 = 0;
+ initial CLK_B2 = 0;
+ initial forever #(R_PERIOD) CLK_A1 = ~CLK_A1;
+ initial forever #(W_PERIOD) CLK_B1 = ~CLK_B1;
+ initial forever #(R_PERIOD) CLK_A2 = ~CLK_A2;
+ initial forever #(W_PERIOD) CLK_B2 = ~CLK_B2;
+ initial begin
+ $dumpfile(`VCD_FILE);
+ $dumpvars(0, tb);
+ end
+ initial #(1) begin
+ WEN_A1 = 0;
+ REN_A1 = 0;
+ WEN_B1 = 0;
+ REN_B1 = 0;
+ BE_A1 = 2'b11;
+ BE_A2 = 2'b11;
+ BE_B1 = 2'b11;
+ BE_B2 = 2'b11;
+ ADDR_A1 = 14'b00000000000000;
+ ADDR_B1 = 14'b00000000000000;
+ WDATA_A1 = 18'b000000000000000000;
+ WDATA_B1 = 18'h00000;
+ wcount_a = 0;
+ rcount_a = 0;
+ state_a = 0;
+ wcount_b = 0;
+ rcount_b = 0;
+ state_b = 0;
+ WEN_A2 = 0;
+ REN_A2 = 0;
+ WEN_B2 = 0;
+ REN_B2 = 0;
+ FLUSH1 = 0;
+ FLUSH2 = 0;
+ end
+ initial begin
+ #(100)
+ @(posedge CLK_A1);
+ @(posedge CLK_B1);
+ end
+ assign fifo_dout = {RDATA_B2, RDATA_B1};
+ assign fifo_din = {WDATA_A2, WDATA_A1};
+ assign {EMPTY1, EPO1, EWM1, UNDERRUN1, FULL1, FMO1, FWM1, OVERRUN1} = RDATA_A1[7:0];
+ assign {EMPTY2, EPO2, EWM2, UNDERRUN2, FULL2, FMO2, FWM2, OVERRUN2} = RDATA_A2[7:0];
+ always @(posedge CLK_B1) last_empty1 <= EMPTY1;
+ always @(*)
+ case (state_a)
+ 0: begin
+ fA_36x36;
+ if (!EMPTY1) begin
+ $display("%d: FIFO ERROR: EMPTY flag not set", $time);
+ error_cnt = error_cnt + 1'b1;
+ end
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ if (!EMPTY1) begin
+ $display("%d: FIFO ERROR: EMPTY flag not set", $time);
+ error_cnt = error_cnt + 1'b1;
+ end
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ if (!EMPTY1) begin
+ $display("%d: FIFO ERROR: EMPTY flag not set", $time);
+ error_cnt = error_cnt + 1'b1;
+ end
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ fA_push36(36'h0a5a5a5a5);
+ fA_push36(36'h05a5a5a5a);
+ if (!FULL1) begin
+ $display("%d: FIFO ERROR: FULL flag not set", $time);
+ error_cnt = error_cnt + 1'b1;
+ end
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ fA_pop(36'h0a5a5a5a5, {36 {1'b1}});
+ fA_pop(36'h05a5a5a5a, {36 {1'b1}});
+ if (!EMPTY1) begin
+ $display("%d: FIFO ERROR: EMPTY flag not set", $time);
+ error_cnt = error_cnt + 1'b1;
+ end
+ @(posedge CLK_A1);
+ @(posedge CLK_B1);
+ @(posedge CLK_A1);
+ @(posedge CLK_B1);
+ @(posedge CLK_A1);
+ @(posedge CLK_B1);
+ @(posedge CLK_A1);
+ @(posedge CLK_B1);
+ @(posedge CLK_A1);
+ @(posedge CLK_B1);
+ @(posedge CLK_A1);
+ @(posedge CLK_B1);
+ $finish_and_return( (error_cnt == 0) ? 0 : -1 );
+ end
+ endcase
+
+ TDP36K #(
+ .MODE_BITS({SPLIT, UPAF2, UPAE2, PROTECT2, SLEEP2, POWERDN2, FMODE2, WMODE_B2, WMODE_A2, RMODE_B2, RMODE_A2, SYNC_FIFO2, UPAF1, UPAE1, PROTECT1, SLEEP1, POWERDN1, FMODE1, WMODE_B1, WMODE_A1, RMODE_B1, RMODE_A1, SYNC_FIFO1})
+ )tdp36_1(
+ .CLK_A1_i(CLK_A1),
+ .CLK_B1_i(CLK_B1),
+ .WEN_A1_i(WEN_A1),
+ .WEN_B1_i(WEN_B1),
+ .REN_A1_i(REN_A1),
+ .REN_B1_i(REN_B1),
+ .BE_A1_i(BE_A1),
+ .BE_B1_i(BE_B1),
+ .ADDR_A1_i(ADDR_A1),
+ .ADDR_B1_i(ADDR_B1),
+ .WDATA_A1_i(WDATA_A1),
+ .WDATA_B1_i(WDATA_B1),
+ .RDATA_A1_o(RDATA_A1),
+ .RDATA_B1_o(RDATA_B1),
+ .FLUSH1_i(FLUSH1),
+ .CLK_A2_i(CLK_A2),
+ .CLK_B2_i(CLK_B2),
+ .WEN_A2_i(WEN_A2),
+ .WEN_B2_i(WEN_B2),
+ .REN_A2_i(REN_A2),
+ .REN_B2_i(REN_B2),
+ .BE_A2_i(BE_A2),
+ .BE_B2_i(BE_B2),
+ .ADDR_A2_i(ADDR_A2),
+ .ADDR_B2_i(ADDR_B2),
+ .WDATA_A2_i(WDATA_A2),
+ .WDATA_B2_i(WDATA_B2),
+ .RDATA_A2_o(RDATA_A2),
+ .RDATA_B2_o(RDATA_B2),
+ .FLUSH2_i(FLUSH2)
+ );
+endmodule