# Quality Profiles ```{raw} html

Count: 3

LanguageQuality profileActivated rulesLast Update
VHDLDeep Code Checks1082026-05-27
Verilog / SystemVerilogLight Lint Checks1592025-11-12
HDLDeep Code Checks292026-10-13
``` (quality-profiles-vhdl)= ## VHDL ```{raw} html

Count: 108

KeyNameDetails
VHDL003Each case statement should define an "others" clauseDetails
VHDL009Entity names should be unique in a projectDetails
VHDL012Function names should be unique in a projectDetails
VHDL019Each file should define only one single architectureDetails
VHDL025Only allowed port modes should be used: 'in', 'out' and, for top-level entities only, 'inout'Details
VHDL026Only allowed port types should be usedDetails
VHDL027Identical expressions should not be used on both sides of a binary operatorDetails
VHDL028Forbidden operators should not be usedDetails
VHDL029'integer', 'natural' and 'positive' declarations should have range constraintDetails
VHDL031Processes should not be too complex to understandDetails
VHDL032Signals should not be initialized in their declarationDetails
VHDL033Files should not have too many lines of codeDetails
VHDL035Each file should start with a headerDetails
VHDL036Vector direction in ranges should always be the sameDetails
VHDL126Multiple declarations should not be written on the same lineDetails
VHDL127Only allowed attributes should be usedDetails
VHDL128Ports should be given a mode when declaredDetails
VHDL132Signals from a process' sensitivity list should not be affected in this processDetails
VHDL134All declared elements should be used in their corresponding scopeDetails
VHDL135All declared parameters should be used in the corresponding function/procedureDetails
VHDL136All references should have the same case as the corresponding declarationsDetails
VHDL138All output ports (and optionally all input ports) of a component should be mappedDetails
VHDL139Signals and variables should not be assigned in multiple processes or equivalent concurrent assignmentsDetails
VHDL140Concurrent assignments should be complete to avoid undesired latch inferenceDetails
VHDL149Extended identifiers should not be usedDetails
VHDL150Block statement should not be usedDetails
VHDL151Functions and procedures should be defined in packages, not in architecturesDetails
VHDL155All deferred constants should be initializedDetails
VHDL156The ports defined in a component should be the same as the ones defined in its corresponding entityDetails
VHDL157std_logic_vector signals should define a rangeDetails
VHDL161Statements should be on separate linesDetails
VHDL162Verilog/SystemVerilog keywords should not be used as entity name or generic name nor port nameDetails
VHDL164Range direction in array definitions should always be the sameDetails
VHDL166Recursive functions should not be usedDetails
VHDL167Pure functions should not use external signals or variablesDetails
VHDL170Functions should only contain one single "return" statementDetails
VHDL172Conditional branching statements ("if", "case", "while" and "for" loops) should not be too deeply nestedDetails
VHDL175"FIXME" tags should be handledDetails
VHDL176Complete the task associated to this "TODO" commentDetails
VHDL182Avoid using arrays with too many dimensionsDetails
VHDL183Non-synthesizable statements should not be used in designDetails
VHDL185All reserved words should have the same caseDetails
VHDL186An entity declaration should only contain ports, generics and attributesDetails
VHDL188Instantiations should be done by name, not by positionDetails
VHDL190Variables should only be used in processes, functions and proceduresDetails
VHDL193Direct instantiation should be applied whenever possibleDetails
VHDL199Procedure names should be unique in a projectDetails
VHDL208Empty files should be removedDetails
VHDL211Synopsys "std_logic_arith", "std_logic_signed" and "std_logic_unsigned" libraries should not be usedDetails
VHDL212Top-level entity port names should not contain any pin numberDetails
VHDL213Processes should be identified by labelsDetails
VHDL215Ports should be mapped with explicit mappingDetails
VHDL217"case" statement should not have too many "when" clausesDetails
VHDL218A file should not define more than one entityDetails
VHDL219A file should not define more than one packageDetails
VHDL221A file should not mix entity/package/configuration declarationsDetails
VHDL222Forbidden pragmas should not be usedDetails
VHDL223Configurations should not be used for synthesisDetails
VHDL224Internal tristates should not be usedDetails
VHDL227Processes should not have too many lines of codeDetails
VHDL228Functions and procedures should not have too many lines of codeDetails
VHDL229Global signals should not be used in designDetails
VHDL232C++ keywords should not be used as entity name or generic name or port nameDetails
VHDL233Synthesizable functions and procedures should not use external signals and variablesDetails
VHDL235Signal assignments should not contain multiple waveformsDetails
VHDL236Vector assignments should not be hardcodedDetails
VHDL237"others" should be the last clause of a case statementDetails
VHDL238All conditions should be different within the same "if / elsif" conditional statementDetails
VHDL240"case" statement should not have too many casesDetails
VHDL301Forbidden std_logic values should not be usedDetails
VHDL303Only synthesizable and allowed types should be used in designDetails
VHDL305"while" loops should not be used for synthesisDetails
VHDL306Only one single architecture per entity should be definedDetails
VHDL311"std" and "work" should not be set in library clausesDetails
VHDL314Useless "true" and "false" keywords should be removedDetails
VHDL315Empty conditional branch should be implemented or removedDetails
VHDL316An entity should not have too many portsDetails
VHDL317A function or procedure should not have too many parametersDetails
VHDL319Reserved words in future VHDL standards should not be used as identifiersDetails
VHDL323Only one generic should be declared or mapped per lineDetails
VHDL1005FSM states should be encoded using enumerated typeDetails
VHDL1012Clock signals not used as clock of a flip-flop should be reviewedDetails
VHDL1013"rising_edge" and "falling_edge" functions should be used to detect clock transitionsDetails
VHDL1014Processes should only use one clock signalDetails
VHDL1015Processes should only use one edge transition direction per clockDetails
VHDL1033Reset signals not used as reset of a flip-flop should be reviewedDetails
VHDL1037The sensitivity list of a process should be minimalDetails
VHDL1041Track enable signals and their usageDetails
VHDL1045Both active-low and active-high enables should not be used for the same enable signalDetails
VHDL1046Enable signals should not be reused in non-enable wayDetails
VHDL1047Multi-signal enables should not be usedDetails
VHDL1050Unused entities should be removedDetails
VHDL1051Unused architectures should be removedDetails
VHDL1052Unused generate blocks should be removedDetails
VHDL1053A signal should not be used as both a reset and an enableDetails
VHDL1061Clock names should be preserved across the designDetails
VHDL1062Reset names should be preserved across the designDetails
VHDL1064Choices outside of range should be removedDetails
VHDL1065Choices should not overlapDetails
VHDL1066Objects of different lengths should not be comparedDetails
VHDL1067Range should not be emptyDetails
VHDL1068Functions should always return a valueDetails
VHDL1069Signals and variables should be assigned a value before being usedDetails
VHDL1070Clock names should not contain frequency informationDetails
VHDL1071Signals should not be initialized from other signalsDetails
VHDL1073All assertions failing as note should be reviewedDetails
VHDL1074All assertions failing as warning should be reviewedDetails
VHDL1075All assertions failing as error should be reviewedDetails
``` (quality-profiles-verilog)= ## Verilog / SystemVerilog ```{raw} html

