Created
April 2, 2020 16:30
-
-
Save raczben/88693d22600d743a5ccad797e7374260 to your computer and use it in GitHub Desktop.
Prints unused signals in one or multiple VHDL files
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# | |
# unused_signals.py | |
# | |
# Prints unused signals in one or multiple VHDL files | |
# | |
import os | |
import sys | |
import re | |
import argparse | |
import glob | |
here = os.path.dirname(__file__) | |
def main(args): | |
file_list = [] | |
errors = [] | |
if not args.recursive: | |
file_list.append(args.filename) | |
else: | |
if args.filename is None: | |
args.filename = '.' | |
glob_pattern = f'{args.filename}/**/{args.include}' | |
file_list = [f for f in glob.glob(glob_pattern, recursive=True)] | |
for f in file_list: | |
dump_unused(f) | |
def dump_unused(filename, verbose=False): | |
pat_signal = r'\s+signal\s+(\w+)\s+:' | |
pat_signal = re.compile(pat_signal) | |
signals = [] | |
file_content = '' | |
with open(filename) as f: | |
file_content = f.read() | |
for i, l in enumerate(file_content.splitlines()): | |
m = re.match(pat_signal, l) | |
if m: | |
sig = { | |
'name': m.group(1), | |
'line': i+1 | |
} | |
signals.append(sig) | |
# Remove comments | |
file_content = re.sub('--.+$', '', file_content, flags=re.MULTILINE) | |
unused_signals = [] | |
for sig in signals: | |
if file_content.count(sig['name']) <= 2: | |
unused_signals.append(sig) | |
if unused_signals: | |
print() | |
print(filename) | |
print('='*len(filename)) | |
print('Unused signals:') | |
for sig in unused_signals: | |
print(f" {sig['line']}: {sig['name']}") | |
elif verbose: | |
print() | |
print(filename) | |
print('='*len(filename)) | |
print('no unused signals:') | |
if __name__ == '__main__': | |
parser = argparse.ArgumentParser( | |
description='VHDL improver: report some static VHDL code issues. This version just dumps ' | |
'the unused signals.' | |
) | |
parser.add_argument('filename', type=str, default=None, nargs="?", | |
help='File to read to dump unused signals. Globbing expressions are accepted.', | |
) | |
parser.add_argument('--recursive', '-r', action='store_true', | |
help='Read files recursively.', | |
) | |
parser.add_argument('--include', type=str, default='*vhd', | |
help='Search only files whose base name matches GLOB', | |
) | |
parser.add_argument('--verbose', '-v', action='store_true', | |
help='Print more information', | |
) | |
args = parser.parse_args() | |
# Validate arguments: | |
if (args.filename is None) and (not args.recursive): | |
print('A filename or the --recursive flag must given.') | |
parser.print_help() | |
sys.exit(-1) | |
# Call the main: | |
main(args) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment