diff --git a/.style.yapf b/.style.yapf new file mode 100644 index 00000000..b4973712 --- /dev/null +++ b/.style.yapf @@ -0,0 +1,6 @@ +[style] +based_on_style = pep8 +split_before_expression_after_opening_paren = True +split_before_first_argument = True +split_complex_comprehension = True +split_penalty_comprehension = 2100 diff --git a/.update-contributing.py b/.update-contributing.py index 56aee766..48bf9dfa 100755 --- a/.update-contributing.py +++ b/.update-contributing.py @@ -18,7 +18,8 @@ for line in open('README.md'): found = True # Footer -contrib.append("""\ +contrib.append( + """\ diff --git a/Makefile b/Makefile index b5b0e459..c34ebed6 100644 --- a/Makefile +++ b/Makefile @@ -10,4 +10,4 @@ go: format: find . -name \*.cc -and -not -path './third_party/*' -exec $(CLANG_FORMAT) -style=file -i {} \; find . -name \*.h -and -not -path './third_party/*' -exec $(CLANG_FORMAT) -style=file -i {} \; - find . -name \*.py -and -not -path './third_party/*' -exec autopep8 -i {} \; + find . -name \*.py -and -not -path './third_party/*' -exec yapf -p -i {} \; diff --git a/experiments/clbpips/generate.py b/experiments/clbpips/generate.py index 8563d4a3..c07273ff 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 diff --git a/experiments/example/segdata.py b/experiments/example/segdata.py index 3da025c6..6c8e33ef 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 @@ -13,7 +11,8 @@ luts = dict() carry = dict() print("Loading grid.") -with open("../../../gridinfo/grid-%s-db.json" % os.getenv("XRAY_PART"), "r") as f: +with open("../../../gridinfo/grid-%s-db.json" % os.getenv("XRAY_PART"), + "r") as f: grid = json.load(f) print("Loading bits.") @@ -54,13 +53,14 @@ with open("carrydata.txt", "r") as f: line = line.split() assert line[0] not in carry carry[line[0]] = dict() - for i, n in enumerate("CYINIT:ZRO:ONE:AX:CIN DI0:AX:O5 DI1:AX:O5 DI2:AX:O5 DI3:AX:O5".split()): + 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 - ################################################# # Group per Segment @@ -78,7 +78,8 @@ for tilename, tiledata in grid["tiles"].items(): continue segname = "%s_%02x" % ( - tiledata["cfgcol"]["BASE_FRAMEID"][2:], min(tiledata["cfgcol"]["WORDS"])) + tiledata["cfgcol"]["BASE_FRAMEID"][2:], + min(tiledata["cfgcol"]["WORDS"])) if not segname in segments: segments[segname] = {"bits": list(), "tags": dict()} @@ -99,7 +100,8 @@ for tilename, tiledata in grid["tiles"].items(): tile_type = tiledata["props"]["TYPE"] # LUT init bits are in the same position for all CLBL[LM]_[LR] tiles - if re.match("^CLBL[LM]_[LR]", tile_type) and "LUT.INIT" in name: + if re.match("^CLBL[LM]_[LR]", + tile_type) and "LUT.INIT" in name: tile_type = "CLBLX_X" segments[segname]["tags"]["%s.%s.%s" % @@ -118,12 +120,14 @@ 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() - ################################################# # Print diff --git a/experiments/gndvcc/generate.py b/experiments/gndvcc/generate.py index c41880dd..f358974d 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 @@ -24,11 +22,7 @@ with open("design.txt", "r") as f: pdir = int(pdir) if tile not in tiledata: - tiledata[tile] = { - "pips": set(), - "srcs": set(), - "dsts": set() - } + tiledata[tile] = {"pips": set(), "srcs": set(), "dsts": set()} if pip in pipdata: assert pipdata[pip] == (src, dst) diff --git a/experiments/gndvcc/maketodo.py b/experiments/gndvcc/maketodo.py index 46c0e2ea..07be79f6 100644 --- a/experiments/gndvcc/maketodo.py +++ b/experiments/gndvcc/maketodo.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -import os -import re +import os, re def maketodo(pipfile, dbfile): @@ -19,7 +18,9 @@ def maketodo(pipfile, dbfile): 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..bd91f039 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 @@ -27,11 +26,7 @@ def handle_design(prefix, second_pass): pdir = int(pdir) if tile not in tiledata: - tiledata[tile] = { - "pips": set(), - "srcs": set(), - "dsts": set() - } + tiledata[tile] = {"pips": set(), "srcs": set(), "dsts": set()} if pip in pipdata: assert pipdata[pip] == (src, dst) diff --git a/experiments/pipsroute/maketodo.py b/experiments/pipsroute/maketodo.py index d09991e8..dea2ff24 100644 --- a/experiments/pipsroute/maketodo.py +++ b/experiments/pipsroute/maketodo.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -import os -import re +import os, re def maketodo(pipfile, dbfile): @@ -24,7 +23,9 @@ def maketodo(pipfile, dbfile): 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..954459f6 100644 --- a/fuzzers/005-tilegrid/generate.py +++ b/fuzzers/005-tilegrid/generate.py @@ -1,10 +1,6 @@ #!/usr/bin/env python3 -import os -import sys -import json -import re - +import os, sys, json, re ####################################### # Read @@ -24,7 +20,6 @@ for arg in sys.argv[1:]: frame = int(line[5:5 + 8], 16) site_baseaddr[site] = "0x%08x" % (frame & ~0x7f) - ####################################### # Create initial database @@ -56,7 +51,6 @@ for record in tiles: if framebaseaddr is not None: tile_baseaddr[tile_name] = [framebaseaddr, 0] - ####################################### # Add Segments @@ -76,13 +70,15 @@ for tile_name, tile_data in database["tiles"].items(): database["segments"][segment_name] = dict() database["segments"][segment_name]["tiles"] = [ - tile_name, int_tile_name] + tile_name, int_tile_name + ] database["segments"][segment_name]["type"] = segtype database["segments"][segment_name]["frames"] = 36 database["segments"][segment_name]["words"] = 2 if tile_name in tile_baseaddr: - database["segments"][segment_name]["baseaddr"] = tile_baseaddr[tile_name] + database["segments"][segment_name]["baseaddr"] = tile_baseaddr[ + tile_name] database["tiles"][tile_name]["segment"] = segment_name database["tiles"][int_tile_name]["segment"] = segment_name @@ -117,25 +113,30 @@ for tile_name, tile_data in database["tiles"].items(): if k == 0: database["segments"][segment_name]["tiles"] = [ - tile_name, interface_tile_name, int_tile_name] + 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"][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["tiles"][interface_tile_name]["segment"] = segment_name + interface_tile_name, int_tile_name + ] + database["tiles"][interface_tile_name][ + "segment"] = segment_name database["tiles"][int_tile_name]["segment"] = segment_name - ####################################### # Populate segment base addresses: L/R along INT column 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"] @@ -164,11 +165,11 @@ for segment_name in database["segments"].keys(): if "baseaddr" in database["segments"][seg]: assert database["segments"][seg]["baseaddr"] == [ - framebase, wordbase] + framebase, wordbase + ] else: database["segments"][seg]["baseaddr"] = [framebase, wordbase] - ####################################### # Populate segment base addresses: Up along INT/HCLK columns @@ -180,8 +181,10 @@ 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"] @@ -196,7 +199,6 @@ for segment_name in start_segments: segname = database["tiles"][tiles_by_grid[(grid_x, grid_y)]]["segment"] database["segments"][segname]["baseaddr"] = [framebase, wordbase] - ####################################### # Write diff --git a/fuzzers/010-lutinit/generate.py b/fuzzers/010-lutinit/generate.py index b95ac678..b023af44 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 diff --git a/fuzzers/011-ffconfig/generate.py b/fuzzers/011-ffconfig/generate.py index 86f7040e..3510e0f9 100644 --- a/fuzzers/011-ffconfig/generate.py +++ b/fuzzers/011-ffconfig/generate.py @@ -1,5 +1,4 @@ #!/usr/bin/env python3 - ''' FDCE Primitive: D Flip-Flop with Clock Enable and Asynchronous Clear FDPE Primitive: D Flip-Flop with Clock Enable and Asynchronous Preset @@ -11,8 +10,7 @@ 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 @@ -21,8 +19,8 @@ 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) @@ -104,22 +102,21 @@ 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')) + segmk.addtag(site, "FFSYNC", cel_prim in ('FDSE', 'FDRE')) # Latch bit # Only applies to LUT6 (non-5) FF's if not is5: segmk.addtag(site, "LATCH", isl(cel_prim)) - ''' On name: The primitives you listed have a control input to set the FF value to zero (clear/reset), the other three primitives have a control input that sets the FF value to one. Z => inversion ''' - segmk.addtag(site, "%s.ZRST" % ff_name, - cel_prim in ('FDRE', 'FDCE', 'LDCE')) + segmk.addtag( + site, "%s.ZRST" % ff_name, + 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..11f40c22 100644 --- a/fuzzers/011-ffconfig/prims.py +++ b/fuzzers/011-ffconfig/prims.py @@ -1,6 +1,6 @@ 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) @@ -9,18 +9,19 @@ def ones(l): # The complete primitive sets -ffprims_fall = ones([ - 'FD', - 'FDC', - 'FDCE', - 'FDE', - 'FDP', - 'FDPE', - 'FDR', - 'FDRE', - 'FDS', - 'FDSE', -]) +ffprims_fall = ones( + [ + 'FD', + 'FDC', + 'FDCE', + 'FDE', + 'FDP', + 'FDPE', + 'FDR', + 'FDRE', + 'FDS', + 'FDSE', + ]) ffprims_lall = ones([ 'LDC', 'LDCE', diff --git a/fuzzers/011-ffconfig/top.py b/fuzzers/011-ffconfig/top.py index 9db39fee..5cd402fd 100644 --- a/fuzzers/011-ffconfig/top.py +++ b/fuzzers/011-ffconfig/top.py @@ -11,7 +11,8 @@ def slice_xy(): # 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')) + 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)) @@ -38,7 +39,8 @@ def gen_slices(): DIN_N = CLBN * 4 DOUT_N = CLBN * 1 -print(''' +print( + ''' module top(input clk, stb, di, output do); localparam integer DIN_N = %d; localparam integer DOUT_N = %d; @@ -69,8 +71,9 @@ 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])); @@ -84,17 +87,21 @@ for i in range(CLBN): 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)) + ' #(.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( + '''endmodule // --------------------------------------------------------------------- ''') -print(''' +print( + ''' module clb_FD (input clk, input [3:0] din, output dout); parameter LOC="SLICE_X16Y100"; parameter BEL="AFF"; diff --git a/fuzzers/012-clbn5ffmux/generate.py b/fuzzers/012-clbn5ffmux/generate.py index fbf1e72c..6c44af1c 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 diff --git a/fuzzers/012-clbn5ffmux/top.py b/fuzzers/012-clbn5ffmux/top.py index f3eb0a0a..657df90a 100644 --- a/fuzzers/012-clbn5ffmux/top.py +++ b/fuzzers/012-clbn5ffmux/top.py @@ -9,7 +9,8 @@ def slice_xy(): # 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')) + 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)) @@ -33,7 +34,8 @@ def gen_slices(): DIN_N = CLBN * 8 DOUT_N = CLBN * 8 -print(''' +print( + ''' module top(input clk, stb, di, output do); localparam integer DIN_N = %d; localparam integer DOUT_N = %d; @@ -66,8 +68,9 @@ 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 = '' @@ -79,17 +82,20 @@ 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)) + ' 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() -print('''endmodule +print( + '''endmodule // --------------------------------------------------------------------- ''') -print(''' +print( + ''' module clb_N5FFMUX (input clk, input [7:0] din, output [7:0] dout); parameter LOC="SLICE_X22Y100"; parameter N=-1; diff --git a/fuzzers/013-clbncy0/generate.py b/fuzzers/013-clbncy0/generate.py index 8e1beeaf..b3703363 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 diff --git a/fuzzers/013-clbncy0/top.py b/fuzzers/013-clbncy0/top.py index 9c45c498..174385c3 100644 --- a/fuzzers/013-clbncy0/top.py +++ b/fuzzers/013-clbncy0/top.py @@ -9,7 +9,8 @@ def slice_xy(): # 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')) + 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)) @@ -35,7 +36,8 @@ DOUT_N = CLBN * 8 lut_bels = ['A6LUT', 'B6LUT', 'C6LUT', 'D6LUT'] -print(''' +print( + ''' module top(input clk, stb, di, output do); localparam integer DIN_N = %d; localparam integer DOUT_N = %d; @@ -68,8 +70,9 @@ 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 = '' @@ -84,17 +87,20 @@ 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)) + ' 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() -print('''endmodule +print( + '''endmodule // --------------------------------------------------------------------- ''') -print(''' +print( + ''' module clb_NCY0_MX (input clk, input [7:0] din, output [7:0] dout); parameter LOC="SLICE_X16Y129_FIXME"; parameter BEL="A6LUT_FIXME"; diff --git a/fuzzers/014-ffsrcemux/generate.py b/fuzzers/014-ffsrcemux/generate.py index 35723702..befda57c 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 diff --git a/fuzzers/014-ffsrcemux/top.py b/fuzzers/014-ffsrcemux/top.py index 4e7ac8ed..115c02cc 100644 --- a/fuzzers/014-ffsrcemux/top.py +++ b/fuzzers/014-ffsrcemux/top.py @@ -9,7 +9,8 @@ def slice_xy(): # 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')) + 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)) @@ -32,9 +33,7 @@ def gen_slices(): DIN_N = CLBN * 4 DOUT_N = CLBN * 1 -ffprims = ( - 'FDRE', -) +ffprims = ('FDRE', ) ff_bels = ( 'AFF', 'A5FF', @@ -46,7 +45,8 @@ ff_bels = ( 'D5FF', ) -print(''' +print( + ''' module top(input clk, stb, di, output do); localparam integer DIN_N = %d; localparam integer DOUT_N = %d; @@ -79,8 +79,9 @@ 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,19 +93,23 @@ 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)) + ' #(.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 +print( + '''endmodule // --------------------------------------------------------------------- ''') -print(''' +print( + ''' module clb_FDRE (input clk, input [3:0] din, output dout); parameter LOC="SLICE_X16Y114"; parameter BEL="AFF"; diff --git a/fuzzers/015-clbnffmux/generate.py b/fuzzers/015-clbnffmux/generate.py index 1b125772..38fd2a80 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 @@ -25,7 +23,6 @@ for l in f: which = chr(ord('A') + n) # clb_NFFMUX_AX => AX src = module.replace('clb_NFFMUX_', '') - ''' AFFMUX 30_00 30_01 30_02 30_03 @@ -65,18 +62,14 @@ 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] diff --git a/fuzzers/015-clbnffmux/top.py b/fuzzers/015-clbnffmux/top.py index 5982933a..1c0b1343 100644 --- a/fuzzers/015-clbnffmux/top.py +++ b/fuzzers/015-clbnffmux/top.py @@ -9,7 +9,8 @@ def slice_xy(): # 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')) + 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)) @@ -33,7 +34,8 @@ def gen_slices(): DIN_N = CLBN * 8 DOUT_N = CLBN * 8 -print(''' +print( + ''' module top(input clk, stb, di, output do); localparam integer DIN_N = %d; localparam integer DOUT_N = %d; @@ -66,11 +68,13 @@ 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': @@ -83,17 +87,20 @@ 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)) + ' 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() -print('''endmodule +print( + '''endmodule // --------------------------------------------------------------------- ''') -print(''' +print( + ''' module myLUT8 (input clk, input [7:0] din, output lut8o, output lut7bo, output lut7ao, //caro: XOR additional result (main output) diff --git a/fuzzers/016-clbnoutmux/generate.py b/fuzzers/016-clbnoutmux/generate.py index 55af0bf6..7c8dda15 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 @@ -25,7 +23,6 @@ for l in f: which = chr(ord('A') + n) # clb_NFFMUX_AX => AX src = module.replace('clb_NOUTMUX_', '') - ''' BOUTMUX 30_20 30_21 30_22 30_23 @@ -65,12 +62,9 @@ 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) @@ -82,10 +76,14 @@ 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 + (30, 55), + (31, 55), # D5MA + (31, 44), + (31, 45), # C5MA + (30, 19), + (31, 19), # B5MA + (30, 9), + (31, 8), # A5MA ]: return False diff --git a/fuzzers/016-clbnoutmux/top.py b/fuzzers/016-clbnoutmux/top.py index 2cdf82fc..f0079d66 100644 --- a/fuzzers/016-clbnoutmux/top.py +++ b/fuzzers/016-clbnoutmux/top.py @@ -9,7 +9,8 @@ def slice_xy(): # 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')) + 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)) @@ -33,7 +34,8 @@ def gen_slices(): DIN_N = CLBN * 8 DOUT_N = CLBN * 8 -print(''' +print( + ''' module top(input clk, stb, di, output do); localparam integer DIN_N = %d; localparam integer DOUT_N = %d; @@ -66,8 +68,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): # Don't have an O6 example modules = ['clb_NOUTMUX_' + x for x in ['CY', 'F78', 'O5', 'XOR', 'B5Q']] @@ -83,17 +86,20 @@ 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)) + ' 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() -print('''endmodule +print( + '''endmodule // --------------------------------------------------------------------- ''') -print(''' +print( + ''' module myLUT8 (input clk, input [7:0] din, output lut8o, output lut7bo, output lut7ao, //caro: XOR additional result (main output) diff --git a/fuzzers/017-clbprecyinit/generate.py b/fuzzers/017-clbprecyinit/generate.py index 8c9a1b3b..5da0f0b9 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 @@ -16,7 +14,6 @@ for l in f: module, loc, loc2 = l.split(',') # clb_PRECYINIT_AX => AX src = module.replace('clb_PRECYINIT_', '') - ''' PRECYINIT 00_12 30_14 30_13 diff --git a/fuzzers/017-clbprecyinit/top.py b/fuzzers/017-clbprecyinit/top.py index 00ac14cd..908b65a0 100644 --- a/fuzzers/017-clbprecyinit/top.py +++ b/fuzzers/017-clbprecyinit/top.py @@ -9,7 +9,8 @@ def slice_xy(): # 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')) + 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)) @@ -23,10 +24,9 @@ print('//SLICEY: %s' % str(SLICEY)) print('//SLICEN: %s' % str(SLICEN)) 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): @@ -37,7 +37,8 @@ def gen_slices(): DIN_N = CLBN * 8 DOUT_N = CLBN * 8 -print(''' +print( + ''' module top(input clk, stb, di, output do); localparam integer DIN_N = %d; localparam integer DOUT_N = %d; @@ -70,8 +71,9 @@ 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']] @@ -96,17 +98,20 @@ 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)) + ' 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() -print('''endmodule +print( + '''endmodule // --------------------------------------------------------------------- ''') -print(''' +print( + ''' module clb_PRECYINIT_0 (input clk, input [7:0] din, output [7:0] dout); parameter LOC="SLICE_FIXME"; diff --git a/fuzzers/018-clbram/generate.py b/fuzzers/018-clbram/generate.py index 13c78a08..88b99c81 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 @@ -42,8 +40,9 @@ for l in f: l = l.strip() 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) @@ -93,7 +92,8 @@ for l in f: ] # Always use all 4 sites - if module in ('my_RAM32M', 'my_RAM64M', 'my_RAM128X1D', 'my_RAM256X1S'): + if module in ('my_RAM32M', 'my_RAM64M', 'my_RAM128X1D', + 'my_RAM256X1S'): ram = [1, 1, 1, 1] # Only can occupy CD I guess elif module == 'my_RAM32X1D': @@ -105,10 +105,10 @@ for l in f: elif module in ('my_RAM32X1S_N', 'my_RAM64X1S_N'): ram = pack4[n - 1] else: - assert(0) + assert (0) # All entries here requiare D - assert(ram[3]) + assert (ram[3]) if module == 'my_RAM32X1D': # Occupies CD @@ -119,7 +119,7 @@ for l in f: elif module == 'my_RAM32X1S_N': size = pack4[n - 1] else: - assert(not module.startswith('my_RAM32')) + assert (not module.startswith('my_RAM32')) # Now commit bits after marking 1's for beli, bel in enumerate('ABCD'): diff --git a/fuzzers/018-clbram/top.py b/fuzzers/018-clbram/top.py index 8adbf0a8..b2cac6c7 100644 --- a/fuzzers/018-clbram/top.py +++ b/fuzzers/018-clbram/top.py @@ -26,7 +26,8 @@ def slice_xy(): # 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')) + 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)) @@ -40,10 +41,9 @@ print('//SLICEY: %s' % str(SLICEY)) print('//SLICEN: %s' % str(SLICEN)) 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: @@ -55,18 +55,19 @@ def gen_slicems(): x = 6, 8, 10, 12, 14 ''' # TODO: generate this from DB - assert((12, 28) == SLICEX) + assert ((12, 28) == SLICEX) 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) DIN_N = CLBN * 8 DOUT_N = CLBN * 8 -print(''' +print( + ''' module top(input clk, stb, di, output do); localparam integer DIN_N = %d; localparam integer DOUT_N = %d; @@ -99,8 +100,9 @@ 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) @@ -141,15 +143,15 @@ for clbi in range(CLBN): else: modules = [ # (module, N max, FF opt) - ('my_RAM32X1S_N', 4, 0), - ('my_RAM32X1D', None, 0), - ('my_RAM32M', None, 0), - ('my_RAM64X1S_N', 4, 0), - ('my_RAM64X1D_N', 2, 0), - ('my_RAM64M', None, 0), - ('my_RAM128X1S_N', 2, 1), - ('my_RAM128X1D', None, 1), - ('my_RAM256X1S', None, 1), + ('my_RAM32X1S_N', 4, 0), + ('my_RAM32X1D', None, 0), + ('my_RAM32M', None, 0), + ('my_RAM64X1S_N', 4, 0), + ('my_RAM64X1D_N', 2, 0), + ('my_RAM64M', None, 0), + ('my_RAM128X1S_N', 2, 1), + ('my_RAM128X1D', None, 1), + ('my_RAM256X1S', None, 1), ] module, nmax, ff_param = random.choice(modules) @@ -171,18 +173,21 @@ 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() -print('''endmodule +print( + '''endmodule // --------------------------------------------------------------------- ''') -print(''' +print( + ''' //*************************************************************** //Basic diff --git a/fuzzers/019-ndi1mux/generate.py b/fuzzers/019-ndi1mux/generate.py index 55f00acf..84738272 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 diff --git a/fuzzers/019-ndi1mux/top.py b/fuzzers/019-ndi1mux/top.py index 120ae9eb..714d38de 100644 --- a/fuzzers/019-ndi1mux/top.py +++ b/fuzzers/019-ndi1mux/top.py @@ -9,7 +9,8 @@ def slice_xy(): # 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')) + 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)) @@ -23,10 +24,9 @@ print('//SLICEY: %s' % str(SLICEY)) print('//SLICEN: %s' % str(SLICEN)) 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: @@ -38,18 +38,19 @@ def gen_slicems(): x = 6, 8, 10, 12, 14 ''' # TODO: generate this from DB - assert((12, 28) == SLICEX) + assert ((12, 28) == SLICEX) 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) DIN_N = CLBN * 8 DOUT_N = CLBN * 8 -print(''' +print( + ''' module top(input clk, stb, di, output do); localparam integer DIN_N = %d; localparam integer DOUT_N = %d; @@ -82,8 +83,9 @@ 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,20 +95,24 @@ 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() -print('''endmodule +print( + '''endmodule // --------------------------------------------------------------------- ''') -print(''' +print( + ''' module my_NDI1MUX_NI_NMC31 (input clk, input [7:0] din, output [7:0] dout); parameter LOC = "SLICE_X6Y100"; parameter C31 = 0; diff --git a/fuzzers/050-intpips/generate.py b/fuzzers/050-intpips/generate.py index 44155a48..4e6f261f 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 @@ -23,11 +22,7 @@ with open("design.txt", "r") as f: pdir = int(pdir) if tile not in tiledata: - tiledata[tile] = { - "pips": set(), - "srcs": set(), - "dsts": set() - } + tiledata[tile] = {"pips": set(), "srcs": set(), "dsts": set()} if pip in pipdata: assert pipdata[pip] == (src, dst) diff --git a/fuzzers/051-imuxlout/generate.py b/fuzzers/051-imuxlout/generate.py index 5449ca2d..36b63abc 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 @@ -24,11 +22,7 @@ with open("design.txt", "r") as f: pdir = int(pdir) if tile not in tiledata: - tiledata[tile] = { - "pips": set(), - "srcs": set(), - "dsts": set() - } + tiledata[tile] = {"pips": set(), "srcs": set(), "dsts": set()} if pip in pipdata: assert pipdata[pip] == (src, dst) diff --git a/fuzzers/051-imuxlout/maketodo.py b/fuzzers/051-imuxlout/maketodo.py index b4f70971..65ded28f 100644 --- a/fuzzers/051-imuxlout/maketodo.py +++ b/fuzzers/051-imuxlout/maketodo.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -import os -import re +import os, re def maketodo(pipfile, dbfile): @@ -15,11 +14,14 @@ def maketodo(pipfile, dbfile): line = line.split() todos.remove(line[0]) for line in todos: - if re.match(r"^INT_[LR].IMUX(_L)?[0-9]+\.LOGIC_OUTS(_L)?[0-9]+$", line): + 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..45088648 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 @@ -24,11 +22,7 @@ with open("design.txt", "r") as f: pdir = int(pdir) if tile not in tiledata: - tiledata[tile] = { - "pips": set(), - "srcs": set(), - "dsts": set() - } + tiledata[tile] = {"pips": set(), "srcs": set(), "dsts": set()} if pip in pipdata: assert pipdata[pip] == (src, dst) diff --git a/fuzzers/052-clkin/maketodo.py b/fuzzers/052-clkin/maketodo.py index 8f528d0e..3c5dc523 100644 --- a/fuzzers/052-clkin/maketodo.py +++ b/fuzzers/052-clkin/maketodo.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -import os -import re +import os, re def maketodo(pipfile, dbfile): @@ -19,7 +18,9 @@ def maketodo(pipfile, dbfile): 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..b428fc6c 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 @@ -24,11 +22,7 @@ with open("design.txt", "r") as f: pdir = int(pdir) if tile not in tiledata: - tiledata[tile] = { - "pips": set(), - "srcs": set(), - "dsts": set() - } + tiledata[tile] = {"pips": set(), "srcs": set(), "dsts": set()} if pip in pipdata: assert pipdata[pip] == (src, dst) diff --git a/fuzzers/053-ctrlin/maketodo.py b/fuzzers/053-ctrlin/maketodo.py index 24519bfc..26311e34 100644 --- a/fuzzers/053-ctrlin/maketodo.py +++ b/fuzzers/053-ctrlin/maketodo.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -import os -import re +import os, re def maketodo(pipfile, dbfile): @@ -19,7 +18,9 @@ def maketodo(pipfile, dbfile): 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..943102d4 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 @@ -24,11 +22,7 @@ with open("design.txt", "r") as f: pdir = int(pdir) if tile not in tiledata: - tiledata[tile] = { - "pips": set(), - "srcs": set(), - "dsts": set() - } + tiledata[tile] = {"pips": set(), "srcs": set(), "dsts": set()} if pip in pipdata: assert pipdata[pip] == (src, dst) diff --git a/fuzzers/054-gfan/maketodo.py b/fuzzers/054-gfan/maketodo.py index 747fa2d9..b39d48bf 100644 --- a/fuzzers/054-gfan/maketodo.py +++ b/fuzzers/054-gfan/maketodo.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -import os -import re +import os, re def maketodo(pipfile, dbfile): @@ -15,11 +14,14 @@ def maketodo(pipfile, dbfile): line = line.split() todos.remove(line[0]) for line in todos: - if re.match(r"^INT_[LR].GFAN", line) and not line.endswith(".GND_WIRE"): + 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..f358974d 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 @@ -24,11 +22,7 @@ with open("design.txt", "r") as f: pdir = int(pdir) if tile not in tiledata: - tiledata[tile] = { - "pips": set(), - "srcs": set(), - "dsts": set() - } + tiledata[tile] = {"pips": set(), "srcs": set(), "dsts": set()} if pip in pipdata: assert pipdata[pip] == (src, dst) diff --git a/fuzzers/056-rempips/generate.py b/fuzzers/056-rempips/generate.py index e485bb56..5304ec88 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 @@ -31,11 +29,7 @@ with open("design.txt", "r") as f: pdir = int(pdir) if tile not in tiledata: - tiledata[tile] = { - "pips": set(), - "srcs": set(), - "dsts": set() - } + tiledata[tile] = {"pips": set(), "srcs": set(), "dsts": set()} if pip in pipdata: assert pipdata[pip] == (src, dst) diff --git a/fuzzers/056-rempips/maketodo.py b/fuzzers/056-rempips/maketodo.py index 56d60016..de136587 100644 --- a/fuzzers/056-rempips/maketodo.py +++ b/fuzzers/056-rempips/maketodo.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -import os -import re +import os, re def maketodo(pipfile, dbfile): @@ -19,7 +18,9 @@ def maketodo(pipfile, dbfile): 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..e27b57a1 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 diff --git a/fuzzers/057-bipips/maketodo.py b/fuzzers/057-bipips/maketodo.py index 01d84186..89d11e3c 100644 --- a/fuzzers/057-bipips/maketodo.py +++ b/fuzzers/057-bipips/maketodo.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -import os -import re +import os, re def maketodo(pipfile, dbfile): @@ -19,7 +18,9 @@ def maketodo(pipfile, dbfile): 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..c51d1a52 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 diff --git a/fuzzers/070-tileconn/generate.py b/fuzzers/070-tileconn/generate.py index a8e572bd..1c947461 100644 --- a/fuzzers/070-tileconn/generate.py +++ b/fuzzers/070-tileconn/generate.py @@ -1,16 +1,14 @@ #!/usr/bin/env python3 -import os -import sys -import json -import re +import os, sys, json, re tilenodes = dict() grid2tile = dict() database = dict() print("Loading %s grid." % os.getenv("XRAY_DATABASE")) -with open("%s/%s/tilegrid.json" % (os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE")), "r") as f: +with open("%s/%s/tilegrid.json" % (os.getenv("XRAY_DATABASE_DIR"), + os.getenv("XRAY_DATABASE")), "r") as f: grid = json.load(f) for tile, tiledata in grid["tiles"].items(): @@ -31,34 +29,22 @@ with open("nodewires.txt") as f: 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 @@ -66,17 +52,14 @@ def filter_pair(type1, type2, wire1, wire2, delta_x, delta_y): 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 +70,9 @@ 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() diff --git a/gridinfo/gridinfo-txt2json.py b/gridinfo/gridinfo-txt2json.py index 1f0a58f8..670b19a5 100644 --- a/gridinfo/gridinfo-txt2json.py +++ b/gridinfo/gridinfo-txt2json.py @@ -97,12 +97,12 @@ for site, bit in db_site_bit.items(): tile = db_site_tile[this_site] word = bit_word + 2 * i - if word >= 50: - word += 1 + 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 @@ -111,14 +111,16 @@ for site, bit in db_site_bit.items(): database["tiles"][tile]["cfgcol"] = entry - if database["tiles"][tile]["props"]["TILE_TYPE"] in ("CLBLL_L", "CLBLM_L"): + 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)] database["tiles"][right_tile]["cfgcol"] = entry - if database["tiles"][tile]["props"]["TILE_TYPE"] in ("CLBLL_R", "CLBLM_R"): + 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)] diff --git a/htmlgen/htmlgen.py b/htmlgen/htmlgen.py index 2bd53258..3b933fd1 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 @@ -11,10 +8,12 @@ import argparse parser = argparse.ArgumentParser( description="Generate a pretty HTML version of the documentation.") parser.add_argument( - '--output', default=os.path.join(os.path.curdir, 'html'), + '--output', + default=os.path.join(os.path.curdir, 'html'), help='Put the generated files in this directory (default current dir).') parser.add_argument( - '--settings', default=None, + '--settings', + default=None, help='Read the settings from file (default to environment).') args = parser.parse_args() @@ -23,7 +22,8 @@ if args.settings: settings_filename = args.settings settings = { - 'XRAY_DATABASE_DIR': os.path.abspath( + 'XRAY_DATABASE_DIR': + os.path.abspath( os.path.join(os.path.dirname(settings_filename), '..')), } with open(settings_filename) as f: @@ -37,11 +37,13 @@ if args.settings: def get_setting(name): return settings[name] 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): @@ -91,10 +93,12 @@ 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)) - 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)) + 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)) + 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)) clb_left_bits = set() clb_right_bits = set() @@ -151,7 +155,6 @@ routebits = dict() routezbits = dict() maskbits = dict() - print("Loading tilegrid.") with db_open("tilegrid.json") as f: data = f.read() @@ -218,7 +221,8 @@ for segname, segdata in grid["segments"].items(): print(" loading %s segbits." % int_tile_type) with db_open("segbits_%s.db" % int_tile_type) as f: for line in f: - if segtype in ["hclk_l", "hclk_r"] and ".ENABLE_BUFFER." in line: + if segtype in ["hclk_l", "hclk_r" + ] and ".ENABLE_BUFFER." in line: add_single_bit(line) else: add_pip_bits(line) @@ -229,7 +233,6 @@ for segname, segdata in grid["segments"].items(): _, bit = line.split() maskbits[segtype].add(bit) - ################################################# # Create Tilegrid Page @@ -237,13 +240,19 @@ grid_range = None grid_map = dict() with out_open("index.html") as f: - print("X-Ray %s Database" % - get_setting("XRAY_DATABASE").upper(), file=f) - print("

