| |
| import argparse |
| import os |
| import verilog2simple |
| import verilog2blackbox |
| from pathlib import Path |
| from subprocess import CalledProcessError |
| from verilog2sch import use_yosys, base_includes |
| |
| def v_test(out_path): |
| retcode, err = use_yosys("prep" ,[out_path, "dummy_verilog.v"]) |
| if retcode == 0: |
| return True |
| else: |
| for x in base_includes(out_path): |
| print('\t' + x) |
| retcode, err = use_yosys("prep" ,[out_path, "dummy_verilog.v"] + base_includes(out_path)) |
| if retcode == 0: |
| return True |
| print("\tYosys failed with:\n" + err + "\n") |
| return False |
| |
| def test_simple(file_path, out_path): |
| verilog2simple.main(file_path, out_path) |
| return v_test(out_path) |
| |
| def test_blackbox(file_path, out_path): |
| verilog2blackbox.main(file_path, out_path) |
| return v_test(out_path) |
| |
| if __name__ == "__main__": |
| import doctest |
| fails, test = doctest.testmod() |
| if fails > 0: |
| exit() |
| all_files = 0 |
| fails = 0 |
| failed = [] |
| |
| test_bb = False |
| |
| parser = argparse.ArgumentParser() |
| parser.add_argument( |
| "input", |
| help="The path to the source directory/file. If file is passed it will run in debug mode with no output file" + |
| "If dir is passed it will find '.full.v' files generate '.simple.v' in the same directory", |
| type=Path) |
| args = parser.parse_args() |
| if not os.path.isdir(args.input): |
| test_simple(str(args.input), str(args.input)[:-7] + ".simple.v") |
| else: |
| files = args.input.rglob('*.full.v') |
| files_count = 0 |
| for f in files: |
| f = str(f) |
| files_count += 1 |
| if test_bb: |
| outf = f[:-7] + ".blackbox.v" |
| success = test_blackbox(f, outf) |
| else: |
| outf = f[:-7] + ".simple.v" |
| success = test_simple(f, outf) |
| if success: |
| print(f"Yosys finished: {os.path.relpath(f)}") |
| else: |
| fails += 1 |
| failed.append(f) |
| print(f"Yosys failed: {os.path.relpath(f)}") |
| |
| print("*"*60) |
| for f in failed: |
| print(os.path.relpath(f)) |
| print("*"*60) |
| print(f"Processed {files_count}") |
| print(f"\t{fails} failed") |
| print(f"\tSuccess rate {(files_count - fails) * 100.0 / files_count}%") |
| |
| |