• 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
            • Vl-mux-occform
            • Vl-basic-binary-op-occform
            • Vl-occform-mkports
            • Vl-unary-reduction-op-occform
            • Vl-make-n-bit-mux
            • Vl-bitselect-occform
            • Vl-assign-occform
            • Vl-plusminus-occform
            • Vl-shift-occform
            • Vl-gte-occform
            • Vl-plain-occform
            • Vl-unary-not-occform
            • Vl-rem-occform
            • Vl-div-occform
            • Vl-ceq-occform
            • Vl-mult-occform
            • Vl-make-n-bit-dynamic-bitselect-m
            • Vl-simple-instantiate
            • Vl-occform-mkwires
            • Vl-assignlist-occform
            • Vl-occform-argfix
              • Vl-occform-extend-id
              • Vl-make-n-bit-unsigned-gte
              • Vl-make-2^n-bit-dynamic-bitselect
              • Vl-make-n-bit-div-rem
              • Vl-make-n-bit-plusminus
              • Vl-make-n-bit-signed-gte
              • Vl-make-n-bit-shr-by-m-bits
              • Vl-make-n-bit-shl-by-m-bits
              • Vl-occform-mkport
              • Vl-make-n-bit-dynamic-bitselect
              • Vl-make-n-bit-reduction-op
              • Vl-make-n-bit-adder-core
              • Vl-make-n-bit-xdetect
              • Vl-make-n-bit-x-propagator
              • Vl-make-n-bit-shl-place-p
              • Vl-make-n-bit-shr-place-p
              • Vl-make-n-bit-mult
              • Vl-occform-mkwire
              • Vl-make-nedgeflop-vec
              • Vl-make-n-bit-binary-op
              • Vl-make-list-of-netdecls
              • Vl-make-n-bit-delay-1
              • Vl-make-n-bit-zmux
              • *vl-2-bit-dynamic-bitselect*
              • Vl-make-n-bit-unsigned-rem
              • Vl-make-n-bit-unsigned-div
              • Vl-make-n-bit-shr-place-ps
              • Vl-make-n-bit-shl-place-ps
              • Vl-make-n-bit-assign
              • Vl-make-n-bit-x
              • Vl-make-n-bit-ceq
              • Vl-make-n-bit-xor-each
              • Vl-make-n-bit-not
              • Vl-make-1-bit-delay-m
              • Vl-make-n-bit-delay-m
              • *vl-1-bit-signed-gte*
              • *vl-1-bit-div-rem*
              • *vl-1-bit-adder-core*
              • Vl-make-nedgeflop
              • *vl-1-bit-mult*
              • *vl-1-bit-dynamic-bitselect*
            • Oprewrite
            • Expand-functions
            • Delayredux
            • Unparameterization
            • 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
    • Vl-occform-argfix

    Vl-occform-extend-id

    Signature
    (vl-occform-extend-id x range warnings) → (mv warnings new-x)
    Arguments
    x — Wire that we need to perhaps extend.
        Guard (vl-expr-p x).
    range — Range of this wire.
        Guard (vl-maybe-range-p range).
    warnings — Guard (vl-warninglist-p warnings).
    Returns
    warnings — Type (vl-warninglist-p warnings).
    new-x — Type (vl-expr-p new-x).

    Definitions and Theorems

    Function: vl-occform-extend-id

    (defun vl-occform-extend-id (x range warnings)
     (declare (xargs :guard (and (vl-expr-p x)
                                 (vl-maybe-range-p range)
                                 (vl-warninglist-p warnings))))
     (declare (xargs :guard (and (vl-idexpr-p x)
                                 (posp (vl-expr->finalwidth x))
                                 (vl-expr->finaltype x))))
     (let ((__function__ 'vl-occform-extend-id))
      (declare (ignorable __function__))
      (b*
       ((x (vl-expr-fix x))
        (range (vl-maybe-range-fix range))
        (finalwidth (vl-expr->finalwidth x))
        (finaltype (vl-expr->finaltype x))
        ((unless (vl-maybe-range-resolved-p range))
         (mv (fatal :type :vl-occform-bad-id
                    :msg "Expected range for ~a0 to be resolved: ~a1."
                    :args (list x range))
             x))
        (actual-size (vl-maybe-range-size range))
        ((when (eql actual-size finalwidth))
         (mv (ok) x))
        ((when (< finalwidth actual-size))
         (mv (fatal :type :vl-occform-bad-id
                    :msg "Finalwidth of ~a0 is too small for range ~a1."
                    :args (list x range))
             x))
        (name (vl-idexpr->name x))
        (id-part (vl-idexpr name actual-size finaltype))
        (pad-width (- finalwidth actual-size))
        (pad-bit
         (cond
          ((eq finaltype :vl-unsigned)
           |*sized-1'b0*|)
          ((not range)
           (vl-idexpr name 1 :vl-signed))
          (t
           (make-vl-nonatom
            :op :vl-bitselect
            :args
            (list
               id-part
               (vl-make-index (vl-resolved->val (vl-range->msb range))))
            :finalwidth 1
            :finaltype :vl-unsigned))))
        (concat
            (make-vl-nonatom :op :vl-concat
                             :args (append (replicate pad-width pad-bit)
                                           (list id-part))
                             :finalwidth finalwidth
                             :finaltype :vl-unsigned)))
       (mv (ok) concat))))

    Theorem: vl-warninglist-p-of-vl-occform-extend-id.warnings

    (defthm vl-warninglist-p-of-vl-occform-extend-id.warnings
      (b* (((mv ?warnings ?new-x)
            (vl-occform-extend-id x range warnings)))
        (vl-warninglist-p warnings))
      :rule-classes :rewrite)

    Theorem: vl-expr-p-of-vl-occform-extend-id.new-x

    (defthm vl-expr-p-of-vl-occform-extend-id.new-x
      (b* (((mv ?warnings ?new-x)
            (vl-occform-extend-id x range warnings)))
        (vl-expr-p new-x))
      :rule-classes :rewrite)

    Theorem: vl-expr->finalwidth-of-vl-occform-extend-id

    (defthm vl-expr->finalwidth-of-vl-occform-extend-id
      (equal (vl-expr->finalwidth
                  (mv-nth 1
                          (vl-occform-extend-id x range warnings)))
             (vl-expr->finalwidth x)))

    Theorem: vl-expr-welltyped-p-of-vl-occform-extend-id

    (defthm vl-expr-welltyped-p-of-vl-occform-extend-id
      (implies (and (vl-expr-welltyped-p x)
                    (vl-idexpr-p x)
                    (vl-expr->finaltype x))
               (vl-expr-welltyped-p
                    (mv-nth 1
                            (vl-occform-extend-id x range warnings)))))

    Theorem: vl-occform-extend-id-of-vl-expr-fix-x

    (defthm vl-occform-extend-id-of-vl-expr-fix-x
      (equal (vl-occform-extend-id (vl-expr-fix x)
                                   range warnings)
             (vl-occform-extend-id x range warnings)))

    Theorem: vl-occform-extend-id-vl-expr-equiv-congruence-on-x

    (defthm vl-occform-extend-id-vl-expr-equiv-congruence-on-x
      (implies (vl-expr-equiv x x-equiv)
               (equal (vl-occform-extend-id x range warnings)
                      (vl-occform-extend-id x-equiv range warnings)))
      :rule-classes :congruence)

    Theorem: vl-occform-extend-id-of-vl-maybe-range-fix-range

    (defthm vl-occform-extend-id-of-vl-maybe-range-fix-range
      (equal (vl-occform-extend-id x (vl-maybe-range-fix range)
                                   warnings)
             (vl-occform-extend-id x range warnings)))

    Theorem: vl-occform-extend-id-vl-maybe-range-equiv-congruence-on-range

    (defthm
          vl-occform-extend-id-vl-maybe-range-equiv-congruence-on-range
      (implies (vl-maybe-range-equiv range range-equiv)
               (equal (vl-occform-extend-id x range warnings)
                      (vl-occform-extend-id x range-equiv warnings)))
      :rule-classes :congruence)

    Theorem: vl-occform-extend-id-of-vl-warninglist-fix-warnings

    (defthm vl-occform-extend-id-of-vl-warninglist-fix-warnings
     (equal (vl-occform-extend-id x range (vl-warninglist-fix warnings))
            (vl-occform-extend-id x range warnings)))

    Theorem: vl-occform-extend-id-vl-warninglist-equiv-congruence-on-warnings

    (defthm
       vl-occform-extend-id-vl-warninglist-equiv-congruence-on-warnings
      (implies (vl-warninglist-equiv warnings warnings-equiv)
               (equal (vl-occform-extend-id x range warnings)
                      (vl-occform-extend-id x range warnings-equiv)))
      :rule-classes :congruence)