analysis namespace
Post-elaboration analysis framework.
Classes
- class FlowAnalysisBase
- A base class for flow analysis passes that contains non-specialized helper functions.
-
template<typename TDerived, typename TState>class AbstractFlowAnalysis
- An abstract class for flow analysis passes over SystemVerilog code.
- class AnalyzedScope
- Represents an analyzed AST scope.
- class AnalysisContext
- Holds various bits of state needed to perform analysis.
- class AnalysisManager
- The analysis manager coordinates running various analyses on AST symbols.
- struct AnalysisOptions
- Contains various options that can control analysis behavior.
- class AnalyzedAssertion
- Represents an analyzed assertion (or procedural checker).
- struct ReadRange
- A bit range read from a symbol within a procedure.
- struct SensitivityList
- Describes the effective sensitivity list for a SystemVerilog procedure.
- class AnalyzedProcedure
- Represents an analyzed procedure.
- class CaseDecisionDag
- A helper class for building a decision DAG (directed acyclic graph) for case statement exhaustiveness analysis.
- class ClockInference
- Various helper methods for inferring clocks in assertions and checkers.
-
template<typename TDerived, typename TState>class DataFlowAnalysis
- The base class for data flow analysis implementations.
- struct DataFlowState
- Represents the state of a data flow analysis at a single point in a procedure.
- class DefaultDFA
- The default concrete implementation of data flow analysis.
- class DFAResults
- Contains the results of running data flow analysis on a procedure.
- struct InstanceDriverState
- State tracked per canonical instance.
- class DriverTracker
- A helper class that tracks drivers for all symbols in a thread-safe manner.
- class TautologicalCompare
- Lint checks for comparisons (and logical combinations of comparisons) whose result can be determined without knowing the runtime values involved, which almost always indicates a bug.
- class ValueDriver
- Represents an expression that drives a value by assigning to some range of its type.
Enums
- enum class AnalysisFlags { None = 0, CheckUnused = 1 << 0, FullCaseUniquePriority = 1 << 1, FullCaseFourState = 1 << 2, AllowMultiDrivenLocals = 1 << 3, AllowDupInitialDrivers = 1 << 4, CheckShadow = 1 << 5, InlineContAssignFunctionReads = 1 << 6, AlwaysStarUsesLSPs = 1 << 7, ContAssignUsesLSPs = 1 << 8, AllowMultiDrivenDynamicallySizedArrays = 1 << 9 }
- Defines flags that control analysis behavior.
- enum class DriverSource: uint8_t { Initial, Final, Always, AlwaysComb, AlwaysLatch, AlwaysFF, Subroutine, Other }
- Specifies possible containing symbol kinds for value drivers.
- enum class DriverFlags: uint8_t { None = 0, InputPort = 1 << 0, OutputPort = 1 << 1, ClockVar = 1 << 2, Initializer = 1 << 3, FromSideEffect = 1 << 4, HasOverrideRange = 1 << 5, ViaIndirectPort = 1 << 6 }
- A set of flags that control how assignments are checked.
Enum documentation
enum class slang:: analysis:: AnalysisFlags
#include <slang/analysis/AnalysisOptions.h>
Defines flags that control analysis behavior.
| Enumerators | |
|---|---|
| None |
No flags specified. |
| CheckUnused |
Analysis should check for and report on unused symbols. |
| FullCaseUniquePriority |
'unique' and 'priority' keywords are used to assume full case coverage. |
| FullCaseFourState |
Require X and Z bits be covered for full case coverage. If not set, only 0 and 1 bits are required. |
| AllowMultiDrivenLocals |
Allow multi-driven subroutine local variables. |
| AllowDupInitialDrivers |
Signals driven by an always_comb are normally not allowed to be driven by any other process. This flag allows initial blocks to also drive such signals. |
| CheckShadow |
Analysis should check for and report on declarations that shadow declarations in outer scopes. |
| InlineContAssignFunctionReads |
When set, reads within functions called from a continuous assignment (assign statement) are inlined into the assignment's implicit sensitivity read-set, matching the behaviour of always_comb. The LRM does not specify whether function bodies should be inlined for continuous assignments; different simulators choose differently. The default (flag not set) is to include only the signals directly visible in the assignment expression, consistent with always * behaviour. |
| AlwaysStarUsesLSPs |
When set, This is a non-standard extension supported by some simulators. Per LRM 9.4.2.2 the default (flag not set) is to treat the sensitivity as covering the entire variable for any partial select – i.e. the sensitivity is derived from identifiers only, not from LSPs. |
| ContAssignUsesLSPs |
When set, The LRM does not specify exactly how continuous assignment sensitivities should be determined; different simulators choose differently. The default (flag not set) is to treat the sensitivity as covering the entire variable for any partial select – i.e. the sensitivity is derived from identifiers only, not from LSPs. |
| AllowMultiDrivenDynamicallySizedArrays |
Signals driven by an always_comb or always_ff are normally not allowed to be driven by any other process. The elements of dynamic arrays, associative arrays, and queues have no fixed bit range to tell them apart, so a write to any one of them counts as a write to the whole array. This flag lifts the restriction for such arrays. |
enum class slang:: analysis:: DriverSource: uint8_t
#include <slang/analysis/ValueDriver.h>
Specifies possible containing symbol kinds for value drivers.
enum class slang:: analysis:: DriverFlags: uint8_t
#include <slang/analysis/ValueDriver.h>
A set of flags that control how assignments are checked.
| Enumerators | |
|---|---|
| None |
No special assignment behavior specified. |
| InputPort |
The assignment is for an input port of a module / interface / program (the assignment to the internal symbol from the port itself). |
| OutputPort |
The assignment is for an output port of a module / interface / program (the assignment from the port connection). |
| ClockVar |
The assignment is from a clocking block signal. |
| Initializer |
The driver is for a net or variable initializer. |
| FromSideEffect |
The driver is from a side effect of applying a cached instance body. |
| HasOverrideRange |
The ValueDriver object has an override range stored with it. |
| ViaIndirectPort |
The driver connects through an indirect port, such as a modport or ref port. |