mirror of https://github.com/YosysHQ/icestorm.git
64 lines
1.7 KiB
Python
64 lines
1.7 KiB
Python
|
|
#!/usr/bin/env python3
|
||
|
|
|
||
|
|
from sys import argv, exit
|
||
|
|
|
||
|
|
asc_bits = set()
|
||
|
|
glb_bits = set()
|
||
|
|
|
||
|
|
# parsing .asc file
|
||
|
|
with open(argv[1]) as f:
|
||
|
|
current_tile = None
|
||
|
|
current_line = None
|
||
|
|
for line in f:
|
||
|
|
if line.startswith("."):
|
||
|
|
if line.find("_tile ") >= 0:
|
||
|
|
f = line.split()
|
||
|
|
current_tile = "%02d.%02d" % (int(f[1]), int(f[2]))
|
||
|
|
current_line = 0
|
||
|
|
else:
|
||
|
|
current_tile = None
|
||
|
|
current_line = None
|
||
|
|
continue
|
||
|
|
|
||
|
|
if current_tile is not None:
|
||
|
|
for i in range(len(line)):
|
||
|
|
if line[i] == '1':
|
||
|
|
asc_bits.add("%s.%02d.%02d" % (current_tile, current_line, i))
|
||
|
|
current_line += 1
|
||
|
|
|
||
|
|
# parsing .glb file
|
||
|
|
with open(argv[2]) as f:
|
||
|
|
current_tile = None
|
||
|
|
for line in f:
|
||
|
|
if line.find("Tile_") >= 0:
|
||
|
|
f = line.replace("IO_", "").replace("RAM_", "").split("_")
|
||
|
|
assert len(f) == 3
|
||
|
|
current_tile = "%02d.%02d" % (int(f[1]), int(f[2]))
|
||
|
|
continue
|
||
|
|
|
||
|
|
if line.find("GlobalNetwork") >= 0:
|
||
|
|
current_tile = None
|
||
|
|
continue
|
||
|
|
|
||
|
|
if current_tile is not None:
|
||
|
|
f = line.replace("(", "").replace(")", "").split()
|
||
|
|
if len(f) >= 2:
|
||
|
|
glb_bits.add("%s.%02d.%02d" % (current_tile, int(f[1]), int(f[0])))
|
||
|
|
|
||
|
|
# compare and report
|
||
|
|
if asc_bits == glb_bits:
|
||
|
|
print("ASC and GLB files match.")
|
||
|
|
exit(0)
|
||
|
|
|
||
|
|
only_in_asc = asc_bits - glb_bits
|
||
|
|
only_in_glb = glb_bits - asc_bits
|
||
|
|
assert len(only_in_asc) != 0 or len(only_in_glb) != 0
|
||
|
|
|
||
|
|
if len(only_in_asc) != 0:
|
||
|
|
print("Only in ASC: %s" % sorted(only_in_asc))
|
||
|
|
if len(only_in_glb) != 0:
|
||
|
|
print("Only in GLB: %s" % sorted(only_in_glb))
|
||
|
|
|
||
|
|
exit(1)
|
||
|
|
|