• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
    • Debugging
    • Std
    • Proof-automation
    • Macro-libraries
    • ACL2
    • Interfacing-tools
    • Hardware-verification
      • Gl
      • Esim
      • Vl2014
      • Sv
      • Fgl
      • Vwsim
      • Vl
        • Syntax
        • Loader
        • Warnings
        • Getting-started
        • Utilities
        • Printer
        • Kit
          • Vl-lint
            • Vl-lintconfig-p
            • Condcheck
            • Lint-warning-suppression
            • Lucid
              • Typo-detection
              • Vl-lucid-dissect-pair
              • Vl-lucidstate
              • Vl-lucid-dissect-var-main
              • Vl-lucidstate-init
              • Vl-lucid-check-uses-are-spurious-instances
              • Vl-hidslice-mark
              • Vl-namedarglist-lucidcheck
              • Vl-lucidst-mark-modport
              • Vl-lucid-multidrive-detect
              • Vl-namedarg-lucidcheck
              • Vl-lucid-filter-merges
              • 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
              • Vl-enumitem-lucidcheck
              • Vl-custom-suppress-multidrive-p
              • Vl-evatom-lucidcheck
              • Vl-rhs-lucidcheck
              • Vl-range-lucidcheck
              • Vl-lucidocclist-drop-bad-modinsts
              • 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
              • Vl-lucid-range->bits
              • Vl-lucidocclist-drop-initials/finals
              • Vl-lucid-collect-solo-occs
              • Vl-lucid-collect-resolved-slices
              • Vl-basic-lucidctx
              • Vl-scopestack->flat-transitive-names-slow
              • Vl-lucidocclist-drop-generates
              • Vl-lucid-dissect
              • Vl-lucid-first-solo-occ
              • Vl-lucid-do-merges1
              • Vl-lucid-do-merges
              • 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-warning-type
              • Vl-lucid-plainarglist-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-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
              • Vl-lucid-z-expr-p
              • Vl-lucid-z-assign-p
              • Vl-lucidmergealist
              • Vl-lucid-summarize-bits
              • Vl-pp-merged-index-list
              • Vl-pp-merged-index
              • Vl-lucid-pp-bits
            • Lvaluecheck
            • Vl-interfacelist-alwaysstyle
            • Truncation-warnings
            • Vl-modulelist-alwaysstyle
            • Skip-detection
            • Vl-lint-report
            • Vl-lintresult
            • Vl::vl-design-sv-use-set
            • Oddexpr-check
            • Leftright-check
            • Duplicate-detect
            • Selfassigns
            • *vl-lint-help*
            • Arith-compare-check
            • Dupeinst-check
            • Qmarksize-check
            • Lint-whole-file-suppression
            • Run-vl-lint-main
            • Logicassign
            • Run-vl-lint
            • Vl-print-certain-warnings
            • Duperhs-check
            • Vl-lint-top
            • Sd-filter-problems
            • Vl-modulelist-add-svbad-warnings
            • Vl-module-add-svbad-warnings
            • Check-case
            • Vl-lint-extra-actions
            • Drop-lint-stubs
            • Vl-lint-print-warnings
            • Drop-user-submodules
            • Check-namespace
            • Vl-lintconfig-loadconfig
            • Vl-lint-design->svex-modalist-wrapper
            • Vl-delete-sd-problems-for-modnames-aux
            • Vl-collect-new-names-from-orignames
            • Vl-lint-print-all-warnings
            • Vl-design-remove-unnecessary-modules
            • Vl-delete-sd-problems-for-modnames
            • Vl-always-check-style
            • Vl-vardecllist-svbad-warnings
            • Vl-vardecl-svbad-warnings
            • Vl-reportcard-remove-suppressed
            • Vl-reportcard-keep-suppressed
            • Vl-alwayslist-check-style
            • Vl-remove-nameless-descriptions
            • Vl-lint-apply-quiet
            • Vl-warninglist-remove-suppressed
            • Vl-warninglist-keep-suppressed
            • Vl-print-eliminated-descs
            • Vl-module-alwaysstyle
            • Vl-jp-reportcard-aux
            • Vl-interface-alwaysstyle
            • Vl-design-alwaysstyle
            • Vl-jp-description-locations
            • Vl-jp-reportcard
            • Vl-pp-stringlist-lines
            • Vl-jp-design-locations
            • Vl-datatype-svbad-p
            • Unpacked-range-check
            • Sd-problem-major-p
            • Vl-alwaysstyle
          • Vl-server
          • Vl-gather
          • Vl-zip
          • Vl-main
          • Split-plusargs
          • Vl-shell
          • Vl-json
        • Mlib
        • Transforms
      • X86isa
      • Svl
      • Rtl
    • Software-verification
    • Math
    • Testing-utilities
  • Vl-lint

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