blob: a22b2e26bdaf240ef7f6fea82f8423dde91dfff9 [file] [log] [blame]
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()