mirror of https://github.com/openXC7/prjxray.git
80 lines
2.1 KiB
Python
80 lines
2.1 KiB
Python
#!/usr/bin/env python3
|
|
|
|
import sys, os, re
|
|
|
|
sys.path.append("../../../utils/")
|
|
from segmaker import segmaker
|
|
|
|
segmk = segmaker("design.bits")
|
|
cache = dict()
|
|
|
|
print("Loading tags")
|
|
'''
|
|
module,loc,n
|
|
clb_NFFMUX_O5,SLICE_X12Y100,3
|
|
clb_NFFMUX_AX,SLICE_X13Y100,2
|
|
clb_NFFMUX_O6,SLICE_X14Y100,3
|
|
'''
|
|
f = open('params.csv', 'r')
|
|
f.readline()
|
|
for l in f:
|
|
module, loc, n = l.split(',')
|
|
n = int(n)
|
|
which = chr(ord('A') + n)
|
|
# clb_NFFMUX_AX => AX
|
|
src = module.replace('clb_NFFMUX_', '')
|
|
'''
|
|
AFFMUX
|
|
30_00 30_01 30_02 30_03
|
|
F78 1 1
|
|
CY 1 1
|
|
O5 1 1
|
|
AX 1
|
|
XOR 1
|
|
O6 1
|
|
'''
|
|
|
|
# if location not included in cache yet: start with assuming all four MUXes are unused.
|
|
if loc not in cache:
|
|
cache[loc] = set("ABCD")
|
|
|
|
# rewrite name of F78 source net: MUXes A and C have an F7 input, MUX B has an F8 input
|
|
if src == "F78":
|
|
if which in "AC":
|
|
src = "F7"
|
|
elif which == "B":
|
|
src = "F8"
|
|
else:
|
|
assert 0
|
|
|
|
# rewrite name of AX source net: It's actually AX, BX, CX, or DX
|
|
if src == "AX":
|
|
src = which + "X"
|
|
|
|
# add the 1-tag for this connection
|
|
tag = "%sFFMUX.%s" % (which, src)
|
|
segmk.addtag(loc, tag, 1)
|
|
|
|
# remove this MUX from the cache, preventing generation of 0-tags for this MUX
|
|
cache[loc].remove(which)
|
|
|
|
# create 0-tags for all sources on the remaining (unused) MUXes
|
|
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"
|
|
tag = "%sFFMUX.%s" % (which, src)
|
|
segmk.addtag(loc, tag, 0)
|
|
|
|
|
|
# we know that all bits for those MUXes are in frames 30 and 31, so filter all other bits
|
|
def bitfilter(frame_idx, bit_idx):
|
|
assert os.getenv("XRAY_DATABASE") == "artix7"
|
|
return frame_idx in [30, 31]
|
|
|
|
|
|
segmk.compile(bitfilter=bitfilter)
|
|
segmk.write()
|