| from fuzzconfig import FuzzConfig | |
| import nonrouting | |
| import pytrellis | |
| import fuzzloops | |
| import interconnect | |
| jobs = [(FuzzConfig(job="DDRDLL_TL", family="ECP5", device="LFE5U-45F", ncl="empty.ncl", | |
| tiles=["MIB_R10C2:DDRDLL_UL"]), | |
| "DDRDLL_TL", "R0C0" | |
| ), | |
| (FuzzConfig(job="DDRDLL_TR", family="ECP5", device="LFE5U-45F", ncl="empty.ncl", | |
| tiles=["MIB_R10C88:DDRDLL_UR"]), | |
| "DDRDLL_TR", "R0C90" | |
| ), | |
| (FuzzConfig(job="DDRDLL_BL", family="ECP5", device="LFE5U-45F", ncl="empty.ncl", | |
| tiles=["MIB_R58C2:DDRDLL_LL"]), | |
| "DDRDLL_BL", "R71C0" | |
| ), | |
| (FuzzConfig(job="DDRDLL_BR", family="ECP5", device="LFE5U-45F", ncl="empty.ncl", | |
| tiles=["MIB_R58C88:DDRDLL_LR"]), | |
| "DDRDLL_BR", "R71C90" | |
| ), | |
| (FuzzConfig(job="DDRDLL_TL_25k", family="ECP5", device="LFE5U-25F", ncl="empty_25k.ncl", | |
| tiles=["MIB_R13C2:DDRDLL_ULA"]), | |
| "DDRDLL_TL", "R0C0" | |
| ), | |
| (FuzzConfig(job="DDRDLL_TR_25k", family="ECP5", device="LFE5U-25F", ncl="empty_25k.ncl", | |
| tiles=["MIB_R13C70:DDRDLL_URA"]), | |
| "DDRDLL_TR", "R0C72" | |
| ), | |
| ] | |
| def todecstr(x): | |
| res = 0 | |
| for i in range(len(x)): | |
| if x[i]: | |
| res |= 1 << i | |
| return str(res) | |
| def main(): | |
| pytrellis.load_database("../../../database") | |
| def per_job(job): | |
| cfg, loc, rc = job | |
| cfg.setup() | |
| def get_substs(mode="DDRDLLA", program={}): | |
| if mode == "NONE": | |
| comment = "//" | |
| else: | |
| comment = "" | |
| program = ",".join(["{}={}".format(k, v) for k, v in program.items()]) | |
| return dict(site=loc, comment=comment, program=program) | |
| empty_bitfile = cfg.build_design(cfg.ncl, {}) | |
| if cfg.job.endswith("25k"): | |
| cfg.ncl = "ddrdll_25k.ncl" | |
| else: | |
| cfg.ncl = "ddrdll.ncl" | |
| nonrouting.fuzz_enum_setting(cfg, "DDRDLL.MODE", ["NONE", "DDRDLLA"], | |
| lambda x: get_substs(mode=x, program=dict(GSR="ENABLED", FORCE_MAX_DELAY=( | |
| "YES" if x.endswith("YES") else "NO"))), empty_bitfile, False, | |
| ignore_cover=["DDRDLLA_NO", "DDRDLLA_YES"]) | |
| nonrouting.fuzz_enum_setting(cfg, "DDRDLL.GSR".format(loc), ["ENABLED", "DISABLED"], | |
| lambda x: get_substs(program=dict(GSR=x)), empty_bitfile, False) | |
| nonrouting.fuzz_enum_setting(cfg, "DDRDLL.FORCE_MAX_DELAY".format(loc), ["NO", "YES"], | |
| lambda x: get_substs(program=dict(FORCE_MAX_DELAY=x)), empty_bitfile, False) | |
| nets = [ | |
| "{}_JCIBCLK0".format(rc), | |
| "{}_JDDRDLLCLK".format(rc), | |
| "{}_JCLK_DDRDLL".format(rc), | |
| "{}_JDIVOSC_DDRDLL".format(rc), | |
| "{}_JLOCK_DDRDLL".format(rc), | |
| "{}_DDRDEL_DDRDLL".format(rc), | |
| "{}_JFREEZE_DDRDLL".format(rc), | |
| "{}_JUDDCNTLN_DDRDLL".format(rc), | |
| "{}_JRST_DDRDLL".format(rc), | |
| ] | |
| for i in range(8): | |
| nets.append("{}_JDCNTL{}_DDRDLL".format(rc, i)) | |
| if cfg.job.endswith("25k"): | |
| cfg.ncl = "ddrdll_routing_25k.ncl" | |
| else: | |
| cfg.ncl = "ddrdll_routing.ncl" | |
| interconnect.fuzz_interconnect_with_netnames(cfg, nets, bidir=True) | |
| fuzzloops.parallel_foreach(jobs, per_job) | |
| if __name__ == "__main__": | |
| main() |