diff --git a/experiments/clbpips/generate.py b/experiments/clbpips/generate.py index 8563d4a3..faf1408a 100644 --- a/experiments/clbpips/generate.py +++ b/experiments/clbpips/generate.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -import sys -import re +import sys, re sys.path.append("../../../utils/") from segmaker import segmaker @@ -20,3 +19,4 @@ with open("design.txt", "r") as f: segmk.compile() segmk.write() + diff --git a/experiments/example/segdata.py b/experiments/example/segdata.py index 3da025c6..3e880e04 100644 --- a/experiments/example/segdata.py +++ b/experiments/example/segdata.py @@ -1,8 +1,6 @@ #!/usr/bin/env python3 -import os -import json -import re +import os, json, re ################################################# # Loading Raw Source Data @@ -57,8 +55,7 @@ with open("carrydata.txt", "r") as f: for i, n in enumerate("CYINIT:ZRO:ONE:AX:CIN DI0:AX:O5 DI1:AX:O5 DI2:AX:O5 DI3:AX:O5".split()): n = n.split(":") for k in n[1:]: - carry[line[0]]["CARRY_%s_MUX_%s" % - (n[0], k)] = line[1 + i].upper() == k + carry[line[0]]["CARRY_%s_MUX_%s" % (n[0], k)] = line[1+i].upper() == k ################################################# @@ -77,11 +74,10 @@ for tilename, tiledata in grid["tiles"].items(): if not found_data: continue - segname = "%s_%02x" % ( - tiledata["cfgcol"]["BASE_FRAMEID"][2:], min(tiledata["cfgcol"]["WORDS"])) + segname = "%s_%02x" % (tiledata["cfgcol"]["BASE_FRAMEID"][2:], min(tiledata["cfgcol"]["WORDS"])) if not segname in segments: - segments[segname] = {"bits": list(), "tags": dict()} + segments[segname] = { "bits": list(), "tags": dict() } for site in tiledata["sites"]: if site not in luts and site not in carry: @@ -102,14 +98,12 @@ for tilename, tiledata in grid["tiles"].items(): if re.match("^CLBL[LM]_[LR]", tile_type) and "LUT.INIT" in name: tile_type = "CLBLX_X" - segments[segname]["tags"]["%s.%s.%s" % - (tile_type, sitekey, name)] = value + segments[segname]["tags"]["%s.%s.%s" % (tile_type, sitekey, name)] = value if site in carry: for name, value in carry[site].items(): tile_type = tiledata["props"]["TYPE"] - segments[segname]["tags"]["%s.%s.%s" % - (tile_type, sitekey, name)] = value + segments[segname]["tags"]["%s.%s.%s" % (tile_type, sitekey, name)] = value base_frame = int(tiledata["cfgcol"]["BASE_FRAMEID"][2:], 16) for wordidx in tiledata["cfgcol"]["WORDS"]: @@ -118,8 +112,7 @@ for tilename, tiledata in grid["tiles"].items(): if wordidx not in bits[base_frame]: continue for bit_frame, bit_wordidx, bit_bitidx in bits[base_frame][wordidx]: - segments[segname]["bits"].append("%02x_%02x_%02x" % ( - bit_frame - base_frame, bit_wordidx - min(tiledata["cfgcol"]["WORDS"]), bit_bitidx)) + segments[segname]["bits"].append("%02x_%02x_%02x" % (bit_frame - base_frame, bit_wordidx - min(tiledata["cfgcol"]["WORDS"]), bit_bitidx)) segments[segname]["bits"].sort() @@ -136,3 +129,4 @@ with open("segdata.txt", "w") as f: print("bit %s" % bitname, file=f) for tagname, tagval in sorted(segdata["tags"].items()): print("tag %s %d" % (tagname, tagval), file=f) + diff --git a/experiments/gndvcc/generate.py b/experiments/gndvcc/generate.py index c41880dd..3b043639 100644 --- a/experiments/gndvcc/generate.py +++ b/experiments/gndvcc/generate.py @@ -1,8 +1,6 @@ #!/usr/bin/env python3 -import sys -import os -import re +import sys, os, re sys.path.append("../../../utils/") from segmaker import segmaker @@ -62,3 +60,4 @@ for tile, pips_srcs_dsts in tiledata.items(): segmk.compile() segmk.write() + diff --git a/experiments/gndvcc/maketodo.py b/experiments/gndvcc/maketodo.py index 46c0e2ea..efff433d 100644 --- a/experiments/gndvcc/maketodo.py +++ b/experiments/gndvcc/maketodo.py @@ -1,8 +1,6 @@ #!/usr/bin/env python3 -import os -import re - +import os, re def maketodo(pipfile, dbfile): todos = set() @@ -18,8 +16,6 @@ def maketodo(pipfile, dbfile): if line.endswith(".GND_WIRE") or line.endswith(".VCC_WIRE"): print(line) +maketodo("pips_int_l.txt", "%s/%s/segbits_int_l.db" % (os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE"))) +maketodo("pips_int_r.txt", "%s/%s/segbits_int_r.db" % (os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE"))) -maketodo("pips_int_l.txt", "%s/%s/segbits_int_l.db" % - (os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE"))) -maketodo("pips_int_r.txt", "%s/%s/segbits_int_r.db" % - (os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE"))) diff --git a/experiments/pipsroute/generate.py b/experiments/pipsroute/generate.py index 9ec9e449..7772da8f 100644 --- a/experiments/pipsroute/generate.py +++ b/experiments/pipsroute/generate.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -import sys -import re +import sys, re sys.path.append("../../../utils/") from segmaker import segmaker @@ -9,7 +8,6 @@ from segmaker import segmaker pipdata = dict() ignpip = set() - def handle_design(prefix, second_pass): segmk = segmaker(prefix + ".bits") @@ -75,7 +73,6 @@ def handle_design(prefix, second_pass): segmk.compile() segmk.write(prefix[7:]) - for arg in sys.argv[1:]: prefix = arg[0:-4] handle_design(prefix, False) @@ -83,3 +80,4 @@ for arg in sys.argv[1:]: for arg in sys.argv[1:]: prefix = arg[0:-4] handle_design(prefix, True) + diff --git a/experiments/pipsroute/maketodo.py b/experiments/pipsroute/maketodo.py index d09991e8..0229313f 100644 --- a/experiments/pipsroute/maketodo.py +++ b/experiments/pipsroute/maketodo.py @@ -1,8 +1,6 @@ #!/usr/bin/env python3 -import os -import re - +import os, re def maketodo(pipfile, dbfile): todos = set() @@ -23,8 +21,6 @@ def maketodo(pipfile, dbfile): continue print(line) +maketodo("pips_int_l.txt", "%s/%s/segbits_int_l.db" % (os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE"))) +maketodo("pips_int_r.txt", "%s/%s/segbits_int_r.db" % (os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE"))) -maketodo("pips_int_l.txt", "%s/%s/segbits_int_l.db" % - (os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE"))) -maketodo("pips_int_r.txt", "%s/%s/segbits_int_r.db" % - (os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE"))) diff --git a/fuzzers/005-tilegrid/generate.py b/fuzzers/005-tilegrid/generate.py index 859753ef..1c4fe149 100644 --- a/fuzzers/005-tilegrid/generate.py +++ b/fuzzers/005-tilegrid/generate.py @@ -1,9 +1,6 @@ #!/usr/bin/env python3 -import os -import sys -import json -import re +import os, sys, json, re ####################################### @@ -21,7 +18,7 @@ for arg in sys.argv[1:]: with open(arg) as f: line = f.read().strip() site = arg[7:-6] - frame = int(line[5:5 + 8], 16) + frame = int(line[5:5+8], 16) site_baseaddr[site] = "0x%08x" % (frame & ~0x7f) @@ -48,7 +45,7 @@ for record in tiles: if len(record) > 4: for i in range(4, len(record), 2): - site_type, site_name = record[i:i + 2] + site_type, site_name = record[i:i+2] if site_name in site_baseaddr: framebaseaddr = site_baseaddr[site_name] database["tiles"][tile_name]["sites"][site_name] = site_type @@ -67,16 +64,15 @@ for tile_name, tile_data in database["tiles"].items(): if tile_type in ["CLBLL_L", "CLBLL_R", "CLBLM_L", "CLBLM_R"]: if tile_type in ["CLBLL_L", "CLBLM_L"]: - int_tile_name = tiles_by_grid[(grid_x + 1, grid_y)] + int_tile_name = tiles_by_grid[(grid_x+1, grid_y)] else: - int_tile_name = tiles_by_grid[(grid_x - 1, grid_y)] + int_tile_name = tiles_by_grid[(grid_x-1, grid_y)] segment_name = "SEG_" + tile_name segtype = tile_type.lower() database["segments"][segment_name] = dict() - database["segments"][segment_name]["tiles"] = [ - tile_name, int_tile_name] + database["segments"][segment_name]["tiles"] = [tile_name, int_tile_name] database["segments"][segment_name]["type"] = segtype database["segments"][segment_name]["frames"] = 36 database["segments"][segment_name]["words"] = 2 @@ -101,11 +97,11 @@ for tile_name, tile_data in database["tiles"].items(): if tile_type in ["BRAM_L", "DSP_L", "BRAM_R", "DSP_R"]: for k in range(5): if tile_type in ["BRAM_L", "DSP_L"]: - interface_tile_name = tiles_by_grid[(grid_x + 1, grid_y - k)] - int_tile_name = tiles_by_grid[(grid_x + 2, grid_y - k)] + interface_tile_name = tiles_by_grid[(grid_x+1, grid_y-k)] + int_tile_name = tiles_by_grid[(grid_x+2, grid_y-k)] else: - interface_tile_name = tiles_by_grid[(grid_x - 1, grid_y - k)] - int_tile_name = tiles_by_grid[(grid_x - 2, grid_y - k)] + interface_tile_name = tiles_by_grid[(grid_x-1, grid_y-k)] + int_tile_name = tiles_by_grid[(grid_x-2, grid_y-k)] segment_name = "SEG_" + tile_name.replace("_", "%d_" % k, 1) segtype = tile_type.lower().replace("_", "%d_" % k, 1) @@ -116,14 +112,12 @@ for tile_name, tile_data in database["tiles"].items(): database["segments"][segment_name]["words"] = 2 if k == 0: - database["segments"][segment_name]["tiles"] = [ - tile_name, interface_tile_name, int_tile_name] + database["segments"][segment_name]["tiles"] = [tile_name, interface_tile_name, int_tile_name] database["tiles"][tile_name]["segment"] = segment_name database["tiles"][interface_tile_name]["segment"] = segment_name database["tiles"][int_tile_name]["segment"] = segment_name else: - database["segments"][segment_name]["tiles"] = [ - interface_tile_name, int_tile_name] + database["segments"][segment_name]["tiles"] = [interface_tile_name, int_tile_name] database["tiles"][interface_tile_name]["segment"] = segment_name database["tiles"][int_tile_name]["segment"] = segment_name @@ -134,8 +128,7 @@ for tile_name, tile_data in database["tiles"].items(): for segment_name in database["segments"].keys(): if "baseaddr" in database["segments"][segment_name]: framebase, wordbase = database["segments"][segment_name]["baseaddr"] - inttile = [tile for tile in database["segments"][segment_name]["tiles"] - if database["tiles"][tile]["type"] in ["INT_L", "INT_R"]][0] + inttile = [tile for tile in database["segments"][segment_name]["tiles"] if database["tiles"][tile]["type"] in ["INT_L", "INT_R"]][0] grid_x = database["tiles"][inttile]["grid_x"] grid_y = database["tiles"][inttile]["grid_y"] @@ -163,8 +156,7 @@ for segment_name in database["segments"].keys(): seg = database["tiles"][tile]["segment"] if "baseaddr" in database["segments"][seg]: - assert database["segments"][seg]["baseaddr"] == [ - framebase, wordbase] + assert database["segments"][seg]["baseaddr"] == [framebase, wordbase] else: database["segments"][seg]["baseaddr"] = [framebase, wordbase] @@ -180,8 +172,7 @@ for segment_name in database["segments"].keys(): for segment_name in start_segments: framebase, wordbase = database["segments"][segment_name]["baseaddr"] - inttile = [tile for tile in database["segments"][segment_name]["tiles"] - if database["tiles"][tile]["type"] in ["INT_L", "INT_R"]][0] + inttile = [tile for tile in database["segments"][segment_name]["tiles"] if database["tiles"][tile]["type"] in ["INT_L", "INT_R"]][0] grid_x = database["tiles"][inttile]["grid_x"] grid_y = database["tiles"][inttile]["grid_y"] @@ -201,3 +192,4 @@ for segment_name in start_segments: # Write print(json.dumps(database, sort_keys=True, indent="\t")) + diff --git a/fuzzers/010-lutinit/generate.py b/fuzzers/010-lutinit/generate.py index b95ac678..8fcdc73b 100644 --- a/fuzzers/010-lutinit/generate.py +++ b/fuzzers/010-lutinit/generate.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -import sys -import re +import sys, re sys.path.append("../../../utils/") from segmaker import segmaker @@ -23,3 +22,4 @@ with open("design_%s.txt" % sys.argv[1], "r") as f: segmk.compile() segmk.write(sys.argv[1]) + diff --git a/fuzzers/011-ffconfig/generate.py b/fuzzers/011-ffconfig/generate.py index 86f7040e..6329e7d6 100644 --- a/fuzzers/011-ffconfig/generate.py +++ b/fuzzers/011-ffconfig/generate.py @@ -11,25 +11,22 @@ LDPE Primitive: Transparent Data Latch with Asynchronous Preset and Gate Enable from prims import * -import sys -import re +import sys, re sys.path.append("../../../utils/") from segmaker import segmaker segmk = segmaker("design.bits") - def ones(l): - # return l + [x + '_1' for x in l] - # return sorted(l + [x + '_1' for x in l]) + #return l + [x + '_1' for x in l] + #return sorted(l + [x + '_1' for x in l]) ret = [] for x in l: ret.append(x) ret.append(x + '_1') return ret - def loadtop(): ''' i,prim,loc,bel @@ -42,20 +39,17 @@ def loadtop(): f.readline() ret = {} for l in f: - i, prim, loc, bel, init = l.split(",") + i,prim,loc,bel,init = l.split(",") i = int(i) init = int(init) - ret[loc] = (i, prim, loc, bel, init) + ret[loc] = (i,prim,loc,bel,init) return ret - top = loadtop() - def vs2i(s): return {"1'b0": 0, "1'b1": 1}[s] - print("Loading tags from design.txt") with open("design.txt", "r") as f: for line in f: @@ -105,7 +99,7 @@ with open("design.txt", "r") as f: # Synchronous vs asynchronous FF # Unlike most bits, shared between all CLB FFs segmk.addtag(site, "FFSYNC", - cel_prim in ('FDSE', 'FDRE')) + cel_prim in ('FDSE', 'FDRE')) # Latch bit # Only applies to LUT6 (non-5) FF's @@ -119,7 +113,8 @@ with open("design.txt", "r") as f: Z => inversion ''' segmk.addtag(site, "%s.ZRST" % ff_name, - cel_prim in ('FDRE', 'FDCE', 'LDCE')) + cel_prim in ('FDRE', 'FDCE', 'LDCE')) segmk.compile() segmk.write() + diff --git a/fuzzers/011-ffconfig/prims.py b/fuzzers/011-ffconfig/prims.py index 1654b895..127c07e8 100644 --- a/fuzzers/011-ffconfig/prims.py +++ b/fuzzers/011-ffconfig/prims.py @@ -1,67 +1,64 @@ def ones(l): - # return l + [x + '_1' for x in l] - # return sorted(l + [x + '_1' for x in l]) + #return l + [x + '_1' for x in l] + #return sorted(l + [x + '_1' for x in l]) ret = [] for x in l: ret.append(x) ret.append(x + '_1') return ret - # The complete primitive sets ffprims_fall = ones([ - 'FD', - 'FDC', - 'FDCE', - 'FDE', - 'FDP', - 'FDPE', - 'FDR', - 'FDRE', - 'FDS', - 'FDSE', -]) + 'FD', + 'FDC', + 'FDCE', + 'FDE', + 'FDP', + 'FDPE', + 'FDR', + 'FDRE', + 'FDS', + 'FDSE', + ]) ffprims_lall = ones([ - 'LDC', - 'LDCE', - 'LDE', - 'LDPE', - 'LDP', -]) + 'LDC', + 'LDCE', + 'LDE', + 'LDPE', + 'LDP', + ]) # Base primitives ffprims_f = [ - 'FDRE', - 'FDSE', - 'FDCE', - 'FDPE', -] + 'FDRE', + 'FDSE', + 'FDCE', + 'FDPE', + ] ffprims_l = [ - 'LDCE', - 'LDPE', -] + 'LDCE', + 'LDPE', + ] ffprims = ffprims_f + ffprims_l - def isff(prim): return prim.startswith("FD") - def isl(prim): return prim.startswith("LD") - ff_bels_5 = [ - 'A5FF', - 'B5FF', - 'C5FF', - 'D5FF', -] + 'A5FF', + 'B5FF', + 'C5FF', + 'D5FF', + ] ff_bels_ffl = [ - 'AFF', - 'BFF', - 'CFF', - 'DFF', -] + 'AFF', + 'BFF', + 'CFF', + 'DFF', + ] ff_bels = ff_bels_ffl + ff_bels_5 #ff_bels = ff_bels_ffl + diff --git a/fuzzers/011-ffconfig/top.py b/fuzzers/011-ffconfig/top.py index 9db39fee..f3a5a06e 100644 --- a/fuzzers/011-ffconfig/top.py +++ b/fuzzers/011-ffconfig/top.py @@ -5,17 +5,14 @@ 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')) + 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 @@ -28,13 +25,11 @@ 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 @@ -69,8 +64,7 @@ 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)) +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])); @@ -85,8 +79,7 @@ for i in range(CLBN): #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)) + 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 @@ -495,3 +488,4 @@ module clb_LDPE_1 (input clk, input [3:0] din, output dout); endmodule ''') + diff --git a/fuzzers/012-clbn5ffmux/generate.py b/fuzzers/012-clbn5ffmux/generate.py index fbf1e72c..a07efb0c 100644 --- a/fuzzers/012-clbn5ffmux/generate.py +++ b/fuzzers/012-clbn5ffmux/generate.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -import sys -import re +import sys, re sys.path.append("../../../utils/") from segmaker import segmaker @@ -18,7 +17,7 @@ clb_N5FFMUX,SLICE_X14Y100,3,1 f = open('params.csv', 'r') f.readline() for l in f: - module, loc, n, def_a = l.split(',') + module,loc,n,def_a = l.split(',') def_a = int(def_a) n = int(n) #which = chr(ord('A') + n) @@ -31,3 +30,4 @@ for l in f: segmk.addtag(loc, "%c5FF.MUX.B" % which, 1 ^ def_a ^ inv) segmk.compile() segmk.write() + diff --git a/fuzzers/012-clbn5ffmux/top.py b/fuzzers/012-clbn5ffmux/top.py index f3eb0a0a..a712fda5 100644 --- a/fuzzers/012-clbn5ffmux/top.py +++ b/fuzzers/012-clbn5ffmux/top.py @@ -3,17 +3,14 @@ random.seed(0) import os import re - 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')) + 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 = 40 SLICEX, SLICEY = slice_xy() # 800 @@ -23,13 +20,11 @@ print('//SLICEY: %s' % str(SLICEY)) print('//SLICEN: %s' % str(SLICEN)) print('//Requested CLBs: %s' % str(CLBN)) - def gen_slices(): for slicey in range(*SLICEY): for slicex in range(*SLICEX): yield "SLICE_X%dY%d" % (slicex, slicey) - DIN_N = CLBN * 8 DOUT_N = CLBN * 8 @@ -66,8 +61,7 @@ endmodule f = open('params.csv', 'w') f.write('module,loc,n,def_a\n') slices = gen_slices() -print('module roi(input clk, input [%d:0] din, output [%d:0] dout);' % ( - DIN_N - 1, DOUT_N - 1)) +print('module roi(input clk, input [%d:0] din, output [%d:0] dout);' % (DIN_N - 1, DOUT_N - 1)) for i in range(CLBN): bel = '' @@ -78,8 +72,7 @@ for i in range(CLBN): print(' %s' % module) print(' #(.LOC("%s"), .N(%d), .DEF_A(%d))' % (loc, n, def_a)) - print( - ' clb_%d (.clk(clk), .din(din[ %d +: 8]), .dout(dout[ %d +: 8]));' % (i, 8 * i, 8 * i)) + print(' clb_%d (.clk(clk), .din(din[ %d +: 8]), .dout(dout[ %d +: 8]));' % (i, 8 * i, 8 * i)) f.write('%s,%s,%s,%s\n' % (module, loc, n, def_a)) f.close() @@ -210,3 +203,4 @@ module clb_N5FFMUX (input clk, input [7:0] din, output [7:0] dout); .D(ffds[0])); endmodule ''') + diff --git a/fuzzers/013-clbncy0/generate.py b/fuzzers/013-clbncy0/generate.py index 8e1beeaf..64ddd636 100644 --- a/fuzzers/013-clbncy0/generate.py +++ b/fuzzers/013-clbncy0/generate.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -import sys -import re +import sys, re sys.path.append("../../../utils/") from segmaker import segmaker @@ -18,7 +17,7 @@ clb_NCY0_O5,SLICE_X17Y100,A6LUT,2 f = open('params.csv', 'r') f.readline() for l in f: - module, loc, bel, n = l.split(',') + module,loc,bel,n = l.split(',') n = int(n) # A, B, etc which = bel[0] @@ -27,3 +26,4 @@ for l in f: segmk.addtag(loc, "CARRY4.%cCY0" % which, module == 'clb_NCY0_O5') segmk.compile() segmk.write() + diff --git a/fuzzers/013-clbncy0/top.py b/fuzzers/013-clbncy0/top.py index 9c45c498..254e9461 100644 --- a/fuzzers/013-clbncy0/top.py +++ b/fuzzers/013-clbncy0/top.py @@ -3,17 +3,14 @@ random.seed(0) import os import re - 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')) + 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 = 400 SLICEX, SLICEY = slice_xy() # 800 @@ -23,13 +20,11 @@ print('//SLICEY: %s' % str(SLICEY)) print('//SLICEN: %s' % str(SLICEN)) print('//Requested CLBs: %s' % str(CLBN)) - def gen_slices(): for slicey in range(*SLICEY): for slicex in range(*SLICEX): yield "SLICE_X%dY%d" % (slicex, slicey) - DIN_N = CLBN * 8 DOUT_N = CLBN * 8 @@ -68,8 +63,7 @@ endmodule f = open('params.csv', 'w') f.write('module,loc,bel,n\n') slices = gen_slices() -print('module roi(input clk, input [%d:0] din, output [%d:0] dout);' % ( - DIN_N - 1, DOUT_N - 1)) +print('module roi(input clk, input [%d:0] din, output [%d:0] dout);' % (DIN_N - 1, DOUT_N - 1)) for i in range(CLBN): bel = '' @@ -83,8 +77,7 @@ for i in range(CLBN): print(' %s' % module) print(' #(.LOC("%s"), .BEL("%s"), .N(%d))' % (loc, bel, n)) - print( - ' clb_%d (.clk(clk), .din(din[ %d +: 8]), .dout(dout[ %d +: 8]));' % (i, 8 * i, 8 * i)) + print(' clb_%d (.clk(clk), .din(din[ %d +: 8]), .dout(dout[ %d +: 8]));' % (i, 8 * i, 8 * i)) f.write('%s,%s,%s,%s\n' % (module, loc, bel, n)) f.close() @@ -163,3 +156,4 @@ module clb_NCY0_O5 (input clk, input [7:0] din, output [7:0] dout); CARRY4 carry4(.O(o), .CO(), .DI(di), .S(s), .CYINIT(1'b0), .CI()); endmodule ''') + diff --git a/fuzzers/014-ffsrcemux/generate.py b/fuzzers/014-ffsrcemux/generate.py index 35723702..ce577863 100644 --- a/fuzzers/014-ffsrcemux/generate.py +++ b/fuzzers/014-ffsrcemux/generate.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -import sys -import re +import sys, re sys.path.append("../../../utils/") from segmaker import segmaker @@ -18,7 +17,7 @@ clb_FDRE,SLICE_X14Y100,1,1 f = open('params.csv', 'r') f.readline() for l in f: - name, site, ce, r = l.split(',') + name,site,ce,r = l.split(',') ce = int(ce) r = int(r) @@ -31,3 +30,4 @@ for l in f: segmk.addtag(site, "SRUSEDMUX", r) segmk.compile() segmk.write() + diff --git a/fuzzers/014-ffsrcemux/top.py b/fuzzers/014-ffsrcemux/top.py index 4e7ac8ed..d87dc6ce 100644 --- a/fuzzers/014-ffsrcemux/top.py +++ b/fuzzers/014-ffsrcemux/top.py @@ -3,17 +3,14 @@ random.seed(0) import os import re - 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')) + 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 @@ -23,28 +20,26 @@ print('//SLICEY: %s' % str(SLICEY)) print('//SLICEN: %s' % str(SLICEN)) print('//Requested CLBs: %s' % str(CLBN)) - 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 ffprims = ( - 'FDRE', + 'FDRE', ) ff_bels = ( - 'AFF', - 'A5FF', - 'BFF', - 'B5FF', - 'CFF', - 'C5FF', - 'DFF', - 'D5FF', -) + 'AFF', + 'A5FF', + 'BFF', + 'B5FF', + 'CFF', + 'C5FF', + 'DFF', + 'D5FF', + ) print(''' module top(input clk, stb, di, output do); @@ -79,8 +74,7 @@ endmodule f = open('params.csv', 'w') f.write('name,loc,ce,r\n') slices = gen_slices() -print('module roi(input clk, input [%d:0] din, output [%d:0] dout);' % ( - DIN_N - 1, DOUT_N - 1)) +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(ffprims) force_ce = random.randint(0, 1) @@ -92,10 +86,8 @@ for i in range(CLBN): bel = "AFF" name = 'clb_%s' % ffprim print(' %s' % name) - print(' #(.LOC("%s"), .BEL("%s"), .FORCE_CE1(%d), .nFORCE_R0(%d))' % ( - loc, bel, force_ce, force_r)) - print( - ' clb_%d (.clk(clk), .din(din[ %d +: 4]), .dout(dout[ %d]));' % (i, 4 * i, 1 * i)) + print(' #(.LOC("%s"), .BEL("%s"), .FORCE_CE1(%d), .nFORCE_R0(%d))' % (loc, bel, force_ce, force_r)) + print(' clb_%d (.clk(clk), .din(din[ %d +: 4]), .dout(dout[ %d]));' % (i, 4 * i, 1 * i)) f.write('%s,%s,%s,%s\n' % (name, loc, force_ce, force_r)) f.close() print('''endmodule @@ -120,3 +112,4 @@ module clb_FDRE (input clk, input [3:0] din, output dout); ); endmodule ''') + diff --git a/fuzzers/015-clbnffmux/generate.py b/fuzzers/015-clbnffmux/generate.py index 1b125772..68eafb94 100644 --- a/fuzzers/015-clbnffmux/generate.py +++ b/fuzzers/015-clbnffmux/generate.py @@ -1,8 +1,6 @@ #!/usr/bin/env python3 -import sys -import os -import re +import sys, os, re sys.path.append("../../../utils/") from segmaker import segmaker @@ -20,7 +18,7 @@ clb_NFFMUX_O6,SLICE_X14Y100,3 f = open('params.csv', 'r') f.readline() for l in f: - module, loc, n = l.split(',') + module,loc,n = l.split(',') n = int(n) which = chr(ord('A') + n) # clb_NFFMUX_AX => AX @@ -65,22 +63,17 @@ for l in f: for loc, muxes in cache.items(): for which in muxes: for src in "F7 F8 CY O5 AX XOR O6".split(): - if src == "F7" and which not in "AC": - continue - if src == "F8" and which not in "B": - continue - if src == "AX": - src = which + "X" + if src == "F7" and which not in "AC": continue + if src == "F8" and which not in "B": continue + if src == "AX": src = which + "X" tag = "%sFF.DMUX.%s" % (which, src) segmk.addtag(loc, tag, 0) # we know that all bits for those MUXes are in frames 30 and 31, so filter all other bits - - def bitfilter(frame_idx, bit_idx): assert os.getenv("XRAY_DATABASE") == "artix7" return frame_idx in [30, 31] - segmk.compile(bitfilter=bitfilter) segmk.write() + diff --git a/fuzzers/015-clbnffmux/top.py b/fuzzers/015-clbnffmux/top.py index 5982933a..abd0ef97 100644 --- a/fuzzers/015-clbnffmux/top.py +++ b/fuzzers/015-clbnffmux/top.py @@ -3,17 +3,14 @@ random.seed(0) import os import re - 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')) + 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 = 400 SLICEX, SLICEY = slice_xy() # 800 @@ -23,13 +20,11 @@ print('//SLICEY: %s' % str(SLICEY)) print('//SLICEN: %s' % str(SLICEN)) print('//Requested CLBs: %s' % str(CLBN)) - def gen_slices(): for slicey in range(*SLICEY): for slicex in range(*SLICEX): yield "SLICE_X%dY%d" % (slicex, slicey) - DIN_N = CLBN * 8 DOUT_N = CLBN * 8 @@ -66,11 +61,9 @@ endmodule f = open('params.csv', 'w') f.write('module,loc,n\n') slices = gen_slices() -print('module roi(input clk, input [%d:0] din, output [%d:0] dout);' % ( - DIN_N - 1, DOUT_N - 1)) +print('module roi(input clk, input [%d:0] din, output [%d:0] dout);' % (DIN_N - 1, DOUT_N - 1)) for i in range(CLBN): - modules = ['clb_NFFMUX_' + - x for x in ['AX', 'CY', 'F78', 'O5', 'O6', 'XOR']] + modules = ['clb_NFFMUX_' + x for x in ['AX', 'CY', 'F78', 'O5', 'O6', 'XOR']] module = random.choice(modules) if module == 'clb_NFFMUX_F78': @@ -82,8 +75,7 @@ for i in range(CLBN): print(' %s' % module) print(' #(.LOC("%s"), .N(%d))' % (loc, n)) - print( - ' clb_%d (.clk(clk), .din(din[ %d +: 8]), .dout(dout[ %d +: 8]));' % (i, 8 * i, 8 * i)) + print(' clb_%d (.clk(clk), .din(din[ %d +: 8]), .dout(dout[ %d +: 8]));' % (i, 8 * i, 8 * i)) f.write('%s,%s,%s\n' % (module, loc, n)) f.close() @@ -338,3 +330,4 @@ module clb_NFFMUX_XOR (input clk, input [7:0] din, output [7:0] dout); .ff_d(caro)); endmodule ''') + diff --git a/fuzzers/016-clbnoutmux/generate.py b/fuzzers/016-clbnoutmux/generate.py index 55af0bf6..ea078cb4 100644 --- a/fuzzers/016-clbnoutmux/generate.py +++ b/fuzzers/016-clbnoutmux/generate.py @@ -1,8 +1,6 @@ #!/usr/bin/env python3 -import sys -import os -import re +import sys, os, re sys.path.append("../../../utils/") from segmaker import segmaker @@ -20,7 +18,7 @@ clb_NFFMUX_O6,SLICE_X14Y100,3 f = open('params.csv', 'r') f.readline() for l in f: - module, loc, n = l.split(',') + module,loc,n = l.split(',') n = int(n) which = chr(ord('A') + n) # clb_NFFMUX_AX => AX @@ -65,16 +63,12 @@ for l in f: for loc, muxes in cache.items(): for which in muxes: for src in "F7 F8 CY O5 XOR O6 5Q".split(): - if src == "F7" and which not in "AC": - continue - if src == "F8" and which not in "B": - continue - if src == "5Q": - src = which + "5Q" + if src == "F7" and which not in "AC": continue + if src == "F8" and which not in "B": continue + if src == "5Q": src = which + "5Q" tag = "%sMUX.%s" % (which, src) segmk.addtag(loc, tag, 0) - def bitfilter(frame_idx, bit_idx): assert os.getenv("XRAY_DATABASE") == "artix7" @@ -82,16 +76,15 @@ def bitfilter(frame_idx, bit_idx): # in this fuzzer we get some aliasing with those bits, so we have to manually exclude # them. (Maybe FIXME: read the bit locations from the database files) if (frame_idx, bit_idx) in [ - (30, 55), (31, 55), # D5MA - (31, 44), (31, 45), # C5MA - (30, 19), (31, 19), # B5MA - (30, 9), (31, 8), # A5MA - ]: - return False + (30, 55), (31, 55), # D5MA + (31, 44), (31, 45), # C5MA + (30, 19), (31, 19), # B5MA + (30, 9), (31, 8), # A5MA + ]: return False # we know that all bits for those MUXes are in frames 30 and 31, so filter all other bits return frame_idx in [30, 31] - segmk.compile(bitfilter=bitfilter) segmk.write() + diff --git a/fuzzers/016-clbnoutmux/top.py b/fuzzers/016-clbnoutmux/top.py index 2cdf82fc..11c3043c 100644 --- a/fuzzers/016-clbnoutmux/top.py +++ b/fuzzers/016-clbnoutmux/top.py @@ -3,17 +3,14 @@ random.seed(0) import os import re - 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')) + 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 = 400 SLICEX, SLICEY = slice_xy() # 800 @@ -23,13 +20,11 @@ print('//SLICEY: %s' % str(SLICEY)) print('//SLICEN: %s' % str(SLICEN)) print('//Requested CLBs: %s' % str(CLBN)) - def gen_slices(): for slicey in range(*SLICEY): for slicex in range(*SLICEX): yield "SLICE_X%dY%d" % (slicex, slicey) - DIN_N = CLBN * 8 DOUT_N = CLBN * 8 @@ -66,8 +61,7 @@ endmodule f = open('params.csv', 'w') f.write('module,loc,n\n') slices = gen_slices() -print('module roi(input clk, input [%d:0] din, output [%d:0] dout);' % ( - DIN_N - 1, DOUT_N - 1)) +print('module roi(input clk, input [%d:0] din, output [%d:0] dout);' % (DIN_N - 1, DOUT_N - 1)) for i in range(CLBN): # Don't have an O6 example modules = ['clb_NOUTMUX_' + x for x in ['CY', 'F78', 'O5', 'XOR', 'B5Q']] @@ -82,8 +76,7 @@ for i in range(CLBN): print(' %s' % module) print(' #(.LOC("%s"), .N(%d))' % (loc, n)) - print( - ' clb_%d (.clk(clk), .din(din[ %d +: 8]), .dout(dout[ %d +: 8]));' % (i, 8 * i, 8 * i)) + print(' clb_%d (.clk(clk), .din(din[ %d +: 8]), .dout(dout[ %d +: 8]));' % (i, 8 * i, 8 * i)) f.write('%s,%s,%s\n' % (module, loc, n)) f.close() @@ -312,3 +305,4 @@ module clb_NOUTMUX_B5Q (input clk, input [7:0] din, output [7:0] dout); .ff_q(dout[0])); endmodule ''') + diff --git a/fuzzers/017-clbprecyinit/generate.py b/fuzzers/017-clbprecyinit/generate.py index 8c9a1b3b..d39d743f 100644 --- a/fuzzers/017-clbprecyinit/generate.py +++ b/fuzzers/017-clbprecyinit/generate.py @@ -1,8 +1,6 @@ #!/usr/bin/env python3 -import sys -import os -import re +import sys, os, re sys.path.append("../../../utils/") from segmaker import segmaker @@ -13,7 +11,7 @@ print("Loading tags") f = open('params.csv', 'r') f.readline() for l in f: - module, loc, loc2 = l.split(',') + module,loc,loc2 = l.split(',') # clb_PRECYINIT_AX => AX src = module.replace('clb_PRECYINIT_', '') @@ -31,3 +29,4 @@ for l in f: segmk.compile() segmk.write() + diff --git a/fuzzers/017-clbprecyinit/top.py b/fuzzers/017-clbprecyinit/top.py index 00ac14cd..0b7abeb8 100644 --- a/fuzzers/017-clbprecyinit/top.py +++ b/fuzzers/017-clbprecyinit/top.py @@ -3,17 +3,14 @@ random.seed(0) import os import re - 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')) + 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 = 400 SLICEX, SLICEY = slice_xy() # 800 @@ -25,15 +22,12 @@ print('//Requested CLBs: %s' % str(CLBN)) # Rearranged to sweep Y so that carry logic is easy to allocate # XXX: careful...if odd number of Y in ROI will break carry - - def gen_slices(): for slicex in range(*SLICEX): for slicey in range(*SLICEY): # caller may reject position if needs more room yield ("SLICE_X%dY%d" % (slicex, slicey), (slicex, slicey)) - DIN_N = CLBN * 8 DOUT_N = CLBN * 8 @@ -70,8 +64,7 @@ endmodule f = open('params.csv', 'w') f.write('module,loc,loc2\n') slices = gen_slices() -print('module roi(input clk, input [%d:0] din, output [%d:0] dout);' % ( - DIN_N - 1, DOUT_N - 1)) +print('module roi(input clk, input [%d:0] din, output [%d:0] dout);' % (DIN_N - 1, DOUT_N - 1)) for i in range(CLBN): # Don't have an O6 example modules = ['clb_PRECYINIT_' + x for x in ['0', '1', 'AX', 'CIN']] @@ -95,8 +88,7 @@ for i in range(CLBN): print(' %s' % module) print(' #(%s)' % (params)) - print( - ' clb_%d (.clk(clk), .din(din[ %d +: 8]), .dout(dout[ %d +: 8]));' % (i, 8 * i, 8 * i)) + print(' clb_%d (.clk(clk), .din(din[ %d +: 8]), .dout(dout[ %d +: 8]));' % (i, 8 * i, 8 * i)) f.write('%s,%s\n' % (module, paramsc)) f.close() @@ -142,3 +134,4 @@ module clb_PRECYINIT_CIN (input clk, input [7:0] din, output [7:0] dout); CARRY4 carry4_ci(.O(), .CO(co), .DI(din[3:0]), .S(din[7:4]), .CYINIT(1'b0), .CI()); endmodule ''') + diff --git a/fuzzers/018-clbram/generate.py b/fuzzers/018-clbram/generate.py index 13c78a08..c3c6d118 100644 --- a/fuzzers/018-clbram/generate.py +++ b/fuzzers/018-clbram/generate.py @@ -1,8 +1,6 @@ #!/usr/bin/env python3 -import sys -import re -import os +import sys, re, os sys.path.append("../../../utils/") from segmaker import segmaker @@ -14,12 +12,12 @@ segmk = segmaker("design.bits") multi_bels_by = [ 'SRL16E', 'SRLC32E', -] + ] # Not BELable multi_bels_bn = [ 'RAM32X1S', 'RAM64X1S', -] + ] # Those requiring special resources # Just make one per module @@ -27,7 +25,7 @@ greedy_modules = [ 'my_RAM128X1D', 'my_RAM128X1S', 'my_RAM256X1S', -] + ] print("Loading tags") ''' @@ -40,10 +38,9 @@ f = open('params.csv', 'r') f.readline() for l in f: l = l.strip() - module, loc, p0, p1, p2, p3 = l.split(',') + module,loc,p0,p1,p2,p3 = l.split(',') - segmk.addtag(loc, "WA7USED", module in ( - 'my_RAM128X1D', 'my_RAM128X1S', 'my_RAM256X1S')) + segmk.addtag(loc, "WA7USED", module in ('my_RAM128X1D', 'my_RAM128X1S', 'my_RAM256X1S')) segmk.addtag(loc, "WA8USED", module == 'my_RAM256X1S') # (a, b, c, d) @@ -56,7 +53,7 @@ for l in f: if module == 'my_ram_N': # Each one of: SRL16E, SRLC32E, LUT6 - bels = [p0, p1, p2, p3] + bels = [p0,p1,p2,p3] # Clock Enable (CE) clock gate only enabled if we have clocked elements # A pure LUT6 does not, but everything else should @@ -85,12 +82,12 @@ for l in f: (1, 0, 0, 1), (1, 1, 0, 1), (1, 1, 1, 1), - ] + ] # Uses CD first pack2 = [ (0, 0, 1, 1), (1, 1, 1, 1), - ] + ] # Always use all 4 sites if module in ('my_RAM32M', 'my_RAM64M', 'my_RAM128X1D', 'my_RAM256X1S'): @@ -111,7 +108,7 @@ for l in f: assert(ram[3]) if module == 'my_RAM32X1D': - # Occupies CD + # Occupies CD size[2] = 1 size[3] = 1 elif module == 'my_RAM32M': @@ -128,13 +125,12 @@ for l in f: # FIXME module == segmk.addtag(loc, "%sLUT.SMALL" % bel, size[beli]) - def bitfilter(frame_idx, bit_idx): # Hack to remove aliased PIP bits on CE # We should either mix up routing more or exclude previous DB entries assert os.getenv("XRAY_DATABASE") == "artix7" return (frame_idx, bit_idx) not in [(0, 27), (1, 25), (1, 26), (1, 29)] - segmk.compile(bitfilter=bitfilter) segmk.write() + diff --git a/fuzzers/018-clbram/top.py b/fuzzers/018-clbram/top.py index 8adbf0a8..f1864364 100644 --- a/fuzzers/018-clbram/top.py +++ b/fuzzers/018-clbram/top.py @@ -20,17 +20,14 @@ random.seed(0) import os import re - 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')) + 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 = 50 SLICEX, SLICEY = slice_xy() # 800 @@ -42,8 +39,6 @@ print('//Requested CLBs: %s' % str(CLBN)) # Rearranged to sweep Y so that carry logic is easy to allocate # XXX: careful...if odd number of Y in ROI will break carry - - def gen_slicems(): ''' SLICEM at the following: @@ -59,7 +54,7 @@ def gen_slicems(): for slicex in (12, 14): for slicey in range(*SLICEY): # caller may reject position if needs more room - # yield ("SLICE_X%dY%d" % (slicex, slicey), (slicex, slicey)) + #yield ("SLICE_X%dY%d" % (slicex, slicey), (slicex, slicey)) yield "SLICE_X%dY%d" % (slicex, slicey) @@ -99,8 +94,7 @@ endmodule f = open('params.csv', 'w') f.write('module,loc,bela,belb,belc,beld\n') slices = gen_slicems() -print('module roi(input clk, input [%d:0] din, output [%d:0] dout);' % ( - DIN_N - 1, DOUT_N - 1)) +print('module roi(input clk, input [%d:0] din, output [%d:0] dout);' % (DIN_N - 1, DOUT_N - 1)) randluts = 0 for clbi in range(CLBN): loc = next(slices) @@ -119,7 +113,7 @@ for clbi in range(CLBN): 'SRL16E', 'SRLC32E', 'LUT6', - ] + ] bels = [] for beli in range(4): @@ -150,7 +144,7 @@ for clbi in range(CLBN): ('my_RAM128X1S_N', 2, 1), ('my_RAM128X1D', None, 1), ('my_RAM256X1S', None, 1), - ] + ] module, nmax, ff_param = random.choice(modules) @@ -171,8 +165,7 @@ for clbi in range(CLBN): print(' %s' % module) print(' #(.LOC("%s")%s)' % (loc, params)) - print(' clb_%d (.clk(clk), .din(din[ %d +: 8]), .dout(dout[ %d +: 8]));' % ( - clbi, 8 * clbi, 8 * clbi)) + print(' clb_%d (.clk(clk), .din(din[ %d +: 8]), .dout(dout[ %d +: 8]));' % (clbi, 8 * clbi, 8 * clbi)) f.write('%s,%s%s\n' % (module, loc, cparams)) f.close() @@ -517,3 +510,4 @@ module my_ram_N (input clk, input [7:0] din, output [7:0] dout); endmodule ''') + diff --git a/fuzzers/019-ndi1mux/generate.py b/fuzzers/019-ndi1mux/generate.py index 55f00acf..c0cf1a7f 100644 --- a/fuzzers/019-ndi1mux/generate.py +++ b/fuzzers/019-ndi1mux/generate.py @@ -5,9 +5,7 @@ # Can we find instance where they are not aliased? WA7USED = 0 -import sys -import re -import os +import sys, re, os sys.path.append("../../../utils/") from segmaker import segmaker @@ -25,7 +23,7 @@ f = open('params.csv', 'r') f.readline() for l in f: l = l.strip() - module, loc, c31, b31, a31 = l.split(',') + module,loc,c31,b31,a31 = l.split(',') c31 = int(c31) b31 = int(b31) a31 = int(a31) @@ -35,3 +33,4 @@ for l in f: segmk.compile() segmk.write() + diff --git a/fuzzers/019-ndi1mux/top.py b/fuzzers/019-ndi1mux/top.py index 120ae9eb..d50c4067 100644 --- a/fuzzers/019-ndi1mux/top.py +++ b/fuzzers/019-ndi1mux/top.py @@ -3,17 +3,14 @@ random.seed(0) import os import re - 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')) + 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 = 50 SLICEX, SLICEY = slice_xy() # 800 @@ -25,8 +22,6 @@ print('//Requested CLBs: %s' % str(CLBN)) # Rearranged to sweep Y so that carry logic is easy to allocate # XXX: careful...if odd number of Y in ROI will break carry - - def gen_slicems(): ''' SLICEM at the following: @@ -42,7 +37,7 @@ def gen_slicems(): for slicex in (12, 14): for slicey in range(*SLICEY): # caller may reject position if needs more room - # yield ("SLICE_X%dY%d" % (slicex, slicey), (slicex, slicey)) + #yield ("SLICE_X%dY%d" % (slicex, slicey), (slicex, slicey)) yield "SLICE_X%dY%d" % (slicex, slicey) @@ -82,8 +77,7 @@ endmodule f = open('params.csv', 'w') f.write('module,loc,c31,b31,a31\n') slices = gen_slicems() -print('module roi(input clk, input [%d:0] din, output [%d:0] dout);' % ( - DIN_N - 1, DOUT_N - 1)) +print('module roi(input clk, input [%d:0] din, output [%d:0] dout);' % (DIN_N - 1, DOUT_N - 1)) multis = 0 for clbi in range(CLBN): loc = next(slices) @@ -93,10 +87,8 @@ for clbi in range(CLBN): a31 = random.randint(0, 1) print(' %s' % module) - print(' #(.LOC("%s"), .C31(%d), .B31(%d), .A31(%d))' % - (loc, c31, b31, a31)) - print(' clb_%d (.clk(clk), .din(din[ %d +: 8]), .dout(dout[ %d +: 8]));' % ( - clbi, 8 * clbi, 8 * clbi)) + print(' #(.LOC("%s"), .C31(%d), .B31(%d), .A31(%d))' % (loc, c31, b31, a31)) + print(' clb_%d (.clk(clk), .din(din[ %d +: 8]), .dout(dout[ %d +: 8]));' % (clbi, 8 * clbi, 8 * clbi)) f.write('%s,%s,%d,%d,%d\n' % (module, loc, c31, b31, a31)) f.close() @@ -167,3 +159,4 @@ module my_NDI1MUX_NI_NMC31 (input clk, input [7:0] din, output [7:0] dout); .D(lutd[0])); endmodule ''') + diff --git a/fuzzers/050-intpips/generate.py b/fuzzers/050-intpips/generate.py index 44155a48..bd2e215c 100644 --- a/fuzzers/050-intpips/generate.py +++ b/fuzzers/050-intpips/generate.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -import sys -import re +import sys, re sys.path.append("../../../utils/") from segmaker import segmaker @@ -64,3 +63,4 @@ for tile, pips_srcs_dsts in tiledata.items(): segmk.compile() segmk.write() + diff --git a/fuzzers/051-imuxlout/generate.py b/fuzzers/051-imuxlout/generate.py index 5449ca2d..876d02c1 100644 --- a/fuzzers/051-imuxlout/generate.py +++ b/fuzzers/051-imuxlout/generate.py @@ -1,8 +1,6 @@ #!/usr/bin/env python3 -import sys -import re -import os +import sys, re, os sys.path.append("../../../utils/") from segmaker import segmaker @@ -63,13 +61,12 @@ for tile, pips_srcs_dsts in tiledata.items(): elif src_dst[1] not in dsts: segmk.addtag(tile, "%s.%s" % (dst, src), 0) - def bitfilter(frame_idx, bit_idx): assert os.getenv("XRAY_DATABASE") in ["artix7", "kintex7"] if frame_idx in [30, 31]: return False return True - segmk.compile(bitfilter=bitfilter) segmk.write() + diff --git a/fuzzers/051-imuxlout/maketodo.py b/fuzzers/051-imuxlout/maketodo.py index b4f70971..a05ae903 100644 --- a/fuzzers/051-imuxlout/maketodo.py +++ b/fuzzers/051-imuxlout/maketodo.py @@ -1,8 +1,6 @@ #!/usr/bin/env python3 -import os -import re - +import os, re def maketodo(pipfile, dbfile): todos = set() @@ -18,8 +16,6 @@ def maketodo(pipfile, dbfile): if re.match(r"^INT_[LR].IMUX(_L)?[0-9]+\.LOGIC_OUTS(_L)?[0-9]+$", line): print(line) +maketodo("pips_int_l.txt", "%s/%s/segbits_int_l.db" % (os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE"))) +maketodo("pips_int_r.txt", "%s/%s/segbits_int_r.db" % (os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE"))) -maketodo("pips_int_l.txt", "%s/%s/segbits_int_l.db" % - (os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE"))) -maketodo("pips_int_r.txt", "%s/%s/segbits_int_r.db" % - (os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE"))) diff --git a/fuzzers/052-clkin/generate.py b/fuzzers/052-clkin/generate.py index fd2fb226..53f43ad6 100644 --- a/fuzzers/052-clkin/generate.py +++ b/fuzzers/052-clkin/generate.py @@ -1,8 +1,6 @@ #!/usr/bin/env python3 -import sys -import os -import re +import sys, os, re sys.path.append("../../../utils/") from segmaker import segmaker @@ -60,7 +58,6 @@ for tile, pips_srcs_dsts in tiledata.items(): elif src_dst[1] not in dsts: segmk.addtag(tile, "%s.%s" % (dst, src), 0) - def bitfilter(frame_idx, bit_idx): assert os.getenv("XRAY_DATABASE") in ["artix7", "kintex7"] if frame_idx == 0 and bit_idx == 48: @@ -69,6 +66,6 @@ def bitfilter(frame_idx, bit_idx): return False return frame_idx in [0, 1] - segmk.compile(bitfilter=bitfilter) segmk.write() + diff --git a/fuzzers/052-clkin/maketodo.py b/fuzzers/052-clkin/maketodo.py index 8f528d0e..b64bb484 100644 --- a/fuzzers/052-clkin/maketodo.py +++ b/fuzzers/052-clkin/maketodo.py @@ -1,8 +1,6 @@ #!/usr/bin/env python3 -import os -import re - +import os, re def maketodo(pipfile, dbfile): todos = set() @@ -18,8 +16,6 @@ def maketodo(pipfile, dbfile): if re.match(r"^INT_[LR].CLK", line): print(line) +maketodo("pips_int_l.txt", "%s/%s/segbits_int_l.db" % (os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE"))) +maketodo("pips_int_r.txt", "%s/%s/segbits_int_r.db" % (os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE"))) -maketodo("pips_int_l.txt", "%s/%s/segbits_int_l.db" % - (os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE"))) -maketodo("pips_int_r.txt", "%s/%s/segbits_int_r.db" % - (os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE"))) diff --git a/fuzzers/053-ctrlin/generate.py b/fuzzers/053-ctrlin/generate.py index c96d6f3f..cb934dcb 100644 --- a/fuzzers/053-ctrlin/generate.py +++ b/fuzzers/053-ctrlin/generate.py @@ -1,8 +1,6 @@ #!/usr/bin/env python3 -import sys -import os -import re +import sys, os, re sys.path.append("../../../utils/") from segmaker import segmaker @@ -60,13 +58,12 @@ for tile, pips_srcs_dsts in tiledata.items(): elif src_dst[1] not in dsts: segmk.addtag(tile, "%s.%s" % (dst, src), 0) - def bitfilter(frame_idx, bit_idx): assert os.getenv("XRAY_DATABASE") in ["artix7", "kintex7"] if (frame_idx, bit_idx) in [(0, 48), (1, 31), (0, 32), (1, 35)]: return False return frame_idx in [0, 1] - segmk.compile(bitfilter=bitfilter) segmk.write() + diff --git a/fuzzers/053-ctrlin/maketodo.py b/fuzzers/053-ctrlin/maketodo.py index 24519bfc..29c66f6f 100644 --- a/fuzzers/053-ctrlin/maketodo.py +++ b/fuzzers/053-ctrlin/maketodo.py @@ -1,8 +1,6 @@ #!/usr/bin/env python3 -import os -import re - +import os, re def maketodo(pipfile, dbfile): todos = set() @@ -18,8 +16,6 @@ def maketodo(pipfile, dbfile): if re.match(r"^INT_[LR].CTRL", line): print(line) +maketodo("pips_int_l.txt", "%s/%s/segbits_int_l.db" % (os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE"))) +maketodo("pips_int_r.txt", "%s/%s/segbits_int_r.db" % (os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE"))) -maketodo("pips_int_l.txt", "%s/%s/segbits_int_l.db" % - (os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE"))) -maketodo("pips_int_r.txt", "%s/%s/segbits_int_r.db" % - (os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE"))) diff --git a/fuzzers/054-gfan/generate.py b/fuzzers/054-gfan/generate.py index 539917f6..ff4c97ef 100644 --- a/fuzzers/054-gfan/generate.py +++ b/fuzzers/054-gfan/generate.py @@ -1,8 +1,6 @@ #!/usr/bin/env python3 -import sys -import os -import re +import sys, os, re sys.path.append("../../../utils/") from segmaker import segmaker @@ -62,3 +60,4 @@ for tile, pips_srcs_dsts in tiledata.items(): segmk.compile() segmk.write() + diff --git a/fuzzers/054-gfan/maketodo.py b/fuzzers/054-gfan/maketodo.py index 747fa2d9..e6c42c8c 100644 --- a/fuzzers/054-gfan/maketodo.py +++ b/fuzzers/054-gfan/maketodo.py @@ -1,8 +1,6 @@ #!/usr/bin/env python3 -import os -import re - +import os, re def maketodo(pipfile, dbfile): todos = set() @@ -18,8 +16,6 @@ def maketodo(pipfile, dbfile): if re.match(r"^INT_[LR].GFAN", line) and not line.endswith(".GND_WIRE"): print(line) +maketodo("pips_int_l.txt", "%s/%s/segbits_int_l.db" % (os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE"))) +maketodo("pips_int_r.txt", "%s/%s/segbits_int_r.db" % (os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE"))) -maketodo("pips_int_l.txt", "%s/%s/segbits_int_l.db" % - (os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE"))) -maketodo("pips_int_r.txt", "%s/%s/segbits_int_r.db" % - (os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE"))) diff --git a/fuzzers/055-gnd/generate.py b/fuzzers/055-gnd/generate.py index c41880dd..3b043639 100644 --- a/fuzzers/055-gnd/generate.py +++ b/fuzzers/055-gnd/generate.py @@ -1,8 +1,6 @@ #!/usr/bin/env python3 -import sys -import os -import re +import sys, os, re sys.path.append("../../../utils/") from segmaker import segmaker @@ -62,3 +60,4 @@ for tile, pips_srcs_dsts in tiledata.items(): segmk.compile() segmk.write() + diff --git a/fuzzers/056-rempips/generate.py b/fuzzers/056-rempips/generate.py index e485bb56..092c0978 100644 --- a/fuzzers/056-rempips/generate.py +++ b/fuzzers/056-rempips/generate.py @@ -1,8 +1,6 @@ #!/usr/bin/env python3 -import sys -import os -import re +import sys, os, re sys.path.append("../../../utils/") from segmaker import segmaker @@ -72,3 +70,4 @@ for tile, pips_srcs_dsts in tiledata.items(): segmk.compile() segmk.write() + diff --git a/fuzzers/056-rempips/maketodo.py b/fuzzers/056-rempips/maketodo.py index 56d60016..77bebd97 100644 --- a/fuzzers/056-rempips/maketodo.py +++ b/fuzzers/056-rempips/maketodo.py @@ -1,8 +1,6 @@ #!/usr/bin/env python3 -import os -import re - +import os, re def maketodo(pipfile, dbfile): todos = set() @@ -18,8 +16,6 @@ def maketodo(pipfile, dbfile): if not line.endswith(".VCC_WIRE"): print(line) +maketodo("pips_int_l.txt", "%s/%s/segbits_int_l.db" % (os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE"))) +maketodo("pips_int_r.txt", "%s/%s/segbits_int_r.db" % (os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE"))) -maketodo("pips_int_l.txt", "%s/%s/segbits_int_l.db" % - (os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE"))) -maketodo("pips_int_r.txt", "%s/%s/segbits_int_r.db" % - (os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE"))) diff --git a/fuzzers/057-bipips/generate.py b/fuzzers/057-bipips/generate.py index 73a46055..8c2810fa 100644 --- a/fuzzers/057-bipips/generate.py +++ b/fuzzers/057-bipips/generate.py @@ -1,8 +1,6 @@ #!/usr/bin/env python3 -import sys -import os -import re +import sys, os, re sys.path.append("../../../utils/") from segmaker import segmaker @@ -42,11 +40,10 @@ for tile, pips_nodes in tiledata.items(): elif dst not in nodes and src not in nodes: segmk.addtag(tile, "%s.%s" % (dst, src), 0) - def bitfilter(frame_idx, bit_idx): assert os.getenv("XRAY_DATABASE") in ["artix7", "kintex7"] return frame_idx in [0, 1] - segmk.compile(bitfilter=bitfilter) segmk.write() + diff --git a/fuzzers/057-bipips/maketodo.py b/fuzzers/057-bipips/maketodo.py index 01d84186..04bcf701 100644 --- a/fuzzers/057-bipips/maketodo.py +++ b/fuzzers/057-bipips/maketodo.py @@ -1,8 +1,6 @@ #!/usr/bin/env python3 -import os -import re - +import os, re def maketodo(pipfile, dbfile): todos = set() @@ -18,8 +16,6 @@ def maketodo(pipfile, dbfile): for line in todos: print(line) +maketodo("bipips_int_l.txt", "%s/%s/segbits_int_l.db" % (os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE"))) +maketodo("bipips_int_r.txt", "%s/%s/segbits_int_r.db" % (os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE"))) -maketodo("bipips_int_l.txt", "%s/%s/segbits_int_l.db" % - (os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE"))) -maketodo("bipips_int_r.txt", "%s/%s/segbits_int_r.db" % - (os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE"))) diff --git a/fuzzers/058-hclkpips/generate.py b/fuzzers/058-hclkpips/generate.py index de97b394..a3d8fead 100644 --- a/fuzzers/058-hclkpips/generate.py +++ b/fuzzers/058-hclkpips/generate.py @@ -1,8 +1,6 @@ #!/usr/bin/env python3 -import sys -import os -import re +import sys, os, re sys.path.append("../../../utils/") from segmaker import segmaker @@ -52,3 +50,4 @@ for arg in sys.argv[1:]: segmk.compile() segmk.write(arg) + diff --git a/fuzzers/070-tileconn/generate.py b/fuzzers/070-tileconn/generate.py index a8e572bd..6c64dc2b 100644 --- a/fuzzers/070-tileconn/generate.py +++ b/fuzzers/070-tileconn/generate.py @@ -1,9 +1,6 @@ #!/usr/bin/env python3 -import os -import sys -import json -import re +import os, sys, json, re tilenodes = dict() grid2tile = dict() @@ -27,56 +24,38 @@ with open("nodewires.txt") as f: tilenodes[wire_tile] = dict() tilenodes[wire_tile][node] = wire_name - def filter_pair(type1, type2, wire1, wire2, delta_x, delta_y): if type1 in ["HCLK_L", "HCLK_R"]: is_vertical_wire = False - if wire1.startswith("HCLK_S"): - is_vertical_wire = True - if wire1.startswith("HCLK_N"): - is_vertical_wire = True - if wire1.startswith("HCLK_W"): - is_vertical_wire = True - if wire1.startswith("HCLK_E"): - is_vertical_wire = True - if wire1.startswith("HCLK_LV"): - is_vertical_wire = True - if wire1.startswith("HCLK_BYP"): - is_vertical_wire = True - if wire1.startswith("HCLK_FAN"): - is_vertical_wire = True - if wire1.startswith("HCLK_LEAF_CLK_"): - is_vertical_wire = True + if wire1.startswith("HCLK_S"): is_vertical_wire = True + if wire1.startswith("HCLK_N"): is_vertical_wire = True + if wire1.startswith("HCLK_W"): is_vertical_wire = True + if wire1.startswith("HCLK_E"): is_vertical_wire = True + if wire1.startswith("HCLK_LV"): is_vertical_wire = True + if wire1.startswith("HCLK_BYP"): is_vertical_wire = True + if wire1.startswith("HCLK_FAN"): is_vertical_wire = True + if wire1.startswith("HCLK_LEAF_CLK_"): is_vertical_wire = True is_horizontal_wire = False - if wire1.startswith("HCLK_CK_"): - is_horizontal_wire = True - if wire1.startswith("HCLK_INT_"): - is_horizontal_wire = True + if wire1.startswith("HCLK_CK_"): is_horizontal_wire = True + if wire1.startswith("HCLK_INT_"): is_horizontal_wire = True assert is_vertical_wire != is_horizontal_wire - if is_vertical_wire and delta_y == 0: - return True - if is_horizontal_wire and delta_x == 0: - return True + if is_vertical_wire and delta_y == 0: return True + if is_horizontal_wire and delta_x == 0: return True if type1 in ["INT_L", "INT_R"]: # the wires with underscore after BEG/END all connect vertically - if (("BEG_" in wire1) or ("END_" in wire1)) and delta_y == 0: - return True + if (("BEG_" in wire1) or ("END_" in wire1)) and delta_y == 0: return True if type1 in ["BRKH_INT", "BRKH_B_TERM_INT", "T_TERM_INT"]: - if delta_y == 0: - return True + if delta_y == 0: return True return False - def handle_pair(tile1, tile2): - if tile1 not in tilenodes: - return - if tile2 not in tilenodes: - return + if tile1 not in tilenodes: return + if tile2 not in tilenodes: return tile1data = grid["tiles"][tile1] tile2data = grid["tiles"][tile2] @@ -87,8 +66,7 @@ def handle_pair(tile1, tile2): if grid1_xy > grid2_xy: return handle_pair(tile2, tile1) - key = (tile1data["type"], tile2data["type"], - grid2_xy[0] - grid1_xy[0], grid2_xy[1] - grid1_xy[1]) + key = (tile1data["type"], tile2data["type"], grid2_xy[0] - grid1_xy[0], grid2_xy[1] - grid1_xy[1]) wire_pairs = set() @@ -106,10 +84,9 @@ def handle_pair(tile1, tile2): else: database[key] &= wire_pairs - for tile, tiledata in grid["tiles"].items(): - grid_right_xy = (tiledata["grid_x"] + 1, tiledata["grid_y"]) - grid_below_xy = (tiledata["grid_x"], tiledata["grid_y"] + 1) + grid_right_xy = (tiledata["grid_x"]+1, tiledata["grid_y"]) + grid_below_xy = (tiledata["grid_x"], tiledata["grid_y"]+1) if grid_right_xy in grid2tile: handle_pair(tile, grid2tile[grid_right_xy]) @@ -131,3 +108,4 @@ for key in sorted(database.keys()): print("Writing tileconn.json.") with open("tileconn.json", "w") as f: print(json.dumps(json_db, sort_keys=True, indent="\t"), file=f) + diff --git a/gridinfo/gridinfo-txt2json.py b/gridinfo/gridinfo-txt2json.py index 1f0a58f8..195486d2 100644 --- a/gridinfo/gridinfo-txt2json.py +++ b/gridinfo/gridinfo-txt2json.py @@ -13,20 +13,17 @@ db_site_prop = dict() db_site_tile = dict() db_site_bit = dict() - def add_tile(tile): if tile not in db_tiles: db_tiles.add(tile) db_tile_prop[tile] = dict() db_tile_sites[tile] = list() - def add_site(site): if site not in db_sites: db_sites.add(site) db_site_prop[site] = dict() - with open("%s.txt" % sys.argv[1]) as f: for line in f: line = line.split() @@ -92,36 +89,34 @@ for site, bit in db_site_bit.items(): for i in range(50): m = re.match("(.*)Y([0-9]+)", site) - this_site = "%sY%d" % (m.group(1), int(m.group(2)) + i) + this_site = "%sY%d" % (m.group(1), int(m.group(2))+i) tile = db_site_tile[this_site] - word = bit_word + 2 * i - if word >= 50: - word += 1 + word = bit_word + 2*i + if word >= 50: word += 1 entry = dict() - entry["BASE_FRAMEID"] = "0x%08x" % ((bit_type << 23) | ( - bit_half << 22) | (bit_row << 17) | (bit_col << 7)) + entry["BASE_FRAMEID"] = "0x%08x" % ((bit_type << 23) | (bit_half << 22) | (bit_row << 17) | (bit_col << 7)) entry["FRAME_TYPE"] = bit_type entry["FRAME_HALF"] = bit_half entry["FRAME_ROW"] = bit_row entry["FRAME_COLUMN"] = bit_col - entry["WORDS"] = [word, word + 1] + entry["WORDS"] = [word, word+1] database["tiles"][tile]["cfgcol"] = entry if database["tiles"][tile]["props"]["TILE_TYPE"] in ("CLBLL_L", "CLBLM_L"): col = int(db_tile_prop[tile]["COLUMN"]) row = int(db_tile_prop[tile]["ROW"]) - right_tile = loc_to_tile[(col + 1, row)] + right_tile = loc_to_tile[(col+1, row)] database["tiles"][right_tile]["cfgcol"] = entry if database["tiles"][tile]["props"]["TILE_TYPE"] in ("CLBLL_R", "CLBLM_R"): col = int(db_tile_prop[tile]["COLUMN"]) row = int(db_tile_prop[tile]["ROW"]) - left_tile = loc_to_tile[(col - 1, row)] + left_tile = loc_to_tile[(col-1, row)] database["tiles"][left_tile]["cfgcol"] = entry @@ -138,3 +133,4 @@ print("Number of tiles with assigned column: %d" % tile_cfgcol_count) with open("%s.json" % sys.argv[1], "w") as f: print(json.dumps(database, sort_keys=True, indent="\t"), file=f) + diff --git a/htmlgen/htmlgen.py b/htmlgen/htmlgen.py index 2bd53258..d5cc558b 100755 --- a/htmlgen/htmlgen.py +++ b/htmlgen/htmlgen.py @@ -1,9 +1,6 @@ #!/usr/bin/env python3 -import os -import sys -import json -import re +import os, sys, json, re from io import StringIO import argparse @@ -40,17 +37,13 @@ else: def get_setting(name): return os.getenv(name) -db_dir = os.path.join(get_setting("XRAY_DATABASE_DIR"), - get_setting("XRAY_DATABASE")) - - +db_dir = os.path.join(get_setting("XRAY_DATABASE_DIR"), get_setting("XRAY_DATABASE")) def db_open(fn): filename = os.path.join(db_dir, fn) if not os.path.exists(filename): return StringIO("") return open(os.path.join(db_dir, fn)) - def out_open(fn): out_dir = os.path.join(args.output, get_setting("XRAY_DATABASE")) os.makedirs(out_dir, exist_ok=True) @@ -58,7 +51,6 @@ def out_open(fn): print("Writing %s" % fp) return open(fp, "w") - clb_bitgroups_db = [ # copy&paste from zero_db in dbfixup.py "00_21 00_22 00_26 01_28|00_25 01_20 01_21 01_24", @@ -92,9 +84,9 @@ hclk_bitgroups_db = [ # groupings for SNWE bits in frames 2..7 for i in range(0, 64, 4): clb_bitgroups_db.append("02_%02d 03_%02d 05_%02d 06_%02d 07_%02d|05_%02d 03_%02d 04_%02d 04_%02d" % - (i + 1, i, i, i, i + 1, i + 3, i + 1, i + 1, i + 2)) + (i+1, i, i, i, i+1, i+3, i+1, i+1, i+2)) clb_bitgroups_db.append("02_%02d 04_%02d 05_%02d 05_%02d 06_%02d|02_%02d 03_%02d 04_%02d 07_%02d" % - (i + 2, i, i + 1, i + 2, i + 2, i + 3, i + 2, i + 3, i + 3)) + (i+2, i, i+1, i+2, i+2, i+3, i+2, i+3, i+3)) clb_left_bits = set() clb_right_bits = set() @@ -116,7 +108,6 @@ for entry in hclk_bitgroups_db: for bit in b.split(): hclk_right_bits.add(bit) - class UnionFind: def __init__(self): self.parents = dict() @@ -161,8 +152,8 @@ with db_open("tilegrid.json") as f: "tiles": { "NULL": { "grid_x": 0, - "grid_y": 0, - "type": "NULL", + "grid_y":0, + "type":"NULL", } } } @@ -237,13 +228,10 @@ grid_range = None grid_map = dict() with out_open("index.html") as f: - print("
Part: %s
ROI: %s
ROI Frames: %s
Part: %s
ROI: %s
ROI Frames: %s
| " % - (bgcolor, "\n".join(title)), file=f) + print(" | " % (bgcolor, "\n".join(title)), file=f) if "segment" in tiledata: segtype = segdata["type"].lower() print("%s | " % - (segtype, tilename.replace("_X", "%s | " % (pip) for bit in grp_bits: c = "-" - if bit in routebits[segtype] and pip in routebits[segtype][bit]: - c = "1" - if bit in routezbits[segtype] and pip in routezbits[segtype][bit]: - c = "0" + if bit in routebits[segtype] and pip in routebits[segtype][bit]: c = "1" + if bit in routezbits[segtype] and pip in routezbits[segtype][bit]: c = "0" line = "%s%s%s | " % (c, line, c) lines.append(line) @@ -733,10 +699,8 @@ function oml() { if len(shared_bits[bit]) > 1: if first_note: print("
| PIP | Type |
|---|---|
| PIP | Type |
| %s | %s |
| %s | %s |