From 8f172bccf2bd28a55650ff6695e10f601bc77085 Mon Sep 17 00:00:00 2001 From: John McMaster Date: Wed, 7 Nov 2018 14:20:19 -0800 Subject: [PATCH] dbfixup: apply patches per project instead of globally Signed-off-by: John McMaster --- fuzzers/015-clbnffmux/Makefile | 1 + fuzzers/015-clbnffmux/bits.dbf | 9 +++++ fuzzers/016-clbnoutmux/Makefile | 1 + fuzzers/016-clbnoutmux/bits.dbf | 9 +++++ fuzzers/017-clbprecyinit/Makefile | 1 + fuzzers/017-clbprecyinit/bits.dbf | 4 +++ fuzzers/050-intpips/Makefile | 2 +- fuzzers/051-imuxlout/Makefile | 2 +- fuzzers/052-clkin/Makefile | 2 +- fuzzers/053-ctrlin/Makefile | 2 +- fuzzers/054-gfan/Makefile | 2 +- fuzzers/055-gnd/Makefile | 2 +- fuzzers/056-rempips/Makefile | 2 +- fuzzers/057-bipips/Makefile | 2 +- fuzzers/058-hclkpips/Makefile | 2 +- fuzzers/100-dsp-mskpat/Makefile | 2 +- fuzzers/clb.mk | 12 +++---- utils/dbfixup.py | 58 ++++++++++++++++--------------- 18 files changed, 71 insertions(+), 44 deletions(-) create mode 100644 fuzzers/015-clbnffmux/bits.dbf create mode 100644 fuzzers/016-clbnoutmux/bits.dbf create mode 100644 fuzzers/017-clbprecyinit/bits.dbf diff --git a/fuzzers/015-clbnffmux/Makefile b/fuzzers/015-clbnffmux/Makefile index f5f5a631..df45a018 100644 --- a/fuzzers/015-clbnffmux/Makefile +++ b/fuzzers/015-clbnffmux/Makefile @@ -1,3 +1,4 @@ N := 1 +DBFIXUP := ${XRAY_DBFIXUP} --db_root build --zero-db bits.dbf --zero-tile-types clblx include ../clb.mk diff --git a/fuzzers/015-clbnffmux/bits.dbf b/fuzzers/015-clbnffmux/bits.dbf new file mode 100644 index 00000000..ffed4810 --- /dev/null +++ b/fuzzers/015-clbnffmux/bits.dbf @@ -0,0 +1,9 @@ +"30_00 30_01 30_02 30_03" +"30_24 30_25 30_26 30_27" +"30_35 30_36 30_37 30_38" +"30_59 30_60 30_61 30_62" +"30_04 31_00 31_01 31_02" +"31_24 31_25 31_26 31_27" +"31_35 31_36 31_37 31_38" +"30_58 31_60 31_61 31_62" + diff --git a/fuzzers/016-clbnoutmux/Makefile b/fuzzers/016-clbnoutmux/Makefile index f5f5a631..df45a018 100644 --- a/fuzzers/016-clbnoutmux/Makefile +++ b/fuzzers/016-clbnoutmux/Makefile @@ -1,3 +1,4 @@ N := 1 +DBFIXUP := ${XRAY_DBFIXUP} --db_root build --zero-db bits.dbf --zero-tile-types clblx include ../clb.mk diff --git a/fuzzers/016-clbnoutmux/bits.dbf b/fuzzers/016-clbnoutmux/bits.dbf new file mode 100644 index 00000000..f85d38df --- /dev/null +++ b/fuzzers/016-clbnoutmux/bits.dbf @@ -0,0 +1,9 @@ +30_06 30_07 30_08 30_11 +30_20 30_21 30_22 30_23 +30_40 30_43 30_44 30_45 +30_51 30_52 30_56 30_57 +30_05 31_07 31_09 31_10 +30_28 30_29 31_20 31_21 +30_41 30_42 31_40 31_43 +30_53 31_53 31_56 31_57 + diff --git a/fuzzers/017-clbprecyinit/Makefile b/fuzzers/017-clbprecyinit/Makefile index f5f5a631..df45a018 100644 --- a/fuzzers/017-clbprecyinit/Makefile +++ b/fuzzers/017-clbprecyinit/Makefile @@ -1,3 +1,4 @@ N := 1 +DBFIXUP := ${XRAY_DBFIXUP} --db_root build --zero-db bits.dbf --zero-tile-types clblx include ../clb.mk diff --git a/fuzzers/017-clbprecyinit/bits.dbf b/fuzzers/017-clbprecyinit/bits.dbf new file mode 100644 index 00000000..70f04f31 --- /dev/null +++ b/fuzzers/017-clbprecyinit/bits.dbf @@ -0,0 +1,4 @@ +# Reserved for PRECYINIT.0 +# Running on empty DB still removes +# https://github.com/SymbiFlow/prjxray/issues/232 + diff --git a/fuzzers/050-intpips/Makefile b/fuzzers/050-intpips/Makefile index 4bc41c16..75ea7774 100644 --- a/fuzzers/050-intpips/Makefile +++ b/fuzzers/050-intpips/Makefile @@ -12,7 +12,7 @@ database: $(SPECIMENS_OK) ${XRAY_MASKMERGE} mask_clblm_r.segbits $(addsuffix /segdata_int_r.txt,$(SPECIMENS)) pushdb: - ${XRAY_DBFIXUP} --db-dir . --clb-int + ${XRAY_DBFIXUP} --db_root . --clb-int ${XRAY_MERGEDB} int_l seg_int_l.segbits ${XRAY_MERGEDB} int_r seg_int_r.segbits ${XRAY_MERGEDB} mask_clbll_l mask_clbll_l.segbits diff --git a/fuzzers/051-imuxlout/Makefile b/fuzzers/051-imuxlout/Makefile index 46a1e5e8..909c1698 100644 --- a/fuzzers/051-imuxlout/Makefile +++ b/fuzzers/051-imuxlout/Makefile @@ -8,7 +8,7 @@ database: $(SPECIMENS_OK) ${XRAY_SEGMATCH} -m 5 -M 15 -o seg_int_r.segbits $(addsuffix /segdata_int_r.txt,$(SPECIMENS)) pushdb: - ${XRAY_DBFIXUP} --db-dir . --clb-int + ${XRAY_DBFIXUP} --db_root . --clb-int ${XRAY_MERGEDB} int_l seg_int_l.segbits ${XRAY_MERGEDB} int_r seg_int_r.segbits diff --git a/fuzzers/052-clkin/Makefile b/fuzzers/052-clkin/Makefile index 12edecb2..81aa681b 100644 --- a/fuzzers/052-clkin/Makefile +++ b/fuzzers/052-clkin/Makefile @@ -8,7 +8,7 @@ database: $(SPECIMENS_OK) ${XRAY_SEGMATCH} -m 5 -M 15 -o seg_int_r.segbits $(addsuffix /segdata_int_r.txt,$(SPECIMENS)) pushdb: - ${XRAY_DBFIXUP} --db-dir . --clb-int + ${XRAY_DBFIXUP} --db_root . --clb-int ${XRAY_MERGEDB} int_l seg_int_l.segbits ${XRAY_MERGEDB} int_r seg_int_r.segbits diff --git a/fuzzers/053-ctrlin/Makefile b/fuzzers/053-ctrlin/Makefile index 12edecb2..81aa681b 100644 --- a/fuzzers/053-ctrlin/Makefile +++ b/fuzzers/053-ctrlin/Makefile @@ -8,7 +8,7 @@ database: $(SPECIMENS_OK) ${XRAY_SEGMATCH} -m 5 -M 15 -o seg_int_r.segbits $(addsuffix /segdata_int_r.txt,$(SPECIMENS)) pushdb: - ${XRAY_DBFIXUP} --db-dir . --clb-int + ${XRAY_DBFIXUP} --db_root . --clb-int ${XRAY_MERGEDB} int_l seg_int_l.segbits ${XRAY_MERGEDB} int_r seg_int_r.segbits diff --git a/fuzzers/054-gfan/Makefile b/fuzzers/054-gfan/Makefile index 12edecb2..81aa681b 100644 --- a/fuzzers/054-gfan/Makefile +++ b/fuzzers/054-gfan/Makefile @@ -8,7 +8,7 @@ database: $(SPECIMENS_OK) ${XRAY_SEGMATCH} -m 5 -M 15 -o seg_int_r.segbits $(addsuffix /segdata_int_r.txt,$(SPECIMENS)) pushdb: - ${XRAY_DBFIXUP} --db-dir . --clb-int + ${XRAY_DBFIXUP} --db_root . --clb-int ${XRAY_MERGEDB} int_l seg_int_l.segbits ${XRAY_MERGEDB} int_r seg_int_r.segbits diff --git a/fuzzers/055-gnd/Makefile b/fuzzers/055-gnd/Makefile index e92d2497..433aaa57 100644 --- a/fuzzers/055-gnd/Makefile +++ b/fuzzers/055-gnd/Makefile @@ -8,7 +8,7 @@ database: $(SPECIMENS_OK) ${XRAY_SEGMATCH} -m 5 -M 15 -o seg_int_r.segbits $(addsuffix /segdata_int_r.txt,$(SPECIMENS)) pushdb: - ${XRAY_DBFIXUP} --db-dir . --clb-int + ${XRAY_DBFIXUP} --db_root . --clb-int ${XRAY_MERGEDB} int_l seg_int_l.segbits ${XRAY_MERGEDB} int_r seg_int_r.segbits diff --git a/fuzzers/056-rempips/Makefile b/fuzzers/056-rempips/Makefile index ccf3ceb4..da89b0f6 100644 --- a/fuzzers/056-rempips/Makefile +++ b/fuzzers/056-rempips/Makefile @@ -8,7 +8,7 @@ database: $(SPECIMENS_OK) ${XRAY_SEGMATCH} -m 5 -M 15 -o seg_int_r.segbits $(addsuffix /segdata_int_r.txt,$(SPECIMENS)) pushdb: - ${XRAY_DBFIXUP} --db-dir . --clb-int + ${XRAY_DBFIXUP} --db_root . --clb-int ${XRAY_MERGEDB} int_l seg_int_l.segbits ${XRAY_MERGEDB} int_r seg_int_r.segbits diff --git a/fuzzers/057-bipips/Makefile b/fuzzers/057-bipips/Makefile index 7c2d5ad1..27621a26 100644 --- a/fuzzers/057-bipips/Makefile +++ b/fuzzers/057-bipips/Makefile @@ -8,7 +8,7 @@ database: $(SPECIMENS_OK) ${XRAY_SEGMATCH} -m 5 -M 15 -o seg_int_r.segbits $(addsuffix /segdata_int_r.txt,$(SPECIMENS)) pushdb: - ${XRAY_DBFIXUP} --db-dir . --clb-int + ${XRAY_DBFIXUP} --db_root . --clb-int ${XRAY_MERGEDB} int_l seg_int_l.segbits ${XRAY_MERGEDB} int_r seg_int_r.segbits diff --git a/fuzzers/058-hclkpips/Makefile b/fuzzers/058-hclkpips/Makefile index 09f8b019..b3f16759 100644 --- a/fuzzers/058-hclkpips/Makefile +++ b/fuzzers/058-hclkpips/Makefile @@ -12,7 +12,7 @@ database: $(SPECIMENS_OK) grep CK_INOUT seg_hclk_r.segbits | sed 's, .*, always,' > ppips_hclk_r.txt pushdb: - ${XRAY_DBFIXUP} --db-dir . --clb-int + ${XRAY_DBFIXUP} --db_root . --clb-int ${XRAY_MERGEDB} hclk_l seg_hclk_l.segbits ${XRAY_MERGEDB} hclk_r seg_hclk_r.segbits ${XRAY_MERGEDB} mask_hclk_l mask_hclk_l.segbits diff --git a/fuzzers/100-dsp-mskpat/Makefile b/fuzzers/100-dsp-mskpat/Makefile index c4d099c6..22deaf41 100644 --- a/fuzzers/100-dsp-mskpat/Makefile +++ b/fuzzers/100-dsp-mskpat/Makefile @@ -8,7 +8,7 @@ database: $(SPECIMENS_OK) ${XRAY_SEGMATCH} -o seg_dsp_r.segbits $(addsuffix /segdata_dsp_r_*.txt,$(SPECIMENS)) pushdb: - ${XRAY_DBFIXUP} --db-dir . --clb-int + ${XRAY_DBFIXUP} --db_root . --clb-int ${XRAY_MERGEDB} dsp_l seg_dsp_l.segbits ${XRAY_MERGEDB} dsp_r seg_dsp_r.segbits diff --git a/fuzzers/clb.mk b/fuzzers/clb.mk index dd8f6d0d..b3386a4b 100644 --- a/fuzzers/clb.mk +++ b/fuzzers/clb.mk @@ -3,14 +3,14 @@ SPECIMENS := $(addprefix build/specimen_,$(shell seq -f '%03.0f' $(N))) SPECIMENS_OK := $(addsuffix /OK,$(SPECIMENS)) database: $(SPECIMENS_OK) - ${XRAY_SEGMATCH} -o build/seg_clblx.segbits $(addsuffix /segdata_clbl[lm]_[lr].txt,$(SPECIMENS)) + ${XRAY_SEGMATCH} -o build/segbits_clblx.db $(addsuffix /segdata_clbl[lm]_[lr].txt,$(SPECIMENS)) pushdb: - ${XRAY_DBFIXUP} --db-dir build --clb-int - ${XRAY_MERGEDB} clbll_l build/seg_clblx.segbits - ${XRAY_MERGEDB} clbll_r build/seg_clblx.segbits - ${XRAY_MERGEDB} clblm_l build/seg_clblx.segbits - ${XRAY_MERGEDB} clblm_r build/seg_clblx.segbits + $(DBFIXUP) + ${XRAY_MERGEDB} clbll_l build/segbits_clblx.db + ${XRAY_MERGEDB} clbll_r build/segbits_clblx.db + ${XRAY_MERGEDB} clblm_l build/segbits_clblx.db + ${XRAY_MERGEDB} clblm_r build/segbits_clblx.db build: mkdir build diff --git a/utils/dbfixup.py b/utils/dbfixup.py index 466fbe23..f774f55e 100755 --- a/utils/dbfixup.py +++ b/utils/dbfixup.py @@ -14,28 +14,6 @@ clb_int_zero_db = [ "00_13 01_17 00_15 00_17|00_18 00_19 01_13 00_14", "00_34 00_38 01_33 01_37|00_35 00_39 01_38 01_40", "00_33 00_41 01_32 01_34|00_37 00_42 01_36 01_41", - - # CLBL?_?.SLICE?_X?.?FF.DMUX - # ex: segbits_clbll_l.db:8:CLBLL_L.SLICEL_X0.AFF.DMUX.AX !30_00 !30_02 !30_03 30_01 - "30_00 30_01 30_02 30_03", - "30_24 30_25 30_26 30_27", - "30_35 30_36 30_37 30_38", - "30_59 30_60 30_61 30_62", - "30_04 31_00 31_01 31_02", - "31_24 31_25 31_26 31_27", - "31_35 31_36 31_37 31_38", - "30_58 31_60 31_61 31_62", - - # CLBL?_?.SLICE?_X?.?MUX - # ex: segbits_clbll_l.db:89:CLBLL_L.SLICEL_X0.AMUX.A5Q !30_06 !30_08 !30_11 30_07 - "30_06 30_07 30_08 30_11", - "30_20 30_21 30_22 30_23", - "30_40 30_43 30_44 30_45", - "30_51 30_52 30_56 30_57", - "30_05 31_07 31_09 31_10", - "30_28 30_29 31_20 31_21", - "30_41 30_42 31_40 31_43", - "30_53 31_53 31_56 31_57", ] @@ -106,7 +84,7 @@ def zero_groups(bits, zero_db): bits.add("!" + bit) -def add_zero_bits(db_root, tile_type, zero_db): +def add_zero_bits(db_root, tile_type, zero_db, verbose=False): ''' Add multibit entries This requires adding some zero bits (ex: !31_09) @@ -116,6 +94,7 @@ def add_zero_bits(db_root, tile_type, zero_db): new_lines = set() changes = 0 + verbose and print("zb %s: %s" % (dbfile, os.path.exists(dbfile))) if not os.path.exists(dbfile): return None @@ -133,6 +112,13 @@ def add_zero_bits(db_root, tile_type, zero_db): This appears to be a large range of one hot interconnect bits They are immediately before the first CLB real bits """ + # FIXME: handle these better + # https://github.com/SymbiFlow/prjxray/issues/232 + orig_bits = line.replace(tag + " ", "") + if orig_bits in ("", "<0 candidates>"): + print("WARNING: dropping %s" % line) + changes += 1 + continue zero_range(bits, 22, 25) zero_groups(bits, zero_db) @@ -185,6 +171,20 @@ def update_mask(db_root, mask_db, src_dbs, offset=0): print("bit %s" % bit, file=f) +def load_zero_db(fn): + # Remove comments and convert to list of lines + ret = [] + for l in open(fn, "r"): + pos = l.find("#") + if pos >= 0: + l = l[0:pos] + l = l.strip() + if not l: + continue + ret.append(l) + return ret + + def run( db_root, clb_int=False, @@ -193,20 +193,22 @@ def run( verbose=False): if clb_int: zero_db = clb_int_zero_db + # clblx is used by the CLB fuzzers before being expanded to DB zero_tile_types = [ - "int_l", "int_r", "clbll_l", "clbll_r", "clblm_l", "clblm_r" + "int_l", "int_r", "clbll_l", "clbll_r", "clblm_l", "clblm_r", + "clblx" ] else: assert zero_db_fn assert zero_tile_types - zero_db = open(zero_db_fn, "r").read().split("\n") + zero_db = load_zero_db(zero_db_fn) print("CLB INT mode: %s" % clb_int) print("Segbit groups: %s" % len(zero_db)) seg_files = 0 seg_lines = 0 for tile_type in zero_tile_types: - changes = add_zero_bits(db_root, tile_type, zero_db) + changes = add_zero_bits(db_root, tile_type, zero_db, verbose=verbose) if changes is not None: seg_files += 1 seg_lines += changes @@ -251,12 +253,12 @@ def main(): parser.add_argument( '--clb-int', action='store_true', help='Fixup CLB interconnect') parser.add_argument('--zero-db', help='Apply custom patches') - parser.add_argument('--zero-tile_types', help='') + parser.add_argument('--zero-tile-types', help='') args = parser.parse_args() # XXX: can auto detect this? zero_tile_types = args.zero_tile_types.split( - ) if args.zero_tile_types else None + ",") if args.zero_tile_types else None run( args.db_root, args.clb_int, args.zero_db, zero_tile_types,