| from fuzzconfig import FuzzConfig |
| import interconnect |
| import nets |
| import pytrellis |
| import re |
| |
| jobs = [ |
| { |
| "pos": [(47, 0), (48, 0), (49, 0)], |
| "cfg": FuzzConfig(job="PIOROUTEL", family="ECP5", device="LFE5U-45F", ncl="pioroute.ncl", |
| tiles=["MIB_R47C0:PICL0", "MIB_R48C0:PICL1", "MIB_R49C0:PICL2"]) |
| }, |
| { |
| "pos": [(47, 90), (48, 90), (49, 90)], |
| "cfg": FuzzConfig(job="PIOROUTER", family="ECP5", device="LFE5U-45F", ncl="pioroute.ncl", |
| tiles=["MIB_R47C90:PICR0", "MIB_R48C90:PICR1", "MIB_R49C90:PICR2"]) |
| }, |
| { |
| "pos": [(0, 22), (1, 23), (0, 22), (1, 23)], |
| "cfg": FuzzConfig(job="PIOROUTET", family="ECP5", device="LFE5U-45F", ncl="pioroute.ncl", |
| tiles=["MIB_R0C22:PIOT0", "MIB_R0C23:PIOT1", "MIB_R1C22:PICT0", "MIB_R1C23:PICT1"]) |
| }, |
| { |
| "pos": [(71, 11), (71, 12), (70, 11), (70, 12)], |
| "cfg": FuzzConfig(job="PIOROUTET", family="ECP5", device="LFE5U-45F", ncl="pioroute.ncl", |
| tiles=["MIB_R71C11:PICB0", "MIB_R71C12:PICB1"]) |
| } |
| ] |
| |
| |
| def main(): |
| pytrellis.load_database("../../../database") |
| for job in jobs: |
| cfg = job["cfg"] |
| cfg.setup() |
| |
| def nn_filter(net, netnames): |
| return not nets.is_cib(net) |
| orig_tiles = cfg.tiles |
| for pos in job["pos"]: |
| # Put fixed connections in the most appropriate tile |
| target_tile = None |
| for tile in orig_tiles: |
| if "R{}C{}".format(pos[0], pos[1]) in tile: |
| target_tile = tile |
| break |
| if target_tile is not None: |
| cfg.tiles = [target_tile] + [_ for _ in orig_tiles if _ != orig_tiles] |
| else: |
| cfg.tiles = orig_tiles |
| interconnect.fuzz_interconnect(config=cfg, location=pos, |
| netname_predicate=nn_filter, |
| netname_filter_union=False, |
| func_cib=True) |
| |
| |
| if __name__ == "__main__": |
| main() |