| //move some stuff to minitests/ncy0 | 
 |  | 
 | 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 | 
 |  | 
 | module roi(input clk, input [255:0] din, output [255:0] dout); | 
 |     parameter N=3; | 
 |  | 
 |     //ok | 
 |     clb_NOUTMUX_CY #(.LOC("SLICE_X18Y100"), .N(N)) | 
 |             clb_NOUTMUX_CY       (.clk(clk), .din(din[  8 +: 8]), .dout(dout[  8 +: 8])); | 
 |     //ok | 
 |     generate | 
 |         if (N != 3) begin | 
 |             clb_NOUTMUX_F78 #(.LOC("SLICE_X18Y101"), .N(N)) | 
 |                     clb_NOUTMUX_F78       (.clk(clk), .din(din[  16 +: 8]), .dout(dout[  16 +: 8])); | 
 |         end | 
 |     endgenerate | 
 |     //ok | 
 |     clb_NOUTMUX_O5 #(.LOC("SLICE_X18Y102"), .N(N)) | 
 |             clb_NOUTMUX_O5       (.clk(clk), .din(din[  32 +: 8]), .dout(dout[  32 +: 8])); | 
 |     //clb_NOUTMUX_O6 #(.LOC("SLICE_X18Y103"), .N(N)) | 
 |     //        clb_NOUTMUX_O6       (.clk(clk), .din(din[  24 +: 8]), .dout(dout[  24 +: 8])); | 
 |     //FIXME | 
 |     clb_NOUTMUX_XOR #(.LOC("SLICE_X18Y104"), .N(N)) | 
 |             clb_NOUTMUX_XOR     (.clk(clk), .din(din[  56 +: 8]), .dout(dout[ 56 +: 8 ])); | 
 |     //ok | 
 |     clb_NOUTMUX_B5Q #(.LOC("SLICE_X18Y105"), .N(N)) | 
 |             clb_NOUTMUX_B5Q     (.clk(clk), .din(din[  48 +: 8]), .dout(dout[ 48 +: 8 ])); | 
 | endmodule | 
 |  | 
 | module myLUT8 (input clk, input [7:0] din, | 
 |         output lut8o, output lut7bo, output lut7ao, | 
 |         //caro: XOR additional result (main output) | 
 |         //carco: CLA result (carry module additional output) | 
 |         output caro, output carco, | 
 |         output bo5, output bo6, | 
 |         //Note: b5ff_q requires the mux and will conflict with other wires | 
 |         //Otherwise this FF drops out | 
 |         output wire ff_q); | 
 |         //output wire [3:0] n5ff_q); | 
 |     parameter N=-1; | 
 |     parameter LOC="SLICE_FIXME"; | 
 |  | 
 |     wire [3:0] caro_all; | 
 |     assign caro = caro_all[N]; | 
 |     wire [3:0] carco_all; | 
 |     assign carco = carco_all[N]; | 
 |  | 
 |     wire [3:0] lutno6; | 
 |     assign bo6 = lutno6[N]; | 
 |     wire [3:0] lutno5; | 
 |     assign bo5 = lutno5[N]; | 
 |  | 
 |     //Outputs does not have to be used, will stay without it | 
 |     (* LOC=LOC, BEL="F8MUX", KEEP, DONT_TOUCH *) | 
 |     MUXF8 mux8 (.O(lut8o), .I0(lut7bo), .I1(lut7ao), .S(din[6])); | 
 |     (* LOC=LOC, BEL="F7BMUX", KEEP, DONT_TOUCH *) | 
 |     MUXF7 mux7b (.O(lut7bo), .I0(lutno6[3]), .I1(lutno6[2]), .S(din[6])); | 
 |     (* LOC=LOC, BEL="F7AMUX", KEEP, DONT_TOUCH *) | 
 |     MUXF7 mux7a (.O(lut7ao), .I0(lutno6[1]), .I1(lutno6[0]), .S(din[6])); | 
 |  | 
 | 	(* LOC=LOC, BEL="D6LUT", KEEP, DONT_TOUCH *) | 
 | 	LUT6_2 #( | 
 | 		.INIT(64'h8000_DEAD_0000_0001) | 
 | 	) lutd ( | 
 | 		.I0(din[0]), | 
 | 		.I1(din[1]), | 
 | 		.I2(din[2]), | 
 | 		.I3(din[3]), | 
 | 		.I4(din[4]), | 
 | 		.I5(din[5]), | 
 | 		.O5(lutno5[3]), | 
 | 		.O6(lutno6[3])); | 
 |  | 
 | 	(* LOC=LOC, BEL="C6LUT", KEEP, DONT_TOUCH *) | 
 | 	LUT6_2 #( | 
 | 		.INIT(64'h8000_BEEF_0000_0001) | 
 | 	) lutc ( | 
 | 		.I0(din[0]), | 
 | 		.I1(din[1]), | 
 | 		.I2(din[2]), | 
 | 		.I3(din[3]), | 
 | 		.I4(din[4]), | 
 | 		.I5(din[5]), | 
 | 		.O5(lutno5[2]), | 
 | 		.O6(lutno6[2])); | 
 |  | 
 | 	(* LOC=LOC, BEL="B6LUT", KEEP, DONT_TOUCH *) | 
 | 	LUT6_2 #( | 
 | 		.INIT(64'h8000_CAFE_0000_0001) | 
 | 	) lutb ( | 
 | 		.I0(din[0]), | 
 | 		.I1(din[1]), | 
 | 		.I2(din[2]), | 
 | 		.I3(din[3]), | 
 | 		.I4(din[4]), | 
 | 		.I5(din[5]), | 
 | 		.O5(lutno5[1]), | 
 | 		.O6(lutno6[1])); | 
 |  | 
 | 	(* LOC=LOC, BEL="A6LUT", KEEP, DONT_TOUCH *) | 
 | 	LUT6_2 #( | 
 | 		.INIT(64'h8000_1CE0_0000_0001) | 
 | 	) luta ( | 
 | 		.I0(din[0]), | 
 | 		.I1(din[1]), | 
 | 		.I2(din[2]), | 
 | 		.I3(din[3]), | 
 | 		.I4(din[4]), | 
 | 		.I5(din[5]), | 
 | 		.O5(lutno5[0]), | 
 | 		.O6(lutno6[0])); | 
 |  | 
 |     //Outputs do not have to be used, will stay without them | 
 | 	(* LOC=LOC, KEEP, DONT_TOUCH *) | 
 |     CARRY4 carry4(.O(caro_all), .CO(carco_all), .DI(lutno5), .S(lutno6), .CYINIT(1'b0), .CI()); | 
 |  | 
 |     generate | 
 |         if (N == 3) begin | 
 | 	        (* LOC=LOC, BEL="D5FF", KEEP, DONT_TOUCH *) | 
 | 	        FDPE d5ff ( | 
 | 		        .C(clk), | 
 | 		        .Q(ff_q), | 
 | 		        .CE(1'b1), | 
 | 		        .PRE(1'b0), | 
 | 		        .D(lutno5[3])); | 
 |         end | 
 |         if (N == 2) begin | 
 | 	        (* LOC=LOC, BEL="C5FF", KEEP, DONT_TOUCH *) | 
 | 	        FDPE c5ff ( | 
 | 		        .C(clk), | 
 | 		        .Q(ff_q), | 
 | 		        .CE(1'b1), | 
 | 		        .PRE(1'b0), | 
 | 		        .D(lutno5[2])); | 
 |         end | 
 |         if (N == 1) begin | 
 | 	        (* LOC=LOC, BEL="B5FF", KEEP, DONT_TOUCH *) | 
 | 	        FDPE b5ff ( | 
 | 		        .C(clk), | 
 | 		        .Q(ff_q), | 
 | 		        .CE(1'b1), | 
 | 		        .PRE(1'b0), | 
 | 		        .D(lutno5[1])); | 
 |         end | 
 |         if (N == 0) begin | 
 | 	        (* LOC=LOC, BEL="A5FF", KEEP, DONT_TOUCH *) | 
 | 	        FDPE a5ff ( | 
 | 		        .C(clk), | 
 | 		        .Q(ff_q), | 
 | 		        .CE(1'b1), | 
 | 		        .PRE(1'b0), | 
 | 		        .D(lutno5[0])); | 
 |         end | 
 |     endgenerate | 
 | endmodule | 
 |  | 
 | //****************************************************************************** | 
 | //BOUTMUX tests | 
 |  | 
 | module clb_NOUTMUX_CY (input clk, input [7:0] din, output [7:0] dout); | 
 |     parameter LOC="SLICE_FIXME"; | 
 |     parameter N=1; | 
 |  | 
 |     myLUT8 #(.LOC(LOC), .N(N)) | 
 |             myLUT8(.clk(clk), .din(din), .lut8o(), | 
 |             .caro(), .carco(dout[0]), | 
 |             .bo5(), .bo6(), | 
 |             .ff_q()); | 
 | endmodule | 
 |  | 
 | //clb_NOUTMUX_F78: already have above as clb_LUT8 | 
 | module clb_NOUTMUX_F78 (input clk, input [7:0] din, output [7:0] dout); | 
 |     parameter LOC="SLICE_FIXME"; | 
 |     parameter N=1; | 
 |     wire lut8o, lut7bo, lut7ao; | 
 |     /* | 
 |     D: N/A (no such mux position) | 
 |     C: F7B:O | 
 |     B: F8:O | 
 |     A: F7A:O | 
 |     */ | 
 |     generate | 
 |         if (N == 3) begin | 
 |             //No muxes, so this is undefined | 
 |            invalid_configuration invalid_configuration3(); | 
 |         end else if (N == 2) begin | 
 |             assign dout[0] = lut7bo; | 
 |         end else if (N == 1) begin | 
 |             assign dout[0] = lut8o; | 
 |         end else if (N == 0) begin | 
 |             assign dout[0] = lut7ao; | 
 |         end | 
 |     endgenerate | 
 |  | 
 |     myLUT8 #(.LOC(LOC), .N(N)) | 
 |             myLUT8(.clk(clk), .din(din), | 
 |             .lut8o(lut8o), .lut7bo(lut7bo), .lut7ao(lut7ao), | 
 |             .caro(), .carco(), | 
 |             .bo5(), .bo6(), | 
 |             .ff_q()); | 
 | endmodule | 
 |  | 
 | module clb_NOUTMUX_O5 (input clk, input [7:0] din, output [7:0] dout); | 
 |     parameter LOC="SLICE_FIXME"; | 
 |     parameter N=1; | 
 |  | 
 |     myLUT8 #(.LOC(LOC), .N(N)) | 
 |             myLUT8(.clk(clk), .din(din), .lut8o(), | 
 |             .caro(), .carco(), | 
 |             .bo5(dout[0]), .bo6(), | 
 |             .ff_q()); | 
 | endmodule | 
 |  | 
 | /* | 
 | //FIXME: need to force it to use both X and O6 | 
 | module clb_NOUTMUX_O6 (input clk, input [7:0] din, output [7:0] dout); | 
 |     parameter LOC="SLICE_FIXME"; | 
 |     parameter N=1; | 
 |  | 
 |     myLUT8 #(.LOC(LOC), .N(N)) | 
 |             myLUT8(.clk(clk), .din(din), .lut8o(), .co(), .carco(), .bo5(), .bo6()); | 
 | endmodule | 
 | */ | 
 |  | 
 | module clb_NOUTMUX_XOR (input clk, input [7:0] din, output [7:0] dout); | 
 |     parameter LOC="SLICE_FIXME"; | 
 |     parameter N=1; | 
 |  | 
 |     myLUT8 #(.LOC(LOC), .N(N)) | 
 |             myLUT8(.clk(clk), .din(din), .lut8o(), | 
 |             .caro(dout[0]), .carco(), | 
 |             .bo5(), .bo6(), | 
 |             .ff_q()); | 
 | endmodule | 
 |  | 
 | module clb_NOUTMUX_B5Q (input clk, input [7:0] din, output [7:0] dout); | 
 |     parameter LOC="SLICE_FIXME"; | 
 |     parameter N=1; | 
 |  | 
 |     myLUT8 #(.LOC(LOC), .N(N)) | 
 |             myLUT8(.clk(clk), .din(din), | 
 |             .lut8o(), | 
 |             .caro(), .carco(), | 
 |             .bo5(), .bo6(), | 
 |             .ff_q(dout[0])); | 
 | endmodule | 
 |  |