blob: 2071eb7fad7fadecb408300fb0cac6362d9fff02 [file] [log] [blame]
import diamond
from string import Template
import pytrellis
import shutil
import os
device = "LCMXO2-1200HC"
routes = [
("R1C13_JCLK0", "R6C13_JPCLKCIBVIQT0"),
("R6C13_JPCLKCIBVIQT0", "R6C13_PCLKCIBVIQT0"),
("R6C13_PCLKCIBVIQT0", "R6C13_VPRXCLKI0"),
("R6C13_VPRXCLKI0", "R6C13_CLKI0_DCC"),
("R6C13_CLKI0_DCC", "R6C13_CLKO0_DCC"),
("R6C13_CLKO0_DCC", "R6C13_VPRX0000"),
("R6C13_VPRX0000", "R6C8_HPSX0000"),
("R6C13_VPRX0000", "R6C18_HPSX0000"),
("R6C13_JLPLLCLK1", "R6C13_VPRXCLKI0"),
("R6C8_HPSX0000", "R6C10_CLKI0B_DCC"),
("R6C10_CLKI0B_DCC", "R6C10_CLKO0B_DCC"),
("R6C14_CLKI0B_DCC", "R6C14_CLKO0B_DCC"),
("R6C13_JTCDIVX1", "R6C13_VPRXCLKI5"),
("R6C13_PCLKCIBMID2", "R6C13_VPRXCLK60"),
("R6C13_PCLKCIBMID3", "R6C13_VPRXCLK61"),
("R6C13_PCLKCIBMID2", "R6C13_VPRXCLK71"),
("R6C13_PCLKCIBMID3", "R6C13_VPRXCLK70"),
("R6C13_JLPLLCLK0", "R6C13_EBRG0CLK0"),
("R6C13_JPCLKT20", "R6C13_EBRG0CLK0")
]
def run_get_tiles(mux_driver, sink):
route = ""
if mux_driver != "":
route = "route\n\t\t\t" + mux_driver + "." + sink + ";"
with open("center_mux_template.ncl", "r") as inf:
with open("work/center_mux.ncl", "w") as ouf:
ouf.write(Template(inf.read()).substitute(route=route))
diamond.run(device, "work/center_mux.ncl")
bs = pytrellis.Bitstream.read_bit("work/center_mux.bit")
chip = bs.deserialise_chip()
return chip.tiles
def main():
pytrellis.load_database("../../../database")
shutil.rmtree("work", ignore_errors=True)
os.mkdir("work")
baseline = run_get_tiles("", "")
with open("center_mux_diff.txt", "w") as f:
for r in routes:
modified = run_get_tiles(r[0], r[1])
tile_keys = []
for t in modified:
tile_keys.append(t.key())
print("{0} -> {1}".format(r[0], r[1]), 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__":
main()