Add explicit zero bits to DB format, some cleanups

Signed-off-by: Clifford Wolf <clifford@clifford.at>
Signed-off-by: Tim 'mithro' Ansell <mithro@mithis.com>
This commit is contained in:
Clifford Wolf 2017-11-18 02:51:46 +01:00 committed by Tim 'mithro' Ansell
parent 15290dc80a
commit 3f6ba4b94e
5 changed files with 57 additions and 15 deletions

View File

@ -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,,$@)

View File

@ -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():

View File

@ -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("</table>", 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 = " --><td>%s</td>" % (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<td align=\"center\">%s</td>" % (c, line, c)
lines.append(line)

33
utils/dbfixup.py Normal file
View File

@ -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")

View File

@ -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"