diff --git a/fuzzers/050-intpips/Makefile b/fuzzers/050-intpips/Makefile index ab847a67..f890e3ba 100644 --- a/fuzzers/050-intpips/Makefile +++ b/fuzzers/050-intpips/Makefile @@ -18,6 +18,7 @@ pushdb: ${XRAY_MERGEDB} mask_clbll_r mask_clbll_r.segbits ${XRAY_MERGEDB} mask_clblm_l mask_clblm_l.segbits ${XRAY_MERGEDB} mask_clblm_r mask_clblm_r.segbits + ${XRAY_DBFIXUP} $(SPECIMENS_OK): bash generate.sh $(subst /OK,,$@) diff --git a/fuzzers/050-intpips/generate.py b/fuzzers/050-intpips/generate.py index 7a469b58..bd2e215c 100644 --- a/fuzzers/050-intpips/generate.py +++ b/fuzzers/050-intpips/generate.py @@ -43,7 +43,8 @@ with open("design.txt", "r") as f: if pnum == 1 or pdir == 0 or \ re.match(r"^(L[HV]B?|G?CLK)(_L)?(_B)?[0-9]", src) or \ - re.match(r"^(L[HV]B?|G?CLK)(_L)?(_B)?[0-9]", dst): + re.match(r"^(L[HV]B?|G?CLK)(_L)?(_B)?[0-9]", dst) or \ + re.match(r"^(CTRL|GFAN)(_L)?[0-9]", dst): ignpip.add(pip) for tile, pips_srcs_dsts in tiledata.items(): diff --git a/htmlgen/htmlgen.py b/htmlgen/htmlgen.py index 9f1727ef..10ef9b4a 100644 --- a/htmlgen/htmlgen.py +++ b/htmlgen/htmlgen.py @@ -32,6 +32,7 @@ segbits = dict() segbits_r = dict() segframes = dict() routebits = dict() +routezbits = dict() piptypes = dict() maskbits = dict() @@ -46,6 +47,7 @@ for segname, segdata in grid["segments"].items(): segbits[segtype] = dict() segbits_r[segtype] = dict() routebits[segtype] = dict() + routezbits[segtype] = dict() maskbits[segtype] = set() segframes[segtype] = segdata["frames"] @@ -53,6 +55,7 @@ for segname, segdata in grid["segments"].items(): with open("../database/%s/segbits_%s.db" % (os.getenv("XRAY_DATABASE"), segtype)) as f: for line in f: bit_name, bit_pos = line.split() + assert bit_pos[0] != "!" segbits[segtype][bit_name] = bit_pos segbits_r[segtype][bit_pos] = bit_name @@ -61,9 +64,14 @@ for segname, segdata in grid["segments"].items(): for line in f: bit_name, *bit_pos = line.split() for bit in bit_pos: - if bit not in routebits[segtype]: - routebits[segtype][bit] = set() - routebits[segtype][bit].add(bit_name) + if bit[0] == "!": + if bit[1:] not in routezbits[segtype]: + routezbits[segtype][bit[1:]] = set() + routezbits[segtype][bit[1:]].add(bit_name) + else: + if bit not in routebits[segtype]: + routebits[segtype][bit] = set() + routebits[segtype][bit].add(bit_name) print("Loading %s maskbits." % segtype) with open("../database/%s/mask_%s.db" % (os.getenv("XRAY_DATABASE"), segtype)) as f: @@ -215,12 +223,6 @@ for segtype in segbits.keys(): bgcolor = "#6666cc" label = "R" for bn in sorted(routebits[segtype][bit_pos]): - if re.match("^INT_[LR].CTRL(_L)?[0-9]", bn): - bgcolor = "#8844ff" - label = "CTRL" - if re.match("^INT_[LR].GFAN(_L)?[0-9]", bn): - bgcolor = "#4488ff" - label = "GFAN" if re.match("^INT_[LR].[SNWE][SNWE]", bn): bgcolor = "#aa88ff" label = "SNWE" @@ -278,8 +280,10 @@ for segtype in segbits.keys(): print("", file=f) ruf = UnionFind() + routebits_routezbits = list(routebits[segtype].items()) + routebits_routezbits += list(routezbits[segtype].items()) - for bit, pips in routebits[segtype].items(): + for bit, pips in routebits_routezbits: for pip in pips: grp = pip.split('.')[1] ruf.union(grp, bit) @@ -287,7 +291,7 @@ for segtype in segbits.keys(): rgroups = dict() rgroup_names = dict() - for bit, pips in routebits[segtype].items(): + for bit, pips in routebits_routezbits: for pip in pips: grp_name = pip.split('.')[1] grp = ruf.find(grp_name) @@ -301,7 +305,7 @@ for segtype in segbits.keys(): rgroups[grp][pip].add(bit) shared_bits = dict() - for bit, pips in routebits[segtype].items(): + for bit, pips in routebits_routezbits: for pip in pips: grp_name = pip.split('.')[1] if bit not in shared_bits: @@ -344,7 +348,9 @@ for segtype in segbits.keys(): for pip, bits in sorted(gdata.items()): line = " -->%s" % (pip) for bit in grp_bits: - c = "1" if bit in bits else "-" + 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" line = "%s%s%s" % (c, line, c) lines.append(line) diff --git a/utils/dbfixup.py b/utils/dbfixup.py new file mode 100644 index 00000000..976891e7 --- /dev/null +++ b/utils/dbfixup.py @@ -0,0 +1,33 @@ +#/usr/bin/env python3 + +import sys, os, re + +def add_zero_bits(tile_type): + assert os.getenv("XRAY_DATABASE") == "artix7" + dbfile = "%s/%s/segbits_%s.db" % (os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE"), tile_type) + new_lines = set() + with open(dbfile, "r") as f: + for line in f: + line = line.split() + tag = line[0] + bits = set(line[1:]) + bitidx = None + for bit in bits: + if bit[0] == "!": + continue + fidx, bidx = [int(s) for s in bit.split("_")] + if 22 <= fidx <= 25: + bitidx = bidx + if bitidx is not None: + for fidx in range(22, 26): + bit = "%02d_%02d" % (fidx, bitidx) + if bit not in bits: + bits.add("!" + bit) + new_lines.add(" ".join([tag] + sorted(bits))) + with open(dbfile, "w") as f: + for line in sorted(new_lines): + print(line, file=f) + +add_zero_bits("int_l") +add_zero_bits("int_r") + diff --git a/utils/environment.sh b/utils/environment.sh index 3a0cb901..df6bf646 100644 --- a/utils/environment.sh +++ b/utils/environment.sh @@ -13,6 +13,7 @@ export XRAY_TOOLS_DIR="${XRAY_DIR}/build/tools" export XRAY_GENHEADER="${XRAY_UTILS_DIR}/genheader.sh" export XRAY_BITREAD="${XRAY_TOOLS_DIR}/bitread" export XRAY_MERGEDB="bash ${XRAY_UTILS_DIR}/mergedb.sh" +export XRAY_DBFIXUP="python3 ${XRAY_UTILS_DIR}/dbfixup.py" export XRAY_MASKMERGE="bash ${XRAY_UTILS_DIR}/maskmerge.sh" export XRAY_SEGMATCH="${XRAY_TOOLS_DIR}/segmatch" -export XRAY_SEGPRINT="python2 ${XRAY_UTILS_DIR}/segprint.py" +export XRAY_SEGPRINT="python3 ${XRAY_UTILS_DIR}/segprint.py"