Count: 159

KeyNameDetails
VERILOG002"FIXME" tags should be handledDetails
VERILOG003Complete the task associated to this "TODO" commentDetails
VERILOG005Empty files should be removedDetails
VERILOG008Files should not have too many lines of codeDetails
VERILOG022Branching preprocessor directives should be aligned to the leftDetails
VERILOG023"default" case item should include a colonDetails
VERILOG025Program should not be usedDetails
VERILOG026"logic" should be used instead of "reg" and "wire"Details
VERILOG027"defparam" should not be usedDetails
VERILOG028Each file should define one single design unitDetails
VERILOG029Each case statement should define a "default" caseDetails
VERILOG031"default" should be the last item of a "case" statementDetails
VERILOG032Escaped identifiers should not be usedDetails
VERILOG034Forbidden system tasks and functions should not be usedDetails
VERILOG046Legacy generate regions should not be usedDetails
VERILOG048"always_comb" should be used instead of "always @*"Details
VERILOG051Begin/End identifiers/labels should matchDetails
VERILOG052Functions and tasks declared outside of a class should have an explicit lifetimeDetails
VERILOG054Functions should have an "automatic" lifetime to be used in synthesizable codeDetails
VERILOG057Named parameters should be used for all instantiations and class parameter overridesDetails
VERILOG058Named port connections should be used for all instantiationsDetails
VERILOG059.* should not be used as port connections of module/program/interface instantiationsDetails
VERILOG075Deprecated separate "genvar" declarations should not be usedDetails
VERILOG081Function and task arguments should have an explicit storage typeDetails
VERILOG082"output", "inout" and "ref" directions should not be used in function argumentsDetails
VERILOG083Default "input" direction should not be used in function argumentsDetails
VERILOG096Empty ports should be removed from non-ANSI port listsDetails
VERILOG097Repeated ports should be removed from non-ANSI port listsDetails
VERILOG101Function return value should have an explicit storage typeDetails
VERILOG2000Unused variables should be removedDetails
VERILOG2001Multiple defparam overrides targeting the same parameter should be removedDetails
VERILOG2002Unused task or function formal arguments should be removedDetails
VERILOG2003Unused assertion declarations (sequence, property or let) should be removedDetails
VERILOG2004Unused nets should be removedDetails
VERILOG2005An "inout" port that is never read should be converted into an "output" portDetails
VERILOG2006Unused configuration cell rules should be removedDetails
VERILOG2007Unused configuration instance rules should be removedDetails
VERILOG2008Unused modules / programs / interfaces should be removedDetails
VERILOG2009Unused genvar should be removedDetails
VERILOG2010Unused implicitly created nets should be removedDetails
VERILOG2011Unused package imports should be removedDetails
VERILOG2012Unused parameters should be removedDetails
VERILOG2013Unused input ports should be removedDetails
VERILOG2014An output port that is never given a value should be removedDetails
VERILOG2015Non-void function return values should not be ignoredDetails
VERILOG2016Unused type parameters should be removedDetails
VERILOG2017Unused typedef should be removedDetails
VERILOG2018Unused wildcard package imports should be removedDetails
VERILOG2019Useless casts should be removedDetails
VERILOG2020Vectors should not overflowDetails
VERILOG2022An explicit cast should be added to implicit conversion that expands a typeDetails
VERILOG2023Implicit conversions that truncate a type should be avoidedDetails
VERILOG2024Arithmetic operators should have operands of same typeDetails
VERILOG2025Procedurally force a bit-select or range select of a variable should not be usedDetails
VERILOG2026Bitwise operators should have operands of same typeDetails
VERILOG2027Duplicate case generate items should be removedDetails
VERILOG2028Add item to match case generate directiveDetails
VERILOG2029Comparisons should have operands of same typeDetails
VERILOG2030Implicit constant conversions that truncate should be fixedDetails
VERILOG2031Implicit class constraint blocks with no external definition should be removedDetails
VERILOG2032Deprecated "DPI" should be replaced by "DPI-C"Details
VERILOG2033Pure "DPI" tasks should not be usedDetails
VERILOG2034Duplicated attributes should be removedDetails
VERILOG2035Duplicated configuration rules should be removedDetails
VERILOG2036Duplicated package imports should be removedDetails
VERILOG2037Duplicated timing paths should be removedDetails
VERILOG2038Constant functions should not access nonexistent elements of dynamic arraysDetails
VERILOG2039Constant functions should not access nonexistent ranges of dynamic arraysDetails
VERILOG2040Constant functions should not access nonexistent elements of associative arraysDetails
VERILOG2041Bodies of conditional statements and loops should not be left emptyDetails
VERILOG2042Useless semicolons in non-procedural scopes should be removedDetails
VERILOG2043Empty statements should be removedDetails
VERILOG2044Empty assignment pattern literals should not be usedDetails
VERILOG2045Constant functions should not pop elements from empty queuesDetails
VERILOG2046Enum members that are specified as ranges should only define ranges with integer literalsDetails
VERILOG2047Event expressions should not be constantDetails
VERILOG2048Pragma protect keywords expecting string values should be set with string valuesDetails
VERILOG2049Pragma protect directives should not define unknown keywordsDetails
VERILOG2050Pragma protect directives should define a keywordDetails
VERILOG2051"static" variables declared locally to a procedural block that contain an initializer should be explicitly defined with the "static" keywordDetails
VERILOG2052Pragma directives should define the right number of argumentsDetails
VERILOG2053"pragma protect begin" directives should be properly paired with "pragma protect end" directivesDetails
VERILOG2054The argument of the "$finish" control task should be a "finish number" of 0, 1, or 2Details
VERILOG2055Implicit conversion from a floating point value to a boolean value should be reviewedDetails
VERILOG2056Implicit conversion from a floating point value to an integer value should be reviewedDetails
VERILOG2057Implicit conversion from a floating point value to an narrower floating point value should be reviewedDetails
VERILOG2058Implicit conversion from a floating point value to an wider floating point value should be reviewedDetails
VERILOG2059Formatting multi-bit nets with the "%v" specifier should be avoidedDetails
VERILOG2060Implicit conversions from real to integer value in string formatting function should be avoidedDetails
VERILOG2061Implicit conversions between two unrelated types should be avoidedDetails
VERILOG2062Out-of-bounds values used to index arrays should be fixedDetails
VERILOG2063Signing keywords with no effect should be removedDetails
VERILOG2064Implicit conversions from integer to boolean value should be reviewedDetails
VERILOG2065Implicit conversions from integer to real value should be reviewedDetails
VERILOG2066Integers should not overflowDetails
VERILOG2067Encoding bytes should be validDetails
VERILOG2068Pragma protect keywords expecting integer values should be set with integer valuesDetails
VERILOG2069"pragma protect viewport" directive should be defined with valid optionsDetails
VERILOG2070Lifetime specifiers should not be used on method prototype declarationsDetails
VERILOG2071String format specifiers should not be missingDetails
VERILOG2072Timing control edge expression should not be wider than one bitDetails
VERILOG2073System timing check parameters should always be positiveDetails
VERILOG2074"pragma protect begin" directives should not be nestedDetails
VERILOG2075Connections between external net and internal net port should have consistent net typesDetails
VERILOG2076Nonblocking assignments should not be used in "final" blocksDetails
VERILOG2077"dist" constraint items should not be surrounded by parenthesesDetails
VERILOG2078"\%" escape code should not be usedDetails
VERILOG2079"foreach" loops should not use multidimensional brackets when declaring loop variablesDetails
VERILOG2080Standalone "generate" blocks without a corresponding generate loop or condition should not be usedDetails
VERILOG2081Useless void casts should be removedDetails
VERILOG2082Port direction should be set to "inout" when port is both read and writtenDetails
VERILOG2083Implicit conversions in port connection expressions should not expand typesDetails
VERILOG2084Implicit conversions in port connection expressions should not truncate typesDetails
VERILOG2085Pragma protect directives should not define unknown keyword optionsDetails
VERILOG2086Unsized types should not be used in concatenationsDetails
VERILOG2087Pragma protect keywords expecting list of key/value options values should be set with list of key/value options valuesDetails
VERILOG2088Encoded block in protected envelope should not differ in size from what was specified in a prior encoding pragma directiveDetails
VERILOG2089Out-of-bounds range should not be used to select from an arrayDetails
VERILOG2090An indexed part-select should not have a width that is wider than the bounds of the array it is selectingDetails
VERILOG2091Real literals should not be too large to be representedDetails
VERILOG2092Real literals should not be too small to be representedDetails
VERILOG2093Macros should not be redefinedDetails
VERILOG2094An open range with constant bounds should not be reversedDetails
VERILOG2095Comparison operators should not have operands of differing signsDetails
VERILOG2096An implicit conversion should not change the signedness of an integer typeDetails
VERILOG2097State-dependent path conditions in specify blocks should stick with the subset of expression types and operators defined by SystemVerilog standardDetails
VERILOG2098Parameters should not be used inside "specify" blocksDetails
VERILOG2099Dist weight operators (":=", ":/") should not be splitDetails
VERILOG2100A static variable's initializer should not depend on another variable that does not have a defined order of initialization relative to the firstDetails
VERILOG2101A static variable's initializer expression should not refer to uninitialized variables, nets, ports, or modport membersDetails
VERILOG2102Constant functions should not contain static variables with initializerDetails
VERILOG2103Constant functions should not invoke tasksDetails
VERILOG2104Variables should be assigned a value before being usedDetails
VERILOG2105Instance ports with no default value should not be left unconnectedDetails
VERILOG2106Unnamed instance ports should not be left unconnectedDetails
VERILOG2107A net that is used should have a value drivenDetails
VERILOG2108Unknown character escape codes should not be usedDetails
VERILOG2110Unknown pragma directives should be removedDetails
VERILOG2111Unknown pragma protect encoding should be fixedDetails
VERILOG2112An arithmetic right shift of an unsigned integral type should be avoided as it will always shift in zerosDetails
VERILOG2114"always_comb" or "always_ff" or "always_latch" should be used instead of "always"Details
VERILOG2115"always_comb" block should not contain any non-blocking assignmentsDetails
VERILOG2116Macro concatenation tokens that are not actually concatenating anything should be reviewedDetails
VERILOG2117Left-to-right streaming operators should not define a slice sizeDetails
VERILOG2118In a context where "default_nettype" is set to "none", a net port should not elide its net typeDetails
VERILOG2119Implicit named port connection should not be made between two inequivalent typesDetails
VERILOG2120A "pulsestyle" or "showcancelled" declaration should not target an output terminal that has previously been used in a timing path declarationDetails
VERILOG2121A constant function should not access a queue with a reversed rangeDetails
VERILOG2122"always_ff" block should not contain any blocking assignments for non-local variablesDetails
VERILOG2125Blocking and non-blocking assignments should not be mixed in the same "always" blockDetails
VERILOG2126All conditions should be different within the same "if / else if" conditional statementDetails
VERILOG2130The type of a case item expression that does not match the type of the case condition expression should be fixedDetails
VERILOG2131A case item with a known value that makes it impossible to ever match the case condition (or vice versa) should be fixedDetails
VERILOG2141All paths of a non-void function should return a valueDetails
VERILOG2142A non-void function should return a valueDetails
VERILOG2143A case statement with an enum type condition should cover every enumerand, unless there is a 'default' labelDetails
VERILOG2145Duplicated items in case statement should be removedDetails
VERILOG2146Overlapping items in case statement should be avoidedDetails
VERILOG2147Unreachable items in case statement should be removedDetails
``` (quality-profiles-hdl)= ## HDL ```{raw} html

