Skip to content

Instantly share code, notes, and snippets.

@raczben
Created April 2, 2020 16:30
Show Gist options
  • Save raczben/88693d22600d743a5ccad797e7374260 to your computer and use it in GitHub Desktop.
Save raczben/88693d22600d743a5ccad797e7374260 to your computer and use it in GitHub Desktop.
Prints unused signals in one or multiple VHDL files
#
# 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