• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
    • Debugging
    • Community
    • Std
    • Proof-automation
    • Macro-libraries
    • ACL2
    • Interfacing-tools
    • Hardware-verification
      • Gl
      • Esim
      • Vl2014
      • Sv
        • Svex-stvs
        • Svex-decomposition-methodology
        • Sv-versus-esim
        • Svex-decomp
        • Svex-compose-dfs
        • Svex-compilation
        • Moddb
        • Svmods
        • Svstmt
        • Sv-tutorial
        • Expressions
        • Symbolic-test-vector
        • Vl-to-svex
          • Vl-to-sv
          • Vl-design->sv-design
            • Vl-simpconfig
            • Vl-hierarchy-sv-translation
            • Vl-expr-svex-translation
            • Vl-design->svex-modalist
            • Vl-svstmt
              • Vl-svstmt.lisp
                • Vl-casestmt-violation-conds
                • Vl-caselist-none/multiple
                • Vl-elaborated-expr-consteval
                • Vl-always->svex
                • Vl-caseexprs->svex-test
                • Vl-always->svex-checks
                • Vl-implicitvalueparam-final-type
                • Vl-assignstmt->svstmts
                • Vl-fundecl-to-svex
                • Vl-evatomlist-delay-substitution
                • Vl-consteval
                • Vl-alwayslist->svex
                • Vl-index-expr-svex/size/type
                • Vl-vardecllist->svstmts
                • Sv::svex-alist->assigns
                • Vl-case-conservative-test-expr
                • Vl-evatomlist->svex
                • Vl-case-xcond-wrapper
                • Sv::constraintlist-maybe-rewrite-fixpoint
                • Vl-always-apply-trigger-to-updates
                • Vl-initiallist-size-warnings
                • Vl-initial-size-warnings
                • Vl-finallist-size-warnings
                • Vl-always->svex-latch-warnings
                  • Vl-final-size-warnings
                  • Sv::svarlist-masked-x-subst
                  • Sv::svar->lhs-by-mask
                  • Svstmt-config
                  • Sv::svex-alist-unset-nonblocking
                  • Sv::svar->lhs-by-size
                  • Combine-mask-alists
                  • Sv::svarlist-delay-subst
                  • Vttree-constraints-to-svstmts
                  • Sv::4vmask-alist-unset-nonblocking
                  • Sv::svarlist-remove-delays
                  • Vl-caselist->caseexprs
                  • Vl-evatomlist-has-edge
            • Vl-to-sv-main
            • Vl-simplify-sv
            • Vl-user-paramsettings->unparam-names
            • Vl-user-paramsettings->modnames
        • Fgl
        • Vwsim
        • Vl
        • X86isa
        • Svl
        • Rtl
      • Software-verification
      • Math
      • Testing-utilities
    • Vl-svstmt.lisp

    Vl-always->svex-latch-warnings

    Signature
    (vl-always->svex-latch-warnings write-masks read-masks) 
      → 
    warnings
    Arguments
    write-masks — Guard (sv::4vmask-alist-p write-masks).
    read-masks — Guard (sv::svex-mask-alist-p read-masks).
    Returns
    warnings — Type (vl-warninglist-p warnings).

    Definitions and Theorems

    Function: vl-always->svex-latch-warnings

    (defun vl-always->svex-latch-warnings (write-masks read-masks)
     (declare (xargs :guard (and (sv::4vmask-alist-p write-masks)
                                 (sv::svex-mask-alist-p read-masks))))
     (let ((__function__ 'vl-always->svex-latch-warnings))
      (declare (ignorable __function__))
      (b*
       ((warnings nil)
        (write-masks (sv::4vmask-alist-fix write-masks))
        ((when (atom write-masks)) (ok))
        ((cons var wmask) (car write-masks))
        (var (sv::svar-fix var))
        (wmask (sv::4vmask-fix wmask))
        (rmask (sv::svex-mask-lookup (sv::make-svex-var :name var)
                                     read-masks))
        (overlap (bitops::sparseint-bitand wmask rmask))
        (warnings
         (if (bitops::sparseint-equal overlap 0)
             warnings
          (warn
           :type :vl-always-comb-looks-like-latch
           :msg
           "Variable ~a0 was both read and written (or not ~
                                   always updated) in an always_comb block.  ~
                                   Verilog simulators may treat this variable as ~
                                   a latch.  Overlap of read and write bits: ~s1"
           :args (list var
                       (if (< (bitops::sparseint-length overlap)
                              40000)
                           (str::hexify (bitops::sparseint-val overlap))
                         "<more than 10000 digits>")))))
        ((wmv warnings)
         (vl-always->svex-latch-warnings (cdr write-masks)
                                         read-masks)))
       warnings)))

    Theorem: vl-warninglist-p-of-vl-always->svex-latch-warnings

    (defthm vl-warninglist-p-of-vl-always->svex-latch-warnings
     (b* ((warnings
               (vl-always->svex-latch-warnings write-masks read-masks)))
       (vl-warninglist-p warnings))
     :rule-classes :rewrite)

    Theorem: vl-always->svex-latch-warnings-of-4vmask-alist-fix-write-masks

    (defthm
         vl-always->svex-latch-warnings-of-4vmask-alist-fix-write-masks
     (equal
      (vl-always->svex-latch-warnings (sv::4vmask-alist-fix write-masks)
                                      read-masks)
      (vl-always->svex-latch-warnings write-masks read-masks)))

    Theorem: vl-always->svex-latch-warnings-4vmask-alist-equiv-congruence-on-write-masks

    (defthm
     vl-always->svex-latch-warnings-4vmask-alist-equiv-congruence-on-write-masks
     (implies
      (sv::4vmask-alist-equiv write-masks write-masks-equiv)
      (equal
         (vl-always->svex-latch-warnings write-masks read-masks)
         (vl-always->svex-latch-warnings write-masks-equiv read-masks)))
     :rule-classes :congruence)

    Theorem: vl-always->svex-latch-warnings-of-svex-mask-alist-fix-read-masks

    (defthm
       vl-always->svex-latch-warnings-of-svex-mask-alist-fix-read-masks
      (equal (vl-always->svex-latch-warnings
                  write-masks
                  (sv::svex-mask-alist-fix read-masks))
             (vl-always->svex-latch-warnings write-masks read-masks)))

    Theorem: vl-always->svex-latch-warnings-svex-mask-alist-equiv-congruence-on-read-masks

    (defthm
     vl-always->svex-latch-warnings-svex-mask-alist-equiv-congruence-on-read-masks
     (implies
      (sv::svex-mask-alist-equiv read-masks read-masks-equiv)
      (equal
         (vl-always->svex-latch-warnings write-masks read-masks)
         (vl-always->svex-latch-warnings write-masks read-masks-equiv)))
     :rule-classes :congruence)