Lucid
Check for unused, unset, spurious wires, and multiply driven wires.
Lucid is a vl-lint check that scans your design for:
- Spurious wires—never used or set anywhere,
- Unset variables—used without being driven (scary),
- Unused variables—driven but never used, and
- Multiply driven wires—which are often not desired.
These warnings are often about entire wires, but Lucid also carries out a
bit-level analysis and can often detect when only a portion of a wire is
unused, unset, or multiply driven.
Typically Lucid is invoked as part of vl-lint; its warnings are found
in the file vl-lucid.txt.
We have found Lucid to be most useful when refactoring designs and moving
functionality from one module to another. In these situations, it is often
very easy to accidentally leave some wires (or logic) behind, so seeing what is
undriven or unset can be really handy.
Subtopics
- Typo-detection
- We try to detect possible typos in wire names.
- Vl-lucid-dissect-pair
- Vl-lucidstate
- State for the lucid transform.
- Vl-lucid-dissect-var-main
- Vl-lucidstate-init
- Construct the initial lucid state for a design.
- Vl-lucid-check-uses-are-spurious-instances
- Vl-hidslice-mark
- Vl-namedarglist-lucidcheck
- Vl-lucidst-mark-modport
- Helper function for marking interface modports as used.
- Vl-lucid-multidrive-detect
- Vl-namedarg-lucidcheck
- Vl-lucid-filter-merges
- Group up occurrences into those to be merged (into a merge alist) and
those not to be merged (into a regular list).
- Vl-hidsolo-mark
- Vl-arguments-lucidcheck
- Vl-lucid-dissect-database
- Vl-design-lucid
- Vl-maybe-delayoreventcontrol-lucidcheck
- Vl-lucid-valid-bits-for-datatype
- Vl-delayoreventcontrol-lucidcheck
- Vl-repeateventcontrol-lucidcheck
- Vl-namedparamvaluelist-lucidcheck
- Vl-scopeexprlist-mark-solo
- Vl-plainarg-lucidcheck
- Vl-maybe-rhsexprlist-lucidcheck
- Vl-maybe-paramvalue-lucidcheck
- Vl-paramvaluelist-lucidcheck
- Vl-namedparamvalue-lucidcheck
- Vl-maybe-gatedelay-lucidcheck
- Vl-plainarglist-lucidcheck
- Vl-lucidstate-mark
- Vl-lucid-mark-simple
- Vl-eventcontrol-lucidcheck
- Vl-enumitemlist-lucidcheck
- Vl-delaycontrol-lucidcheck
- Vl-paramvalue-lucidcheck
- Vl-paramargs-lucidcheck
- Vl-maybe-rhsexpr-lucidcheck
- Vl-maybe-range-lucidcheck
- Vl-lucid-typo-detect1
- Vl-gatedelay-lucidcheck
- Vl-evatomlist-lucidcheck
- Vl-rangelist-lucidcheck
- Vl-pps-lucidstate
- Pretty-printer for debugging the lucid state.
- Vl-enumitem-lucidcheck
- Vl-custom-suppress-multidrive-p
- Mechanism for custom suppression of multidrive warnings.
- Vl-evatom-lucidcheck
- Vl-rhs-lucidcheck
- Vl-range-lucidcheck
- Vl-lucidocclist-drop-bad-modinsts
- Removes occurrences from unresolved module instances.
- Vl-hidtrace-mark-interfaces
- Vl-hidstep-mark-interfaces
- Vl-add-typo-candidate
- Vl-paramdecl-lucidcheck
- Vl-interfaceportlist-lucidcheck
- Vl-interfaceport-lucidcheck
- Vl-fundecl-lucidcheck
- Vl-design-lucidcheck-main
- Vl-taskdecllist-lucidcheck
- Vl-taskdecl-lucidcheck
- Vl-portdecllist-lucidcheck
- Vl-paramdecllist-lucidcheck
- Vl-package-lucidcheck
- Vl-modinst-lucidcheck
- Vl-interfacelist-lucidcheck
- Vl-gateinstlist-lucidcheck
- Vl-dpiimportlist-lucidcheck
- Vl-dpiexportlist-lucidcheck
- Vl-vardecllist-lucidcheck
- Vl-vardecl-lucidcheck
- Vl-typedeflist-lucidcheck
- Vl-portdecl-lucidcheck
- Vl-packagelist-lucidcheck
- Vl-modulelist-lucidcheck
- Vl-modportlist-lucidcheck
- Vl-modinstlist-lucidcheck
- Vl-interface-lucidcheck
- Vl-initiallist-lucidcheck
- Vl-gateinst-lucidcheck
- Vl-fundecllist-lucidcheck
- Vl-dpiimport-lucidcheck
- Vl-dpiexport-lucidcheck
- Vl-assignlist-lucidcheck
- Vl-alwayslist-lucidcheck
- Vl-typedef-lucidcheck
- Vl-modport-lucidcheck
- Vl-initial-lucidcheck
- Vl-finallist-lucidcheck
- Vl-assign-lucidcheck
- Vl-always-lucidcheck
- Vl-aliaslist-lucidcheck
- Vl-module-lucidcheck
- Vl-lucid-typo-detect
- Vl-final-lucidcheck
- Vl-alias-lucidcheck
- Vl-lucidocclist-drop-foreign-writes
- Vl-lucid-pp-multibits
- Vl-lucid-slices-append-bits
- Vl-scopestack-is-portdecl-p
- Vl-lucid-valid-bits-for-decl
- Vl-lucid-resolved-slices->bits
- Vl-lucid-resolved-slice->bits
- Vl-lucid-instmod-find-port-dir
- Vl-custom-suppress-multidrive-p-default
- Vl-lucidmergealist-count
- Vl-lucid-scopestack-subscope-p
- Determine if scopestack a occurs within scopestack b.
- Vl-lucid-range->bits
- Vl-lucidocclist-drop-initials/finals
- Remove all occurrences that are from initial statements.
- Vl-lucid-collect-solo-occs
- Vl-lucid-collect-resolved-slices
- Vl-basic-lucidctx
- Vl-scopestack->flat-transitive-names-slow
- Vl-lucidocclist-drop-generates
- Removes all occurrences that are inside of generate blocks.
- Vl-lucid-dissect
- Vl-lucid-first-solo-occ
- Vl-lucid-do-merges1
- Vl-lucid-do-merges
- Combine the occurrences in the merge alist into single occurrences.
- Vl-lucidocclist-remove-tails
- Vl-lucid-some-solo-occp
- Vl-scopestack-top-level-name
- Vl-normalize-scopestack
- Vl-lucid-resolved-slice-p
- Vl-lucid-all-slices-resolved-p
- (vl-lucid-all-slices-resolved-p x) recognizes lists where every element satisfies vl-lucid-resolved-slice-p.
- Vl-lucid-warning-type
- Vl-lucid-plainarglist-nicely-resolved-p
- (vl-lucid-plainarglist-nicely-resolved-p x) recognizes lists where every element satisfies vl-lucid-plainarg-nicely-resolved-p.
- Vl-lucid-multidrive-summary
- Vl-string-expr->value
- Vl-scopestack->topname
- Vl-pp-lucid-multidrive-summary
- Vl-lucid-all-slices-p
- (vl-lucid-all-slices-p x) recognizes lists where every element satisfies eq.
- Vl-lucidocclist-some-transistory-p
- Vl-lucidocc-transistory-p
- Vl-lucid-plainarg-nicely-resolved-p
- Vl-inside-true-generate-p
- Vl-possible-typo-warnings
- Vl-lucid-z-gateinst-p
- Vl-lucid-modinst-nicely-resolved-p
- Vl-inside-interface-p
- Vl-inside-blockscope-p
- Vl-typocandidates
- Binds top-level module names to lists of wires that might be typos
inside them.
- Vl-lucid-z-expr-p
- Vl-lucid-z-assign-p
- Vl-lucidmergealist
- An alist mapping vl-lucidctx-p to vl-lucidocclist-p.
- Vl-lucid-summarize-bits
- Vl-pp-merged-index-list
- Vl-pp-merged-index
- Vl-lucid-pp-bits