blob: 8cbd569b122aff0476269ae6df198fd7b969fafb [file] [log] [blame]
#!/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
''')