| #!/usr/bin/env python3 |
| import sys, os, re |
| |
| # Compare the output of a Lattice `bstool` dump with ecpunpack and note discrepancies |
| |
| if len(sys.argv) < 3: |
| print("Usage: compare_bits.py lattice_dump.txt ecpunpack.out") |
| sys.exit(2) |
| |
| ecpup_re = re.compile(r'\((\d+), (\d+)\)') |
| lat_re = re.compile(r'^[A-Za-z0-9_/]+ \((\d+), (\d+)\)$') |
| |
| ecpup_bits = [] |
| lat_bits = [] |
| with open(sys.argv[1], 'r') as latf: |
| for line in latf: |
| m = lat_re.match(line) |
| if m: |
| lat_bits.append((int(m.group(1)), int(m.group(2)))) |
| print("Read {} bits from {}".format(len(lat_bits), sys.argv[1])) |
| with open(sys.argv[2], 'r') as upf: |
| for line in upf: |
| m = ecpup_re.match(line) |
| if m: |
| ecpup_bits.append((int(m.group(1)), int(m.group(2)))) |
| print("Read {} bits from {}".format(len(ecpup_bits), sys.argv[2])) |
| |
| ok = True |
| |
| for b in ecpup_bits: |
| if b not in lat_bits: |
| print("In ecpunpack but not Lattice: ({}, {})".format(b[0], b[1])) |
| ok = False |
| for b in lat_bits: |
| if b not in ecpup_bits: |
| print("In Lattice but not ecpunpack: ({}, {})".format(b[0], b[1])) |
| ok = False |
| |
| if ok: |
| print("ecpunpack and Lattice match ({} bits compared)".format(len(ecpup_bits))) |
| else: |
| sys.exit(1) |