Contact us Start a Trial

VHDL Linting

The table below lists the VHDL 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
warningNull range: The left argument is strictly larger than the right1
errorPositional associations order2
error‘Others’ position in associations3
errorMultiple others in associations4
errorInput port cannot be assigned5
errorSubprogram parameter cannot be assigned6
errorConstant cannot be assigned7
error‘others’ has to be the last alternative in a case statement9
warning with lightbulbDeprecated IEEE packages8
errorOnly one ‘others’ choice is allowed10
error with lightbulbCase statement does not cover all cases11
error with lightbulbCannot combine ‘others’ with other choices12
warning with lightbulbConsistent use of ‘others’ in case statements13
errorCase alternative contains duplicate choices14
error with lightbulbC style equality operator15
error with lightbulbC style inequality operator16
error with lightbulbIncomplete associations17
errorDuplicate associations18
errorInvalid character literal19
warningInfinite loop. Loop is missing a wait, return or exit statement20
errorFunction declarations in a package cannot have a function body21
errorMissing function body22
errorInvalid bit string literal23
warningNull range: The left argument is strictly smaller than the right26
errorDuplicate named associations27
errorDuplicate ‘all’ -style binding for component declaration28
errorDuplicate component instantiation binding29, 30
errorIncorrect number of associations found in mapping32
errorA positional association cannot follow after a named association33
error with lightbulbA signal cannot be the target of a variable assignment34
error with lightbulbA port cannot be the target of a variable assignment35
error with lightbulbA variable cannot be the target of a signal assignment36
info with lightbulbNon-standard packages37
warning with lightbulbA process must either have a sensitivity list or contain one or more wait statements38
errorA process with a sensitivity list cannot contain any wait statements39
errorProcedure declarations in a package cannot have a procedure body40
errorProcedure declarations in a package body must have a procedure body41
errorGenerate statements must have a label42
errorInstantiation statements must have a label43
errorBlock statements must have a label44
infoThere has to be a whitespace before physical units47
ignoreUnbound component instantiation48
warningSuperfluous library clause49
warning with lightbulbLibrary is not available50
errorMatching case statement51
errorExternal name alias52
error with lightbulbVHDL version check53
errorDuplicate declaration54
warning with lightbulbFind unused declarations55
warningBitstrings may only contain std_logic metavalues57
errorA unary condition operator parentheses58
errorDuplicate design units64
warningFind unused ports67
warningFind unused generics68
errorDuplicate enum literal69
errorInvalid identifier70
warningFind dead states in state machines71
warning with lightbulbFind incomplete sensitivity lists72
warningFind superfluous signals in sensitivity lists73
errorFunction pureness validation76
warningFind dead code79
errorMissing implementation80
error with lightbulbIncorrect attribute class81
errorInvalid variable assignment82
errorInvalid signal assignment83
ignoreEncrypted file is used84
warningFind duplicate signals in sensitivity lists85
errorA subprogram call cannot have an empty parameter lis86
warningDetect signals and variables that are never written88
warningDetect signals and variables that are never read89
warningNone or multiple matching entities for component90
errorUnexpected tokens91
ignoreCheck naming conventions92
ignore with lightbulbIncomplete port map or generic map: using defaults94
ignoreCheck line length97
ignoreTabs are used99
warningArray assignment validation144
ignore with lightbulbAll references must have the same capitalization as their declaration163
ignore with lightbulbCheck for positional associations in instantiations164
errorProtected type bodies are not allowed in a package168
errorInvalid port associations169
errorVHDL version mismatch170
errorInvalid use of ‘bus’ keyword171
errorInvalid function parameter mode172
errorInvalid variable parameter in function173
errorInvalid function return type174
errorInvalid deferred constant declaration175
errorThis declaration is not allowed in the current declarative region176
ignore with lightbulbOrder of generic and port associations177
error with lightbulbName mismatch178
errorUnexpected return type179
errorConfiguration issue: Incorrect component name180
errorConfiguration issue: Incorrect instantiation statement label181
warningConfiguration issue: Missing or incorrect binding indication182
errorConfiguration issue: Incorrect name in binding indication183
errorIncorrect use of keyword all184
warningRedundant boolean equality check with true185
ignoreBoolean equality check with false186
warning with lightbulbCheck for component/entity mismatch187
ignoreHeader comment does not match pattern188
ignoreFilename must contain primary unit name189
warningEmpty loop statement190
errorVHDL 87 file declarations191
infoEntity name is a keyword in Verilog and may cause problems in mixed projects192
errorConcatenation of unconstrained aggregate194
error with lightbulbEmpty sensitivity list197
error with lightbulbInstantiation mismatch198
errorRange wrapped inside parentheses199
errorIncomplete record aggregate200
errorNo elements in a list201
error with lightbulbTrailing separator in a list202
errorCannot case on a type declaration209
warningIndex out of range210
warningSlice has wrong direction211
error with lightbulbVHDL version check212
error with lightbulbInvalid use of return type identifiers213
error with lightbulbConditional return statements214
errorString literal is not properly closed215
errorAn exponent for an integer literal shall not be negative218
errorDeclaring the library ‘work’ is not allowed inside a context declaration219
errorReferencing the library ‘work’ is not allowed inside a context declaration220, 221
error with lightbulbCommon Libraries version mismatch222
error with lightbulbVHDL version check223
ignoreCheck case of non-keywords224
errorType validation226
errorLoop variables cannot be assigned227
infoWhitespace in extended identifier228
errorDeclaration not found229
ignoreSequence of operators without parentheses230
ignoreConstant width vector assigned to signal231
warningComparison of vectors with different sizes232
errorMissing full constant declaration233
errorIncorrect full constant subtype234
ignoreMagic number, bitstring, or string in statement235
ignoreUnconstrained signal or variable of integer type236
ignoreUnexpected FSM state type237
ignoreIncomplete reset branch238
ignoreDeep nesting of conditional and loop statements239
ignoreUnexpected keyword capitalization240
ignoreIncorrect vector range direction241
ignoreFile contains multiple primary units242
ignoreSecondary unit in unexpected file243
ignoreProhibited attribute244
ignoreProhibited keyword or operator245
ignoreProhibited package246
ignoreProhibited pragma247
ignoreProhibited library248
ignoreClock signal not used as clock249
ignoreUnexpected clock edge specification250
ignoreMissing label251
ignoreInconsistent reset style252
ignoreMultiple objects in one declaration253
ignoreInconsistent clock edge usage254
errorIllegal mode view element mode256
error with lightbulbMissing mode for record element in mode view257
ignoreSuperfluous reset258
warning with lightbulbProhibited end of line sequence260
warningConditional analysis is not standardized for version prior to VHDL 2019

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: <entity name>.vhd.189
1.1.1.2.Only alphanumeric characters and the underscore _ should be used, and the first character should be a letter of the alphabet.92
1.1.1.3.Do not use reserved words in Verilog (IEEE1364), EDIF, and SDF must not be used.192 ((System)Verilog only)
1.1.1.4.Names beginning with VDD, VSS, VCC, GND or VREF must not be used (uppercase or lowercase).92
1.1.1.5.Do not distinguish names by using upper or lower case English letters (Abc, abc).163
1.1.1.6.Entity name and component name should be same.90
1.1.1.9.At the top level, entity names and port names should consist of 16 or fewer characters and should not be distinguished by upper or lower case alphabet letters.92
1.1.2.1.Entity names and instance names should be between 2 and 32 characters in length.92
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.92
1.1.3.1.Naming conventions for internal signal names of blocks should be different from those for input and output ports.92
1.1.3.3.Signal names, variable names, type names, label names and function names should be between 2 and 40 characters in length.92
1.1.4.1.Use <name> + pac.vhd for package files198
1.1.4.2.For constant declarations, names should start with C_ or P_ and all characters of the names should be in upper case letters92
1.1.6.1.The architecture name in RTL description should be RTL92
1.1.6.2.The architecture name in behavior description should be BEH92
1.1.6.3.The architecture name in test bench description should be SIM or TB92
1.1.6.4.The entity description and RTL architecture description should be made in the same file243
1.3.1.6.Do not have both asynchronous reset and synchronous reset on the same reset line252
1.4.3.1.Avoid inverting logic on the same clock line. Also avoid using gated clocks and using FFs with different edges.254
1.4.3.4.Do not supply clock signals to pins other than FF clock input pins (such as D input)249
1.4.3.6.Do not use FFs with inverted edges254
2.1.2.3.Specify range when using integer236
2.1.2.5.Do not use attribute enum_encoding244
2.1.6.1.Specification of a range should be downto, if it is one-dimensional211, 241
2.1.8.8.Do not use procedure in RTL description245
2.1.9.1.Use attributes with array; range, length, left, right, high, low, and reverse_range244
2.1.9.2.Attribute to signal, event, is used for FF inference description244
2.1.9.3.Do not infer FF by using stable244
2.1.9.4.Do not use embedded attributes other than the above244
2.1.9.5.Do not use user-defined attributes244
2.1.10.1.Do not use block statement245
2.1.10.2.Do not use record type245
2.1.10.3.Do not use shared variable245
2.1.10.4.Do not use while loop245
2.1.10.5.Do not use procedure245
2.1.10.6.Do not use with -select245
2.1.10.7.Do not use configuration245
2.1.10.8.Do not use synopsys attribute245
2.1.10.9.Do not use access type245
2.1.10.10.Do not use alias245
2.1.10.11.Do not use bus and register245
2.1.10.12.Do not use disconnect245
2.1.10.13.Do not use waveform245
2.2.1.1.Latches are generated unless all conditions have been described11
2.2.2.1.All signals at the right of the conditional expression and the assignment statement in the process statement of the combinational circuit must be defined in the sensitivity list.72
2.2.2.2.Do not define constants and unnecessary signals in the sensitivity list73
2.2.2.3.Do not use wait statement in process statement (Sensitivity list is required)39
2.2.2.4.he sensitivity list should be verified with a RTL check tool rather than a logic synthesis tool38, 39, 72, 73, 85, 197
2.3.1.2.Do not use unsynthesizable FF inference styles250, 252, 254
2.3.2.2.Do not use variable in process statement245
2.3.6.1.Do not mix FF inferences with and without asynchronous resets in the same process statement238
2.7.2.2.Avoid describing conditions that will not be executed79
2.7.3.1.The number of nests for if-if and elsif is best at five or less239
2.7.3.2.Associating if statements that have deep nesting with else items is difficultSVH indent guides & code folding
2.7.3.3.Use of tabs (indenting) will reduce mistakes in if statement nestingSVH formatting
2.8.1.3.Avoid the overlapping of case items14
2.8.1.4.Always add others choices13
2.8.3.4.A syntax error does not occur even if there is no others choice when using integral or enumeration types, however it is better to use others choices13
2.9.3.1.Do not use exit and next in for-loop statement245
2.10.3.1.Match the bit width of relational operator232
3.1.2.1.Follow the basic naming conventions92
3.1.3.4.Define one signal per line in I/O and declaration statement. Always add comments253 (One declaration per line)
3.1.4.2.Standardize the number of indents used in process statements, if statements and case statements (two spaces are standard)SVH formatting
3.1.4.3.Replace tabs with spaces after editing99, SVH formatting
3.1.4.5.The maximum number of characters in one line should be about 11097
3.2.2.1.Describe constants by constants as much as possible235
3.2.3.1.For component instantiations, connect ports by name connections, not by ordered list164
3.2.3.2.Match the bit width of the component port and the bit width of the net to be connected144
3.3.3.1.A clock must not be connected to the D input of a FF249
3.3.6.2.Do not mix clock lines and reset lines249
3.5.2.2.The file name of a RTL description should consist of <entity name> + .vhd189
3.5.2.5.The package file name should be .vhd or _pac.vhdSVH file types
3.5.3.1.Indicate the circuit name, circuit function, author, and creation date in the file header188
3.5.3.2.Indicate who made changes and which item was modified in the case of reuse188
3.5.3.3.Standardize file headers188

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 Usage144
CP3Avoid Hard-Coded Numeric Values235
CP5Ensure Consistent FSM State Encoding Style237, 71
CP7Avoid Mismatching Ranges1, 26
CP8Ensure Complete Sensitivity List72, 73
CP9Ensure Proper Sub-Program Body76
CP11Avoid Unconnected Input Ports17
CP12Avoid Unconnected Output Ports94
CP14Avoid Unused Declarations88, 89, 55, 67, 68
SS2Ensure Proper Case Statement Specification11, 13, 14
SS7Avoid Uninitialized VHDL Deferred Constants175
SS8Avoid Clock Used as Data249
SS9Avoid Shared Clock and Reset Signal249
SS10Avoid Gated Clocks249
SS13Avoid Mixed Polarity Reset252
SS21Ensure Consistent Vector Order211, 241
DR1Use Statement Labels42, 43, 44
DR2Avoid Mixed Case Naming for Differentiation163
DR4Use Separate Declaration Style253
DR6Ensure Consistent IndentationSVH formatting
DR7Avoid Using Tabs99
DR10Ensure Consistent File Header188
DR13Ensure Company Specific Naming Standards92

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
Invalid generic listSuperseded by 20224
Invalid generic mapSuperseded by 20225
Duplicate architecture for entitySuperseded by 6431
Port map lists cannot be terminated with a ,Superseded by 20245
Port lists cannot be terminated with a ,Superseded by 20246
Library is not availableSuperseded by checks in the settings50
Signal declarations are not allowed in a process statementSuperseded by 17656
End clause validationSuperseded by 5159
Duplicate entity for librarySuperseded by 6460
Duplicate package for librarySuperseded by 6461
Duplicate configuration for librarySuperseded by 6462
Invalid use clauseRemoved as it was invalid63
Duplicate design unit in IEEERemoved as it was invalid65
Find unregistered output portsRemoved as it was invalid75
Undefined identifierSuperseded by the linker87
RE2/J compatibility checkSuperseded by checks in the settings225