blob: f9ca1dd658fdf79cf3bdf32ad9b185e636bd2d3b [file] [log] [blame]
# Copyright 2020 Project U-Ray Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import numpy as np
import sys
print("module top(input [15:0] clk, rst, cen, input [6:0] d, output q);")
N = 10000
print(" wire [%d:0] int_d;" % N)
print(" assign int_d[6:0] = d;")
print(" assign q = int_d[%d];" % N)
slices = []
with open(sys.argv[1], "r") as tf:
for line in tf:
sl = line.strip().split(",")
if len(sl) < 4:
continue
for site in sl[4:]:
if "SLICEM" in site or "SLICEL" in site:
slices.append(site.split(":")[0])
for i in range(6, N):
fftype, srsig = np.random.choice(["FDPE,PRE", "FDCE,CLR", "FDSE,S", "FDRE,R"]).split(",")
sl = slices.pop()
if np.random.ranf() < 0.5:
data = "int_d[%d]" % i
else:
lutsize = np.random.randint(2, 10)
if lutsize > 6:
lutsize = 6
print (" wire lut_q_%d;" % i)
print(" (* BEL=\"%s%dLUT\" *) (* LOC=\"%s\" *) LUT%d #(" % (np.random.choice(list("ABCDEFGH")), np.random.randint(6 if lutsize == 6 else 5, 7), sl, lutsize))
print(" .INIT(%d'h%016x)" % (2 ** lutsize, np.random.randint(1, (2 ** ((2 ** lutsize) - 1) - 1))))
print(" ) lut_%d (" % i)
for j in range(lutsize):
print(" .I%d(int_d[%d])," % (j, i - j))
print(" .O(lut_q_%d)" % i)
print(" );")
data = "lut_q_%d" % i
print(" (* BEL=\"%sFF%s\" *) (* LOC=\"%s\" *) %s #(" % (np.random.choice(list("ABCDEFGH")), np.random.choice(["", "2"]), sl, fftype))
print(" .IS_C_INVERTED(%s)," % np.random.choice(["0", "1"]))
print(" .IS_%s_INVERTED(%s)," % (srsig, np.random.choice(["0", "1"])))
print(" .INIT(%s)" % np.random.choice(["1'b0", "1'b1"]))
print(" ) ff_%d (" % i)
print(" .C(clk[%d])," % np.random.randint(0, 16))
print(" .CE(cen[%d])," % np.random.randint(0, 16))
print(" .%s(rst[%d])," % (srsig, np.random.randint(0, 16)))
print(" .D(%s)," % (data))
print(" .Q(int_d[%d])" % (i + 1))
print(" );")
print("endmodule")