Count: 29

KeyNameDetails
HDL1001All clock domain crossings (CDC) should be reviewedDetails
HDL1002The number of clock domains per design should be as low as possibleDetails
HDL1003Combinational loops should be removedDetails
HDL1005All input ports should be connectedDetails
HDL1006All output ports should be connectedDetails
HDL1007All inout ports should be connectedDetails
HDL1008All output signals of top-level module should be registeredDetails
HDL1010Output signals should not be constantDetails
HDL1011Ports should not be directly connectedDetails
HDL1012A module should not depend on too many other modulesDetails
HDL1013All clocks should be generated within a unique clock management moduleDetails
HDL1015Clock management module should be instantiated in top moduleDetails
HDL1022All reset domain crossings (RDC) should be reviewedDetails
HDL1023Track finite state machines (FSM)Details
HDL1024FSM should have a minimal number of statesDetails
HDL1025FSM should not have too many statesDetails
HDL1026FSM should not have too many output signalsDetails
HDL1027FSM should not have too many input signalsDetails
HDL1029FSM should not have states that can target too many other statesDetails
HDL1039A reset domain should not use both asynchronous and synchronous resetsDetails
HDL1040A reset domain should not use both active-low and active-high resetsDetails
HDL1043Latches should be removedDetails
HDL1044Each process and "always" block should use one reset domain maximumDetails
HDL1045An instantiation should not use too many clock domainsDetails
HDL1046An instantiation should not use too many global reset domainsDetails
HDL1048Unreachable FSM states should be removedDetails
HDL1049Deadlock FSM states should be reviewedDetails
HDL1050Livelock FSM states should be reviewedDetails
HDL1051Asynchronous reset release should be synchronized into the destination clock domainDetails
``` ```{raw} html ```