| from fuzzconfig import FuzzConfig | |
| import nonrouting | |
| import nets | |
| import pytrellis | |
| import re | |
| import fuzzloops | |
| jobs = [ | |
| { | |
| "cfg": FuzzConfig(job="BANKREF8", family="ECP5", device="LFE5U-45F", ncl="empty.ncl", | |
| tiles=["MIB_R71C3:BANKREF8"]), | |
| "side": "B", | |
| "pin": "R1" | |
| }, | |
| ] | |
| 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, vcc, extracfg=None): | |
| if iomode == "NONE": | |
| iodir, type = "NONE", "" | |
| else: | |
| iodir, type = iomode.split("_", 1) | |
| substs = { | |
| "dir": iodir, | |
| "io_type": type, | |
| "loc": pin, | |
| "extra_attrs": "", | |
| "vcc": vcc | |
| } | |
| 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], vcc=x.replace("V", ".") if x != "NONE" else "2.5"), | |
| empty_bitfile) | |
| if __name__ == "__main__": | |
| main() |