| #!/usr/bin/env python3 | 
 | # -*- coding: utf-8 -*- | 
 | # | 
 | # Copyright (C) 2017-2020  The Project X-Ray Authors. | 
 | # | 
 | # Use of this source code is governed by a ISC-style | 
 | # license that can be found in the LICENSE file or at | 
 | # https://opensource.org/licenses/ISC | 
 | # | 
 | # SPDX-License-Identifier: ISC | 
 | import os, random | 
 | random.seed(0) | 
 | from prjxray import util | 
 | from prjxray import verilog | 
 |  | 
 | from prims import * | 
 |  | 
 | # INCREMENT is the amount of additional CLBN to be instantiated in the design. | 
 | # This makes the fuzzer compilation more robust against failures. | 
 | INCREMENT = os.getenv('CLBN', 0) | 
 | CLBN = 600 + int(INCREMENT) | 
 | print('//Requested CLBs: %s' % str(CLBN)) | 
 |  | 
 | f = open("top.txt", "w") | 
 | f.write("i,prim,loc,bel,init\n") | 
 |  | 
 |  | 
 | def gen_slices(): | 
 |     for _tile_name, site_name, _site_type in util.get_roi().gen_sites([ | 
 |             'SLICEL', | 
 |             'SLICEM', | 
 |     ]): | 
 |         yield site_name | 
 |  | 
 |  | 
 | DIN_N = CLBN * 4 | 
 | DOUT_N = CLBN * 1 | 
 |  | 
 | verilog.top_harness(DIN_N, DOUT_N) | 
 |  | 
 | slices = gen_slices() | 
 | print( | 
 |     'module roi(input clk, input [%d:0] din, output [%d:0] dout);' % | 
 |     (DIN_N - 1, DOUT_N - 1)) | 
 | for i in range(CLBN): | 
 |     ffprim = random.choice(ones(ffprims)) | 
 |     # clb_FD clb_FD (.clk(clk), .din(din[  0 +: 4]), .dout(dout[  0])); | 
 |     # clb_FD_1 clb_FD_1 (.clk(clk), .din(din[  4 +: 4]), .dout(dout[  1])); | 
 |     loc = next(slices) | 
 |     # Latch can't go in 5s | 
 |     if isff(ffprim): | 
 |         bel = random.choice(ff_bels) | 
 |     else: | 
 |         bel = random.choice(ff_bels_ffl) | 
 |     init = random.choice((0, 1)) | 
 |     #bel = "AFF" | 
 |     print('    clb_%s' % ffprim) | 
 |     print( | 
 |         '            #(.LOC("%s"), .BEL("%s"), .INIT(%d))' % (loc, bel, init)) | 
 |     print( | 
 |         '            clb_%d (.clk(clk), .din(din[  %d +: 4]), .dout(dout[  %d]));' | 
 |         % (i, 4 * i, 1 * i)) | 
 |     f.write("%d,%s,%s,%s,%d\n" % (i, ffprim, loc, bel, init)) | 
 | print( | 
 |     '''endmodule | 
 |  | 
 | // --------------------------------------------------------------------- | 
 |  | 
 | ''') | 
 |  | 
 | print( | 
 |     ''' | 
 | module clb_FD (input clk, input [3:0] din, output dout); | 
 |     parameter LOC="SLICE_X16Y100"; | 
 |     parameter BEL="AFF"; | 
 |     parameter INIT=1'b0; | 
 | 	(* LOC=LOC, BEL=BEL, KEEP, DONT_TOUCH, INIT=INIT *) | 
 | 	FD ff ( | 
 | 		.C(clk), | 
 | 		.Q(dout), | 
 | 		.D(din[0]) | 
 | 	); | 
 | 	endmodule | 
 |  | 
 | module clb_FD_1 (input clk, input [3:0] din, output dout); | 
 |     parameter LOC="SLICE_X16Y101"; | 
 |     parameter BEL="AFF"; | 
 |     parameter INIT=1'b0; | 
 | 	(* LOC=LOC, BEL=BEL, KEEP, DONT_TOUCH, INIT=INIT *) | 
 | 	FD_1 ff ( | 
 | 		.C(clk), | 
 | 		.Q(dout), | 
 | 		.D(din[0]) | 
 | 	); | 
 | 	endmodule | 
 |  | 
 | module clb_FDC (input clk, input [3:0] din, output dout); | 
 |     parameter LOC="SLICE_X16Y102"; | 
 |     parameter BEL="AFF"; | 
 |     parameter INIT=1'b0; | 
 | 	(* LOC=LOC, BEL=BEL, KEEP, DONT_TOUCH, INIT=INIT *) | 
 | 	FDC ff ( | 
 | 		.C(clk), | 
 | 		.Q(dout), | 
 | 		.CLR(din[0]), | 
 | 		.D(din[1]) | 
 | 	); | 
 | 	endmodule | 
 |  | 
 | module clb_FDC_1 (input clk, input [3:0] din, output dout); | 
 |     parameter LOC="SLICE_X16Y103"; | 
 |     parameter BEL="AFF"; | 
 |     parameter INIT=1'b0; | 
 | 	(* LOC=LOC, BEL=BEL, KEEP, DONT_TOUCH, INIT=INIT *) | 
 | 	FDC_1 ff ( | 
 | 		.C(clk), | 
 | 		.Q(dout), | 
 | 		.CLR(din[0]), | 
 | 		.D(din[1]) | 
 | 	); | 
 | 	endmodule | 
 |  | 
 | module clb_FDCE (input clk, input [3:0] din, output dout); | 
 |     parameter LOC="SLICE_X16Y104"; | 
 |     parameter BEL="AFF"; | 
 |     parameter INIT=1'b0; | 
 | 	(* LOC=LOC, BEL=BEL, KEEP, DONT_TOUCH, INIT=INIT *) | 
 | 	FDCE ff ( | 
 | 		.C(clk), | 
 | 		.Q(dout), | 
 | 		.CE(din[0]), | 
 | 		.CLR(din[1]), | 
 | 		.D(din[2]) | 
 | 	); | 
 | 	endmodule | 
 |  | 
 | module clb_FDCE_1 (input clk, input [3:0] din, output dout); | 
 |     parameter LOC="SLICE_X16Y105"; | 
 |     parameter BEL="AFF"; | 
 |     parameter INIT=1'b0; | 
 | 	(* LOC=LOC, BEL=BEL, KEEP, DONT_TOUCH, INIT=INIT *) | 
 | 	FDCE_1 ff ( | 
 | 		.C(clk), | 
 | 		.Q(dout), | 
 | 		.CE(din[0]), | 
 | 		.CLR(din[1]), | 
 | 		.D(din[2]) | 
 | 	); | 
 | 	endmodule | 
 |  | 
 | module clb_FDE (input clk, input [3:0] din, output dout); | 
 |     parameter LOC="SLICE_X16Y106"; | 
 |     parameter BEL="AFF"; | 
 |     parameter INIT=1'b0; | 
 | 	(* LOC=LOC, BEL=BEL, KEEP, DONT_TOUCH, INIT=INIT *) | 
 | 	FDE ff ( | 
 | 		.C(clk), | 
 | 		.Q(dout), | 
 | 		.D(din[0]), | 
 | 		.CE(din[1]) | 
 | 	); | 
 | 	endmodule | 
 |  | 
 | module clb_FDE_1 (input clk, input [3:0] din, output dout); | 
 |     parameter LOC="SLICE_X16Y107"; | 
 |     parameter BEL="AFF"; | 
 |     parameter INIT=1'b0; | 
 | 	(* LOC=LOC, BEL=BEL, KEEP, DONT_TOUCH, INIT=INIT *) | 
 | 	FDE_1 ff ( | 
 | 		.C(clk), | 
 | 		.Q(dout), | 
 | 		.D(din[0]), | 
 | 		.CE(din[1]) | 
 | 	); | 
 | 	endmodule | 
 |  | 
 | module clb_FDP (input clk, input [3:0] din, output dout); | 
 |     parameter LOC="SLICE_X16Y108"; | 
 |     parameter BEL="AFF"; | 
 |     parameter INIT=1'b0; | 
 | 	(* LOC=LOC, BEL=BEL, KEEP, DONT_TOUCH, INIT=INIT *) | 
 | 	FDP ff ( | 
 | 		.C(clk), | 
 | 		.Q(dout), | 
 | 		.D(din[0]), | 
 | 		.PRE(din[1]) | 
 | 	); | 
 | 	endmodule | 
 |  | 
 | module clb_FDP_1 (input clk, input [3:0] din, output dout); | 
 |     parameter LOC="SLICE_X16Y109"; | 
 |     parameter BEL="AFF"; | 
 |     parameter INIT=1'b0; | 
 | 	(* LOC=LOC, BEL=BEL, KEEP, DONT_TOUCH, INIT=INIT *) | 
 | 	FDP_1 ff ( | 
 | 		.C(clk), | 
 | 		.Q(dout), | 
 | 		.D(din[0]), | 
 | 		.PRE(din[1]) | 
 | 	); | 
 | 	endmodule | 
 |  | 
 | module clb_FDPE (input clk, input [3:0] din, output dout); | 
 |     parameter LOC="SLICE_X16Y110"; | 
 |     parameter BEL="AFF"; | 
 |     parameter INIT=1'b0; | 
 | 	(* LOC=LOC, BEL=BEL, KEEP, DONT_TOUCH, INIT=INIT *) | 
 | 	FDPE ff ( | 
 | 		.C(clk), | 
 | 		.Q(dout), | 
 | 		.CE(din[0]), | 
 | 		.PRE(din[1]), | 
 | 		.D(din[2]) | 
 | 	); | 
 | 	endmodule | 
 |  | 
 | module clb_FDPE_1 (input clk, input [3:0] din, output dout); | 
 |     parameter LOC="SLICE_X16Y111"; | 
 |     parameter BEL="AFF"; | 
 |     parameter INIT=1'b0; | 
 | 	(* LOC=LOC, BEL=BEL, KEEP, DONT_TOUCH, INIT=INIT *) | 
 | 	FDPE_1 ff ( | 
 | 		.C(clk), | 
 | 		.Q(dout), | 
 | 		.CE(din[0]), | 
 | 		.PRE(din[1]), | 
 | 		.D(din[2]) | 
 | 	); | 
 | 	endmodule | 
 |  | 
 | module clb_FDR (input clk, input [3:0] din, output dout); | 
 |     parameter LOC="SLICE_X16Y112"; | 
 |     parameter BEL="AFF"; | 
 |     parameter INIT=1'b0; | 
 | 	(* LOC=LOC, BEL=BEL, KEEP, DONT_TOUCH, INIT=INIT *) | 
 | 	FDR ff ( | 
 | 		.C(clk), | 
 | 		.Q(dout), | 
 | 		.D(din[0]), | 
 | 		.R(din[1]) | 
 | 	); | 
 | 	endmodule | 
 |  | 
 | module clb_FDR_1 (input clk, input [3:0] din, output dout); | 
 |     parameter LOC="SLICE_X16Y113"; | 
 |     parameter BEL="AFF"; | 
 |     parameter INIT=1'b0; | 
 | 	(* LOC=LOC, BEL=BEL, KEEP, DONT_TOUCH, INIT=INIT *) | 
 | 	FDR_1 ff ( | 
 | 		.C(clk), | 
 | 		.Q(dout), | 
 | 		.D(din[0]), | 
 | 		.R(din[1]) | 
 | 	); | 
 | 	endmodule | 
 |  | 
 | module clb_FDRE (input clk, input [3:0] din, output dout); | 
 |     parameter LOC="SLICE_X16Y114"; | 
 |     parameter BEL="AFF"; | 
 |     parameter INIT=1'b0; | 
 | 	(* LOC=LOC, BEL=BEL, KEEP, DONT_TOUCH, INIT=INIT *) | 
 | 	FDRE ff ( | 
 | 		.C(clk), | 
 | 		.Q(dout), | 
 | 		.CE(din[0]), | 
 | 		.R(din[1]), | 
 | 		.D(din[2]) | 
 | 	); | 
 | 	endmodule | 
 |  | 
 | module clb_FDRE_1 (input clk, input [3:0] din, output dout); | 
 |     parameter LOC="SLICE_X16Y115"; | 
 |     parameter BEL="AFF"; | 
 |     parameter INIT=1'b0; | 
 | 	(* LOC=LOC, BEL=BEL, KEEP, DONT_TOUCH, INIT=INIT *) | 
 | 	FDRE_1 ff ( | 
 | 		.C(clk), | 
 | 		.Q(dout), | 
 | 		.CE(din[0]), | 
 | 		.R(din[1]), | 
 | 		.D(din[2]) | 
 | 	); | 
 | 	endmodule | 
 |  | 
 | module clb_FDS (input clk, input [3:0] din, output dout); | 
 |     parameter LOC="SLICE_X16Y116"; | 
 |     parameter BEL="AFF"; | 
 |     parameter INIT=1'b0; | 
 | 	(* LOC=LOC, BEL=BEL, KEEP, DONT_TOUCH, INIT=INIT *) | 
 | 	FDS ff ( | 
 | 		.C(clk), | 
 | 		.Q(dout), | 
 | 		.S(din[0]), | 
 | 		.D(din[1]) | 
 | 	); | 
 | 	endmodule | 
 |  | 
 | module clb_FDS_1 (input clk, input [3:0] din, output dout); | 
 |     parameter LOC="SLICE_X16Y117"; | 
 |     parameter BEL="AFF"; | 
 |     parameter INIT=1'b0; | 
 | 	(* LOC=LOC, BEL=BEL, KEEP, DONT_TOUCH, INIT=INIT *) | 
 | 	FDS_1 ff ( | 
 | 		.C(clk), | 
 | 		.Q(dout), | 
 | 		.S(din[0]), | 
 | 		.D(din[1]) | 
 | 	); | 
 | 	endmodule | 
 |  | 
 | module clb_FDSE (input clk, input [3:0] din, output dout); | 
 |     parameter LOC="SLICE_X16Y118"; | 
 |     parameter BEL="AFF"; | 
 |     parameter INIT=1'b0; | 
 | 	(* LOC=LOC, BEL=BEL, KEEP, DONT_TOUCH, INIT=INIT *) | 
 | 	FDSE ff ( | 
 | 		.C(clk), | 
 | 		.Q(dout), | 
 | 		.CE(din[0]), | 
 | 		.S(din[1]), | 
 | 		.D(din[2]) | 
 | 	); | 
 | 	endmodule | 
 |  | 
 | module clb_FDSE_1 (input clk, input [3:0] din, output dout); | 
 |     parameter LOC="SLICE_X16Y119"; | 
 |     parameter BEL="AFF"; | 
 |     parameter INIT=1'b0; | 
 | 	(* LOC=LOC, BEL=BEL, KEEP, DONT_TOUCH, INIT=INIT *) | 
 | 	FDSE_1 ff ( | 
 | 		.C(clk), | 
 | 		.Q(dout), | 
 | 		.CE(din[0]), | 
 | 		.S(din[1]), | 
 | 		.D(din[2]) | 
 | 	); | 
 | 	endmodule | 
 |  | 
 | //******************************************************************************** | 
 |  | 
 | module clb_LDC (input clk, input [3:0] din, output dout); | 
 |     parameter LOC="SLICE_X16Y120"; | 
 |     parameter BEL="AFF"; | 
 |     parameter INIT=1'b0; | 
 | 	(* LOC=LOC, BEL=BEL, KEEP, DONT_TOUCH, INIT=INIT *) | 
 | 	LDC ff ( | 
 | 		.G(~clk), | 
 | 		.Q(dout), | 
 | 		.D(din[0]), | 
 | 		.CLR(din[1]) | 
 | 	); | 
 | 	endmodule | 
 | module clb_LDC_1 (input clk, input [3:0] din, output dout); | 
 |     parameter LOC="SLICE_X16Y121"; | 
 |     parameter BEL="AFF"; | 
 |     parameter INIT=1'b0; | 
 | 	(* LOC=LOC, BEL=BEL, KEEP, DONT_TOUCH, INIT=INIT *) | 
 | 	LDC_1 ff ( | 
 | 		.G(~clk), | 
 | 		.Q(dout), | 
 | 		.D(din[0]), | 
 | 		.CLR(din[1]) | 
 | 	); | 
 | 	endmodule | 
 |  | 
 | module clb_LDCE (input clk, input [3:0] din, output dout); | 
 |     parameter LOC="SLICE_X16Y122"; | 
 |     parameter BEL="AFF"; | 
 |     parameter INIT=1'b0; | 
 | 	(* LOC=LOC, BEL=BEL, KEEP, DONT_TOUCH, INIT=INIT *) | 
 | 	LDCE ff ( | 
 | 		.G(~clk), | 
 | 		//NOTE: diagram shows two outputs. Error? | 
 | 		.Q(dout), | 
 | 		.D(din[0]), | 
 | 		.GE(din[1]), | 
 | 		.CLR(din[2]) | 
 | 	); | 
 | 	endmodule | 
 | module clb_LDCE_1 (input clk, input [3:0] din, output dout); | 
 |     parameter LOC="SLICE_X16Y123"; | 
 |     parameter BEL="AFF"; | 
 |     parameter INIT=1'b0; | 
 | 	(* LOC=LOC, BEL=BEL, KEEP, DONT_TOUCH, INIT=INIT *) | 
 | 	LDCE_1 ff ( | 
 | 		.G(~clk), | 
 | 		//NOTE: diagram shows two outputs. Error? | 
 | 		.Q(dout), | 
 | 		.D(din[0]), | 
 | 		.GE(din[1]), | 
 | 		.CLR(din[2]) | 
 | 	); | 
 | 	endmodule | 
 |  | 
 | module clb_LDE (input clk, input [3:0] din, output dout); | 
 |     parameter LOC="SLICE_X16Y124"; | 
 |     parameter BEL="AFF"; | 
 |     parameter INIT=1'b0; | 
 | 	(* LOC=LOC, BEL=BEL, KEEP, DONT_TOUCH, INIT=INIT *) | 
 | 	LDE ff ( | 
 | 		.G(~clk), | 
 | 		.Q(dout), | 
 | 		.D(din[0]), | 
 | 		.GE(din[1]) | 
 | 	); | 
 | 	endmodule | 
 | module clb_LDE_1 (input clk, input [3:0] din, output dout); | 
 |     parameter LOC="SLICE_X16Y125"; | 
 |     parameter BEL="AFF"; | 
 |     parameter INIT=1'b0; | 
 | 	(* LOC=LOC, BEL=BEL, KEEP, DONT_TOUCH, INIT=INIT *) | 
 | 	LDE_1 ff ( | 
 | 		.G(~clk), | 
 | 		.Q(dout), | 
 | 		.D(din[0]), | 
 | 		.GE(din[1]) | 
 | 	); | 
 | 	endmodule | 
 |  | 
 | module clb_LDP (input clk, input [3:0] din, output dout); | 
 |     parameter LOC="SLICE_X16Y126"; | 
 |     parameter BEL="AFF"; | 
 |     parameter INIT=1'b0; | 
 | 	(* LOC=LOC, BEL=BEL, KEEP, DONT_TOUCH, INIT=INIT *) | 
 | 	LDP ff ( | 
 | 		.G(~clk), | 
 | 		.Q(dout), | 
 | 		.D(din[0]), | 
 | 		.PRE(din[1]) | 
 | 	); | 
 | 	endmodule | 
 | module clb_LDP_1 (input clk, input [3:0] din, output dout); | 
 |     parameter LOC="SLICE_X16Y127"; | 
 |     parameter BEL="AFF"; | 
 |     parameter INIT=1'b0; | 
 | 	(* LOC=LOC, BEL=BEL, KEEP, DONT_TOUCH, INIT=INIT *) | 
 | 	LDP_1 ff ( | 
 | 		.G(~clk), | 
 | 		.Q(dout), | 
 | 		.D(din[0]), | 
 | 		.PRE(din[1]) | 
 | 	); | 
 | 	endmodule | 
 |  | 
 | module clb_LDPE (input clk, input [3:0] din, output dout); | 
 |     parameter LOC="SLICE_X16Y128"; | 
 |     parameter BEL="AFF"; | 
 |     parameter INIT=1'b0; | 
 | 	(* LOC=LOC, BEL=BEL, KEEP, DONT_TOUCH, INIT=INIT *) | 
 | 	LDPE ff ( | 
 | 		.G(~clk), | 
 | 		.Q(dout), | 
 | 		.PRE(din[0]), | 
 | 		.D(din[1]), | 
 | 		.GE(din[2]) | 
 | 	); | 
 | 	endmodule | 
 | module clb_LDPE_1 (input clk, input [3:0] din, output dout); | 
 |     parameter LOC="SLICE_X16Y129"; | 
 |     parameter BEL="AFF"; | 
 |     parameter INIT=1'b0; | 
 | 	(* LOC=LOC, BEL=BEL, KEEP, DONT_TOUCH, INIT=INIT *) | 
 | 	LDPE_1 ff ( | 
 | 		.G(~clk), | 
 | 		.Q(dout), | 
 | 		.PRE(din[0]), | 
 | 		.D(din[1]), | 
 | 		.GE(din[2]) | 
 | 	); | 
 | 	endmodule | 
 |  | 
 | ''') |