• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
    • Debugging
    • Std
    • Proof-automation
    • Macro-libraries
    • ACL2
    • Interfacing-tools
    • Hardware-verification
      • Gl
      • Esim
      • Vl2014
      • Sv
        • Svex-stvs
        • Svex-decomposition-methodology
        • Sv-versus-esim
        • Svex-decomp
        • Svex-compose-dfs
        • Svex-compilation
        • Moddb
          • Moddb.lisp
          • Elab-mod
            • Moddb-path->wireidx/decl
            • Moddb-wireidx->path/decl
            • Moddb-path->wireidx
            • Moddb-address->wireidx
            • Moddb-address->wiredecl
            • Moddb-wireidx->path
            • Modscope-okp
          • Svmods
          • Svstmt
          • Sv-tutorial
          • Expressions
          • Symbolic-test-vector
          • Vl-to-svex
        • Fgl
        • Vwsim
        • Vl
        • X86isa
        • Svl
        • Rtl
      • Software-verification
      • Math
      • Testing-utilities
    • Moddb

    Elab-mod

    Part of a moddb representing a single module.

    Note: This is partly implementation-level documentation for moddb. Specifically, none of the updater functions listed here should be used in the context of operating on a moddb -- rather, a moddb should be built from a modalist using one or more calls of module->db, and treated as read-only thereafter. It is fine to use the (read-only) accessor functions.

    An elab-mod is an abstract stobj whose logical story is that it is a record (accessed using g/s -- see ACL2::misc/records) containing the following fields:

    • name -- the name of the module, a modname-p object
    • totalwires -- the total number of wires in the module and all its instances, a natural
    • totalinsts -- the total number of instances in the module and all its instances, a natural
    • orig-mod -- the module that this was generated from
    • wires -- the list of wires local to the module
    • insts -- the list of modinsts local to the module.

    The executable accessors/updaters of these (except for wires and insts; see below) are named, e.g., elab-mod->name/update-elab-mod->name.

    The wires and insts fields are special in that they cannot be accessed directly in execution; in fact, they are not actually lists, but arrays. They are also backed by hash tables so that wire or instance indices may be looked up by wire/instance name. (Well-formedness enforced by the abstract stobj representation makes this mapping invertible.) The following accessors are used to access information about the wires/instances:

    • (elab-mod-nwires elab-mod) -- the number of local wires
    • (elab-mod-wiretablei wire-idx elab-mod) -- the nth wire
    • (elab-mod-wirename->idx name elab-mod) -- the index for the named wire
    • (elab-mod-add-wire wire elab-mod) -- add a wire to the table
    • (elab-mod-ninsts elab-mod) -- the number of local module instances
    • (elab-mod->instname inst-idx elab-mod) -- the instname of the nth module instance
    • (elab-mod->inst-modidx inst-idx elab-mod) -- the index of the module instantiated by the nth instance
    • (elab-mod->inst-wireoffset inst-idx elab-mod) -- the total number of wires in the module up until this instance -- i.e. the number of local wires plus the sum of the totalwires of the modules of lower-numbered instances
    • (elab-mod->inst-instoffset inst-idx elab-mod) -- the total number of instances in the module up until this instance -- i.e., inst-idx plus the sum of the totalinsts of the modules of lower-numbered instances
    • (elab-mod-instname->idx name elab-mod) -- the index for the named instance
    • (elab-mod-add-inst elab-modinst$c elab-mod) -- copy an elab-modinst$c stobj into the elab-mod as a new instance.

    All of the above functions execute in constant time, even though several of their logical definitions are linear in the number of wires/insts.

    A wire or instance cannot be removed once added. There isn't even any way to clear out the wires or instances; just start over with a new elab-mod.