1 // Ultrascale and Ultrascale Plus block RAM mapping.
3 module \$__XILINX_RAMB36_SDP (CLK2, CLK3, A1ADDR, A1DATA, A1EN, B1ADDR, B1DATA, B1EN);
6 parameter [36863:0] INIT = 36864'bx;
19 wire [15:0] A1ADDR_16 = {A1ADDR, 6'b0};
20 wire [15:0] B1ADDR_16 = {B1ADDR, 6'b0};
25 assign A1DATA = { DOP[7], DO[63:56], DOP[6], DO[55:48], DOP[5], DO[47:40], DOP[4], DO[39:32],
26 DOP[3], DO[31:24], DOP[2], DO[23:16], DOP[1], DO[15: 8], DOP[0], DO[ 7: 0] };
28 assign { DIP[7], DI[63:56], DIP[6], DI[55:48], DIP[5], DI[47:40], DIP[4], DI[39:32],
29 DIP[3], DI[31:24], DIP[2], DI[23:16], DIP[1], DI[15: 8], DIP[0], DI[ 7: 0] } = B1DATA;
34 .WRITE_MODE_A("READ_FIRST"),
35 .WRITE_MODE_B("READ_FIRST"),
38 .IS_CLKARDCLK_INVERTED(!CLKPOL2),
39 .IS_CLKBWRCLK_INVERTED(!CLKPOL3),
40 `include "brams_init_36.vh"
42 .DOUTBDOUT(DO[63:32]),
44 .DOUTPBDOUTP(DOP[7:4]),
45 .DOUTPADOUTP(DOP[3:0]),
51 .ADDRARDADDR(A1ADDR_16),
60 .ADDRBWRADDR(B1ADDR_16),
73 // ------------------------------------------------------------------------
75 module \$__XILINX_RAMB18_SDP (CLK2, CLK3, A1ADDR, A1DATA, A1EN, B1ADDR, B1DATA, B1EN);
76 parameter CLKPOL2 = 1;
77 parameter CLKPOL3 = 1;
78 parameter [18431:0] INIT = 18432'bx;
91 wire [13:0] A1ADDR_14 = {A1ADDR, 5'b0};
92 wire [13:0] B1ADDR_14 = {B1ADDR, 5'b0};
97 assign A1DATA = { DOP[3], DO[31:24], DOP[2], DO[23:16], DOP[1], DO[15: 8], DOP[0], DO[ 7: 0] };
98 assign { DIP[3], DI[31:24], DIP[2], DI[23:16], DIP[1], DI[15: 8], DIP[0], DI[ 7: 0] } = B1DATA;
103 .WRITE_MODE_A("READ_FIRST"),
104 .WRITE_MODE_B("READ_FIRST"),
107 .IS_CLKARDCLK_INVERTED(!CLKPOL2),
108 .IS_CLKBWRCLK_INVERTED(!CLKPOL3),
109 `include "brams_init_18.vh"
110 ) _TECHMAP_REPLACE_ (
111 .DOUTBDOUT(DO[31:16]),
112 .DOUTADOUT(DO[15:0]),
113 .DOUTPBDOUTP(DOP[3:2]),
114 .DOUTPADOUTP(DOP[1:0]),
117 .DINPBDINP(DIP[3:2]),
118 .DINPADINP(DIP[1:0]),
120 .ADDRARDADDR(A1ADDR_14),
129 .ADDRBWRADDR(B1ADDR_14),
142 // ------------------------------------------------------------------------
144 module \$__XILINX_RAMB36_TDP (CLK2, CLK3, A1ADDR, A1DATA, A1EN, B1ADDR, B1DATA, B1EN);
145 parameter CFG_ABITS = 10;
146 parameter CFG_DBITS = 36;
147 parameter CFG_ENABLE_B = 4;
149 parameter CLKPOL2 = 1;
150 parameter CLKPOL3 = 1;
151 parameter [36863:0] INIT = 36864'bx;
156 input [CFG_ABITS-1:0] A1ADDR;
157 output [CFG_DBITS-1:0] A1DATA;
160 input [CFG_ABITS-1:0] B1ADDR;
161 input [CFG_DBITS-1:0] B1DATA;
162 input [CFG_ENABLE_B-1:0] B1EN;
164 wire [15:0] A1ADDR_16 = A1ADDR << (15 - CFG_ABITS);
165 wire [15:0] B1ADDR_16 = B1ADDR << (15 - CFG_ABITS);
166 wire [7:0] B1EN_8 = B1EN;
174 assign A1DATA = { DOP[3], DO[31:24], DOP[2], DO[23:16], DOP[1], DO[15: 8], DOP[0], DO[ 7: 0] };
175 assign { DIP[3], DI[31:24], DIP[2], DI[23:16], DIP[1], DI[15: 8], DIP[0], DI[ 7: 0] } = B1DATA;
177 generate if (CFG_DBITS > 8) begin
179 .READ_WIDTH_A(CFG_DBITS),
180 .READ_WIDTH_B(CFG_DBITS),
181 .WRITE_WIDTH_A(CFG_DBITS),
182 .WRITE_WIDTH_B(CFG_DBITS),
183 .WRITE_MODE_A("READ_FIRST"),
184 .WRITE_MODE_B("READ_FIRST"),
187 .IS_CLKARDCLK_INVERTED(!CLKPOL2),
188 .IS_CLKBWRCLK_INVERTED(!CLKPOL3),
189 `include "brams_init_36.vh"
190 ) _TECHMAP_REPLACE_ (
191 .DINADIN(32'hFFFFFFFF),
193 .DOUTADOUT(DO[31:0]),
194 .DOUTPADOUTP(DOP[3:0]),
195 .ADDRARDADDR(A1ADDR_16),
207 .DOUTPBDOUTP(DOPBDOP),
208 .ADDRBWRADDR(B1ADDR_16),
221 .READ_WIDTH_A(CFG_DBITS),
222 .READ_WIDTH_B(CFG_DBITS),
223 .WRITE_WIDTH_A(CFG_DBITS),
224 .WRITE_WIDTH_B(CFG_DBITS),
225 .WRITE_MODE_A("READ_FIRST"),
226 .WRITE_MODE_B("READ_FIRST"),
229 .IS_CLKARDCLK_INVERTED(!CLKPOL2),
230 .IS_CLKBWRCLK_INVERTED(!CLKPOL3),
231 `include "brams_init_32.vh"
232 ) _TECHMAP_REPLACE_ (
233 .DINADIN(32'hFFFFFFFF),
235 .DOUTADOUT(DO[31:0]),
236 .DOUTPADOUTP(DOP[3:0]),
237 .ADDRARDADDR(A1ADDR_16),
249 .DOUTPBDOUTP(DOPBDOP),
250 .ADDRBWRADDR(B1ADDR_16),
264 // ------------------------------------------------------------------------
266 module \$__XILINX_RAMB18_TDP (CLK2, CLK3, A1ADDR, A1DATA, A1EN, B1ADDR, B1DATA, B1EN);
267 parameter CFG_ABITS = 10;
268 parameter CFG_DBITS = 18;
269 parameter CFG_ENABLE_B = 2;
271 parameter CLKPOL2 = 1;
272 parameter CLKPOL3 = 1;
273 parameter [18431:0] INIT = 18432'bx;
278 input [CFG_ABITS-1:0] A1ADDR;
279 output [CFG_DBITS-1:0] A1DATA;
282 input [CFG_ABITS-1:0] B1ADDR;
283 input [CFG_DBITS-1:0] B1DATA;
284 input [CFG_ENABLE_B-1:0] B1EN;
286 wire [13:0] A1ADDR_14 = A1ADDR << (14 - CFG_ABITS);
287 wire [13:0] B1ADDR_14 = B1ADDR << (14 - CFG_ABITS);
288 wire [3:0] B1EN_4 = B1EN;
296 assign A1DATA = { DOP[1], DO[15: 8], DOP[0], DO[ 7: 0] };
297 assign { DIP[1], DI[15: 8], DIP[0], DI[ 7: 0] } = B1DATA;
299 generate if (CFG_DBITS > 8) begin
301 .READ_WIDTH_A(CFG_DBITS),
302 .READ_WIDTH_B(CFG_DBITS),
303 .WRITE_WIDTH_A(CFG_DBITS),
304 .WRITE_WIDTH_B(CFG_DBITS),
305 .WRITE_MODE_A("READ_FIRST"),
306 .WRITE_MODE_B("READ_FIRST"),
309 .IS_CLKARDCLK_INVERTED(!CLKPOL2),
310 .IS_CLKBWRCLK_INVERTED(!CLKPOL3),
311 `include "brams_init_18.vh"
312 ) _TECHMAP_REPLACE_ (
317 .ADDRARDADDR(A1ADDR_14),
329 .DOUTPBDOUTP(DOPBDOP),
330 .ADDRBWRADDR(B1ADDR_14),
344 .READ_WIDTH_A(CFG_DBITS),
345 .READ_WIDTH_B(CFG_DBITS),
346 .WRITE_WIDTH_A(CFG_DBITS),
347 .WRITE_WIDTH_B(CFG_DBITS),
348 .WRITE_MODE_A("READ_FIRST"),
349 .WRITE_MODE_B("READ_FIRST"),
352 .IS_CLKARDCLK_INVERTED(!CLKPOL2),
353 .IS_CLKBWRCLK_INVERTED(!CLKPOL3),
354 `include "brams_init_16.vh"
355 ) _TECHMAP_REPLACE_ (
360 .ADDRARDADDR(A1ADDR_14),
372 .DOUTPBDOUTP(DOPBDOP),
373 .ADDRBWRADDR(B1ADDR_14),