| #!/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) |