import random
random.seed(0)
import os
import re

from prims import *


def slice_xy():
    '''Return (X1, X2), (Y1, Y2) from XRAY_ROI, exclusive end (for xrange)'''
    # SLICE_X12Y100:SLICE_X27Y149
    # Note XRAY_ROI_GRID_* is something else
    m = re.match(
        r'SLICE_X([0-9]*)Y([0-9]*):SLICE_X([0-9]*)Y([0-9]*)',
        os.getenv('XRAY_ROI'))
    ms = [int(m.group(i + 1)) for i in range(4)]
    return ((ms[0], ms[2] + 1), (ms[1], ms[3] + 1))


CLBN = 600
SLICEX, SLICEY = slice_xy()
# 800
SLICEN = (SLICEY[1] - SLICEY[0]) * (SLICEX[1] - SLICEX[0])
print('//SLICEX: %s' % str(SLICEX))
print('//SLICEY: %s' % str(SLICEY))
print('//SLICEN: %s' % str(SLICEN))
print('//Requested CLBs: %s' % str(CLBN))

f = open("top.txt", "w")
f.write("i,prim,loc,bel,init\n")


def gen_slices():
    for slicey in range(*SLICEY):
        for slicex in range(*SLICEX):
            yield "SLICE_X%dY%d" % (slicex, slicey)


DIN_N = CLBN * 4
DOUT_N = CLBN * 1

print(
    '''
module top(input clk, stb, di, output do);
	localparam integer DIN_N = %d;
	localparam integer DOUT_N = %d;

	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
''' % (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

''')
