|  | /* | 
|  | SLICEM at the following: | 
|  | SLICE_XxY* | 
|  | Where Y any value | 
|  | x | 
|  | Always even (ie 100, 102, 104, etc) | 
|  | In our ROI | 
|  | x = 6, 8, 10, 12, 14 | 
|  |  | 
|  | SRL16E: LOC + BEL | 
|  | SRLC32E: LOC + BEL | 
|  | RAM64X1S: LOCs but doesn't BEL (or maybe I'm using the wrong BEL?) | 
|  | */ | 
|  |  | 
|  | module top(input clk, stb, di, output do); | 
|  | localparam integer DIN_N = 256; | 
|  | localparam integer DOUT_N = 256; | 
|  |  | 
|  | reg [DIN_N-1:0] din; | 
|  | wire [DOUT_N-1:0] dout; | 
|  |  | 
|  | reg [DIN_N-1:0] din_shr; | 
|  | reg [DOUT_N-1:0] dout_shr; | 
|  |  | 
|  | always @(posedge clk) begin | 
|  | din_shr <= {din_shr, di}; | 
|  | dout_shr <= {dout_shr, din_shr[DIN_N-1]}; | 
|  | if (stb) begin | 
|  | din <= din_shr; | 
|  | dout_shr <= dout; | 
|  | end | 
|  | end | 
|  |  | 
|  | assign do = dout_shr[DOUT_N-1]; | 
|  |  | 
|  | roi roi ( | 
|  | .clk(clk), | 
|  | .din(din), | 
|  | .dout(dout) | 
|  | ); | 
|  | endmodule | 
|  |  | 
|  | /* | 
|  | Using UG474 recommended primitives | 
|  | */ | 
|  | module roi(input clk, input [255:0] din, output [255:0] dout); | 
|  | my_RAM32X1S #(.LOC("SLICE_X12Y100")) | 
|  | c0(.clk(clk), .din(din[  0 +: 8]), .dout(dout[  0 +: 8])); | 
|  | my_RAM32X1D #(.LOC("SLICE_X12Y101")) | 
|  | c1(.clk(clk), .din(din[  8 +: 8]), .dout(dout[  8 +: 8])); | 
|  | my_RAM32M #(.LOC("SLICE_X12Y102")) | 
|  | c2(.clk(clk), .din(din[  16 +: 8]), .dout(dout[  16 +: 8])); | 
|  | my_RAM64X1S #(.LOC("SLICE_X12Y103")) | 
|  | c3(.clk(clk), .din(din[  24 +: 8]), .dout(dout[  24 +: 8])); | 
|  | my_RAM64X1D #(.LOC("SLICE_X12Y104")) | 
|  | c4(.clk(clk), .din(din[  32 +: 8]), .dout(dout[  32 +: 8])); | 
|  | my_RAM64M #(.LOC("SLICE_X12Y105")) | 
|  | c5(.clk(clk), .din(din[  40 +: 8]), .dout(dout[  40 +: 8])); | 
|  | my_RAM128X1S #(.LOC("SLICE_X12Y106")) | 
|  | c6(.clk(clk), .din(din[  48 +: 8]), .dout(dout[  48 +: 8])); | 
|  | my_RAM128X1D #(.LOC("SLICE_X12Y107")) | 
|  | c7(.clk(clk), .din(din[  56 +: 8]), .dout(dout[  56 +: 8])); | 
|  | my_RAM256X1S #(.LOC("SLICE_X12Y108")) | 
|  | c8(.clk(clk), .din(din[  64 +: 8]), .dout(dout[  64 +: 8])); | 
|  |  | 
|  | //Multi-packing | 
|  | my_RAM32X1S_2 #(.LOC("SLICE_X12Y110")) | 
|  | m0(.clk(clk), .din(din[  72 +: 8]), .dout(dout[  72 +: 8])); | 
|  | my_RAM32X1S_3 #(.LOC("SLICE_X12Y111")) | 
|  | m1(.clk(clk), .din(din[  80 +: 8]), .dout(dout[  80 +: 8])); | 
|  | my_RAM32X1S_4 #(.LOC("SLICE_X12Y112")) | 
|  | m2(.clk(clk), .din(din[  88 +: 8]), .dout(dout[  88 +: 8])); | 
|  | my_RAM64X1D_2 #(.LOC("SLICE_X12Y113")) | 
|  | m3(.clk(clk), .din(din[  96 +: 8]), .dout(dout[  96 +: 8])); | 
|  | //next round | 
|  | my_RAM64X1S_2 #(.LOC("SLICE_X12Y114")) | 
|  | m4(.clk(clk), .din(din[  104 +: 8]), .dout(dout[  104 +: 8])); | 
|  | my_RAM64X1S_3 #(.LOC("SLICE_X12Y115")) | 
|  | m5(.clk(clk), .din(din[  112 +: 8]), .dout(dout[  112 +: 8])); | 
|  | my_RAM64X1S_4 #(.LOC("SLICE_X12Y116")) | 
|  | m6(.clk(clk), .din(din[  120 +: 8]), .dout(dout[  120 +: 8])); | 
|  | //...and out of bits | 
|  | my_RAM128X1S_2 #(.LOC("SLICE_X12Y117")) | 
|  | m7(.clk(clk), .din(din[  200 +: 8]), .dout(dout[  200 +: 8])); | 
|  |  | 
|  | my_SRLC32E #(.LOC("SLICE_X14Y100"), .BEL("A6LUT")) | 
|  | s0(.clk(clk), .din(din[  128 +: 8]), .dout(dout[  128 +: 8])); | 
|  | my_SRLC32E #(.LOC("SLICE_X14Y101"), .BEL("B6LUT")) | 
|  | s1(.clk(clk), .din(din[  136 +: 8]), .dout(dout[  136 +: 8])); | 
|  | my_SRLC32E #(.LOC("SLICE_X14Y102"), .BEL("C6LUT")) | 
|  | s2(.clk(clk), .din(din[  144 +: 8]), .dout(dout[  144 +: 8])); | 
|  | my_SRLC32E #(.LOC("SLICE_X14Y103"), .BEL("D6LUT")) | 
|  | s3(.clk(clk), .din(din[  152 +: 8]), .dout(dout[  152 +: 8])); | 
|  | my_SRL16E #(.LOC("SLICE_X14Y104"), .BEL("A6LUT")) | 
|  | s4(.clk(clk), .din(din[  160 +: 8]), .dout(dout[  160 +: 8])); | 
|  | my_SRL16E #(.LOC("SLICE_X14Y105"), .BEL("B6LUT")) | 
|  | s5(.clk(clk), .din(din[  168 +: 8]), .dout(dout[  168 +: 8])); | 
|  | my_SRL16E #(.LOC("SLICE_X14Y106"), .BEL("C6LUT")) | 
|  | s6(.clk(clk), .din(din[  176 +: 8]), .dout(dout[  176 +: 8])); | 
|  | my_SRL16E #(.LOC("SLICE_X14Y107"), .BEL("D6LUT")) | 
|  | s7(.clk(clk), .din(din[  184 +: 8]), .dout(dout[  184 +: 8])); | 
|  | //my_SRL16E_8 #(.LOC("SLICE_X14Y108")) | 
|  | //        s8(.clk(clk), .din(din[  192 +: 8]), .dout(dout[  192 +: 8])); | 
|  | endmodule | 
|  |  | 
|  |  | 
|  | //It created a LUT instead of aggregating using WA7MUX | 
|  | module my_RAM64X1S_2_mux (input clk, input [7:0] din, output [7:0] dout); | 
|  | parameter LOC = ""; | 
|  |  | 
|  | assign dout[0] = din[0] ? oa : ob; | 
|  |  | 
|  | (* LOC=LOC, KEEP, DONT_TOUCH *) | 
|  | RAM64X1S #( | 
|  | ) ramb ( | 
|  | .O(ob), | 
|  | .A0(din[0]), | 
|  | .A1(din[0]), | 
|  | .A2(din[0]), | 
|  | .A3(din[0]), | 
|  | .A4(din[0]), | 
|  | .A5(din[0]), | 
|  | .D(din[0]), | 
|  | .WCLK(clk), | 
|  | .WE(din[0])); | 
|  |  | 
|  | (* LOC=LOC, KEEP, DONT_TOUCH *) | 
|  | RAM64X1S #( | 
|  | ) rama ( | 
|  | .O(oa), | 
|  | .A0(din[0]), | 
|  | .A1(din[0]), | 
|  | .A2(din[0]), | 
|  | .A3(din[0]), | 
|  | .A4(din[0]), | 
|  | .A5(din[0]), | 
|  | .D(din[0]), | 
|  | .WCLK(clk), | 
|  | .WE(din[0])); | 
|  | endmodule | 
|  |  | 
|  | module my_SRL16E_4 (input clk, input [7:0] din, output [7:0] dout); | 
|  | parameter LOC = ""; | 
|  |  | 
|  | (* LOC=LOC, BEL="D6LUT" *) | 
|  | SRL16E #( | 
|  | ) lutd ( | 
|  | .Q(dout[3]), | 
|  | .A0(din[0]), | 
|  | .A1(din[1]), | 
|  | .A2(din[2]), | 
|  | .A3(din[3]), | 
|  | .CE(din[4]), | 
|  | .CLK(din[5]), | 
|  | .D(din[6])); | 
|  |  | 
|  | (* LOC=LOC, BEL="C6LUT" *) | 
|  | SRL16E #( | 
|  | ) lutc ( | 
|  | .Q(dout[2]), | 
|  | .A0(din[0]), | 
|  | .A1(din[1]), | 
|  | .A2(din[2]), | 
|  | .A3(din[3]), | 
|  | .CE(din[4]), | 
|  | .CLK(din[5]), | 
|  | .D(din[6])); | 
|  |  | 
|  | (* LOC=LOC, BEL="B6LUT" *) | 
|  | SRL16E #( | 
|  | ) lutb ( | 
|  | .Q(dout[1]), | 
|  | .A0(din[0]), | 
|  | .A1(din[1]), | 
|  | .A2(din[2]), | 
|  | .A3(din[3]), | 
|  | .CE(din[4]), | 
|  | .CLK(din[5]), | 
|  | .D(din[6])); | 
|  |  | 
|  | (* LOC=LOC, BEL="A6LUT" *) | 
|  | SRL16E #( | 
|  | ) luta ( | 
|  | .Q(dout[0]), | 
|  | .A0(din[0]), | 
|  | .A1(din[1]), | 
|  | .A2(din[2]), | 
|  | .A3(din[3]), | 
|  | .CE(din[4]), | 
|  | .CLK(din[5]), | 
|  | .D(din[6])); | 
|  | endmodule | 
|  |  | 
|  | module my_SRL16E_8 (input clk, input [7:0] din, output [7:0] dout); | 
|  | parameter LOC = ""; | 
|  |  | 
|  | (* LOC=LOC, BEL="D6LUT" *) | 
|  | SRL16E #( | 
|  | ) lutd2 ( | 
|  | .Q(dout[7]), | 
|  | .A0(din[0]), | 
|  | .A1(din[1]), | 
|  | .A2(din[2]), | 
|  | .A3(din[3]), | 
|  | .CE(din[4]), | 
|  | .CLK(din[5]), | 
|  | .D(din[6])); | 
|  | (* LOC=LOC, BEL="D6LUT" *) | 
|  | SRL16E #( | 
|  | ) lutd1 ( | 
|  | .Q(dout[6]), | 
|  | .A0(din[0]), | 
|  | .A1(din[1]), | 
|  | .A2(din[2]), | 
|  | .A3(din[3]), | 
|  | .CE(din[4]), | 
|  | .CLK(din[5]), | 
|  | .D(din[6])); | 
|  | endmodule | 
|  |  | 
|  | module my_SRLC32E_4 (input clk, input [7:0] din, output [7:0] dout); | 
|  | parameter LOC = ""; | 
|  |  | 
|  | (* LOC=LOC, BEL="D6LUT", KEEP, DONT_TOUCH *) | 
|  | SRLC32E #( | 
|  | .INIT(32'h00000000), | 
|  | .IS_CLK_INVERTED(1'b0) | 
|  | ) lutd ( | 
|  | .Q(dout[3]), | 
|  | .Q31(), | 
|  | .A(din[4:0]), | 
|  | .CE(din[5]), | 
|  | .CLK(din[6]), | 
|  | .D(din[7])); | 
|  |  | 
|  | (* LOC=LOC, BEL="C6LUT", KEEP, DONT_TOUCH *) | 
|  | SRLC32E #( | 
|  | .INIT(32'h00000000), | 
|  | .IS_CLK_INVERTED(1'b0) | 
|  | ) lutc ( | 
|  | .Q(dout[2]), | 
|  | .Q31(), | 
|  | .A(din[4:0]), | 
|  | .CE(din[5]), | 
|  | .CLK(din[6]), | 
|  | .D(din[7])); | 
|  |  | 
|  | (* LOC=LOC, BEL="B6LUT", KEEP, DONT_TOUCH *) | 
|  | SRLC32E #( | 
|  | .INIT(32'h00000000), | 
|  | .IS_CLK_INVERTED(1'b0) | 
|  | ) lutb ( | 
|  | .Q(dout[1]), | 
|  | .Q31(), | 
|  | .A(din[4:0]), | 
|  | .CE(din[5]), | 
|  | .CLK(din[6]), | 
|  | .D(din[7])); | 
|  |  | 
|  | (* LOC=LOC, BEL="A6LUT", KEEP, DONT_TOUCH *) | 
|  | SRLC32E #( | 
|  | .INIT(32'h00000000), | 
|  | .IS_CLK_INVERTED(1'b0) | 
|  | ) luta ( | 
|  | .Q(dout[0]), | 
|  | .Q31(), | 
|  | .A(din[4:0]), | 
|  | .CE(din[5]), | 
|  | .CLK(din[6]), | 
|  | .D(din[7])); | 
|  | endmodule | 
|  |  | 
|  | module my_RAM32X1S_2 (input clk, input [7:0] din, output [7:0] dout); | 
|  | parameter LOC = ""; | 
|  |  | 
|  | (* LOC=LOC *) | 
|  | RAM32X1S #( | 
|  | ) lutd ( | 
|  | .O(dout[3]), | 
|  | .A0(din[0]), | 
|  | .A1(din[1]), | 
|  | .A2(din[2]), | 
|  | .A3(din[3]), | 
|  | .A4(din[4]), | 
|  | .D(din[5]), | 
|  | .WCLK(din[6]), | 
|  | .WE(din[7])); | 
|  |  | 
|  | (* LOC=LOC *) | 
|  | RAM32X1S #( | 
|  | ) lutc ( | 
|  | .O(dout[2]), | 
|  | .A0(din[0]), | 
|  | .A1(din[1]), | 
|  | .A2(din[2]), | 
|  | .A3(din[3]), | 
|  | .A4(din[4]), | 
|  | .D(din[5]), | 
|  | .WCLK(din[6]), | 
|  | .WE(din[7])); | 
|  | endmodule | 
|  |  | 
|  | module my_RAM32X1S_3 (input clk, input [7:0] din, output [7:0] dout); | 
|  | parameter LOC = ""; | 
|  |  | 
|  | (* LOC=LOC *) | 
|  | RAM32X1S #( | 
|  | ) lutd ( | 
|  | .O(dout[3]), | 
|  | .A0(din[0]), | 
|  | .A1(din[1]), | 
|  | .A2(din[2]), | 
|  | .A3(din[3]), | 
|  | .A4(din[4]), | 
|  | .D(din[5]), | 
|  | .WCLK(din[6]), | 
|  | .WE(din[7])); | 
|  |  | 
|  | (* LOC=LOC *) | 
|  | RAM32X1S #( | 
|  | ) lutc ( | 
|  | .O(dout[2]), | 
|  | .A0(din[0]), | 
|  | .A1(din[1]), | 
|  | .A2(din[2]), | 
|  | .A3(din[3]), | 
|  | .A4(din[4]), | 
|  | .D(din[5]), | 
|  | .WCLK(din[6]), | 
|  | .WE(din[7])); | 
|  |  | 
|  | (* LOC=LOC *) | 
|  | RAM32X1S #( | 
|  | ) lutb ( | 
|  | .O(dout[1]), | 
|  | .A0(din[0]), | 
|  | .A1(din[1]), | 
|  | .A2(din[2]), | 
|  | .A3(din[3]), | 
|  | .A4(din[4]), | 
|  | .D(din[5]), | 
|  | .WCLK(din[6]), | 
|  | .WE(din[7])); | 
|  | endmodule | 
|  |  | 
|  | module my_RAM32X1S_4 (input clk, input [7:0] din, output [7:0] dout); | 
|  | parameter LOC = ""; | 
|  |  | 
|  | (* LOC=LOC *) | 
|  | RAM32X1S #( | 
|  | ) lutd ( | 
|  | .O(dout[3]), | 
|  | .A0(din[0]), | 
|  | .A1(din[1]), | 
|  | .A2(din[2]), | 
|  | .A3(din[3]), | 
|  | .A4(din[4]), | 
|  | .D(din[5]), | 
|  | .WCLK(din[6]), | 
|  | .WE(din[7])); | 
|  |  | 
|  | (* LOC=LOC *) | 
|  | RAM32X1S #( | 
|  | ) lutc ( | 
|  | .O(dout[2]), | 
|  | .A0(din[0]), | 
|  | .A1(din[1]), | 
|  | .A2(din[2]), | 
|  | .A3(din[3]), | 
|  | .A4(din[4]), | 
|  | .D(din[5]), | 
|  | .WCLK(din[6]), | 
|  | .WE(din[7])); | 
|  |  | 
|  | (* LOC=LOC *) | 
|  | RAM32X1S #( | 
|  | ) lutb ( | 
|  | .O(dout[1]), | 
|  | .A0(din[0]), | 
|  | .A1(din[1]), | 
|  | .A2(din[2]), | 
|  | .A3(din[3]), | 
|  | .A4(din[4]), | 
|  | .D(din[5]), | 
|  | .WCLK(din[6]), | 
|  | .WE(din[7])); | 
|  |  | 
|  | (* LOC=LOC *) | 
|  | RAM32X1S #( | 
|  | ) luta ( | 
|  | .O(dout[0]), | 
|  | .A0(din[0]), | 
|  | .A1(din[1]), | 
|  | .A2(din[2]), | 
|  | .A3(din[3]), | 
|  | .A4(din[4]), | 
|  | .D(din[5]), | 
|  | .WCLK(din[6]), | 
|  | .WE(din[7])); | 
|  | endmodule | 
|  |  | 
|  | module my_RAM64X1S_2 (input clk, input [7:0] din, output [7:0] dout); | 
|  | parameter LOC = ""; | 
|  |  | 
|  | (* LOC=LOC *) | 
|  | RAM64X1S #( | 
|  | ) lutd ( | 
|  | .O(dout[3]), | 
|  | .A0(din[0]), | 
|  | .A1(din[1]), | 
|  | .A2(din[2]), | 
|  | .A3(din[3]), | 
|  | .A4(din[4]), | 
|  | .A5(din[5]), | 
|  | .D(din[6]), | 
|  | .WCLK(clk), | 
|  | .WE(din[0])); | 
|  |  | 
|  | (* LOC=LOC *) | 
|  | RAM64X1S #( | 
|  | ) lutc ( | 
|  | .O(dout[2]), | 
|  | .A0(din[0]), | 
|  | .A1(din[1]), | 
|  | .A2(din[2]), | 
|  | .A3(din[3]), | 
|  | .A4(din[4]), | 
|  | .A5(din[5]), | 
|  | .D(din[6]), | 
|  | .WCLK(clk), | 
|  | .WE(din[0])); | 
|  | endmodule | 
|  |  | 
|  | module my_RAM64X1S_3 (input clk, input [7:0] din, output [7:0] dout); | 
|  | parameter LOC = ""; | 
|  |  | 
|  | (* LOC=LOC *) | 
|  | RAM64X1S #( | 
|  | ) lutd ( | 
|  | .O(dout[3]), | 
|  | .A0(din[0]), | 
|  | .A1(din[1]), | 
|  | .A2(din[2]), | 
|  | .A3(din[3]), | 
|  | .A4(din[4]), | 
|  | .A5(din[5]), | 
|  | .D(din[6]), | 
|  | .WCLK(clk), | 
|  | .WE(din[0])); | 
|  |  | 
|  | (* LOC=LOC *) | 
|  | RAM64X1S #( | 
|  | ) lutc ( | 
|  | .O(dout[2]), | 
|  | .A0(din[0]), | 
|  | .A1(din[1]), | 
|  | .A2(din[2]), | 
|  | .A3(din[3]), | 
|  | .A4(din[4]), | 
|  | .A5(din[5]), | 
|  | .D(din[6]), | 
|  | .WCLK(clk), | 
|  | .WE(din[0])); | 
|  |  | 
|  | (* LOC=LOC *) | 
|  | RAM64X1S #( | 
|  | ) lutb ( | 
|  | .O(dout[1]), | 
|  | .A0(din[0]), | 
|  | .A1(din[1]), | 
|  | .A2(din[2]), | 
|  | .A3(din[3]), | 
|  | .A4(din[4]), | 
|  | .A5(din[5]), | 
|  | .D(din[6]), | 
|  | .WCLK(clk), | 
|  | .WE(din[0])); | 
|  | endmodule | 
|  |  | 
|  | module my_RAM64X1S_4 (input clk, input [7:0] din, output [7:0] dout); | 
|  | parameter LOC = ""; | 
|  |  | 
|  | (* LOC=LOC *) | 
|  | RAM64X1S #( | 
|  | ) lutd ( | 
|  | .O(dout[3]), | 
|  | .A0(din[0]), | 
|  | .A1(din[1]), | 
|  | .A2(din[2]), | 
|  | .A3(din[3]), | 
|  | .A4(din[4]), | 
|  | .A5(din[5]), | 
|  | .D(din[6]), | 
|  | .WCLK(clk), | 
|  | .WE(din[0])); | 
|  |  | 
|  | (* LOC=LOC *) | 
|  | RAM64X1S #( | 
|  | ) lutc ( | 
|  | .O(dout[2]), | 
|  | .A0(din[0]), | 
|  | .A1(din[1]), | 
|  | .A2(din[2]), | 
|  | .A3(din[3]), | 
|  | .A4(din[4]), | 
|  | .A5(din[5]), | 
|  | .D(din[6]), | 
|  | .WCLK(clk), | 
|  | .WE(din[0])); | 
|  |  | 
|  | (* LOC=LOC *) | 
|  | RAM64X1S #( | 
|  | ) lutb ( | 
|  | .O(dout[1]), | 
|  | .A0(din[0]), | 
|  | .A1(din[1]), | 
|  | .A2(din[2]), | 
|  | .A3(din[3]), | 
|  | .A4(din[4]), | 
|  | .A5(din[5]), | 
|  | .D(din[6]), | 
|  | .WCLK(clk), | 
|  | .WE(din[0])); | 
|  |  | 
|  | (* LOC=LOC *) | 
|  | RAM64X1S #( | 
|  | ) luta ( | 
|  | .O(dout[0]), | 
|  | .A0(din[0]), | 
|  | .A1(din[1]), | 
|  | .A2(din[2]), | 
|  | .A3(din[3]), | 
|  | .A4(din[4]), | 
|  | .A5(din[5]), | 
|  | .D(din[6]), | 
|  | .WCLK(clk), | 
|  | .WE(din[0])); | 
|  | endmodule | 
|  |  | 
|  | module my_RAM64X1D_2 (input clk, input [7:0] din, output [7:0] dout); | 
|  | parameter LOC = ""; | 
|  |  | 
|  | (* LOC=LOC, KEEP, DONT_TOUCH *) | 
|  | RAM64X1D #( | 
|  | .INIT(64'h0), | 
|  | .IS_WCLK_INVERTED(1'b0) | 
|  | ) ramb ( | 
|  | .DPO(dout[1]), | 
|  | .D(din[0]), | 
|  | .WCLK(clk), | 
|  | .WE(din[2]), | 
|  | .A0(din[3]), | 
|  | .A1(din[4]), | 
|  | .A2(din[5]), | 
|  | .A3(din[6]), | 
|  | .A4(din[7]), | 
|  | .A5(din[0]), | 
|  | .DPRA0(din[1]), | 
|  | .DPRA1(din[2]), | 
|  | .DPRA2(din[3]), | 
|  | .DPRA3(din[4]), | 
|  | .DPRA4(din[5]), | 
|  | .DPRA5(din[6])); | 
|  |  | 
|  | (* LOC=LOC, KEEP, DONT_TOUCH *) | 
|  | RAM64X1D #( | 
|  | .INIT(64'h0), | 
|  | .IS_WCLK_INVERTED(1'b0) | 
|  | ) rama ( | 
|  | .DPO(dout[0]), | 
|  | .D(din[0]), | 
|  | .WCLK(clk), | 
|  | .WE(din[2]), | 
|  | .A0(din[3]), | 
|  | .A1(din[4]), | 
|  | .A2(din[5]), | 
|  | .A3(din[6]), | 
|  | .A4(din[7]), | 
|  | .A5(din[0]), | 
|  | .DPRA0(din[1]), | 
|  | .DPRA1(din[2]), | 
|  | .DPRA2(din[3]), | 
|  | .DPRA3(din[4]), | 
|  | .DPRA4(din[5]), | 
|  | .DPRA5(din[6])); | 
|  | endmodule | 
|  |  | 
|  | //BEL: yes | 
|  | module my_SRLC32E (input clk, input [7:0] din, output [7:0] dout); | 
|  | parameter LOC = ""; | 
|  | parameter BEL="A6LUT"; | 
|  |  | 
|  | wire mc31c; | 
|  |  | 
|  | (* LOC=LOC, BEL=BEL, KEEP, DONT_TOUCH *) | 
|  | SRLC32E #( | 
|  | .INIT(32'h00000000), | 
|  | .IS_CLK_INVERTED(1'b0) | 
|  | ) lut ( | 
|  | .Q(dout[0]), | 
|  | .Q31(mc31c), | 
|  | .A(din[4:0]), | 
|  | .CE(din[5]), | 
|  | .CLK(din[6]), | 
|  | .D(din[7])); | 
|  | endmodule | 
|  |  | 
|  |  | 
|  | //BEL: yes | 
|  | module my_SRL16E (input clk, input [7:0] din, output [7:0] dout); | 
|  | parameter LOC = ""; | 
|  | parameter BEL="A6LUT"; | 
|  |  | 
|  | (* LOC=LOC, BEL=BEL, KEEP, DONT_TOUCH *) | 
|  | SRL16E #( | 
|  | ) SRL16E ( | 
|  | .Q(dout[0]), | 
|  | .A0(din[0]), | 
|  | .A1(din[1]), | 
|  | .A2(din[2]), | 
|  | .A3(din[3]), | 
|  | .CE(din[4]), | 
|  | .CLK(din[5]), | 
|  | .D(din[6])); | 
|  | endmodule | 
|  |  | 
|  | module my_RAM64M (input clk, input [7:0] din, output [7:0] dout); | 
|  | parameter LOC = ""; | 
|  | parameter BEL="A6LUT"; | 
|  |  | 
|  | (* LOC=LOC, BEL=BEL, KEEP, DONT_TOUCH *) | 
|  | RAM64M #( | 
|  | ) RAM64M ( | 
|  | .DOA(dout[0]), | 
|  | .DOB(dout[1]), | 
|  | .DOC(dout[2]), | 
|  | .DOD(dout[3]), | 
|  | .ADDRA(din[0]), | 
|  | .ADDRB(din[1]), | 
|  | .ADDRC(din[2]), | 
|  | .ADDRD(din[3]), | 
|  | .DIA(din[4]), | 
|  | .DIB(din[5]), | 
|  | .DIC(din[6]), | 
|  | .DID(din[7]), | 
|  | .WCLK(clk), | 
|  | .WE(din[1])); | 
|  | endmodule | 
|  |  | 
|  | //Can't get BEL to work. Maybe can't since multiple? | 
|  | module my_RAM64X1S (input clk, input [7:0] din, output [7:0] dout); | 
|  | parameter LOC = ""; | 
|  | parameter BEL="A6LUT"; | 
|  |  | 
|  | (* LOC=LOC, BEL=BEL, KEEP, DONT_TOUCH *) | 
|  | RAM64X1S #( | 
|  | ) RAM64X1S ( | 
|  | .O(dout[0]), | 
|  | .A0(din[0]), | 
|  | .A1(din[1]), | 
|  | .A2(din[2]), | 
|  | .A3(din[3]), | 
|  | .A4(din[4]), | 
|  | .A5(din[5]), | 
|  | .D(din[6]), | 
|  | .WCLK(clk), | 
|  | .WE(din[0])); | 
|  | endmodule | 
|  |  | 
|  | module my_RAM64X1S_1 (input clk, input [7:0] din, output [7:0] dout); | 
|  | parameter LOC = ""; | 
|  | parameter BEL="A6LUT"; | 
|  |  | 
|  | (* LOC=LOC, BEL=BEL, KEEP, DONT_TOUCH *) | 
|  | RAM64X1S_1 #( | 
|  | ) RAM64X1S_1 ( | 
|  | .O(dout[0]), | 
|  | .A0(din[0]), | 
|  | .A1(din[1]), | 
|  | .A2(din[2]), | 
|  | .A3(din[3]), | 
|  | .A4(din[4]), | 
|  | .A5(din[5]), | 
|  | .D(din[6]), | 
|  | .WCLK(clk), | 
|  | .WE(din[0])); | 
|  | endmodule | 
|  |  | 
|  | module my_RAM64X2S (input clk, input [7:0] din, output [7:0] dout); | 
|  | parameter LOC = ""; | 
|  |  | 
|  | (* LOC=LOC, KEEP, DONT_TOUCH *) | 
|  | RAM64X2S #( | 
|  | ) RAM64X2S ( | 
|  | .O0(dout[0]), | 
|  | .O1(dout[1]), | 
|  | .A0(din[0]), | 
|  | .A1(din[1]), | 
|  | .A2(din[2]), | 
|  | .A3(din[3]), | 
|  | .A4(din[4]), | 
|  | .A5(din[5]), | 
|  | .D0(din[6]), | 
|  | .D1(din[7]), | 
|  | .WCLK(clk), | 
|  | .WE(din[1])); | 
|  | endmodule | 
|  |  | 
|  | module my_RAM64X1D (input clk, input [7:0] din, output [7:0] dout); | 
|  | parameter LOC = ""; | 
|  |  | 
|  | (* LOC=LOC, KEEP, DONT_TOUCH *) | 
|  | RAM64X1D #( | 
|  | .INIT(64'h0), | 
|  | .IS_WCLK_INVERTED(1'b0) | 
|  | ) RAM64X1D ( | 
|  | .DPO(dout[0]), | 
|  | .D(din[0]), | 
|  | .WCLK(clk), | 
|  | .WE(din[2]), | 
|  | .A0(din[3]), | 
|  | .A1(din[4]), | 
|  | .A2(din[5]), | 
|  | .A3(din[6]), | 
|  | .A4(din[7]), | 
|  | .A5(din[0]), | 
|  | .DPRA0(din[1]), | 
|  | .DPRA1(din[2]), | 
|  | .DPRA2(din[3]), | 
|  | .DPRA3(din[4]), | 
|  | .DPRA4(din[5]), | 
|  | .DPRA5(din[6])); | 
|  | endmodule | 
|  |  | 
|  | module my_RAM128X1D (input clk, input [7:0] din, output [7:0] dout); | 
|  | parameter LOC = ""; | 
|  |  | 
|  | (* LOC=LOC, KEEP, DONT_TOUCH *) | 
|  | RAM128X1D #( | 
|  | .INIT(128'h0), | 
|  | .IS_WCLK_INVERTED(1'b0) | 
|  | ) RAM128X1D ( | 
|  | .DPO(dout[0]), | 
|  | .SPO(dout[1]), | 
|  | .D(din[0]), | 
|  | .WCLK(clk), | 
|  | .WE(din[2])); | 
|  | endmodule | 
|  |  | 
|  | module my_RAM128X1S (input clk, input [7:0] din, output [7:0] dout); | 
|  | parameter LOC = ""; | 
|  |  | 
|  | (* LOC=LOC, KEEP, DONT_TOUCH *) | 
|  | RAM128X1S #( | 
|  | ) RAM128X1S ( | 
|  | .O(dout[0]), | 
|  | .A0(din[0]), | 
|  | .A1(din[1]), | 
|  | .A2(din[2]), | 
|  | .A3(din[3]), | 
|  | .A4(din[4]), | 
|  | .A5(din[5]), | 
|  | .A6(din[6]), | 
|  | .D(din[7]), | 
|  | .WCLK(din[0]), | 
|  | .WE(din[1])); | 
|  | endmodule | 
|  |  | 
|  | module my_RAM128X1S_2 (input clk, input [7:0] din, output [7:0] dout); | 
|  | parameter LOC = ""; | 
|  |  | 
|  | (* LOC=LOC, KEEP, DONT_TOUCH *) | 
|  | RAM128X1S #( | 
|  | ) lutb ( | 
|  | .O(dout[1]), | 
|  | .A0(din[0]), | 
|  | .A1(din[1]), | 
|  | .A2(din[2]), | 
|  | .A3(din[3]), | 
|  | .A4(din[4]), | 
|  | .A5(din[5]), | 
|  | .A6(din[6]), | 
|  | .D(din[7]), | 
|  | .WCLK(din[0]), | 
|  | .WE(din[1])); | 
|  | (* LOC=LOC, KEEP, DONT_TOUCH *) | 
|  | RAM128X1S #( | 
|  | ) luta ( | 
|  | .O(dout[0]), | 
|  | .A0(din[0]), | 
|  | .A1(din[1]), | 
|  | .A2(din[2]), | 
|  | .A3(din[3]), | 
|  | .A4(din[4]), | 
|  | .A5(din[5]), | 
|  | .A6(din[6]), | 
|  | .D(din[7]), | 
|  | .WCLK(din[0]), | 
|  | .WE(din[1])); | 
|  | endmodule | 
|  |  | 
|  | module my_RAM256X1S (input clk, input [7:0] din, output [7:0] dout); | 
|  | parameter LOC = ""; | 
|  |  | 
|  | (* LOC=LOC, KEEP, DONT_TOUCH *) | 
|  | RAM256X1S #( | 
|  | ) RAM256X1S ( | 
|  | .O(dout[0]), | 
|  | .A({din[0], din[7:0]}), | 
|  | .D(din[0]), | 
|  | .WCLK(din[1]), | 
|  | .WE(din[2])); | 
|  | endmodule | 
|  |  | 
|  | module my_RAM32M (input clk, input [7:0] din, output [7:0] dout); | 
|  | parameter LOC = ""; | 
|  |  | 
|  | (* LOC=LOC, KEEP, DONT_TOUCH *) | 
|  | RAM32M #( | 
|  | ) RAM32M ( | 
|  | .DOA(dout[1:0]), | 
|  | .DOB(dout[3:2]), | 
|  | .DOC(dout[5:4]), | 
|  | .DOD(dout[7:6]), | 
|  | .ADDRA(din[4:0]), | 
|  | .ADDRB(din[4:0]), | 
|  | .ADDRC(din[4:0]), | 
|  | .ADDRD(din[4:0]), | 
|  | .DIA(din[5:4]), | 
|  | .DIB(din[6:5]), | 
|  | .DIC(din[7:6]), | 
|  | .DID(din[1:0]), | 
|  | .WCLK(din[1]), | 
|  | .WE(din[2])); | 
|  | endmodule | 
|  |  | 
|  | module my_RAM32X1D (input clk, input [7:0] din, output [7:0] dout); | 
|  | parameter LOC = ""; | 
|  |  | 
|  | (* LOC=LOC, KEEP, DONT_TOUCH *) | 
|  | RAM32X1D #( | 
|  | ) RAM32X1D ( | 
|  | .DPO(dout[0]), | 
|  | .SPO(dout[1]), | 
|  | .A0(din[0]), | 
|  | .A1(din[1]), | 
|  | .A2(din[2]), | 
|  | .A3(din[3]), | 
|  | .A4(din[4]), | 
|  | .D(din[5]), | 
|  | .DPRA0(din[6]), | 
|  | .DPRA1(din[7]), | 
|  | .DPRA2(din[0]), | 
|  | .DPRA3(din[1]), | 
|  | .DPRA4(din[2]), | 
|  | .WCLK(din[3]), | 
|  | .WE(din[4])); | 
|  | endmodule | 
|  |  | 
|  | /* | 
|  | Invalid | 
|  | It tries to place both at D6LUT | 
|  | module my_RAM32X1D_2 (input clk, input [7:0] din, output [7:0] dout); | 
|  | parameter LOC = ""; | 
|  |  | 
|  | (* LOC=LOC, KEEP, DONT_TOUCH *) | 
|  | RAM32X1D #( | 
|  | ) lutb ( | 
|  | .DPO(dout[3]), | 
|  | .SPO(dout[2]), | 
|  | .A0(din[0]), | 
|  | .A1(din[1]), | 
|  | .A2(din[2]), | 
|  | .A3(din[3]), | 
|  | .A4(din[4]), | 
|  | .D(din[5]), | 
|  | .DPRA0(din[6]), | 
|  | .DPRA1(din[7]), | 
|  | .DPRA2(din[0]), | 
|  | .DPRA3(din[1]), | 
|  | .DPRA4(din[2]), | 
|  | .WCLK(din[3]), | 
|  | .WE(din[4])); | 
|  |  | 
|  | (* LOC=LOC, KEEP, DONT_TOUCH *) | 
|  | RAM32X1D #( | 
|  | ) luta ( | 
|  | .DPO(dout[1]), | 
|  | .SPO(dout[0]), | 
|  | .A0(din[0]), | 
|  | .A1(din[1]), | 
|  | .A2(din[2]), | 
|  | .A3(din[3]), | 
|  | .A4(din[4]), | 
|  | .D(din[5]), | 
|  | .DPRA0(din[6]), | 
|  | .DPRA1(din[7]), | 
|  | .DPRA2(din[0]), | 
|  | .DPRA3(din[1]), | 
|  | .DPRA4(din[2]), | 
|  | .WCLK(din[3]), | 
|  | .WE(din[4])); | 
|  | endmodule | 
|  | */ | 
|  |  | 
|  | module my_RAM32X1S (input clk, input [7:0] din, output [7:0] dout); | 
|  | parameter LOC = ""; | 
|  | parameter BEL="A6LUT"; | 
|  |  | 
|  | (* LOC=LOC, BEL=BEL, KEEP, DONT_TOUCH *) | 
|  | RAM32X1S #( | 
|  | ) RAM32X1S ( | 
|  | .O(dout[0]), | 
|  | .A0(din[0]), | 
|  | .A1(din[1]), | 
|  | .A2(din[2]), | 
|  | .A3(din[3]), | 
|  | .A4(din[4]), | 
|  | .D(din[5]), | 
|  | .WCLK(din[6]), | 
|  | .WE(din[7])); | 
|  | endmodule | 
|  |  | 
|  | module my_RAM32X1S_1 (input clk, input [7:0] din, output [7:0] dout); | 
|  | parameter LOC = ""; | 
|  | parameter BEL="A6LUT"; | 
|  |  | 
|  | (* LOC=LOC, BEL=BEL, KEEP, DONT_TOUCH *) | 
|  | RAM32X1S_1 #( | 
|  | ) RAM32X1S_1 ( | 
|  | .O(dout[0]), | 
|  | .A0(din[0]), | 
|  | .A1(din[1]), | 
|  | .A2(din[2]), | 
|  | .A3(din[3]), | 
|  | .A4(din[4]), | 
|  | .D(din[5]), | 
|  | .WCLK(din[6]), | 
|  | .WE(din[7])); | 
|  | endmodule | 
|  |  | 
|  | module my_RAM32X2S (input clk, input [7:0] din, output [7:0] dout); | 
|  | parameter LOC = ""; | 
|  |  | 
|  | (* LOC=LOC, KEEP, DONT_TOUCH *) | 
|  | RAM32X2S #( | 
|  | ) RAM32X2S ( | 
|  | .O0(dout[0]), | 
|  | .O1(dout[1]), | 
|  | .A0(din[0]), | 
|  | .A1(din[1]), | 
|  | .A2(din[2]), | 
|  | .A3(din[3]), | 
|  | .A4(din[4]), | 
|  | .D0(din[5]), | 
|  | .D1(din[6]), | 
|  | .WCLK(din[7]), | 
|  | .WE(din[0])); | 
|  | endmodule | 
|  |  |