Contact us Start a Trial

Verilog and SystemVerilog Linting

The table below lists the Verilog and SystemVerilog linting rules that SVH can check automatically. The availability of linting rules depends on the license requirements.

Designer Edition Linting Rules

Designer Edition linting rules are available for all editions.

DescriptionID
warningEmpty loops and conditional branches1
warningCheck naming conventions2
ignore with lightbulbDisallow reg datatype3
errorNamed and positional port connections cannot be mixed5
errorThe packed keyword is required in packed structs and unions6
infoThe module name is a keyword in VHDL and may cause problems in mixed language projects7
warningCase statement does not cover all cases8
error with lightbulbThe for loop statement misses mandatory part (Verilog)9
warning with lightbulbFunction prototype has implicit return type10
errorParameter port list cannot be empty11
error with lightbulbNo semicolon expected at this point (Verilog)12
error with lightbulbVerilog disallows empty assignments of ordered parameters (Verilog)13
info with lightbulbImplicit subprogram port direction14
warningDefault clause has to be the last item in a case statement15
errorCase statement has multiple default clauses, but only one default clause is allowed16
warningFile name does not match design unit17
warningFile contains multiple design units18
infoParameters must have a default value19
ignoreVerilog code line too long20
ignoreTabs are not allowed21
ignoreFile header comment does not match required pattern22
warningNamed port connections have to be used for all instances with many ports24
errorNamed and positional parameter overrides cannot be mixed25
warningNamed parameter overrides have to be used for all instantiations with many parameters26
warningNo event control at the top of always construct27
warningDefault member must be last in assignment pattern28
errorOnly one default member expression is allowed per assignment pattern29
warningOverwritten type key in assignment pattern30
errorDuplicate member key in structure assignment pattern31
warningMixed named and ordered notation in assignment pattern32
errorOnly variable output ports can have a default value in non-ANSI notation33
errorOnly input or variable output ports can have a default value in ANSI notation34
warningRegister initialization in declarations35
errorDuplicate formal item within the instantiated unit37
warningMissing actuals for formals that have no default value38
errorExcessive number of actuals in ordered notation39
warningDefault clause missing from case statement40
errorNon-blocking assignments are not allowed in functions41
warningConsecutive underscores in unit / port identifier42
warningUnderscores at end of unit / port identifier43
ignoreReport encrypted regions44
errorTiming controls are not allowed in functions46
warningMultiple statements per line47
warningMissing bit width for parameters wider than 32 bits48
errorNet data types must be 4-state50
errorNet data types integral51
errorEmpty parameters53, 54
errorInvalid package item55
warningNamed connections are not allowed with blank ports56
errorUnexpected preprocessor directive inside design elements57
errorNon-packed member in packed structure59
errorIllegal type in untagged union60
errorIllegal class member access61
errorOverridden method signature mismatch62-68
errorLocal parameter has to be initialized69
errorLocal parameter cannot be overridden70
errorDeclaration not found71
errorAttempted implicit declaration with default nettype none73
errorInvalid enumeration element range format74
errorRange of enumeration element is too large75
errorInvalid construct76
errorInvalid randomize argument77
errorType checking78, 79, 94, 100, 131
errorConstraint class scope missing80
errorConstraint class with packed dimensions81
errorOut-of-bound method signature mismatch82-92
errorAmbiguous reference93
errorDuplicate declaration95
errorInvalid UDP initial value96
warningImplicit net97
warningDuplicate conditions98
warningUpward reference99
warningDuplicate continuous assignments101
errorDifferent file encoding for including file and included file102
errorMissing macro identifier103
errorUndefined macro104
errorForbidden macro identifier105
errorMissing `endif106
errorMissing identifier following expansion107
error with lightbulbFailed include108
errorMacro expansion depth limit reached109
errorInclusion loop110
errorIssues found while expanding macro111
errorMissing macro argument list112
errorMismatched number of arguments113
errorUnexpected directive operand114
errorIdentifier expansion with an invalid sequence of tokens115
errorUnexpected conditional compiler directive116
warningWhitespace following a backtick117
errorUnknown time literal118
errorUnexpected operand119
errorMissing operand120
warningInvalid preprocessor syntax121
errorUnsupported include path122
errorSyntax error123, 124
errorInvalid macro argument list125
errorUnbalanced expression126
errorUnbalanced directive invocation127
warningUnused macros128
ignoreProhibited macro129
warningUnused declaration130
warningHidden non-virtual methods132
errorUnexpected empty concatenation133
errorUnexpected empty assignment pattern134
errorIncorrect port declaration135-139
warningDuplicate port140
errorEmpty port in ANSI port list141
warningEmpty port142
warningVector as edge event expression143
ignoreImplicit vector to boolean conversion144
warning with lightbulbMissing include path in preprocessor configuration155
warningUnexpected content following directive156
error with lightbulbEnd name does not match declaration name158
error with lightbulbEnd name not allowed159
warningDuplicate signal in sensitivity list160
errorCyclic class inheritance162
ignoreOrder of named declaration list does not match163
error with lightbulbEnd name without begin name164
error with lightbulbMixing statement and block name165
ignoreNames differing only by case166
ignoreDeep nesting of conditional and loop statements167
ignoreInclude of globally available declaration168
ignoreLocally unused port, argument or parameter declaration169
warning with lightbulbAvoid using general purpose ‘always’170
ignoreNon-blocking assignments in functions171
warning with lightbulbProhibited end of line sequence172
warningNon-standard implicit type conversion173

UVM Linting Rules

UVM linting rules require a Sigasi Visual HDL Professional Edition or a Sigasi Visual HDL Enterprise Edition license.

You need to explicitly enable UVM linting.

DescriptionID
warningUnregistered UVM object145
warning with lightbulbIncorrect utility macro146
warningType argument value does not match containing class147
warningIncorrect UVM object instantiation148
ignoreUVM object name does not match variable name149
ignoreUnexpected output system task150
warningIncorrect override of UVM object151
warningDeprecated UVM API152
warningUVM phase method does not call superclass method153
warningIncorrect constructor for UVM object or component154

Functional Safety

Mapping of STARC rules to SVH rules and features

Documentation on configuring STARC rules in SVH

STARC ruleRule nameSVH rules / features
1.1.1.1.File names should be as follows: <module name>.v or <module name>.sv.17
1.1.1.2.Only alphanumeric characters and the underscore _ should be used, and the first character should be a letter of the alphabet.2
1.1.1.3.Reserved words in Verilog HDL (IEEE 1364) SystemVerilog (IEEE 1800) and VHDL (IEEE 1076.X) must not be used.7 (VHDL only)
1.1.1.4.Names beginning with VDD, VSS, VCC, GND or VREF must not be used (uppercase or lowercase).2
1.1.1.5.Do not distinguish names by using upper or lower case English letters (Abc, abc).166
1.1.1.6.Do not use an _ (underscore) at the end of the primary port name or module name, and do not use _ consecutively.2
1.1.1.9.At the top level, module names and port names should consist of 16 or fewer characters and should not be distinguished by upper or lower case alphabet letters.2
1.1.2.1.Module names and instance names should be between 2 and 32 characters in length.2
1.1.2.5.Naming conventions for input port names and output port names for each block should be different from those for internal signal names.2
1.1.3.1.Naming conventions for internal signal names of blocks should be different from those for input and output ports.2
1.1.3.3.Signal names, port names, parameter names, ```define` names and function names should be between 2 and 40 characters in length.2
1.1.4.2.Parameter names should have a different naming convention.2
2.1.1.2.Describe every case statement expressions in a function statement8
2.1.1.3.Use the syntax analysis tool to avoid mistakesSVH
2.1.2.2.A non-blocking assignment <= should not be used in function statements41
2.1.4.5.Logical operators should not be used for vectors144
2.1.5.3.In the conditional expression of an if statement or the conditional operator (?) the result should not be a vector144
2.2.1.1.Latches are generated unless all conditions have been described8
2.2.2.2.Do not define constants and unnecessary signals in the sensitivity list160
2.7.3.1.The nesting level for if-if and else if should seven or less.167
2.7.3.3.Use of tabs (indenting) will reduce mistakes in if statement nesting.SVH formatting
2.7.4.2.Be sure to remember to attach begin-endSVH syntax check
2.7.4.3.Do not use fork-join in RTL descriptionsSVH formatting
2.8.1.4.Always add default clauses.40
2.8.3.5.Describe a default clause at the end of a case statement40, 15
2.10.2.2.Results of logical operation will be 1 bit144
3.1.2.1.Follow the basic naming conventions2
3.1.3.1.Standardize the description order of the port declaration, port list and module instantiation port lists defined in the modules163
3.1.4.2.Standardize the number of indents used in always constructs, if statements and case statements (two spaces are standard)SVH formatting
3.1.4.3.Replace tab with spaces after editingSVH formatting
3.1.4.4.Do not describe multiple assignments in one line47
3.1.4.5.The maximum number of characters in one line should be about 11020
3.1.5.3.Set parameter default values19
3.2.3.1For component instantiations, connect ports by name connections, not by ordered list24
3.5.2.2.The file name of a RTL description should consist of <module name>.v or <module name>.sv17 + SVH file types
3.5.3.1.Indicate the circuit name, circuit function, author, and creation date in the file header22
3.5.3.2.Indicate who made changes and which item was modified in the case of reuse22
3.5.3.3.Standardize file headers22
3.5.6.7.Comments should start with //SVH syntax check

Mapping of DO-254 rules to SVH rules and features

Documentation on configuring DO-254 rules in SVH

DO-254 ruleRule nameSVH rules / features
CP1Avoid Incorrect VHDL Type Usage78,79,94,100,131
CP8Ensure Complete Sensitivity List27,160
CP14Avoid Unused Declarations128,130,169
SS2Ensure Proper Case Statement Specification8,16,40
SS4Avoid Latch Inference8
SS20Ensure Nesting Limits167
DR2Avoid Mixed Case Naming for Differentiation166
DR5Use Separate Statement Style47
DR6Ensure Consistent IndentationIndent on save
DR7Avoid Using Tabs21
DR10Ensure Consistent File Header22
DR13Ensure Company Specific Naming Standards2

Deprecated Linting Rules

Deprecated linting rules were used by Sigasi at some point, but they’ve been removed or superseded in the most recent version.

DescriptionReasonID
A Verilog net type keyword cannot be followed directly by the reg keywordSuperseded by a syntax error4
Formal item not found within the instantiated unitSuperseded by a syntax error36
Unexpected trailing , in parameter listSuperseded by the Empty parameters rule (rule 53)52
Regular expressions (RE2/J) compatibility checkSuperseded by checks in the settings58
Ambiguous design unit referenceSuperseded by the more general Ambiguous reference (rule 93)72