A linting tool for Verilog and SystemVerilog.
A linter is a tool
that looks for possible bugs in a program. We have used vl2014 to
implement a linter for Verilog and SystemVerilog designs. It can scan your
Verilog designs for potential bugs like size mismatches, unused wires, etc.
Note: Most of the documentation here is about the implementation of various
linter checks. If you just want to run the linter on your own Verilog designs,
you should see the VL kit. After building the kit, you should be able
to run, e.g., vl lint --help to see the *vl-lint-help*
- Command-line options for running vl lint.
- Check for unused, unset, spurious wires, and multiply driven wires.
- We try to detect missing signals from expressions.
- Results from running the linter.
- An attribute- mechanism for suppressing particular warnings
when using lint.
- Check for ?:-expressions with strange conditions.
- Simple check for self-assignments.
- Check for strange expressions like A [op] A.
- Check for module instances that are driving wires in identical ways.
- Check for odd expressions that might indicate precedence problems.
- (Unsound transform). Remove from each module any assignments,
instances, or inital/always blocks that have any "toohard" expressions in
them, such as unresolved hierarchical identifiers, strings, function calls,
system functions, and similar.
- Check the sizes of conditional expression tests.
- Trivial check to make sure that each module's ports satisfy basic
well-formedness conditions and agree with its port declarations and to issue
style warnings for tricky ports.
- Check for instances and assignments that are literally identical.
- Print warnings of interest to standard output, while hiding other
- Check for assignments with the same right-hand side.
- Usage message for vl lint.
- (Unsound transform) eliminate $display and various other
statements to cut down on noisy warnings about dropping unsupported
- (Unsound transform) Remove instances of missing submodules.
- Basic checker to ensure that wire names don't differ only by case.
- (Unsound transform) Remove modules that the user says to drop, and
simultaneously remove all instances of these submodules.
- A check for basic, incorrect constructs like name clashes.
- The vl lint command.