blob: c0ebb39243724510dfd2fb1a9e0fb4d3f7f6ee90 [file] [log] [blame]
// 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 \$__QUICKLOGIC_RAMB16K (
CLK2,
CLK3,
A1ADDR,
A1DATA,
A1EN,
B1ADDR,
B1DATA,
B1EN
);
parameter CFG_ABITS = 9;
parameter CFG_DBITS = 36;
parameter CFG_ENABLE_B = 4;
parameter CLKPOL2 = 1;
parameter CLKPOL3 = 1;
parameter [16383:0] INIT = 16384'bx;
input CLK2;
input CLK3;
input [CFG_ABITS-1:0] A1ADDR;
output [CFG_DBITS-1:0] A1DATA;
input A1EN;
input [CFG_ABITS-1:0] B1ADDR;
input [CFG_DBITS-1:0] B1DATA;
input [CFG_ENABLE_B-1:0] B1EN;
wire VCC = 1'b1;
wire GND = 1'b0;
wire [3:0] DIP, DOP;
wire [31:0] DI, DO;
wire [31:0] DOB;
wire [ 3:0] DOPB;
wire [ 1:0] WS1_0;
wire [ 1:0] WS1_1;
wire [ 1:0] WS2_0;
wire [ 1:0] WS2_1;
wire [ 4:0] wen_reg;
assign wen_reg[4:CFG_ENABLE_B] = 0;
assign wen_reg[CFG_ENABLE_B-1:0] = B1EN;
assign A1DATA = DO;
assign DI = B1DATA;
if (CFG_DBITS <= 8) begin
assign WS1_0 = 2'b00;
assign WS2_0 = 2'b00;
end else if (CFG_DBITS > 8 && CFG_DBITS <= 16) begin
assign WS1_0 = 2'b01;
assign WS2_0 = 2'b01;
end else if (CFG_DBITS > 16) begin
assign WS1_0 = 2'b10;
assign WS2_0 = 2'b10;
end
generate
if (CFG_DBITS <= 16) begin
ram8k_2x1_cell_macro #(
`include "bram_init_32.vh"
) _TECHMAP_REPLACE_ (
.A1_0(B1ADDR),
.A1_1(GND),
.A2_0(A1ADDR),
.A2_1(GND),
.ASYNC_FLUSH_0(GND),
.ASYNC_FLUSH_1(GND),
.ASYNC_FLUSH_S0(GND),
.ASYNC_FLUSH_S1(GND),
.CLK1_0(CLK2),
.CLK1_1(CLK2),
.CLK1S_0(!CLKPOL2),
.CLK1S_1(!CLKPOL2),
.CLK1EN_0(VCC),
.CLK1EN_1(VCC),
.CLK2_0(CLK3),
.CLK2_1(CLK3),
.CLK2S_0(!CLKPOL3),
.CLK2S_1(!CLKPOL3),
.CLK2EN_0(A1EN),
.CLK2EN_1(A1EN),
.CONCAT_EN_0(VCC),
.CONCAT_EN_1(GND),
.CS1_0(VCC),
.CS1_1(GND),
.CS2_0(VCC),
.CS2_1(GND),
.DIR_0(GND),
.DIR_1(GND),
.FIFO_EN_0(GND),
.FIFO_EN_1(GND),
.P1_0(GND),
.P1_1(GND),
.P2_0(GND),
.P2_1(GND),
.PIPELINE_RD_0(GND),
.PIPELINE_RD_1(GND),
.SYNC_FIFO_0(GND),
.SYNC_FIFO_1(GND),
.WD_1(GND),
.WD_0({GND, DI[15:8], GND, DI[7:0]}),
.WIDTH_SELECT1_0(WS1_0),
.WIDTH_SELECT1_1(GND),
.WIDTH_SELECT2_0(WS2_0),
.WIDTH_SELECT2_1(GND),
.WEN1_0(wen_reg[1:0]),
.WEN1_1(wen_reg[3:2]),
.Almost_Empty_0(),
.Almost_Empty_1(),
.Almost_Full_0(),
.Almost_Full_1(),
.POP_FLAG_0(),
.POP_FLAG_1(),
.PUSH_FLAG_0(),
.PUSH_FLAG_1(),
.RD_0({DOP[1], DO[15:8], DOP[0], DO[7:0]}),
.RD_1(),
.TEST1A(GND),
.TEST1B(GND),
.RMA(4'd0),
.RMB(4'd0),
.RMEA(GND),
.RMEB(GND)
);
end else if (CFG_DBITS <= 32) begin
ram8k_2x1_cell_macro #(
`include "bram_init_32.vh"
) _TECHMAP_REPLACE_ (
.A1_0(B1ADDR),
.A1_1(GND),
.A2_0(A1ADDR),
.A2_1(GND),
.ASYNC_FLUSH_0(GND),
.ASYNC_FLUSH_1(GND),
.ASYNC_FLUSH_S0(GND),
.ASYNC_FLUSH_S1(GND),
.CLK1_0(CLK2),
.CLK1_1(CLK2),
.CLK1S_0(!CLKPOL2),
.CLK1S_1(!CLKPOL2),
.CLK1EN_0(VCC),
.CLK1EN_1(VCC),
.CLK2_0(CLK3),
.CLK2_1(CLK3),
.CLK2S_0(!CLKPOL3),
.CLK2S_1(!CLKPOL3),
.CLK2EN_0(A1EN),
.CLK2EN_1(A1EN),
.CONCAT_EN_0(VCC),
.CONCAT_EN_1(GND),
.CS1_0(VCC),
.CS1_1(GND),
.CS2_0(VCC),
.CS2_1(GND),
.DIR_0(GND),
.DIR_1(GND),
.FIFO_EN_0(GND),
.FIFO_EN_1(GND),
.P1_0(GND),
.P1_1(GND),
.P2_0(GND),
.P2_1(GND),
.PIPELINE_RD_0(GND),
.PIPELINE_RD_1(GND),
.SYNC_FIFO_0(GND),
.SYNC_FIFO_1(GND),
.WD_1({GND, DI[31:24], GND, DI[23:16]}),
.WD_0({GND, DI[15:8], GND, DI[7:0]}),
.WIDTH_SELECT1_0(WS1_0),
.WIDTH_SELECT1_1(GND),
.WIDTH_SELECT2_0(WS2_0),
.WIDTH_SELECT2_1(GND),
.WEN1_0(wen_reg[1:0]),
.WEN1_1(wen_reg[3:2]),
.Almost_Empty_0(),
.Almost_Empty_1(),
.Almost_Full_0(),
.Almost_Full_1(),
.POP_FLAG_0(),
.POP_FLAG_1(),
.PUSH_FLAG_0(),
.PUSH_FLAG_1(),
.RD_0({DOP[1], DO[15:8], DOP[0], DO[7:0]}),
.RD_1({DOP[3], DO[31:24], DOP[2], DO[23:16]}),
.TEST1A(GND),
.TEST1B(GND),
.RMA(4'd0),
.RMB(4'd0),
.RMEA(GND),
.RMEB(GND)
);
end else begin
wire TECHMAP_FAIL = 1'b1;
end
endgenerate
endmodule
// ------------------------------------------------------------------------
module \$__QUICKLOGIC_RAMB8K (
CLK2,
CLK3,
A1ADDR,
A1DATA,
A1EN,
B1ADDR,
B1DATA,
B1EN
);
parameter CFG_ABITS = 9;
parameter CFG_DBITS = 18;
parameter CFG_ENABLE_B = 2;
parameter CLKPOL2 = 1;
parameter CLKPOL3 = 1;
parameter [8191:0] INIT = 8192'bx;
input CLK2;
input CLK3;
input [CFG_ABITS-1:0] A1ADDR;
output [CFG_DBITS-1:0] A1DATA;
input A1EN;
input [CFG_ABITS-1:0] B1ADDR;
input [CFG_DBITS-1:0] B1DATA;
input [CFG_ENABLE_B-1:0] B1EN;
wire [10:0] A1ADDR_11;
wire [10:0] B1ADDR_11;
wire [1:0] DIP, DOP;
wire [15:0] DI, DO;
wire [15:0] DOBDO;
wire [ 1:0] DOPBDOP;
wire [ 1:0] WS1_0;
wire [ 1:0] WS1_1;
wire [ 1:0] WS2_0;
wire [ 1:0] WS2_1;
wire [ 2:0] wen_reg;
assign wen_reg[2:CFG_ENABLE_B] = 0;
assign wen_reg[CFG_ENABLE_B-1:0] = B1EN;
wire GND = 1'b0;
wire VCC = 1'b1;
assign A1DATA = DO;
assign DI = B1DATA;
if (CFG_ABITS == 11) begin
assign A1ADDR_11[CFG_ABITS-1:0] = A1ADDR;
assign B1ADDR_11[CFG_ABITS-1:0] = B1ADDR;
end else begin
assign A1ADDR_11[10:CFG_ABITS] = 0;
assign A1ADDR_11[CFG_ABITS-1:0] = A1ADDR;
assign B1ADDR_11[10:CFG_ABITS] = 0;
assign B1ADDR_11[CFG_ABITS-1:0] = B1ADDR;
end
if (CFG_DBITS <= 9) begin
assign WS1_0 = 2'b00;
assign WS2_0 = 2'b00;
end else if (CFG_DBITS > 9 && CFG_DBITS <= 18) begin
assign WS1_0 = 2'b01;
assign WS2_0 = 2'b01;
end else if (CFG_DBITS > 18) begin
assign WS1_0 = 2'b10;
assign WS2_0 = 2'b10;
end
ram8k_2x1_cell_macro #(
`include "bram_init_8_16.vh"
) _TECHMAP_REPLACE_ (
.A1_0(B1ADDR_11),
.A1_1(GND),
.A2_0(A1ADDR_11),
.A2_1(GND),
.ASYNC_FLUSH_0(GND),
.ASYNC_FLUSH_1(GND),
.ASYNC_FLUSH_S0(GND),
.ASYNC_FLUSH_S1(GND),
.CLK1_0(CLK2),
.CLK1_1(GND),
.CLK1S_0(!CLKPOL2),
.CLK1S_1(GND),
.CLK1EN_0(VCC),
.CLK1EN_1(VCC),
.CLK2_0(CLK3),
.CLK2_1(GND),
.CLK2S_0(!CLKPOL3),
.CLK2S_1(GND),
.CLK2EN_0(A1EN),
.CLK2EN_1(GND),
.CONCAT_EN_0(GND),
.CONCAT_EN_1(GND),
.CS1_0(VCC),
.CS1_1(GND),
.CS2_0(VCC),
.CS2_1(GND),
.DIR_0(GND),
.DIR_1(GND),
.FIFO_EN_0(GND),
.FIFO_EN_1(GND),
.P1_0(GND),
.P1_1(GND),
.P2_0(GND),
.P2_1(GND),
.PIPELINE_RD_0(GND),
.PIPELINE_RD_1(GND),
.SYNC_FIFO_0(GND),
.SYNC_FIFO_1(GND),
.WD_1(GND),
.WD_0({GND, DI[15:8], GND, DI[7:0]}),
.WIDTH_SELECT1_0(WS1_0),
.WIDTH_SELECT1_1(GND),
.WIDTH_SELECT2_0(WS2_0),
.WIDTH_SELECT2_1(GND),
.WEN1_0(wen_reg[1:0]),
.WEN1_1(GND),
.Almost_Empty_0(),
.Almost_Empty_1(),
.Almost_Full_0(),
.Almost_Full_1(),
.POP_FLAG_0(),
.POP_FLAG_1(),
.PUSH_FLAG_0(),
.PUSH_FLAG_1(),
.RD_0({DOP[1], DO[15:8], DOP[0], DO[7:0]}),
.RD_1(),
.TEST1A(GND),
.TEST1B(GND),
.RMA(4'd0),
.RMB(4'd0),
.RMEA(GND),
.RMEB(GND)
);
endmodule
module RAM_8K_BLK (
WA,
RA,
WD,
WClk,
RClk,
WClk_En,
RClk_En,
WEN,
RD
);
parameter addr_int = 9,
data_depth_int = 512,
data_width_int = 18,
wr_enable_int = 2,
reg_rd_int = 0;
parameter [8191:0] INIT = 8192'bx;
parameter INIT_FILE = "init.mem";
input [addr_int-1:0] WA;
input [addr_int-1:0] RA;
input WClk, RClk;
input WClk_En, RClk_En;
input [wr_enable_int-1:0] WEN;
input [data_width_int-1:0] WD;
output [data_width_int-1:0] RD;
wire VCC, GND;
wire WClk0_Sel, RClk0_Sel;
wire WClk1_Sel, RClk1_Sel;
wire reg_rd0;
wire reg_rd1;
wire [10:0] addr_wr0, addr_rd0, addr_wr1, addr_rd1;
wire [17:0] in_reg0;
wire [ 2:0] wen_reg0;
wire [15:0] out_reg0;
wire [ 1:0] out_par0;
wire [1:0] WS1_0, WS2_0;
wire [1:0] WS_GND;
wire LS, DS, SD, LS_RB1, DS_RB1, SD_RB1;
wire WD0_SEL, RD0_SEL;
wire WD1_SEL, RD1_SEL;
assign VCC = 1'b1;
assign GND = 1'b0;
assign WD0_SEL = 1'b1;
assign RD0_SEL = 1'b1;
assign WD1_SEL = 1'b0;
assign RD1_SEL = 1'b0;
assign WClk0_Sel = 1'b0;
assign RClk0_Sel = 1'b0;
assign WClk1_Sel = 1'b0;
assign RClk1_Sel = 1'b0;
assign LS = 1'b0;
assign DS = 1'b0;
assign SD = 1'b0;
assign LS_RB1 = 1'b0;
assign DS_RB1 = 1'b0;
assign SD_RB1 = 1'b0;
assign reg_rd0 = reg_rd_int;
assign WS_GND = 2'b00;
assign reg_rd1 = 1'b0;
assign wen_reg0[2:wr_enable_int] = 0;
assign wen_reg0[wr_enable_int-1:0] = WEN;
assign addr_wr1 = 11'b0000000000;
assign addr_rd1 = 11'b0000000000;
generate
if (addr_int == 11) begin
assign addr_wr0[10:0] = WA;
assign addr_rd0[10:0] = RA;
end else begin
assign addr_wr0[10:addr_int] = 0;
assign addr_wr0[addr_int-1:0] = WA;
assign addr_rd0[10:addr_int] = 0;
assign addr_rd0[addr_int-1:0] = RA;
end
if (data_width_int == 16) begin
assign in_reg0[data_width_int-1:0] = WD[data_width_int-1:0];
end else if (data_width_int > 8 && data_width_int < 16) begin
assign in_reg0[15:data_width_int] = 0;
assign in_reg0[data_width_int-1:0] = WD[data_width_int-1:0];
end else if (data_width_int <= 8) begin
assign in_reg0[15:data_width_int] = 0;
assign in_reg0[data_width_int-1:0] = WD[data_width_int-1:0];
end
if (data_width_int <= 8) begin
assign WS1_0 = 2'b00;
assign WS2_0 = 2'b00;
end else if (data_width_int > 8 && data_width_int <= 16) begin
assign WS1_0 = 2'b01;
assign WS2_0 = 2'b01;
end else if (data_width_int > 16) begin
assign WS1_0 = 2'b10;
assign WS2_0 = 2'b10;
end
endgenerate
ram8k_2x1_cell_macro #(
.INIT(INIT)
) _TECHMAP_REPLACE_ (
.A1_0(addr_wr0),
.A1_1(addr_wr1),
.A2_0(addr_rd0),
.A2_1(addr_rd1),
.ASYNC_FLUSH_0(GND),
.ASYNC_FLUSH_1(GND),
.ASYNC_FLUSH_S0(GND),
.ASYNC_FLUSH_S1(GND),
.CLK1_0(WClk),
.CLK1_1(GND),
.CLK1S_0(WClk0_Sel),
.CLK1S_1(WClk1_Sel),
.CLK1EN_0(WClk_En),
.CLK1EN_1(GND),
.CLK2_0(RClk),
.CLK2_1(GND),
.CLK2S_0(RClk0_Sel),
.CLK2S_1(RClk1_Sel),
.CLK2EN_0(RClk_En),
.CLK2EN_1(GND),
.CONCAT_EN_0(GND),
.CONCAT_EN_1(GND),
.CS1_0(WD0_SEL),
.CS1_1(WD1_SEL),
.CS2_0(RD0_SEL),
.CS2_1(RD1_SEL),
.DIR_0(GND),
.DIR_1(GND),
.FIFO_EN_0(GND),
.FIFO_EN_1(GND),
.P1_0(GND),
.P1_1(GND),
.P2_0(GND),
.P2_1(GND),
.PIPELINE_RD_0(reg_rd0),
.PIPELINE_RD_1(reg_rd1),
.SYNC_FIFO_0(GND),
.SYNC_FIFO_1(GND),
.WD_1({18{GND}}),
.WD_0({1'b0, in_reg0[15:8], 1'b0, in_reg0[7:0]}),
.WIDTH_SELECT1_0(WS1_0),
.WIDTH_SELECT1_1(WS_GND),
.WIDTH_SELECT2_0(WS2_0),
.WIDTH_SELECT2_1(WS_GND),
.WEN1_0(wen_reg0[1:0]),
.WEN1_1({2{GND}}),
.Almost_Empty_0(),
.Almost_Empty_1(),
.Almost_Full_0(),
.Almost_Full_1(),
.POP_FLAG_0(),
.POP_FLAG_1(),
.PUSH_FLAG_0(),
.PUSH_FLAG_1(),
.RD_0({out_par0[1], out_reg0[15:8], out_par0[0], out_reg0[7:0]}),
.RD_1(),
.SD(SD),
.SD_RB1(SD_RB1),
.LS(LS),
.LS_RB1(LS_RB1),
.DS(DS),
.DS_RB1(DS_RB1),
.TEST1A(GND),
.TEST1B(GND),
.RMA(4'd0),
.RMB(4'd0),
.RMEA(GND),
.RMEB(GND)
);
assign RD[data_width_int-1 : 0] = {out_par0, out_reg0};
endmodule
module RAM_16K_BLK (
WA,
RA,
WD,
WClk,
RClk,
WClk_En,
RClk_En,
WEN,
RD
);
parameter addr_int = 9,
data_depth_int = 512,
data_width_int = 36,
wr_enable_int = 4,
reg_rd_int = 0;
parameter [16383:0] INIT = 16384'bx;
parameter INIT_FILE = "init.mem";
input [addr_int-1:0] WA;
input [addr_int-1:0] RA;
input WClk, RClk;
input WClk_En, RClk_En;
input [wr_enable_int-1:0] WEN;
input [data_width_int-1:0] WD;
output [data_width_int-1:0] RD;
wire VCC, GND;
wire WClk0_Sel, RClk0_Sel;
wire WClk1_Sel, RClk1_Sel;
wire reg_rd0;
wire reg_rd1;
wire [10:0] addr_wr0, addr_rd0, addr_wr1, addr_rd1;
wire [31:0] in_reg0;
wire [ 4:0] wen_reg0;
wire [31:0] out_reg0;
wire [ 3:0] out_par0;
wire [1:0] WS1_0, WS2_0;
wire [1:0] WS_GND;
wire LS, DS, SD, LS_RB1, DS_RB1, SD_RB1;
wire WD0_SEL, RD0_SEL;
wire WD1_SEL, RD1_SEL;
assign VCC = 1'b1;
assign GND = 1'b0;
assign WD0_SEL = 1'b1;
assign RD0_SEL = 1'b1;
assign WD1_SEL = 1'b1;
assign RD1_SEL = 1'b1;
assign WClk0_Sel = 1'b0;
assign RClk0_Sel = 1'b0;
assign WClk1_Sel = 1'b0;
assign RClk1_Sel = 1'b0;
assign LS = 1'b0;
assign DS = 1'b0;
assign SD = 1'b0;
assign LS_RB1 = 1'b0;
assign DS_RB1 = 1'b0;
assign SD_RB1 = 1'b0;
assign reg_rd0 = reg_rd_int;
assign WS_GND = 2'b00;
assign reg_rd1 = 1'b0;
assign wen_reg0[4:wr_enable_int] = 0;
assign wen_reg0[wr_enable_int-1:0] = WEN;
assign addr_wr1 = 11'b0000000000;
assign addr_rd1 = 11'b0000000000;
generate
if (addr_int == 11) begin
assign addr_wr0[10:0] = WA;
assign addr_rd0[10:0] = RA;
end else begin
assign addr_wr0[10:addr_int] = 0;
assign addr_wr0[addr_int-1:0] = WA;
assign addr_rd0[10:addr_int] = 0;
assign addr_rd0[addr_int-1:0] = RA;
end
if (data_width_int == 32) begin
assign in_reg0[data_width_int-1:0] = WD[data_width_int-1:0];
end else if (data_width_int > 8 && data_width_int < 32) begin
assign in_reg0[31:data_width_int] = 0;
assign in_reg0[data_width_int-1:0] = WD[data_width_int-1:0];
end else if (data_width_int <= 8) begin
assign in_reg0[31:data_width_int] = 0;
assign in_reg0[data_width_int-1:0] = WD[data_width_int-1:0];
end
if (data_width_int <= 8) begin
assign WS1_0 = 2'b00;
assign WS2_0 = 2'b00;
end else if (data_width_int > 8 && data_width_int <= 16) begin
assign WS1_0 = 2'b01;
assign WS2_0 = 2'b01;
end else if (data_width_int > 16) begin
assign WS1_0 = 2'b10;
assign WS2_0 = 2'b10;
end
if (data_width_int <= 16) begin
ram8k_2x1_cell_macro #(
.INIT(INIT)
) _TECHMAP_REPLACE_ (
.A1_0(addr_wr0),
.A1_1(addr_wr1),
.A2_0(addr_rd0),
.A2_1(addr_rd1),
.ASYNC_FLUSH_0(GND),
.ASYNC_FLUSH_1(GND),
.ASYNC_FLUSH_S0(GND),
.ASYNC_FLUSH_S1(GND),
.CLK1_0(WClk),
.CLK1_1(WClk),
.CLK1S_0(WClk0_Sel),
.CLK1S_1(WClk0_Sel),
.CLK1EN_0(WClk_En),
.CLK1EN_1(WClk_En),
.CLK2_0(RClk),
.CLK2_1(RClk),
.CLK2S_0(RClk0_Sel),
.CLK2S_1(RClk0_Sel),
.CLK2EN_0(RClk_En),
.CLK2EN_1(RClk_En),
.CONCAT_EN_0(VCC),
.CONCAT_EN_1(GND),
.CS1_0(WD0_SEL),
.CS1_1(GND),
.CS2_0(RD0_SEL),
.CS2_1(GND),
.DIR_0(GND),
.DIR_1(GND),
.FIFO_EN_0(GND),
.FIFO_EN_1(GND),
.P1_0(GND),
.P1_1(GND),
.P2_0(GND),
.P2_1(GND),
.PIPELINE_RD_0(reg_rd0),
.PIPELINE_RD_1(GND),
.SYNC_FIFO_0(GND),
.SYNC_FIFO_1(GND),
.WD_1({18{GND}}),
.WD_0({1'b0, in_reg0[15:8], 1'b0, in_reg0[7:0]}),
.WIDTH_SELECT1_0(WS1_0),
.WIDTH_SELECT1_1(WS_GND),
.WIDTH_SELECT2_0(WS2_0),
.WIDTH_SELECT2_1(WS_GND),
.WEN1_0(wen_reg0[1:0]),
.WEN1_1(wen_reg0[3:2]),
.Almost_Empty_0(),
.Almost_Empty_1(),
.Almost_Full_0(),
.Almost_Full_1(),
.POP_FLAG_0(),
.POP_FLAG_1(),
.PUSH_FLAG_0(),
.PUSH_FLAG_1(),
.RD_0({out_par0[1], out_reg0[15:8], out_par0[0], out_reg0[7:0]}),
.RD_1(),
.SD(SD),
.SD_RB1(SD_RB1),
.LS(LS),
.LS_RB1(LS_RB1),
.DS(DS),
.DS_RB1(DS_RB1),
.TEST1A(GND),
.TEST1B(GND),
.RMA(4'd0),
.RMB(4'd0),
.RMEA(GND),
.RMEB(GND)
);
end else if (data_width_int > 16) begin
ram8k_2x1_cell_macro #(
.INIT(INIT)
) _TECHMAP_REPLACE_ (
.A1_0(addr_wr0),
.A1_1(addr_wr1),
.A2_0(addr_rd0),
.A2_1(addr_rd1),
.ASYNC_FLUSH_0(GND),
.ASYNC_FLUSH_1(GND),
.ASYNC_FLUSH_S0(GND),
.ASYNC_FLUSH_S1(GND),
.CLK1_0(WClk),
.CLK1_1(WClk),
.CLK1S_0(WClk0_Sel),
.CLK1S_1(WClk0_Sel),
.CLK1EN_0(WClk_En),
.CLK1EN_1(WClk_En),
.CLK2_0(RClk),
.CLK2_1(RClk),
.CLK2S_0(RClk0_Sel),
.CLK2S_1(RClk0_Sel),
.CLK2EN_0(RClk_En),
.CLK2EN_1(RClk_En),
.CONCAT_EN_0(VCC),
.CONCAT_EN_1(GND),
.CS1_0(WD0_SEL),
.CS1_1(GND),
.CS2_0(RD0_SEL),
.CS2_1(GND),
.DIR_0(GND),
.DIR_1(GND),
.FIFO_EN_0(GND),
.FIFO_EN_1(GND),
.P1_0(GND),
.P1_1(GND),
.P2_0(GND),
.P2_1(GND),
.PIPELINE_RD_0(reg_rd0),
.PIPELINE_RD_1(GND),
.SYNC_FIFO_0(GND),
.SYNC_FIFO_1(GND),
.WD_1({1'b0, in_reg0[31:24], 1'b0, in_reg0[23:16]}),
.WD_0({1'b0, in_reg0[15:8], 1'b0, in_reg0[7:0]}),
.WIDTH_SELECT1_0(WS1_0),
.WIDTH_SELECT1_1(WS_GND),
.WIDTH_SELECT2_0(WS2_0),
.WIDTH_SELECT2_1(WS_GND),
.WEN1_0(wen_reg0[1:0]),
.WEN1_1(wen_reg0[3:2]),
.Almost_Empty_0(),
.Almost_Empty_1(),
.Almost_Full_0(),
.Almost_Full_1(),
.POP_FLAG_0(),
.POP_FLAG_1(),
.PUSH_FLAG_0(),
.PUSH_FLAG_1(),
.RD_0({out_par0[1], out_reg0[15:8], out_par0[0], out_reg0[7:0]}),
.RD_1({out_par0[3], out_reg0[31:24], out_par0[2], out_reg0[23:16]}),
.SD(SD),
.SD_RB1(SD_RB1),
.LS(LS),
.LS_RB1(LS_RB1),
.DS(DS),
.DS_RB1(DS_RB1),
.TEST1A(GND),
.TEST1B(GND),
.RMA(4'd0),
.RMB(4'd0),
.RMEA(GND),
.RMEB(GND)
);
end else begin
wire TECHMAP_FAIL = 1'b1;
end
endgenerate
assign RD[data_width_int-1 : 0] = {out_par0, out_reg0};
endmodule
module FIFO_8K_BLK (
DIN,
Fifo_Push_Flush,
Fifo_Pop_Flush,
PUSH,
POP,
Push_Clk,
Pop_Clk,
Push_Clk_En,
Pop_Clk_En,
Fifo_Dir,
Async_Flush,
Almost_Full,
Almost_Empty,
PUSH_FLAG,
POP_FLAG,
DOUT
);
parameter data_depth_int = 512, data_width_int = 18, reg_rd_int = 0, sync_fifo_int = 0;
input Fifo_Push_Flush, Fifo_Pop_Flush;
input Push_Clk, Pop_Clk;
input PUSH, POP;
input [data_width_int-1:0] DIN;
input Push_Clk_En, Pop_Clk_En, Fifo_Dir, Async_Flush;
output [data_width_int-1:0] DOUT;
output [3:0] PUSH_FLAG, POP_FLAG;
output Almost_Full, Almost_Empty;
wire LS, DS, SD, LS_RB1, DS_RB1, SD_RB1;
wire VCC, GND;
wire [10:0] addr_wr, addr_rd;
wire clk1_sig0, clk2_sig0, clk1_sig_en0, clk2_sig_en0, fifo_clk1_flush_sig0, fifo_clk2_flush_sig0, p1_sig0, p2_sig0,clk1_sig_sel0,clk2_sig_sel0;
wire reg_rd0, sync_fifo0;
wire [15:0] in_reg0;
wire [15:0] out_reg0;
wire [ 1:0] WS1_0;
wire [ 1:0] WS2_0;
wire Push_Clk0_Sel, Pop_Clk0_Sel;
wire Async_Flush_Sel0;
wire [1:0] out_par0;
assign LS = 1'b0;
assign DS = 1'b0;
assign SD = 1'b0;
assign LS_RB1 = 1'b0;
assign DS_RB1 = 1'b0;
assign SD_RB1 = 1'b0;
assign VCC = 1'b1;
assign GND = 1'b0;
assign Push_Clk0_Sel = 1'b0;
assign Pop_Clk0_Sel = 1'b0;
assign Async_Flush_Sel0 = 1'b0;
assign reg_rd0 = reg_rd_int;
assign sync_fifo0 = sync_fifo_int;
assign addr_wr=11'b00000000000;
assign addr_rd=11'b00000000000;
assign clk1_sig0 = Fifo_Dir ? Pop_Clk : Push_Clk;
assign clk2_sig0 = Fifo_Dir ? Push_Clk : Pop_Clk ;
assign clk1_sig_en0 = Fifo_Dir ? Pop_Clk_En : Push_Clk_En;
assign clk2_sig_en0 = Fifo_Dir ? Push_Clk_En : Pop_Clk_En ;
assign clk1_sig_sel0 = Push_Clk0_Sel;
assign clk2_sig_sel0 = Pop_Clk0_Sel ;
assign fifo_clk1_flush_sig0 = Fifo_Dir ? Fifo_Pop_Flush : Fifo_Push_Flush;
assign fifo_clk2_flush_sig0 = Fifo_Dir ? Fifo_Push_Flush : Fifo_Pop_Flush ;
assign p1_sig0 = Fifo_Dir ? POP : PUSH;
assign p2_sig0 = Fifo_Dir ? PUSH : POP ;
generate
if (data_width_int == 16) begin
assign in_reg0[data_width_int-1:0] = DIN[data_width_int-1:0];
end else if (data_width_int > 8 && data_width_int < 16) begin
assign in_reg0[15:data_width_int] = 0;
assign in_reg0[data_width_int-1:0] = DIN[data_width_int-1:0];
end else if (data_width_int <= 8) begin
assign in_reg0[15:data_width_int] = 0;
assign in_reg0[data_width_int-1:0] = DIN[data_width_int-1:0];
end
if (data_width_int <= 8) begin
assign WS1_0 = 2'b00;
assign WS2_0 = 2'b00;
end else if (data_width_int > 8 && data_width_int <= 16) begin
assign WS1_0 = 2'b01;
assign WS2_0 = 2'b01;
end else if (data_width_int > 16) begin
assign WS1_0 = 2'b10;
assign WS2_0 = 2'b10;
end
endgenerate
ram8k_2x1_cell_macro _TECHMAP_REPLACE_ (
.A1_0(addr_wr),
.A1_1(addr_wr),
.A2_0(addr_rd),
.A2_1(addr_rd),
.ASYNC_FLUSH_0(Async_Flush),
.ASYNC_FLUSH_1(GND),
.ASYNC_FLUSH_S0(Async_Flush_Sel0),
.ASYNC_FLUSH_S1(GND),
.CLK1_0(clk1_sig0),
.CLK1_1(GND),
.CLK1EN_0(clk1_sig_en0),
.CLK1EN_1(GND),
.CLK2_0(clk2_sig0),
.CLK2_1(GND),
.CLK1S_0(clk1_sig_sel0),
.CLK1S_1(GND),
.CLK2S_0(clk2_sig_sel0),
.CLK2S_1(GND),
.CLK2EN_0(clk2_sig_en0),
.CLK2EN_1(GND),
.CONCAT_EN_0(GND),
.CONCAT_EN_1(GND),
.CS1_0(fifo_clk1_flush_sig0),
.CS1_1(GND),
.CS2_0(fifo_clk2_flush_sig0),
.CS2_1(GND),
.DIR_0(Fifo_Dir),
.DIR_1(GND),
.FIFO_EN_0(VCC),
.FIFO_EN_1(GND),
.P1_0(p1_sig0),
.P1_1(GND),
.P2_0(p2_sig0),
.P2_1(GND),
.PIPELINE_RD_0(reg_rd0),
.PIPELINE_RD_1(GND),
.SYNC_FIFO_0(sync_fifo0),
.SYNC_FIFO_1(GND),
.WD_1({18{GND}}),
.WD_0({1'b0, in_reg0[15:8], 1'b0, in_reg0[7:0]}),
.WIDTH_SELECT1_0(WS1_0),
.WIDTH_SELECT1_1({GND, GND}),
.WIDTH_SELECT2_0(WS2_0),
.WIDTH_SELECT2_1({GND, GND}),
.WEN1_0({GND, GND}),
.WEN1_1({GND, GND}),
.Almost_Empty_0(Almost_Empty),
.Almost_Empty_1(),
.Almost_Full_0(Almost_Full),
.Almost_Full_1(),
.POP_FLAG_0(POP_FLAG),
.POP_FLAG_1(),
.PUSH_FLAG_0(PUSH_FLAG),
.PUSH_FLAG_1(),
.RD_0({out_par0[1], out_reg0[15:8], out_par0[0], out_reg0[7:0]}),
.RD_1(),
.SD(SD),
.SD_RB1(SD_RB1),
.LS(LS),
.LS_RB1(LS_RB1),
.DS(DS),
.DS_RB1(DS_RB1),
.TEST1A(GND),
.TEST1B(GND),
.RMA(4'd0),
.RMB(4'd0),
.RMEA(GND),
.RMEB(GND)
);
assign DOUT[data_width_int-1 : 0] = {out_par0, out_reg0};
endmodule
module FIFO_16K_BLK (
DIN,
Fifo_Push_Flush,
Fifo_Pop_Flush,
PUSH,
POP,
Push_Clk,
Pop_Clk,
Push_Clk_En,
Pop_Clk_En,
Fifo_Dir,
Async_Flush,
Almost_Full,
Almost_Empty,
PUSH_FLAG,
POP_FLAG,
DOUT
);
parameter data_depth_int = 512, data_width_int = 36, reg_rd_int = 0, sync_fifo_int = 0;
input Fifo_Push_Flush, Fifo_Pop_Flush;
input Push_Clk, Pop_Clk;
input PUSH, POP;
input [data_width_int-1:0] DIN;
input Push_Clk_En, Pop_Clk_En, Fifo_Dir, Async_Flush;
output [data_width_int-1:0] DOUT;
output [3:0] PUSH_FLAG, POP_FLAG;
output Almost_Full, Almost_Empty;
wire LS, DS, SD, LS_RB1, DS_RB1, SD_RB1;
wire VCC, GND;
wire [10:0] addr_wr, addr_rd;
wire clk1_sig0, clk2_sig0, clk1_sig_en0, clk2_sig_en0, fifo_clk1_flush_sig0, fifo_clk2_flush_sig0, p1_sig0, p2_sig0,clk1_sig_sel0,clk2_sig_sel0;
wire reg_rd0, sync_fifo0;
wire [31:0] in_reg0;
wire [31:0] out_reg0;
wire [ 1:0] WS1_0;
wire [ 1:0] WS2_0;
wire Push_Clk0_Sel, Pop_Clk0_Sel;
wire Async_Flush_Sel0;
wire [3:0] out_par0;
wire [1:0] out_par1;
assign LS = 1'b0;
assign DS = 1'b0;
assign SD = 1'b0;
assign LS_RB1 = 1'b0;
assign DS_RB1 = 1'b0;
assign SD_RB1 = 1'b0;
assign VCC = 1'b1;
assign GND = 1'b0;
assign Push_Clk0_Sel = 1'b0;
assign Pop_Clk0_Sel = 1'b0;
assign Async_Flush_Sel0 = 1'b0;
assign reg_rd0 = reg_rd_int;
assign sync_fifo0 = sync_fifo_int;
assign addr_wr=11'b00000000000;
assign addr_rd=11'b00000000000;
assign clk1_sig0 = Fifo_Dir ? Pop_Clk : Push_Clk;
assign clk2_sig0 = Fifo_Dir ? Push_Clk : Pop_Clk ;
assign clk1_sig_en0 = Fifo_Dir ? Pop_Clk_En : Push_Clk_En;
assign clk2_sig_en0 = Fifo_Dir ? Push_Clk_En : Pop_Clk_En ;
assign clk1_sig_sel0 = Push_Clk0_Sel;
assign clk2_sig_sel0 = Pop_Clk0_Sel ;
assign fifo_clk1_flush_sig0 = Fifo_Dir ? Fifo_Pop_Flush : Fifo_Push_Flush;
assign fifo_clk2_flush_sig0 = Fifo_Dir ? Fifo_Push_Flush : Fifo_Pop_Flush ;
assign p1_sig0 = Fifo_Dir ? POP : PUSH;
assign p2_sig0 = Fifo_Dir ? PUSH : POP ;
generate
if (data_width_int == 32) begin
assign in_reg0[data_width_int-1:0] = DIN[data_width_int-1:0];
end else if (data_width_int > 8 && data_width_int < 32) begin
assign in_reg0[31:data_width_int] = 0;
assign in_reg0[data_width_int-1:0] = DIN[data_width_int-1:0];
end else if (data_width_int <= 8) begin
assign in_reg0[31:data_width_int] = 0;
assign in_reg0[data_width_int-1:0] = DIN[data_width_int-1:0];
end
if (data_width_int <= 8) begin
assign WS1_0 = 2'b00;
assign WS2_0 = 2'b00;
end else if (data_width_int > 8 && data_width_int <= 16) begin
assign WS1_0 = 2'b01;
assign WS2_0 = 2'b01;
end else if (data_width_int > 16) begin
assign WS1_0 = 2'b10;
assign WS2_0 = 2'b10;
end
if (data_width_int <= 16) begin
ram8k_2x1_cell_macro _TECHMAP_REPLACE_ (
.A1_0(addr_wr),
.A1_1(addr_wr),
.A2_0(addr_rd),
.A2_1(addr_rd),
.ASYNC_FLUSH_0(Async_Flush),
.ASYNC_FLUSH_1(GND),
.ASYNC_FLUSH_S0(Async_Flush_Sel0),
.ASYNC_FLUSH_S1(Async_Flush_Sel0),
.CLK1_0(clk1_sig0),
.CLK1_1(clk1_sig0),
.CLK1EN_0(clk1_sig_en0),
.CLK1EN_1(clk1_sig_en0),
.CLK2_0(clk2_sig0),
.CLK2_1(clk2_sig0),
.CLK1S_0(clk1_sig_sel0),
.CLK1S_1(clk1_sig_sel0),
.CLK2S_0(clk2_sig_sel0),
.CLK2S_1(clk2_sig_sel0),
.CLK2EN_0(clk2_sig_en0),
.CLK2EN_1(clk2_sig_en0),
.CONCAT_EN_0(VCC),
.CONCAT_EN_1(GND),
.CS1_0(fifo_clk1_flush_sig0),
.CS1_1(GND),
.CS2_0(fifo_clk2_flush_sig0),
.CS2_1(GND),
.DIR_0(Fifo_Dir),
.DIR_1(GND),
.FIFO_EN_0(VCC),
.FIFO_EN_1(GND),
.P1_0(p1_sig0),
.P1_1(GND),
.P2_0(p2_sig0),
.P2_1(GND),
.PIPELINE_RD_0(reg_rd0),
.PIPELINE_RD_1(GND),
.SYNC_FIFO_0(sync_fifo0),
.SYNC_FIFO_1(GND),
.WD_1({18{GND}}),
.WD_0({1'b0, in_reg0[15:8], 1'b0, in_reg0[7:0]}),
.WIDTH_SELECT1_0(WS1_0),
.WIDTH_SELECT1_1({GND, GND}),
.WIDTH_SELECT2_0(WS2_0),
.WIDTH_SELECT2_1({GND, GND}),
.WEN1_0({GND, GND}),
.WEN1_1({GND, GND}),
.Almost_Empty_0(Almost_Empty),
.Almost_Empty_1(),
.Almost_Full_0(Almost_Full),
.Almost_Full_1(),
.POP_FLAG_0(POP_FLAG),
.POP_FLAG_1(),
.PUSH_FLAG_0(PUSH_FLAG),
.PUSH_FLAG_1(),
.RD_0({out_par0[1], out_reg0[15:8], out_par0[0], out_reg0[7:0]}),
.RD_1(),
.SD(SD),
.SD_RB1(SD_RB1),
.LS(LS),
.LS_RB1(LS_RB1),
.DS(DS),
.DS_RB1(DS_RB1),
.TEST1A(GND),
.TEST1B(GND),
.RMA(4'd0),
.RMB(4'd0),
.RMEA(GND),
.RMEB(GND)
);
end else if (data_width_int > 16) begin
ram8k_2x1_cell_macro _TECHMAP_REPLACE_ (
.A1_0(addr_wr),
.A1_1(addr_wr),
.A2_0(addr_rd),
.A2_1(addr_rd),
.ASYNC_FLUSH_0(Async_Flush),
.ASYNC_FLUSH_1(GND),
.ASYNC_FLUSH_S0(Async_Flush_Sel0),
.ASYNC_FLUSH_S1(Async_Flush_Sel0),
.CLK1_0(clk1_sig0),
.CLK1_1(clk1_sig0),
.CLK1EN_0(clk1_sig_en0),
.CLK1EN_1(clk1_sig_en0),
.CLK2_0(clk2_sig0),
.CLK2_1(clk2_sig0),
.CLK1S_0(clk1_sig_sel0),
.CLK1S_1(clk1_sig_sel0),
.CLK2S_0(clk2_sig_sel0),
.CLK2S_1(clk2_sig_sel0),
.CLK2EN_0(clk2_sig_en0),
.CLK2EN_1(clk2_sig_en0),
.CONCAT_EN_0(VCC),
.CONCAT_EN_1(GND),
.CS1_0(fifo_clk1_flush_sig0),
.CS1_1(GND),
.CS2_0(fifo_clk2_flush_sig0),
.CS2_1(GND),
.DIR_0(Fifo_Dir),
.DIR_1(GND),
.FIFO_EN_0(VCC),
.FIFO_EN_1(GND),
.P1_0(p1_sig0),
.P1_1(GND),
.P2_0(p2_sig0),
.P2_1(GND),
.PIPELINE_RD_0(reg_rd0),
.PIPELINE_RD_1(GND),
.SYNC_FIFO_0(sync_fifo0),
.SYNC_FIFO_1(GND),
.WD_1({1'b0, in_reg0[31:24], 1'b0, in_reg0[23:16]}),
.WD_0({1'b0, in_reg0[15:8], 1'b0, in_reg0[7:0]}),
.WIDTH_SELECT1_0(WS1_0),
.WIDTH_SELECT1_1({GND, GND}),
.WIDTH_SELECT2_0(WS2_0),
.WIDTH_SELECT2_1({GND, GND}),
.WEN1_0({GND, GND}),
.WEN1_1({GND, GND}),
.Almost_Empty_0(Almost_Empty),
.Almost_Empty_1(),
.Almost_Full_0(Almost_Full),
.Almost_Full_1(),
.POP_FLAG_0(POP_FLAG),
.POP_FLAG_1(),
.PUSH_FLAG_0(PUSH_FLAG),
.PUSH_FLAG_1(),
.RD_0({out_par0[1], out_reg0[15:8], out_par0[0], out_reg0[7:0]}),
.RD_1({out_par0[3], out_reg0[31:24], out_par0[2], out_reg0[23:16]}),
.SD(SD),
.SD_RB1(SD_RB1),
.LS(LS),
.LS_RB1(LS_RB1),
.DS(DS),
.DS_RB1(DS_RB1),
.TEST1A(GND),
.TEST1B(GND),
.RMA(4'd0),
.RMB(4'd0),
.RMEA(GND),
.RMEB(GND)
);
end
endgenerate
assign DOUT[data_width_int-1 : 0] = {out_par0, out_reg0};
endmodule