#!/usr/bin/env python3 from sys import argv, exit asc_bits = set() glb_bits = set() # parsing .asc file try: 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 except FileNotFoundError: print("ASC file doesn't exist, skipping glbcheck!.") # The asc file may not exist for innocent reasons, such as # the icecube router failing. So exit with code 0 to keep # the fuzz Makefile happy exit(0) # 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", "DSP_Tile", "IpCon_Tile")): f = line.replace("IO_", "").replace("RAM_", "").replace("DSP_","").replace("IpCon_","").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 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)