• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
    • Debugging
    • Std
    • Community
    • Proof-automation
    • Macro-libraries
    • ACL2
    • Interfacing-tools
    • Hardware-verification
      • Gl
      • Esim
      • Vl2014
      • Sv
      • Fgl
      • Vwsim
      • Vl
        • Syntax
        • Loader
        • Warnings
        • Getting-started
        • Utilities
        • Printer
        • Kit
        • Mlib
        • Transforms
          • Unparameterization
          • Elaborate
          • Addnames
          • Annotate
            • Increment-elim
            • Make-implicit-wires
              • Shadowcheck
              • Implicit-wires-minutia
              • Implicit-wires-generate-scoping
              • Vl-genbase-make-implicit-wires
              • Vl-expr-names-for-implicit
              • Vl-make-implicit-wires-main
              • Vl-implicitst
              • Vl-make-port-implicit-wires
                • Vl-import-update-implicit
                • Vl-blockitemlist-update-implicit
                • Vl-blockitem-update-implicit
                • Vl-make-ordinary-implicit-wires
                • Vl-remove-declared-wires
                • Vl-implicitsts-restore-fast-alists
                • Vl-genblock-under-cond-make-implicit-wires
                • Vl-collect-exprs-for-implicit-wires-from-namedargs
                • Vl-genblock-make-implicit-wires
                • Vl-collect-exprs-for-implicit-wires-from-portargs
                • Vl-collect-exprs-for-implicit-wires-from-namedarg
                • Vl-gateinst-exprs-for-implicit-wires
                • Vl-modinst-exprs-for-implicit-wires
                • Vl-genelementlist-make-implicit-wires
                • Vl-packagemap-find-name
              • Basic-bind-elim
              • Argresolve
              • Basicsanity
              • Portdecl-sign
              • Enum-names
              • Port-resolve
              • Udp-elim
              • Vl-annotate-design
              • Vl-annotate-module
            • Clean-warnings
            • Eliminitial
            • Custom-transform-hooks
            • Problem-modules
        • X86isa
        • Svl
        • Rtl
      • Software-verification
      • Math
      • Testing-utilities
    • Make-implicit-wires

    Vl-make-port-implicit-wires

    Generate variable declarations for ports that don't have corresponding variable declarations.

    Signature
    (vl-make-port-implicit-wires items decls newitems) → newitems
    Arguments
    items — Items to process in reverse parse order, with implicit wire declarations already added in.
        Guard (vl-genelementlist-p items).
    decls — Alist binding all the non-port names that are (ever) declared in the module to anything. This lets us tell, when we get to a port declaration, whether we need to add a corresponding net declaration for it.
    newitems — Accumulator for our new items (reverse of items order, i.e., back into parse order.).
        Guard (vl-genelementlist-p newitems).
    Returns
    newitems — Parse order, with port-implicit decls added.
        Type (vl-genelementlist-p newitems).

    Definitions and Theorems

    Function: vl-make-port-implicit-wires

    (defun vl-make-port-implicit-wires (items decls newitems)
     (declare (xargs :guard (and (vl-genelementlist-p items)
                                 (vl-genelementlist-p newitems))))
     (let ((__function__ 'vl-make-port-implicit-wires))
      (declare (ignorable __function__))
      (b*
       (((when (atom items))
         (vl-genelementlist-fix newitems))
        (item (vl-genelement-fix (car items)))
        ((unless (and (vl-genelement-case item :vl-genbase)
                      (eq (tag (vl-genbase->item item))
                          :vl-portdecl)))
         (vl-make-port-implicit-wires (cdr items)
                                      decls (cons item newitems)))
        ((vl-portdecl portdecl)
         (vl-genbase->item item))
        ((when (hons-get portdecl.name decls))
         (vl-make-port-implicit-wires (cdr items)
                                      decls (cons item newitems)))
        (new-decl
           (make-vl-genbase
                :item (make-vl-vardecl :name portdecl.name
                                       :type portdecl.type
                                       :nettype portdecl.nettype
                                       :atts (cons '("VL_PORT_IMPLICIT")
                                                   portdecl.atts)
                                       :loc portdecl.loc))))
       (vl-make-port-implicit-wires
            (cdr items)
            decls (list* item new-decl newitems)))))

    Theorem: vl-genelementlist-p-of-vl-make-port-implicit-wires

    (defthm vl-genelementlist-p-of-vl-make-port-implicit-wires
     (b* ((newitems (vl-make-port-implicit-wires items decls newitems)))
       (vl-genelementlist-p newitems))
     :rule-classes :rewrite)

    Theorem: vl-make-port-implicit-wires-of-vl-genelementlist-fix-items

    (defthm vl-make-port-implicit-wires-of-vl-genelementlist-fix-items
      (equal (vl-make-port-implicit-wires (vl-genelementlist-fix items)
                                          decls newitems)
             (vl-make-port-implicit-wires items decls newitems)))

    Theorem: vl-make-port-implicit-wires-vl-genelementlist-equiv-congruence-on-items

    (defthm
     vl-make-port-implicit-wires-vl-genelementlist-equiv-congruence-on-items
     (implies
       (vl-genelementlist-equiv items items-equiv)
       (equal (vl-make-port-implicit-wires items decls newitems)
              (vl-make-port-implicit-wires items-equiv decls newitems)))
     :rule-classes :congruence)

    Theorem: vl-make-port-implicit-wires-of-vl-genelementlist-fix-newitems

    (defthm
          vl-make-port-implicit-wires-of-vl-genelementlist-fix-newitems
      (equal (vl-make-port-implicit-wires
                  items
                  decls (vl-genelementlist-fix newitems))
             (vl-make-port-implicit-wires items decls newitems)))

    Theorem: vl-make-port-implicit-wires-vl-genelementlist-equiv-congruence-on-newitems

    (defthm
     vl-make-port-implicit-wires-vl-genelementlist-equiv-congruence-on-newitems
     (implies
       (vl-genelementlist-equiv newitems newitems-equiv)
       (equal (vl-make-port-implicit-wires items decls newitems)
              (vl-make-port-implicit-wires items decls newitems-equiv)))
     :rule-classes :congruence)