X-Ray %s Database

" % - get_setting("XRAY_DATABASE").upper(), file=f) + print( + "X-Ray %s Database" % + get_setting("XRAY_DATABASE").upper(), + file=f) + print( + "

X-Ray %s Database

" % get_setting("XRAY_DATABASE").upper(), + file=f) - print("

Part: %s
ROI: %s
ROI Frames: %s

" % - (get_setting("XRAY_PART"), get_setting("XRAY_ROI"), get_setting("XRAY_ROI_FRAMES")), file=f) + print( + "

Part: %s
ROI: %s
ROI Frames: %s

" % ( + get_setting("XRAY_PART"), get_setting("XRAY_ROI"), + get_setting("XRAY_ROI_FRAMES")), + file=f) for tilename, tiledata in grid["tiles"].items(): grid_x = tiledata["grid_x"] @@ -269,14 +278,10 @@ with out_open("index.html") as f: segdata = None bgcolor = "#aaaaaa" - if tiledata["type"] in ["INT_L", "INT_R"]: - bgcolor = "#aaaaff" - if tiledata["type"] in ["CLBLL_L", "CLBLL_R"]: - bgcolor = "#ffffaa" - if tiledata["type"] in ["CLBLM_L", "CLBLM_R"]: - bgcolor = "#ffaaaa" - if tiledata["type"] in ["HCLK_L", "HCLK_R"]: - bgcolor = "#aaffaa" + if tiledata["type"] in ["INT_L", "INT_R"]: bgcolor = "#aaaaff" + if tiledata["type"] in ["CLBLL_L", "CLBLL_R"]: bgcolor = "#ffffaa" + if tiledata["type"] in ["CLBLM_L", "CLBLM_R"]: bgcolor = "#ffaaaa" + if tiledata["type"] in ["HCLK_L", "HCLK_R"]: bgcolor = "#aaffaa" if tiledata["type"] in ["BRAM_INT_INTERFACE_L", "BRAM_L"]: bgcolor = "#aaffff" @@ -302,47 +307,64 @@ with out_open("index.html") as f: if "segment" in tiledata: if "baseaddr" in segdata: - title.append("Baseaddr: %s %d" % - tuple(segdata["baseaddr"])) + title.append( + "Baseaddr: %s %d" % tuple(segdata["baseaddr"])) else: - print("Warning: no baseaddr in segment %s (via tile %s)." % - (tiledata["segment"], tilename)) + print( + "Warning: no baseaddr in segment %s (via tile %s)." % + (tiledata["segment"], tilename)) tilename = tilename.replace("INT_INTERFACE_", "INTF_") tilename = tilename.replace("_X", "
X") tilename = tilename.replace("B_TERM", "B
TERM") - print("" % - (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", "
X")), file=f) + print( + "%s
" + % (segtype, tilename.replace("_X", "
X")), + file=f) else: - print("%s" % tilename.replace("_X", - "
X").replace("B_TERM", "B
TERM"), file=f) + print( + "%s" % tilename.replace( + "_X", "
X").replace("B_TERM", "B
TERM"), + file=f) print("", file=f) print("", file=f) print("", file=f) - ################################################# # Create Segment Pages for segtype in sorted(segbits.keys()): with out_open("seg_%s.html" % segtype) as f: - print("X-Ray %s Database: %s" % - (get_setting("XRAY_DATABASE").upper(), segtype.upper()), file=f) + print( + "X-Ray %s Database: %s" % + (get_setting("XRAY_DATABASE").upper(), segtype.upper()), + file=f) if segtype in ["hclk_l", "hclk_r"]: - print("

