| 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) |