• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
    • Debugging
    • Std
    • Community
    • Proof-automation
    • Macro-libraries
    • ACL2
    • Interfacing-tools
    • Hardware-verification
      • Gl
      • Esim
      • Vl2014
        • Warnings
        • Primitives
        • Use-set
        • Syntax
        • Getting-started
        • Utilities
        • Loader
        • Transforms
          • Expression-sizing
          • Occform
          • Oprewrite
          • Expand-functions
          • Delayredux
          • Unparameterization
          • Caseelim
            • Vl-casezx-stmt-elim
            • Vl-casezx-matchexpr
            • Vl-modulelist-caseelim
            • Vl-casezx-match-any-expr
            • Vl-casestmt-elim
            • Vl-casestmt-size-warnings
            • Vl-casezx-elim-aux
            • Vl-stmt-caseelim
            • Case-statement-problems
            • Vl-casestmt-compare-expr
              • Vl-casestmt-compare-expr1
            • Vl-initiallist-caseelim
            • Vl-alwayslist-caseelim
            • Vl-casestmt-elim-aux
            • Vl-initial-caseelim
            • Vl-always-caseelim
            • Vl-casestmt-sizes-agreep
            • Vl-module-caseelim
            • Vl-design-caseelim
          • Split
          • Selresolve
          • Weirdint-elim
          • Vl-delta
          • Replicate-insts
          • Rangeresolve
          • Propagate
          • Clean-selects
          • Clean-params
          • Blankargs
          • Inline-mods
          • Expr-simp
          • Trunc
          • Always-top
          • Gatesplit
          • Gate-elim
          • Expression-optimization
          • Elim-supplies
          • Wildelim
          • Drop-blankports
          • Clean-warnings
          • Addinstnames
          • Custom-transform-hooks
          • Annotate
          • Latchcode
          • Elim-unused-vars
          • Problem-modules
        • Lint
        • Mlib
        • Server
        • Kit
        • Printer
        • Esim-vl
        • Well-formedness
      • Sv
      • Fgl
      • Vwsim
      • Vl
      • X86isa
      • Svl
      • Rtl
    • Software-verification
    • Math
    • Testing-utilities
  • Caseelim

Vl-casestmt-compare-expr

Creates, e.g., the expression foo === 3'b110 | foo === 3'b111, for handling case(foo) ... 3'b110, 3'b111: ... endcase.

Signature
(vl-casestmt-compare-expr test match-exprs) → compare-expr
Arguments
test — The test expression, e.g., foo.
    Guard (vl-expr-p test).
match-exprs — The match expressions, e.g., 3'b110, 3'b111.
    Guard (vl-exprlist-p match-exprs).
Returns
compare-expr — Type (vl-expr-p compare-expr).

Definitions and Theorems

Function: vl-casestmt-compare-expr

(defun vl-casestmt-compare-expr (test match-exprs)
 (declare (xargs :guard (and (vl-expr-p test)
                             (vl-exprlist-p match-exprs))))
 (declare
  (xargs
       :guard
       (and (vl-expr->finaltype test)
            (posp (vl-expr->finalwidth test))
            (vl-casestmt-matchexpr-sizes-agreep test match-exprs))))
 (let ((__function__ 'vl-casestmt-compare-expr))
  (declare (ignorable __function__))
  (b* (((when (atom match-exprs))
        (raise "Case statement with zero match expressions?")
        |*sized-1'bx*|)
       (compare1 (vl-casestmt-compare-expr1 test (car match-exprs)))
       ((when (atom (cdr match-exprs)))
        compare1)
       (compare-rest
            (vl-casestmt-compare-expr test (cdr match-exprs))))
    (make-vl-nonatom :op :vl-binary-bitor
                     :args (list compare1 compare-rest)
                     :finaltype :vl-unsigned
                     :finalwidth 1))))

Theorem: vl-expr-p-of-vl-casestmt-compare-expr

(defthm vl-expr-p-of-vl-casestmt-compare-expr
  (b* ((compare-expr (vl-casestmt-compare-expr test match-exprs)))
    (vl-expr-p compare-expr))
  :rule-classes :rewrite)

Theorem: vl-expr->finalwidth-of-vl-casestmt-compare-expr

(defthm vl-expr->finalwidth-of-vl-casestmt-compare-expr
  (b* ((compare-expr (vl-casestmt-compare-expr test match-exprs)))
    (equal (vl-expr->finalwidth compare-expr)
           1))
  :rule-classes :rewrite)

Theorem: vl-expr->finaltype-of-vl-casestmt-compare-expr

(defthm vl-expr->finaltype-of-vl-casestmt-compare-expr
  (b* ((compare-expr (vl-casestmt-compare-expr test match-exprs)))
    (equal (vl-expr->finaltype compare-expr)
           :vl-unsigned))
  :rule-classes :rewrite)

Theorem: vl-expr-welltyped-p-of-vl-casestmt-compare-expr

(defthm vl-expr-welltyped-p-of-vl-casestmt-compare-expr
 (implies
  (and (force (posp (vl-expr->finalwidth test)))
       (force (vl-expr->finaltype test))
       (force (vl-casestmt-matchexpr-sizes-agreep test match-exprs))
       (force (vl-expr-welltyped-p test))
       (force (vl-exprlist-welltyped-p match-exprs)))
  (vl-expr-welltyped-p
       (vl-casestmt-compare-expr test match-exprs))))

Theorem: vl-casestmt-compare-expr-of-vl-expr-fix-test

(defthm vl-casestmt-compare-expr-of-vl-expr-fix-test
  (equal (vl-casestmt-compare-expr (vl-expr-fix test)
                                   match-exprs)
         (vl-casestmt-compare-expr test match-exprs)))

Theorem: vl-casestmt-compare-expr-vl-expr-equiv-congruence-on-test

(defthm vl-casestmt-compare-expr-vl-expr-equiv-congruence-on-test
 (implies (vl-expr-equiv test test-equiv)
          (equal (vl-casestmt-compare-expr test match-exprs)
                 (vl-casestmt-compare-expr test-equiv match-exprs)))
 :rule-classes :congruence)

Theorem: vl-casestmt-compare-expr-of-vl-exprlist-fix-match-exprs

(defthm vl-casestmt-compare-expr-of-vl-exprlist-fix-match-exprs
  (equal
       (vl-casestmt-compare-expr test (vl-exprlist-fix match-exprs))
       (vl-casestmt-compare-expr test match-exprs)))

Theorem: vl-casestmt-compare-expr-vl-exprlist-equiv-congruence-on-match-exprs

(defthm
 vl-casestmt-compare-expr-vl-exprlist-equiv-congruence-on-match-exprs
 (implies (vl-exprlist-equiv match-exprs match-exprs-equiv)
          (equal (vl-casestmt-compare-expr test match-exprs)
                 (vl-casestmt-compare-expr test match-exprs-equiv)))
 :rule-classes :congruence)

Subtopics

Vl-casestmt-compare-expr1
Creates, e.g., the expression foo === 3'b110, for handling case(foo) ... 3'b110: ... endcase.