• Top
    • Documentation
    • Books
    • Recursion-and-induction
    • Boolean-reasoning
    • Projects
    • Debugging
    • Std
    • Proof-automation
    • Macro-libraries
    • ACL2
    • Interfacing-tools
    • Hardware-verification
      • Gl
      • Esim
      • Vl2014
      • Sv
      • Vwsim
      • Fgl
      • Vl
        • Syntax
          • Vl-module
            • Vl-module-p
              • Vl-module->hands-offp
                • Vl-ppc-module
                • Vl-ppcs-module
              • Make-vl-module
              • Vl-module-fix
              • Change-vl-module
              • Vl-module-equiv
              • Vl-module->defaultdisables
              • Vl-module->timeprecision
              • Vl-module->parse-temps
              • Vl-module->paramdecls
              • Vl-module->timeunit
              • Vl-module->taskdecls
              • Vl-module->sequences
              • Vl-module->properties
              • Vl-module->portdecls
              • Vl-module->origname
              • Vl-module->modinsts
              • Vl-module->generates
              • Vl-module->gclkdecls
              • Vl-module->gateinsts
              • Vl-module->elabtasks
              • Vl-module->dpiimports
              • Vl-module->dpiexports
              • Vl-module->covergroups
              • Vl-module->cassertions
              • Vl-module->assertions
              • Vl-module->warnings
              • Vl-module->vardecls
              • Vl-module->typedefs
              • Vl-module->name
              • Vl-module->minloc
              • Vl-module->maxloc
              • Vl-module->initials
              • Vl-module->imports
              • Vl-module->genvars
              • Vl-module->fundecls
              • Vl-module->finals
              • Vl-module->comments
              • Vl-module->clkdecls
              • Vl-module->classes
              • Vl-module->assigns
              • Vl-module->alwayses
              • Vl-module->aliases
              • Vl-module->ports
              • Vl-module->binds
              • Vl-module->atts
              • Vl-module->params
            • Vl-vardecl
            • Vl-fundecl
            • Vl-interface
            • Vl-design
            • Vl-assign
            • Vl-modinst
            • Vl-gateinst
            • Vl-taskdecl
            • Vl-portdecl
            • Vl-commentmap
            • Vl-dpiimport
            • Vl-ansi-portdecl
            • Vl-package
            • Vl-paramdecl
            • Vl-dpiexport
            • Vl-plainarglist->exprs
            • Vl-class
            • Vl-taskdecllist->names
            • Vl-sort-blockitems-aux
            • Vl-fundecllist->names
            • Expressions-and-datatypes
            • Vl-udp
            • Vl-port
            • Vl-genelement
            • Vl-clkdecl
            • Vl-parse-temps
            • Vl-bind
            • Vl-namedarg
            • Vl-exprdist
            • Vl-clkassign
            • Vl-range
            • Vl-propport
            • Vl-typedef
            • Vl-gatedelay
            • Vl-dimension
            • Vl-sequence
            • Vl-clkskew
            • Vl-program
            • Vl-gatestrength
            • Vl-property
            • Vl-config
            • Vl-always
            • Vl-import
            • Vl-repeateventcontrol
            • Vl-timeliteral
            • Vl-initial
            • Vl-eventcontrol
            • Vl-udpsymbol-p
            • Vl-final
            • Vl-maybe-clkskew
            • Vl-alias
            • Vl-maybe-nettypename
            • Vl-maybe-gatedelay
            • Vl-letdecl
            • Vl-direction-p
            • Vl-modelement
            • Vl-maybe-timeprecisiondecl
            • Vl-maybe-scopeid
            • Vl-maybe-gatestrength
            • Vl-maybe-direction
            • Vl-maybe-delayoreventcontrol
            • Vl-gclkdecl
            • Vl-fwdtypedef
            • Vl-maybe-udpsymbol-p
            • Vl-maybe-timeunitdecl
            • Vl-maybe-timeliteral
            • Vl-maybe-parse-temps
            • Vl-maybe-cstrength
            • Vl-arguments
            • Vl-maybe-module
            • Vl-maybe-design
            • Vl-covergroup
            • Vl-udpline
            • Vl-timeunitdecl
            • Vl-genvar
            • Vl-defaultdisable
            • Vl-context1
            • Vl-timeprecisiondecl
            • Vl-sort-blockitems
            • Vl-elabtask
            • Vl-udpedge
            • Vl-delaycontrol
            • Vl-context
            • Vl-modelement->loc
            • Vl-ctxelement
            • Vl-ctxelement->loc
            • Statements
            • Vl-interface->ifports
            • Vl-blockitem
            • Vl-vardecllist
            • Vl-module->ifports
            • Vl-lifetime-p
            • Vl-syntaxversion
            • Vl-nettypename-p
            • Vl-paramdecllist
            • Vl-modelementlist->genelements
            • Vl-importlist
            • Vl-gatetype-p
            • Vl-typedeflist
            • Vl-genelement->loc
            • Vl-cstrength-p
            • Vl-port->name
            • Vl-elabtask->loc
            • Vl-delayoreventcontrol
            • Vl-udpentry-p
            • Vl-portdecllist
            • Vl-port->loc
            • Property-expressions
            • Vl-taskdecllist
            • Vl-fundecllist
            • Vl-sequencelist
            • Vl-propertylist
            • Vl-portlist
            • Vl-dpiimportlist
            • Vl-dpiexportlist
            • Vl-classlist
            • Vl-arguments->args
            • Vl-alwaystype-p
            • Vl-modinstlist
            • Vl-importpart-p
            • Vl-importpart-fix
            • Vl-blockstmt-p
            • Vl-bindlist
            • Vl-initiallist
            • Vl-genvarlist
            • Vl-gclkdecllist
            • Vl-finallist
            • Vl-elabtasklist
            • Vl-defaultdisablelist
            • Vl-clkdecllist
            • Vl-cassertionlist
            • Vl-assignlist
            • Vl-assertionlist
            • Vl-alwayslist
            • Vl-aliaslist
            • Vl-udptable
            • Vl-udplist
            • Vl-udpentrylist
            • Vl-propportlist
            • Vl-programlist
            • Vl-packagelist
            • Vl-namedarglist
            • Vl-modulelist
            • Vl-modportlist
            • Vl-modport-portlist
            • Vl-letdecllist
            • Vl-interfacelist
            • Vl-gateinstlist
            • Vl-fwdtypedeflist
            • Vl-covergrouplist
            • Vl-configlist
            • Vl-clkassignlist
            • Vl-casekey-p
            • Vl-blockitemlist
            • Vl-ansi-portdecllist
            • Vl-regularportlist
            • Vl-paramdecllist-list
            • Vl-modelementlist
            • Vl-interfaceportlist
          • Loader
          • Warnings
          • Getting-started
          • Utilities
          • Printer
          • Kit
          • Mlib
          • Transforms
        • X86isa
        • Svl
        • Rtl
      • Software-verification
      • Testing-utilities
      • Math
    • Vl-module-p

    Vl-module->hands-offp

    Attribute that says a module should not be transformed.

    Signature
    (vl-module->hands-offp x) → hands-offp
    Arguments
    x — Guard (vl-module-p x).

    We use the ordinary attribute VL_HANDS_OFF to say that a module should not be changed by transforms.

    This is probably mostly outdated. It was originally intended for use in vl2014::primitives. The Verilog definitions of these modules sometimes make use of fancy Verilog constructs. Normally our transforms would try to remove these constructs, replacing them with instances of primitives. This can lead to funny sorts of problems if we try to transform the primitives themselves.

    For instance, consider the vl2014::*vl-1-bit-delay-1* module. This module has a delayed assignment, assign #1 out = in. If we hit this module with the vl2014::delayredux transform, we'll try to replace the delay with an explicit instance of VL_1_BIT_DELAY_1. But that's crazy: now the module is trying to instantiate itself!

    Similar issues can arise from trying to replace the always statements in a primitive flop/latch with instances of flop/latch primitives, etc. So as a general rule, we mark the primitives with VL_HANDS_OFF and code our transforms to not modules with this attribute.

    Definitions and Theorems

    Function: vl-module->hands-offp$inline

    (defun
     vl-module->hands-offp$inline (x)
     (declare (xargs :guard (vl-module-p x)))
     (let
         ((__function__ 'vl-module->hands-offp))
         (declare (ignorable __function__))
         (consp (hons-assoc-equal "VL_HANDS_OFF" (vl-module->atts x)))))

    Theorem: vl-module->hands-offp$inline-of-vl-module-fix-x

    (defthm vl-module->hands-offp$inline-of-vl-module-fix-x
            (equal (vl-module->hands-offp$inline (vl-module-fix x))
                   (vl-module->hands-offp$inline x)))

    Theorem: vl-module->hands-offp$inline-vl-module-equiv-congruence-on-x

    (defthm vl-module->hands-offp$inline-vl-module-equiv-congruence-on-x
            (implies (vl-module-equiv x x-equiv)
                     (equal (vl-module->hands-offp$inline x)
                            (vl-module->hands-offp$inline x-equiv)))
            :rule-classes :congruence)