mirror of https://github.com/YosysHQ/yosys.git
178 lines
3.1 KiB
Verilog
178 lines
3.1 KiB
Verilog
// LUT RAMs for Virtex, Virtex 2, Spartan 3, Virtex 4.
|
|
// The corresponding definition file is lutrams_xcv.txt
|
|
|
|
module $__XILINX_LUTRAM_SP_ (...);
|
|
|
|
parameter INIT = 0;
|
|
parameter OPTION_ABITS = 4;
|
|
|
|
output PORT_RW_RD_DATA;
|
|
input PORT_RW_WR_DATA;
|
|
input [OPTION_ABITS-1:0] PORT_RW_ADDR;
|
|
input PORT_RW_WR_EN;
|
|
input PORT_RW_CLK;
|
|
|
|
generate
|
|
case(OPTION_ABITS)
|
|
4: RAM16X1S
|
|
#(
|
|
.INIT(INIT),
|
|
)
|
|
_TECHMAP_REPLACE_
|
|
(
|
|
.A0(PORT_RW_ADDR[0]),
|
|
.A1(PORT_RW_ADDR[1]),
|
|
.A2(PORT_RW_ADDR[2]),
|
|
.A3(PORT_RW_ADDR[3]),
|
|
.D(PORT_RW_WR_DATA),
|
|
.O(PORT_RW_RD_DATA),
|
|
.WE(PORT_RW_WR_EN),
|
|
.WCLK(PORT_RW_CLK),
|
|
);
|
|
5: RAM32X1S
|
|
#(
|
|
.INIT(INIT),
|
|
)
|
|
_TECHMAP_REPLACE_
|
|
(
|
|
.A0(PORT_RW_ADDR[0]),
|
|
.A1(PORT_RW_ADDR[1]),
|
|
.A2(PORT_RW_ADDR[2]),
|
|
.A3(PORT_RW_ADDR[3]),
|
|
.A4(PORT_RW_ADDR[4]),
|
|
.D(PORT_RW_WR_DATA),
|
|
.O(PORT_RW_RD_DATA),
|
|
.WE(PORT_RW_WR_EN),
|
|
.WCLK(PORT_RW_CLK),
|
|
);
|
|
6: RAM64X1S
|
|
#(
|
|
.INIT(INIT),
|
|
)
|
|
_TECHMAP_REPLACE_
|
|
(
|
|
.A0(PORT_RW_ADDR[0]),
|
|
.A1(PORT_RW_ADDR[1]),
|
|
.A2(PORT_RW_ADDR[2]),
|
|
.A3(PORT_RW_ADDR[3]),
|
|
.A4(PORT_RW_ADDR[4]),
|
|
.A5(PORT_RW_ADDR[5]),
|
|
.D(PORT_RW_WR_DATA),
|
|
.O(PORT_RW_RD_DATA),
|
|
.WE(PORT_RW_WR_EN),
|
|
.WCLK(PORT_RW_CLK),
|
|
);
|
|
7: RAM128X1S
|
|
#(
|
|
.INIT(INIT),
|
|
)
|
|
_TECHMAP_REPLACE_
|
|
(
|
|
.A0(PORT_RW_ADDR[0]),
|
|
.A1(PORT_RW_ADDR[1]),
|
|
.A2(PORT_RW_ADDR[2]),
|
|
.A3(PORT_RW_ADDR[3]),
|
|
.A4(PORT_RW_ADDR[4]),
|
|
.A5(PORT_RW_ADDR[5]),
|
|
.A6(PORT_RW_ADDR[6]),
|
|
.D(PORT_RW_WR_DATA),
|
|
.O(PORT_RW_RD_DATA),
|
|
.WE(PORT_RW_WR_EN),
|
|
.WCLK(PORT_RW_CLK),
|
|
);
|
|
default:
|
|
$error("invalid OPTION_ABITS");
|
|
endcase
|
|
endgenerate
|
|
|
|
endmodule
|
|
|
|
module $__XILINX_LUTRAM_DP_ (...);
|
|
|
|
parameter INIT = 0;
|
|
parameter OPTION_ABITS = 4;
|
|
|
|
output PORT_RW_RD_DATA;
|
|
input PORT_RW_WR_DATA;
|
|
input [OPTION_ABITS-1:0] PORT_RW_ADDR;
|
|
input PORT_RW_WR_EN;
|
|
input PORT_RW_CLK;
|
|
|
|
output PORT_R_RD_DATA;
|
|
input [OPTION_ABITS-1:0] PORT_R_ADDR;
|
|
|
|
generate
|
|
case (OPTION_ABITS)
|
|
4: RAM16X1D
|
|
#(
|
|
.INIT(INIT),
|
|
)
|
|
_TECHMAP_REPLACE_
|
|
(
|
|
.A0(PORT_RW_ADDR[0]),
|
|
.A1(PORT_RW_ADDR[1]),
|
|
.A2(PORT_RW_ADDR[2]),
|
|
.A3(PORT_RW_ADDR[3]),
|
|
.D(PORT_RW_WR_DATA),
|
|
.SPO(PORT_RW_RD_DATA),
|
|
.WE(PORT_RW_WR_EN),
|
|
.WCLK(PORT_RW_CLK),
|
|
.DPRA0(PORT_R_ADDR[0]),
|
|
.DPRA1(PORT_R_ADDR[1]),
|
|
.DPRA2(PORT_R_ADDR[2]),
|
|
.DPRA3(PORT_R_ADDR[3]),
|
|
.DPO(PORT_R_RD_DATA),
|
|
);
|
|
5: RAM32X1D
|
|
#(
|
|
.INIT(INIT),
|
|
)
|
|
_TECHMAP_REPLACE_
|
|
(
|
|
.A0(PORT_RW_ADDR[0]),
|
|
.A1(PORT_RW_ADDR[1]),
|
|
.A2(PORT_RW_ADDR[2]),
|
|
.A3(PORT_RW_ADDR[3]),
|
|
.A4(PORT_RW_ADDR[4]),
|
|
.D(PORT_RW_WR_DATA),
|
|
.SPO(PORT_RW_RD_DATA),
|
|
.WE(PORT_RW_WR_EN),
|
|
.WCLK(PORT_RW_CLK),
|
|
.DPRA0(PORT_R_ADDR[0]),
|
|
.DPRA1(PORT_R_ADDR[1]),
|
|
.DPRA2(PORT_R_ADDR[2]),
|
|
.DPRA3(PORT_R_ADDR[3]),
|
|
.DPRA4(PORT_R_ADDR[4]),
|
|
.DPO(PORT_R_RD_DATA),
|
|
);
|
|
6: RAM64X1D
|
|
#(
|
|
.INIT(INIT),
|
|
)
|
|
_TECHMAP_REPLACE_
|
|
(
|
|
.A0(PORT_RW_ADDR[0]),
|
|
.A1(PORT_RW_ADDR[1]),
|
|
.A2(PORT_RW_ADDR[2]),
|
|
.A3(PORT_RW_ADDR[3]),
|
|
.A4(PORT_RW_ADDR[4]),
|
|
.A5(PORT_RW_ADDR[5]),
|
|
.D(PORT_RW_WR_DATA),
|
|
.SPO(PORT_RW_RD_DATA),
|
|
.WE(PORT_RW_WR_EN),
|
|
.WCLK(PORT_RW_CLK),
|
|
.DPRA0(PORT_R_ADDR[0]),
|
|
.DPRA1(PORT_R_ADDR[1]),
|
|
.DPRA2(PORT_R_ADDR[2]),
|
|
.DPRA3(PORT_R_ADDR[3]),
|
|
.DPRA4(PORT_R_ADDR[4]),
|
|
.DPRA5(PORT_R_ADDR[5]),
|
|
.DPO(PORT_R_RD_DATA),
|
|
);
|
|
default:
|
|
$error("invalid OPTION_ABITS");
|
|
endcase
|
|
endgenerate
|
|
|
|
endmodule
|