#!/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.startswith(("Tile", "IO_Tile", "RAM_Tile", "LogicTile")): 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 or line.startswith(("IpCon", "DSP")): 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 print("Only in ASC:") for bit in sorted(only_in_asc): print(bit) print() print("Only in GLB:") for bit in sorted(only_in_glb): print(bit) exit(1)