Merge pull request #539 from litghost/filter_clb_bits

Filter some CLB bits that the INT fuzzers tend to include due to high correlation
This commit is contained in:
litghost 2019-01-17 18:50:47 -08:00 committed by GitHub
commit 549b21d533
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 60 additions and 4 deletions

View File

@ -1,8 +1,10 @@
#!/usr/bin/env python3
import re
import os
from prjxray.segmaker import Segmaker
from prjxray.bitfilter import get_bitfilter
segmk = Segmaker("design.bits")
@ -39,7 +41,7 @@ with open("design.txt", "r") as f:
# Okay: BYP_ALT0.VCC_WIRE
# Skip: INT.IMUX13.VCC_WIRE, INT.IMUX_L43.VCC_WIRE
if pnum == 1 or pdir == 0 or \
(src == "VCC_WIRE" and dst.startswith("IMUX")) or \
src == "VCC_WIRE" 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) or \
re.match(r"^(CTRL|GFAN)(_L)?[0-9]", dst):
@ -59,5 +61,5 @@ for tile, pips_srcs_dsts in tiledata.items():
elif src_dst[1] not in dsts:
segmk.add_tile_tag(tile, "%s.%s" % (dst, src), 0)
segmk.compile()
segmk.compile(bitfilter=get_bitfilter(os.getenv('XRAY_DATABASE'), 'INT'))
segmk.write()

View File

@ -1,8 +1,10 @@
#!/usr/bin/env python3
import re
import os
from prjxray.segmaker import Segmaker
from prjxray.bitfilter import get_bitfilter
segmk = Segmaker("design.bits")
@ -53,5 +55,5 @@ for tile, pips_srcs_dsts in tiledata.items():
elif src_dst[1] not in dsts:
segmk.add_tile_tag(tile, "%s.%s" % (dst, src), 0)
segmk.compile()
segmk.compile(bitfilter=get_bitfilter(os.getenv('XRAY_DATABASE'), 'INT'))
segmk.write()

View File

@ -1,6 +1,11 @@
#!/usr/bin/env python3
from __future__ import print_function
import os
from prjxray.segmaker import Segmaker
from prjxray.bitfilter import get_bitfilter
import argparse
parser = argparse.ArgumentParser(description="Generate int segfiles")
@ -81,5 +86,5 @@ for tile, pips_srcs_dsts in tiledata.items():
elif src_dst[1] not in dsts:
segmk.add_tile_tag(tile, "%s.%s" % (dst, src), 0)
segmk.compile()
segmk.compile(bitfilter=get_bitfilter(os.getenv('XRAY_DATABASE'), 'INT'))
segmk.write()

47
prjxray/bitfilter.py Normal file
View File

@ -0,0 +1,47 @@
class Bitfilter(object):
def __init__(
self, frames_to_include=None, frames_to_exclude=[],
bits_to_exclude=[]):
self.frames_to_include = frames_to_include
self.frames_to_exclude = frames_to_exclude
self.bits_to_exclude = bits_to_exclude
def filter(self, frame, bit):
if self.frames_to_include is not None:
if frame in self.frames_to_include:
return True
if frame in self.frames_to_exclude:
return False
if (frame, bit) in self.bits_to_exclude:
return False
return True
BITFILTERS = {
('artix7', 'INT'):
Bitfilter(
frames_to_exclude=[
30,
31,
],
bits_to_exclude=[
#
(0, 36)
]),
}
def get_bitfilter(part, tile):
""" Returns bitfilter for specified part and tile.
Either returns bitfilter to specified part and tile type, or the default
bitfilter, which includes all bits.
"""
key = (part, tile)
if key in BITFILTERS:
return BITFILTERS[key].filter
else:
return None