• 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
          • Split
          • Selresolve
          • Weirdint-elim
          • Vl-delta
          • Replicate-insts
          • Rangeresolve
          • Propagate
          • Clean-selects
          • Clean-params
          • Blankargs
          • Inline-mods
          • Expr-simp
          • Trunc
          • Always-top
            • Edgesynth
            • Stmtrewrite
            • Cblock
            • Vl-always-convert-regports
            • Vl-always-convert-regs
            • Stmttemps
            • Edgesplit
            • Vl-always-check-reg
            • Vl-convert-regs
            • Latchsynth
            • Vl-always-check-regs
            • Vl-match-always-at-some-edges
            • Unelse
            • Vl-always-convert-reg
              • Vl-design-always-backend
              • Vl-stmt-guts
              • Vl-always-convert-regport
              • Vl-always-scary-regs
              • Eliminitial
              • Ifmerge
              • Vl-edge-control-p
              • Elimalways
            • 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
    • Always-top

    Vl-always-convert-reg

    Convert a register into a wire.

    Signature
    (vl-always-convert-reg x) → netdecl
    Arguments
    x — Guard (vl-vardecl-p x).
    Returns
    netdecl — Type (vl-vardecl-p netdecl).

    When we replace always blocks with explicit instances, we have to convert the register declaration into an ordinary net declaration.

    We expect that this function should only ever be called on registers that have passed vl-always-check-reg, so we cause a hard error if the register has array dimensions.

    Definitions and Theorems

    Function: vl-always-convert-reg

    (defun vl-always-convert-reg (x)
     (declare (xargs :guard (vl-vardecl-p x)))
     (let ((__function__ 'vl-always-convert-reg))
      (declare (ignorable __function__))
      (b*
       (((vl-vardecl x) x)
        ((unless (vl-simplereg-p x))
         (raise
          "Expected all variables to convert to be simple regs and not arrays.")
         (vl-vardecl-fix x))
        (range (vl-simplereg->range x))
        (new-type (make-vl-coretype :name :vl-logic
                                    :signedp (vl-simplereg->signedp x)
                                    :pdims (and range (list range)))))
       (change-vl-vardecl x
                          :type new-type
                          :nettype :vl-wire
                          :atts (acons (hons-copy "VL_CONVERTED_REG")
                                       nil x.atts)))))

    Theorem: vl-vardecl-p-of-vl-always-convert-reg

    (defthm vl-vardecl-p-of-vl-always-convert-reg
      (b* ((netdecl (vl-always-convert-reg x)))
        (vl-vardecl-p netdecl))
      :rule-classes :rewrite)

    Theorem: vl-always-convert-reg-of-vl-vardecl-fix-x

    (defthm vl-always-convert-reg-of-vl-vardecl-fix-x
      (equal (vl-always-convert-reg (vl-vardecl-fix x))
             (vl-always-convert-reg x)))

    Theorem: vl-always-convert-reg-vl-vardecl-equiv-congruence-on-x

    (defthm vl-always-convert-reg-vl-vardecl-equiv-congruence-on-x
      (implies (vl-vardecl-equiv x x-equiv)
               (equal (vl-always-convert-reg x)
                      (vl-always-convert-reg x-equiv)))
      :rule-classes :congruence)