blob: 70383336e4d611af160b4a864181ab111a870a52 [file] [log] [blame]
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;
assign VCC = 1'b1;
assign 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 "pp3_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 "pp3_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;
assign GND = 1'b0;
assign 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 "pp3_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_reg0[data_width_int-1 :0];
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_reg0[data_width_int-1 :0];
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 = 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 [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_reg0[data_width_int-1 :0];
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_reg0[data_width_int-1 :0];
endmodule