| from fuzzconfig import FuzzConfig |
| import interconnect |
| import nets |
| import pytrellis |
| import re |
| |
| jobs = [ |
| ((4, 1), "45K_", FuzzConfig(job="PLLROUTE0", family="ECP5", device="LFE5U-45F", ncl="pllroute.ncl", |
| tiles=["MIB_R4C0:PLL0_UL", "MIB_R5C0:PLL1_UL", "CIB_R4C1:CIB_PLL0", "CIB_R5C1:CIB_PLL1"])), |
| ((70, 2), "45K_", FuzzConfig(job="PLLROUTE1", family="ECP5", device="LFE5U-45F", ncl="pllroute.ncl", |
| tiles=["MIB_R71C2:PLL0_LL", "MIB_R71C3:BANKREF8", "CIB_R70C2:CIB_PLL2", "CIB_R70C3:CIB_PLL3"])), |
| ((70, 88), "45K_", FuzzConfig(job="PLLROUTE2", family="ECP5", device="LFE5U-45F", ncl="pllroute.ncl", |
| tiles=["MIB_R71C88:PLL0_LR", "MIB_R71C87:PLL1_LR", "CIB_R70C87:CIB_PLL3", "CIB_R70C88:CIB_PLL2"])), |
| ((4, 89), "45K_", FuzzConfig(job="PLLROUTE3", family="ECP5", device="LFE5U-45F", ncl="pllroute.ncl", |
| tiles=["MIB_R4C90:PLL0_UR", "MIB_R5C90:PLL1_UR", "CIB_R4C89:CIB_PLL0", "CIB_R5C89:CIB_PLL1"])), |
| |
| ((4, 1), "85K_", FuzzConfig(job="PLLROUTE0", family="ECP5", device="LFE5U-85F", ncl="pllroute_85k.ncl", |
| tiles=["MIB_R4C0:PLL0_UL", "MIB_R5C0:PLL1_UL", "CIB_R4C1:CIB_PLL0", "CIB_R5C1:CIB_PLL1"])), |
| ((94, 2), "85K_", FuzzConfig(job="PLLROUTE1", family="ECP5", device="LFE5U-85F", ncl="pllroute_85k.ncl", |
| tiles=["MIB_R95C2:PLL0_LL", "MIB_R95C3:BANKREF8"])), |
| ((94, 124), "85K_", FuzzConfig(job="PLLROUTE2", family="ECP5", device="LFE5U-85F", ncl="pllroute_85k.ncl", |
| tiles=["MIB_R95C124:PLL0_LR", "MIB_R95C123:BANKREF4"])), |
| ((4, 125), "85K_", FuzzConfig(job="PLLROUTE3", family="ECP5", device="LFE5U-85F", ncl="pllroute_85k.ncl", |
| tiles=["MIB_R4C126:PLL0_UR", "MIB_R5C126:PLL1_UR"])), |
| |
| ((49, 2), "25K_", FuzzConfig(job="PLLROUTE1", family="ECP5", device="LFE5U-25F", ncl="pllroute_25k.ncl", |
| tiles=["MIB_R50C2:PLL0_LL", "MIB_R50C3:BANKREF8"])), |
| ((49, 70), "25K_", FuzzConfig(job="PLLROUTE2", family="ECP5", device="LFE5U-25F", ncl="pllroute_25k.ncl", |
| tiles=["MIB_R50C70:PLL0_LR", "MIB_R50C69:PLL1_LR"])), |
| |
| ] |
| |
| |
| def main(): |
| pytrellis.load_database("../../../database") |
| for job in jobs: |
| loc, prefix, cfg = job |
| cfg.setup() |
| |
| def nn_filter(net, netnames): |
| return "PLL" in net or "CLKFB" in net or "CLKINT" in net or "REFCLK" in net |
| |
| def arc_filter(arc, netnames): |
| # Skip broken PLL route-throughs |
| src, dest = arc |
| return ("JREFCLK_PLL" not in src or "JQ" not in dest) and ("CLKI_PLL" not in src or "CLKO" not in dest) |
| |
| interconnect.fuzz_interconnect(config=cfg, location=loc, |
| netname_predicate=nn_filter, |
| arc_predicate=arc_filter, |
| netname_filter_union=False, |
| func_cib=True, |
| nonlocal_prefix=prefix) |
| |
| |
| if __name__ == "__main__": |
| main() |