X-Ray %s Database: %s Segment

" % - (get_setting("XRAY_DATABASE").upper(), segtype.upper()), file=f) + print( + "

X-Ray %s Database: %s Segment

" % + (get_setting("XRAY_DATABASE").upper(), segtype.upper()), + file=f) else: - print("

X-Ray %s Database: %s Segment (%s Tile + %s Tile)

" % (get_setting("XRAY_DATABASE").upper(), segtype.upper(), - segtype.upper(), re.sub("clbl[lm]|bram[0-4]|dsp[0-4]", "int", segtype).upper()), file=f) + print( + "

X-Ray %s Database: %s Segment (%s Tile + %s Tile)

" % + ( + get_setting("XRAY_DATABASE").upper(), segtype.upper(), + segtype.upper(), + re.sub("clbl[lm]|bram[0-4]|dsp[0-4]", "int", + segtype).upper()), + file=f) - print(""" + print( + """ - """, file=f) + """, + file=f) print("", file=f) @@ -390,17 +413,23 @@ function oml() { print("", file=f) print("", file=f) for frameidx in range(segframes[segtype]): - print("" % - frameidx, file=f) + print( + "" + % frameidx, + file=f) print("", file=f) - for bitidx in range(31 if (segtype in ["hclk_l", "hclk_r"]) else 63, -1, -1): + for bitidx in range(31 if (segtype in ["hclk_l", "hclk_r"]) else 63, + -1, -1): print("", file=f) print( - "" % bitidx, file=f) + "" + % bitidx, + file=f) for frameidx in range(segframes[segtype]): bit_pos = "%02d_%02d" % (frameidx, bitidx) - bit_name = segbits_r[segtype][bit_pos] if bit_pos in segbits_r[segtype] else None + bit_name = segbits_r[segtype][bit_pos] if bit_pos in segbits_r[ + segtype] else None label = None title = [bit_pos] @@ -548,13 +577,19 @@ function oml() { elif re.match("^INT_[LR].LH", bn): bgcolor = "#4466bb" label = "LH" - elif re.match("^CLBL[LM]_[LR].SLICE[LM]_X[01].[ABCD]FF.DMUX", bn): + elif re.match( + "^CLBL[LM]_[LR].SLICE[LM]_X[01].[ABCD]FF.DMUX", + bn): bgcolor = "#88aaff" label = "DMX" - elif re.match("^CLBL[LM]_[LR].SLICE[LM]_X[01].[ABCD]MUX", bn): + elif re.match( + "^CLBL[LM]_[LR].SLICE[LM]_X[01].[ABCD]MUX", + bn): bgcolor = "#aa88ff" label = "OMX" - elif re.match("^CLBL[LM]_[LR].SLICE[LM]_X[01].PRECYINIT", bn): + elif re.match( + "^CLBL[LM]_[LR].SLICE[LM]_X[01].PRECYINIT", + bn): bgcolor = "#88aaff" label = "CYI" elif re.match("^HCLK_[LR]", bn) and "_B_BOT" in bn: @@ -580,8 +615,12 @@ function oml() { else: known_bits += 1 - print("" % - (bit_pos, bit_pos, bgcolor, "\n".join(title), onclick, label), file=f) + print( + "" + % ( + bit_pos, bit_pos, bgcolor, "\n".join(title), onclick, + label), + file=f) print("", file=f) print("
%d%d
%d%d%s%s
", file=f) @@ -590,10 +629,14 @@ function oml() { print("

Segment Configuration Bits

", file=f) if True: - print(" unused: %d, unknown: %d, known: %d, total: %d, percentage: %.2f%% (%.2f%%)" % ( - unused_bits, unknown_bits, known_bits, unused_bits + unknown_bits + known_bits, - 100 * known_bits / (unknown_bits + unused_bits + known_bits), - 100 * (known_bits + unused_bits) / (unknown_bits + unused_bits + known_bits))) + print( + " unused: %d, unknown: %d, known: %d, total: %d, percentage: %.2f%% (%.2f%%)" + % ( + unused_bits, unknown_bits, known_bits, + unused_bits + unknown_bits + known_bits, 100 * known_bits / + (unknown_bits + unused_bits + known_bits), + 100 * (known_bits + unused_bits) / + (unknown_bits + unused_bits + known_bits))) bits_by_prefix = dict() @@ -613,13 +656,16 @@ function oml() { print("

%s

" % prefix, file=f) print("", file=f) print( - "", file=f) + "", + file=f) trstyle = "" for bit_name, bit_pos in sorted(bits): trstyle = " bgcolor=\"#dddddd\"" if trstyle == "" else "" - print("" % - (trstyle, bit_name, bit_pos), file=f) + print( + "" % + (trstyle, bit_name, bit_pos), + file=f) print("
Bit NamePosition
Bit NamePosition
%s%s
%s%s
", file=f) @@ -694,8 +740,10 @@ function oml() { print("" % bit, file=f) print("", file=f) @@ -733,10 +781,13 @@ function oml() { if len(shared_bits[bit]) > 1: if first_note: print("

Note(s):
", file=f) - print("Warning: Groups sharing bit %s: %s." % - (bit, ", ".join(sorted(shared_bits[bit])))) - print("Groups sharing bit %s: %s.
" % - (bit, ", ".join(sorted(shared_bits[bit]))), file=f) + print( + "Warning: Groups sharing bit %s: %s." % + (bit, ", ".join(sorted(shared_bits[bit])))) + print( + "Groups sharing bit %s: %s.
" % + (bit, ", ".join(sorted(shared_bits[bit]))), + file=f) first_note = False if not first_note: print("

", file=f) @@ -745,14 +796,17 @@ function oml() { print("

Tile %s Pseudo PIPs

" % tile_type, file=f) print("", file=f) print( - "", file=f) + "", + file=f) trstyle = "" with db_open("ppips_%s.db" % tile_type.lower()) as fi: for line in fi: pip_name, pip_type = line.split() trstyle = " bgcolor=\"#dddddd\"" if trstyle == "" else "" - print("" % - (trstyle, pip_name, pip_type), file=f) + print( + "" % + (trstyle, pip_name, pip_type), + file=f) print("
PIPType
PIPType
%s%s
%s%s
", file=f) print("", file=f) diff --git a/requirements.txt b/requirements.txt index d81c0c25..612ba388 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1 +1,2 @@ -autopep8 +yapf +futures diff --git a/utils/dbcheck.py b/utils/dbcheck.py index 94984b8d..fe62bf5c 100644 --- a/utils/dbcheck.py +++ b/utils/dbcheck.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -import sys -import re +import sys, re database = dict() database_r = dict() @@ -39,8 +38,9 @@ def check_subsets(bits): for sub_bits in sorted(get_subsets(bits)): if sub_bits != bits and sub_bits != (): if sub_bits in database_r: - print("Warning: Entry %s %s is a subset of entry %s %s." % - (database_r[sub_bits], sub_bits, database_r[bits], bits)) + print( + "Warning: Entry %s %s is a subset of entry %s %s." % + (database_r[sub_bits], sub_bits, database_r[bits], bits)) for key, bits in database.items(): diff --git a/utils/dbfixup.py b/utils/dbfixup.py index 7e8f867a..859375cc 100644 --- a/utils/dbfixup.py +++ b/utils/dbfixup.py @@ -1,8 +1,6 @@ #/usr/bin/env python3 -import sys -import os -import re +import sys, os, re zero_db = [ "00_21 00_22 00_26 01_28|00_25 01_20 01_21 01_24", @@ -36,8 +34,8 @@ zero_db = [ def add_zero_bits(tile_type): assert os.getenv("XRAY_DATABASE") in ["artix7", "kintex7"] - dbfile = "%s/%s/segbits_%s.db" % (os.getenv("XRAY_DATABASE_DIR"), - os.getenv("XRAY_DATABASE"), tile_type) + dbfile = "%s/%s/segbits_%s.db" % ( + os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE"), tile_type) new_lines = set() llast = None diff --git a/utils/segmaker.py b/utils/segmaker.py index deaa4ee2..580edf12 100644 --- a/utils/segmaker.py +++ b/utils/segmaker.py @@ -1,12 +1,11 @@ -import os -import json -import re +import os, json, re class segmaker: def __init__(self, bitsfile): print("Loading %s grid." % os.getenv("XRAY_DATABASE")) - with open("../../../database/%s/tilegrid.json" % os.getenv("XRAY_DATABASE"), "r") as f: + with open("../../../database/%s/tilegrid.json" % + os.getenv("XRAY_DATABASE"), "r") as f: self.grid = json.load(f) self.bits = dict() @@ -62,17 +61,21 @@ class segmaker: segments[segname] = {"bits": set(), "tags": dict()} base_frame = int(segdata["baseaddr"][0][2:], 16) - for wordidx in range(segdata["baseaddr"][1], segdata["baseaddr"][1] + segdata["words"]): + for wordidx in range( + segdata["baseaddr"][1], + segdata["baseaddr"][1] + segdata["words"]): if base_frame not in self.bits: continue if wordidx not in self.bits[base_frame]: continue - for bit_frame, bit_wordidx, bit_bitidx in self.bits[base_frame][wordidx]: + for bit_frame, bit_wordidx, bit_bitidx in self.bits[ + base_frame][wordidx]: bitname_frame = bit_frame - base_frame - bitname_bit = 32 * \ - (bit_wordidx - - segdata["baseaddr"][1]) + bit_bitidx - if bitfilter is None or bitfilter(bitname_frame, bitname_bit): + bitname_bit = 32 * ( + bit_wordidx - segdata["baseaddr"][1] + ) + bit_bitidx + if bitfilter is None or bitfilter(bitname_frame, + bitname_bit): bitname = "%02d_%02d" % ( bitname_frame, bitname_bit) segments[segname]["bits"].add(bitname) @@ -129,5 +132,6 @@ class segmaker: for bitname in sorted(segdata["bits"]): print("bit %s_%s" % (segname, bitname), file=f) for tagname, tagval in sorted(segdata["tags"].items()): - print("tag %s_%s %d" % - (segname, tagname, tagval), file=f) + print( + "tag %s_%s %d" % (segname, tagname, tagval), + file=f) diff --git a/utils/segprint.py b/utils/segprint.py index 88641954..e464fa7b 100755 --- a/utils/segprint.py +++ b/utils/segprint.py @@ -1,10 +1,6 @@ #!/usr/bin/env python3 -import getopt -import sys -import os -import json -import re +import getopt, sys, os, json, re flag_z = False flag_b = False @@ -50,7 +46,8 @@ for o, a in opts: else: usage() -with open("%s/%s/tilegrid.json" % (os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE")), "r") as f: +with open("%s/%s/tilegrid.json" % (os.getenv("XRAY_DATABASE_DIR"), + os.getenv("XRAY_DATABASE")), "r") as f: grid = json.load(f) bitdata = dict() @@ -80,12 +77,16 @@ def get_database(segtype): segbitsdb[segtype] = list() - with open("%s/%s/segbits_%s.db" % (os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE"), segtype), "r") as f: + with open("%s/%s/segbits_%s.db" % (os.getenv("XRAY_DATABASE_DIR"), + os.getenv("XRAY_DATABASE"), segtype), + "r") as f: for line in f: line = line.split() segbitsdb[segtype].append(line) - with open("%s/%s/segbits_int_%s.db" % (os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE"), segtype[-1]), "r") as f: + with open("%s/%s/segbits_int_%s.db" % + (os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE"), + segtype[-1]), "r") as f: for line in f: line = line.split() segbitsdb[segtype].append(line) @@ -101,7 +102,8 @@ def handle_segment(segname): for i in range(segdata["frames"]): if (framebase + i) not in segframes: segframes[framebase + i] = set() - for j in range(segdata["baseaddr"][1], segdata["baseaddr"][1] + segdata["words"]): + for j in range(segdata["baseaddr"][1], + segdata["baseaddr"][1] + segdata["words"]): segframes[framebase + i].add(j) for frame in sorted(bitdata.keys()): for wordidx in sorted(bitdata[frame].keys()): @@ -166,8 +168,9 @@ def handle_segment(segname): if wordidx not in bitdata[frame]: continue for bitidx in bitdata[frame][wordidx]: - segbits.add("%02d_%02d" % (frame - baseframe, - 32 * (wordidx - basewordidx) + bitidx)) + segbits.add( + "%02d_%02d" % + (frame - baseframe, 32 * (wordidx - basewordidx) + bitidx)) if flag_d or flag_D: for entry in get_database(seginfo["type"]): diff --git a/utils/tileconnloops.py b/utils/tileconnloops.py index 99d6f103..1bb825a1 100644 --- a/utils/tileconnloops.py +++ b/utils/tileconnloops.py @@ -3,14 +3,14 @@ # Produces a complete database of wires in the ROI and their connections and tests if each # routing node is a tree (i.e. fails with an error when a loop is found). -import os -import sys -import json +import os, sys, json -with open("%s/%s/tilegrid.json" % (os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE")), "r") as f: +with open("%s/%s/tilegrid.json" % (os.getenv("XRAY_DATABASE_DIR"), + os.getenv("XRAY_DATABASE")), "r") as f: tilegrid = json.load(f)["tiles"] -with open("%s/%s/tileconn.json" % (os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE")), "r") as f: +with open("%s/%s/tileconn.json" % (os.getenv("XRAY_DATABASE_DIR"), + os.getenv("XRAY_DATABASE")), "r") as f: tileconn = json.load(f) grid = dict() @@ -25,12 +25,14 @@ for tilename, tiledata in tilegrid.items(): def check_tileconn_entry(tilename, tiledata, entry, idx): if idx == 0: otheridx = 1 - otherxy = (tiledata["grid_x"] + entry["grid_deltas"] - [0], tiledata["grid_y"] + entry["grid_deltas"][1]) + otherxy = ( + tiledata["grid_x"] + entry["grid_deltas"][0], + tiledata["grid_y"] + entry["grid_deltas"][1]) else: otheridx = 0 - otherxy = (tiledata["grid_x"] - entry["grid_deltas"] - [0], tiledata["grid_y"] - entry["grid_deltas"][1]) + otherxy = ( + tiledata["grid_x"] - entry["grid_deltas"][0], + tiledata["grid_y"] - entry["grid_deltas"][1]) if otherxy not in grid: return @@ -41,8 +43,10 @@ def check_tileconn_entry(tilename, tiledata, entry, idx): if othertiledata["type"] != entry["tile_types"][otheridx]: return - print(" Found relevant entry (%s %s %d %d): %s" % (entry["tile_types"][0], entry["tile_types"][1], - entry["grid_deltas"][0], entry["grid_deltas"][1], othertilename)) + print( + " Found relevant entry (%s %s %d %d): %s" % ( + entry["tile_types"][0], entry["tile_types"][1], + entry["grid_deltas"][0], entry["grid_deltas"][1], othertilename)) for pair in entry["wire_pairs"]: wirename = "%s/%s" % (tilename, pair[idx]) diff --git a/utils/tileconnwire.py b/utils/tileconnwire.py index 25b72a7f..50041b24 100644 --- a/utils/tileconnwire.py +++ b/utils/tileconnwire.py @@ -1,14 +1,13 @@ #!/usr/bin/env python3 -import os -import sys -import json +import os, sys, json if len(sys.argv) != 3: print("Usage example: python3 %s HCLK_R HCLK_SW6E3" % sys.argv[0]) sys.exit(1) -with open("%s/%s/tileconn.json" % (os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE")), "r") as f: +with open("%s/%s/tileconn.json" % (os.getenv("XRAY_DATABASE_DIR"), + os.getenv("XRAY_DATABASE")), "r") as f: tileconn = json.load(f) outdata = list() @@ -29,10 +28,13 @@ for entry in tileconn: continue outdata.append( - (delta_x, delta_y, entry["tile_types"][other_idx], wire_pair[other_idx])) - max_tiletype_len = max(max_tiletype_len, len( - entry["tile_types"][other_idx])) + ( + delta_x, delta_y, entry["tile_types"][other_idx], + wire_pair[other_idx])) + max_tiletype_len = max( + max_tiletype_len, len(entry["tile_types"][other_idx])) for entry in outdata: - print("%3d %3d %-*s %s" % - (entry[0], entry[1], max_tiletype_len, entry[2], entry[3])) + print( + "%3d %3d %-*s %s" % + (entry[0], entry[1], max_tiletype_len, entry[2], entry[3]))