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