blob: e865ef58eb245669b8b564519072b3ee5ea148a9 [file] [log] [blame]
import diamond
from string import Template
import pytrellis
import shutil
import os
import argparse
device = "LCMXO2-1200HC"
def run_get_tiles(dir, io_type="LVCMOS33", loc="PB11D"):
with open("io_params_template.v", "r") as inf:
with open("work/io_params.v", "w") as ouf:
ouf.write(Template(inf.read()).substitute(dir=dir,
io_type="\"" + io_type + "\"", loc= "\"" + loc + "\""))
diamond.run(device, "work/io_params.v")
bs = pytrellis.Bitstream.read_bit("work/io_params.bit")
chip = bs.deserialise_chip()
return chip.tiles
def main(args):
pytrellis.load_database("../../../database")
shutil.rmtree("work", ignore_errors=True)
os.mkdir("work")
os.environ['DEV_PACKAGE'] = args.p
baseline = run_get_tiles("NONE", args.io_type, args.loc)
dirs = []
if args.b:
dirs.append("BIDIR")
if args.i:
dirs.append("INPUT")
if args.o:
dirs.append("OUTPUT")
with open("io_params_diff.txt", "w") as f:
for d in dirs:
modified = run_get_tiles(d, args.io_type, args.loc)
tile_keys = []
for t in modified:
tile_keys.append(t.key())
print("{0}".format(d), file=f)
for k in tile_keys:
diff = modified[k].cram - baseline[k].cram
diff_str = ["{}F{}B{}".format("!" if b.delta < 0 else "", b.frame, b.bit) for b in diff]
if not diff_str:
continue
print("{0: <30}{1}".format(k, " ".join(diff_str)), file=f)
f.flush()
print("", file=f)
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Test I/O Sites.")
parser.add_argument("-b", help="Test bidirectional.", action="store_true")
parser.add_argument("-i", help="Test input.", action="store_true")
parser.add_argument("-o", help="Test output.", action="store_true")
parser.add_argument("-p", type=str, default="QFN32", help="Device package to test.")
parser.add_argument(dest="io_type", type=str, default="LVCMOS33", help="I/O standard to test.")
parser.add_argument(dest="loc", type=str, default="PB11D", help="Site to test.")
args = parser.parse_args()
main(args)