from fuzzconfig import FuzzConfig
import nonrouting
import nets
import pytrellis
import re
import fuzzloops

jobs = [
    # 45k
    {
        "cfg": FuzzConfig(job="BANKREF0", family="ECP5", device="LFE5U-45F", ncl="empty.ncl",
                          tiles=["MIB_R0C3:BANKREF0"]),
        "side": "T",
        "pin": "A6"
    },
    {
        "cfg": FuzzConfig(job="BANKREF1", family="ECP5", device="LFE5U-45F", ncl="empty.ncl",
                          tiles=["MIB_R0C87:BANKREF1"]),
        "side": "T",
        "pin": "A19"
    },
    {
        "cfg": FuzzConfig(job="BANKREF2", family="ECP5", device="LFE5U-45F", ncl="empty.ncl",
                          tiles=["MIB_R10C90:BANKREF2"]),
        "side": "R",
        "pin": "C18"
    },
    {
        "cfg": FuzzConfig(job="BANKREF3", family="ECP5", device="LFE5U-45F", ncl="empty.ncl",
                          tiles=["MIB_R71C89:BANKREF3"]),
        "side": "R",
        "pin": "N17"
    },
    {
        "cfg": FuzzConfig(job="BANKREF6", family="ECP5", device="LFE5U-45F", ncl="empty.ncl",
                          tiles=["MIB_R71C1:BANKREF6"]),
        "side": "L",
        "pin": "N3"
    },
    {
        "cfg": FuzzConfig(job="BANKREF7", family="ECP5", device="LFE5U-45F", ncl="empty.ncl",
                          tiles=["MIB_R10C0:BANKREF7"]),
        "side": "L",
        "pin": "F4"
    },
    {
        "cfg": FuzzConfig(job="BANKREF8", family="ECP5", device="LFE5U-45F", ncl="empty.ncl",
                          tiles=["MIB_R71C3:BANKREF8"]),
        "side": "B",
        "pin": "R1"
    },
    # 25k
    {
        "cfg": FuzzConfig(job="BANKREF7A", family="ECP5", device="LFE5U-25F", ncl="empty_25k.ncl",
                          tiles=["MIB_R1C0:BANKREF7A"]),
        "side": "L",
        "pin": "A4"
    },
    {
        "cfg": FuzzConfig(job="BANKREF2A", family="ECP5", device="LFE5U-25F", ncl="empty_25k.ncl",
                          tiles=["MIB_R1C72:BANKREF2A"]),
        "side": "R",
        "pin": "J19"
    },
    # 85k
    {
        "cfg": FuzzConfig(job="BANKREF4", family="ECP5", device="LFE5U-85F", ncl="empty_85k.ncl",
                          tiles=["MIB_R95C123:BANKREF4"]),
        "side": "B",
        "pin": "AJ29"
    },
]


def main():
    pytrellis.load_database("../../database")
    for job in jobs:
        cfg = job["cfg"]
        side = job["side"]
        pin = job["pin"]
        cfg.setup()
        empty_bitfile = cfg.build_design(cfg.ncl, {})
        cfg.ncl = "pio.v"

        def get_substs(iomode, extracfg=None):
            if iomode == "NONE":
                iodir, type = "NONE", ""
            else:
                iodir, type = iomode.split("_", 1)
            substs = {
                "dir": iodir,
                "io_type": type,
                "loc": pin,
                "extra_attrs": ""
            }
            if extracfg is not None:
                substs["extra_attrs"] = '(* {}="{}" *)'.format(extracfg[0], extracfg[1])
            return substs

        vcco_opts = {
            "1V2": "OUTPUT_LVCMOS12",
            "1V5": "OUTPUT_LVCMOS15",
            "1V8": "OUTPUT_LVCMOS18",
            "2V5": "OUTPUT_LVCMOS25",
            "3V3": "OUTPUT_LVCMOS33",
            "NONE": "INPUT_LVCMOS12",
        }

        nonrouting.fuzz_enum_setting(cfg, "BANK.VCCIO", list(sorted(vcco_opts.keys())),
                                     lambda x: get_substs(iomode=vcco_opts[x]),
                                     empty_bitfile)
        if side in ('L', 'R'):
            nonrouting.fuzz_enum_setting(cfg, "BANK.DIFF_REF", ["OFF", "ON"],
                                         lambda x: get_substs(
                                             iomode="INPUT_LVCMOS33D" if x == "ON" else "INPUT_LVCMOS33"),
                                         empty_bitfile)
            nonrouting.fuzz_enum_setting(cfg, "BANK.LVDSO", ["OFF", "ON"],
                                         lambda x: get_substs(
                                             iomode="OUTPUT_LVDS" if x == "ON" else "OUTPUT_LVCMOS25D"),
                                         empty_bitfile)
            nonrouting.fuzz_enum_setting(cfg, "BANK.VREF", ["OFF", "ON"],
                                         lambda x: get_substs(
                                             iomode="INPUT_SSTL15_II" if x == "ON" else "INPUT_LVDS"),
                                         empty_bitfile)


if __name__ == "__main__":
    main()
