2024-03-13 12:19:41 -05:00
|
|
|
module $__NX_RAM_ (...);
|
|
|
|
|
|
|
|
parameter INIT = 0;
|
2024-05-17 08:59:18 -05:00
|
|
|
parameter OPTION_STD_MODE = "";
|
2024-03-13 12:19:41 -05:00
|
|
|
|
2024-05-17 08:59:18 -05:00
|
|
|
parameter WIDTH = 24;
|
2024-03-13 12:19:41 -05:00
|
|
|
parameter PORT_A_CLK_POL = 1;
|
|
|
|
|
|
|
|
input PORT_A_CLK;
|
|
|
|
input PORT_A_CLK_EN;
|
|
|
|
input PORT_A_WR_EN;
|
2024-05-17 08:59:18 -05:00
|
|
|
input [15:0] PORT_A_ADDR;
|
|
|
|
input [WIDTH-1:0] PORT_A_WR_DATA;
|
|
|
|
wire [24-1:0] A_DATA;
|
|
|
|
output [WIDTH-1:0] PORT_A_RD_DATA;
|
2024-03-13 12:19:41 -05:00
|
|
|
|
|
|
|
parameter PORT_B_CLK_POL = 1;
|
|
|
|
|
|
|
|
input PORT_B_CLK;
|
|
|
|
input PORT_B_CLK_EN;
|
|
|
|
input PORT_B_WR_EN;
|
2024-05-17 08:59:18 -05:00
|
|
|
input [15:0] PORT_B_ADDR;
|
|
|
|
input [WIDTH-1:0] PORT_B_WR_DATA;
|
|
|
|
wire [24-1:0] B_DATA;
|
|
|
|
output [WIDTH-1:0] PORT_B_RD_DATA;
|
|
|
|
|
|
|
|
generate
|
|
|
|
if (OPTION_STD_MODE == "NOECC_48kx1") begin
|
|
|
|
assign A_DATA = {24{PORT_A_WR_DATA[WIDTH-1:0]}};
|
|
|
|
assign B_DATA = {24{PORT_B_WR_DATA[WIDTH-1:0]}};
|
|
|
|
end
|
|
|
|
else if (OPTION_STD_MODE == "NOECC_24kx2") begin
|
|
|
|
assign A_DATA = {12{PORT_A_WR_DATA[WIDTH-1:0]}};
|
|
|
|
assign B_DATA = {12{PORT_B_WR_DATA[WIDTH-1:0]}};
|
|
|
|
end
|
|
|
|
else if (OPTION_STD_MODE == "NOECC_16kx3") begin
|
|
|
|
assign A_DATA = {8{PORT_A_WR_DATA[WIDTH-1:0]}};
|
|
|
|
assign B_DATA = {8{PORT_B_WR_DATA[WIDTH-1:0]}};
|
|
|
|
end
|
|
|
|
else if (OPTION_STD_MODE == "NOECC_12kx4") begin
|
|
|
|
assign A_DATA = {6{PORT_A_WR_DATA[WIDTH-1:0]}};
|
|
|
|
assign B_DATA = {6{PORT_B_WR_DATA[WIDTH-1:0]}};
|
|
|
|
end
|
|
|
|
else if (OPTION_STD_MODE == "NOECC_8kx6") begin
|
|
|
|
assign A_DATA = {4{PORT_A_WR_DATA[WIDTH-1:0]}};
|
|
|
|
assign B_DATA = {4{PORT_B_WR_DATA[WIDTH-1:0]}};
|
|
|
|
end
|
|
|
|
else if (OPTION_STD_MODE == "NOECC_6kx8") begin
|
|
|
|
assign A_DATA = {3{PORT_A_WR_DATA[WIDTH-1:0]}};
|
|
|
|
assign B_DATA = {3{PORT_B_WR_DATA[WIDTH-1:0]}};
|
|
|
|
end
|
|
|
|
else if (OPTION_STD_MODE == "NOECC_4kx12") begin
|
|
|
|
assign A_DATA = {2{PORT_A_WR_DATA[WIDTH-1:0]}};
|
|
|
|
assign B_DATA = {2{PORT_B_WR_DATA[WIDTH-1:0]}};
|
|
|
|
end
|
|
|
|
else if (OPTION_STD_MODE == "NOECC_2kx24") begin
|
|
|
|
assign A_DATA = PORT_A_WR_DATA;
|
|
|
|
assign B_DATA = PORT_B_WR_DATA;
|
|
|
|
end
|
|
|
|
endgenerate
|
2024-03-13 12:19:41 -05:00
|
|
|
|
2024-04-24 04:28:03 -05:00
|
|
|
NX_RAM_WRAP #(
|
2024-05-17 08:59:18 -05:00
|
|
|
.std_mode(OPTION_STD_MODE),
|
|
|
|
.mcka_edge(PORT_A_CLK_POL == 1 ? 1'b0 : 1'b1),
|
|
|
|
.mckb_edge(PORT_B_CLK_POL == 1 ? 1'b0 : 1'b1),
|
2024-04-24 04:28:03 -05:00
|
|
|
) _TECHMAP_REPLACE_ (
|
|
|
|
.ACK(PORT_A_CLK),
|
2024-05-17 08:59:18 -05:00
|
|
|
//.ACKS(PORT_A_CLK),
|
|
|
|
//.ACKD(), // Not used in Non-ECC modes
|
|
|
|
//.ACKR(),
|
|
|
|
//.AR(),
|
|
|
|
//.ACOR(),
|
|
|
|
//.AERR(),
|
|
|
|
.ACS(PORT_A_CLK_EN),
|
|
|
|
.AWE(PORT_A_WR_EN),
|
|
|
|
|
2024-04-24 04:28:03 -05:00
|
|
|
.AA(PORT_A_ADDR),
|
2024-05-17 08:59:18 -05:00
|
|
|
.AI(A_DATA),
|
2024-04-24 04:28:03 -05:00
|
|
|
.AO(PORT_A_RD_DATA),
|
|
|
|
|
|
|
|
.BCK(PORT_B_CLK),
|
2024-05-17 08:59:18 -05:00
|
|
|
//.BCKC(PORT_B_CLK),
|
|
|
|
//.BCKD(), // Not used in Non-ECC modes
|
|
|
|
//.BCKR()
|
|
|
|
//.BR(),
|
|
|
|
//.BCOR(),
|
|
|
|
//.BERR(),
|
|
|
|
.BCS(PORT_B_CLK_EN),
|
|
|
|
.BWE(PORT_B_WR_EN),
|
|
|
|
.BA(B_DATA),
|
2024-04-24 04:28:03 -05:00
|
|
|
.BI(PORT_B_WR_DATA),
|
|
|
|
.BO(PORT_B_RD_DATA)
|
|
|
|
);
|
2024-03-13 12:19:41 -05:00
|
|
|
endmodule
|