• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
    • Debugging
    • Std
    • 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-simple-instantiate-list
              • Vl-simple-instantiate-args-main
              • Vl-simple-inst
            • Vl-occform-mkwires
            • Vl-assignlist-occform
            • Vl-occform-argfix
            • 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
  • Occform

Vl-simple-instantiate

Convenient way to generating module instances.

Signature
(vl-simple-instantiate x instname actuals &key (loc '*vl-fakeloc*)) 
  → 
inst
Arguments
x — submodule to create an instance of.
    Guard (vl-module-p x).
instname — name for the new instance.
    Guard (stringp instname).
actuals — expressions to bind to the module's ports in port order.
    Guard (vl-exprlist-p actuals).
loc — Guard (vl-location-p loc).
Returns
inst — Type (vl-modinst-p inst).

If you are writing code to generate modules (as we often are in occform), it can be particularly onerous to generate module instances because you have to build vl-plainarg-p structures for all of the arguments and wrap these up in a vl-arguments-p.

vl-simple-instantiate automates this, at least for instantiating simple modules. You tell it the module you want to instantiate, x, and the expressions you want to use as the actuals. It pairs up these actuals with the submodule's ports, figuring out the directions/names of the plainargs, etc., and gives you back the new instance. As an added bonus, you get basic arity checking.

Definitions and Theorems

Function: vl-simple-instantiate-fn

(defun vl-simple-instantiate-fn (x instname actuals loc)
 (declare (xargs :guard (and (vl-module-p x)
                             (stringp instname)
                             (vl-exprlist-p actuals)
                             (vl-location-p loc))))
 (let ((__function__ 'vl-simple-instantiate))
  (declare (ignorable __function__))
  (b*
   (((vl-module x) x)
    (plainargs
      (if
       (and (not x.ifports)
            (same-lengthp actuals x.ports))
       (vl-simple-instantiate-args-main actuals x.ports x.portdecls)
       (raise "Wrong number of arguments for ~x0.~%"
              x.name))))
   (make-vl-modinst
        :modname x.name
        :instname (string-fix instname)
        :paramargs (make-vl-paramargs-plain :args nil)
        :portargs (make-vl-arguments-plain :args plainargs)
        :loc loc))))

Theorem: vl-modinst-p-of-vl-simple-instantiate

(defthm vl-modinst-p-of-vl-simple-instantiate
  (b* ((inst (vl-simple-instantiate-fn x instname actuals loc)))
    (vl-modinst-p inst))
  :rule-classes :rewrite)

Theorem: vl-simple-instantiate-fn-of-vl-module-fix-x

(defthm vl-simple-instantiate-fn-of-vl-module-fix-x
  (equal (vl-simple-instantiate-fn (vl-module-fix x)
                                   instname actuals loc)
         (vl-simple-instantiate-fn x instname actuals loc)))

Theorem: vl-simple-instantiate-fn-vl-module-equiv-congruence-on-x

(defthm vl-simple-instantiate-fn-vl-module-equiv-congruence-on-x
 (implies
    (vl-module-equiv x x-equiv)
    (equal (vl-simple-instantiate-fn x instname actuals loc)
           (vl-simple-instantiate-fn x-equiv instname actuals loc)))
 :rule-classes :congruence)

Theorem: vl-simple-instantiate-fn-of-str-fix-instname

(defthm vl-simple-instantiate-fn-of-str-fix-instname
  (equal (vl-simple-instantiate-fn x (str-fix instname)
                                   actuals loc)
         (vl-simple-instantiate-fn x instname actuals loc)))

Theorem: vl-simple-instantiate-fn-streqv-congruence-on-instname

(defthm vl-simple-instantiate-fn-streqv-congruence-on-instname
 (implies
    (streqv instname instname-equiv)
    (equal (vl-simple-instantiate-fn x instname actuals loc)
           (vl-simple-instantiate-fn x instname-equiv actuals loc)))
 :rule-classes :congruence)

Theorem: vl-simple-instantiate-fn-of-vl-exprlist-fix-actuals

(defthm vl-simple-instantiate-fn-of-vl-exprlist-fix-actuals
 (equal
      (vl-simple-instantiate-fn x instname (vl-exprlist-fix actuals)
                                loc)
      (vl-simple-instantiate-fn x instname actuals loc)))

Theorem: vl-simple-instantiate-fn-vl-exprlist-equiv-congruence-on-actuals

(defthm
   vl-simple-instantiate-fn-vl-exprlist-equiv-congruence-on-actuals
 (implies
    (vl-exprlist-equiv actuals actuals-equiv)
    (equal (vl-simple-instantiate-fn x instname actuals loc)
           (vl-simple-instantiate-fn x instname actuals-equiv loc)))
 :rule-classes :congruence)

Theorem: vl-simple-instantiate-fn-of-vl-location-fix-loc

(defthm vl-simple-instantiate-fn-of-vl-location-fix-loc
 (equal
   (vl-simple-instantiate-fn x
                             instname actuals (vl-location-fix loc))
   (vl-simple-instantiate-fn x instname actuals loc)))

Theorem: vl-simple-instantiate-fn-vl-location-equiv-congruence-on-loc

(defthm vl-simple-instantiate-fn-vl-location-equiv-congruence-on-loc
 (implies
    (vl-location-equiv loc loc-equiv)
    (equal (vl-simple-instantiate-fn x instname actuals loc)
           (vl-simple-instantiate-fn x instname actuals loc-equiv)))
 :rule-classes :congruence)

Subtopics

Vl-simple-instantiate-list
Generate a bunch of module instances.
Vl-simple-instantiate-args-main
Create plainargs binding some actuals to their ports, filling in the portnames and directions.
Vl-simple-inst
Like vl-simple-instantiate except it's a nice macro so that you don't have to put the actuals in a list.