Source code for uvm.base.uvm_object_globals

#
# ------------------------------------------------------------------------------
#   Copyright 2007-2011 Mentor Graphics Corporation
#   Copyright 2007-2010 Cadence Design Systems, Inc.
#   Copyright 2010-2013 Synopsys, Inc.
#   Copyright 2013      NVIDIA Corporation
#   Copyright 2019      Tuomas Poikela
#   All Rights Reserved Worldwide
#
#   Licensed under the Apache License, Version 2.0 (the
#   "License"); you may not use this file except in
#   compliance with the License.  You may obtain a copy of
#   the License at
#
#       http://www.apache.org/licenses/LICENSE-2.0
#
#   Unless required by applicable law or agreed to in
#   writing, software distributed under the License is
#   distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
#   CONDITIONS OF ANY KIND, either express or implied.  See
#   the License for the specific language governing
#   permissions and limitations under the License.
# ------------------------------------------------------------------------------


# This bit marks where filtering should occur to remove uvm stuff from a
# scope
### bit uvm_start_uvm_declarations = 1;

# ------------------------------------------------------------------------------
#
# Section: Types and Enumerations
#
# ------------------------------------------------------------------------------

# ------------------------
# Group: Field automation
# ------------------------


### parameter UVM_STREAMBITS = `UVM_MAX_STREAMBITS;
UVM_STREAMBITS = 256

# Enum: uvm_radix_enum
#
# Specifies the radix to print or record in.
#
# UVM_BIN       - Selects binary (%b) format
# UVM_DEC       - Selects decimal (%d) format
# UVM_UNSIGNED  - Selects unsigned decimal (%u) format
# UVM_UNFORMAT2 - Selects unformatted 2 value data (%u) format
# UVM_UNFORMAT4 - Selects unformatted 4 value data (%z) format
# UVM_OCT       - Selects octal (%o) format
# UVM_HEX       - Selects hexadecimal (%h) format
# UVM_STRING    - Selects string (%s) format
# UVM_TIME      - Selects time (%t) format
# UVM_ENUM      - Selects enumeration value (name) format
# UVM_REAL      - Selects real (%g) in exponential or decimal format,
#                 whichever format results in the shorter printed output
# UVM_REAL_DEC  - Selects real (%f) in decimal format
# UVM_REAL_EXP  - Selects real (%e) in exponential format

UVM_BIN       = 0x1000000
UVM_DEC       = 0x2000000
UVM_UNSIGNED  = 0x3000000
UVM_UNFORMAT2 = 0x4000000
UVM_UNFORMAT4 = 0x5000000
UVM_OCT       = 0x6000000
UVM_HEX       = 0x7000000
UVM_STRING    = 0x8000000
UVM_TIME      = 0x9000000
UVM_ENUM      = 0xa000000
UVM_REAL      = 0xb000000
UVM_REAL_DEC  = 0xc000000
UVM_REAL_EXP  = 0xd000000
UVM_NORADIX   = 0

UVM_RADIX = 0xf000000  # 4 bits setting the radix

UVM_RADIX_TO_STRING_DICT = {
    UVM_BIN: "b",
    UVM_OCT: "o",
    UVM_DEC: "d",
    UVM_HEX: "h",
    UVM_UNSIGNED: "u",
    UVM_UNFORMAT2: "u",
    UVM_UNFORMAT4: "z",
    UVM_STRING: "s",
    UVM_TIME: "t",
    UVM_ENUM: "s",
    UVM_REAL: "g",
    UVM_REAL_DEC: "f",
    UVM_REAL_EXP: "e"
}


[docs]def uvm_radix_to_string(radix: int) -> str: """ Function- uvm_radix_to_string Returns: str: Letter for the given radix constant. """ if radix in UVM_RADIX_TO_STRING_DICT: return UVM_RADIX_TO_STRING_DICT[radix] return "x"
# Enum: uvm_recursion_policy_enum # # Specifies the policy for copying objects. # # UVM_DEEP - Objects are deep copied (object must implement <uvm_object::copy> method) # UVM_SHALLOW - Objects are shallow copied using default SV copy. # UVM_REFERENCE - Only object handles are copied. UVM_DEFAULT_POLICY = 0 UVM_DEEP = 0x400 UVM_SHALLOW = 0x800 UVM_REFERENCE = 0x1000 # Enum: uvm_active_passive_enum # # Convenience value to define whether a component, usually an agent, # is in "active" mode or "passive" mode. # # UVM_PASSIVE - "Passive" mode # UVM_ACTIVE - "Active" mode UVM_PASSIVE = False UVM_ACTIVE = True # Parameter: `uvm_field_* macro flags # # Defines what operations a given field should be involved in. # Bitwise OR all that apply. # # UVM_DEFAULT - All field operations turned on # UVM_COPY - Field will participate in <uvm_object::copy> # UVM_COMPARE - Field will participate in <uvm_object::compare> # UVM_PRINT - Field will participate in <uvm_object::print> # UVM_RECORD - Field will participate in <uvm_object::record> # UVM_PACK - Field will participate in <uvm_object::pack> # # UVM_NOCOPY - Field will not participate in <uvm_object::copy> # UVM_NOCOMPARE - Field will not participate in <uvm_object::compare> # UVM_NOPRINT - Field will not participate in <uvm_object::print> # UVM_NORECORD - Field will not participate in <uvm_object::record> # UVM_NOPACK - Field will not participate in <uvm_object::pack> # # UVM_DEEP - Object field will be deep copied # UVM_SHALLOW - Object field will be shallow copied # UVM_REFERENCE - Object field will copied by reference # # UVM_READONLY - Object field will NOT be automatically configured. UVM_MACRO_NUMFLAGS = 17 # A=ABSTRACT Y=PHYSICAL # F=REFERENCE, S=SHALLOW, D=DEEP # K=PACK, R=RECORD, P=PRINT, M=COMPARE, C=COPY # ----------------- AYFSD K R P M C UVM_DEFAULT = 0b000010101010101 UVM_ALL_ON = 0b000000101010101 UVM_FLAGS_ON = 0b000000101010101 UVM_FLAGS_OFF = 0 # Values are OR'ed into a 32 bit value # and externally UVM_COPY = (1 << 0) UVM_NOCOPY = (1 << 1) UVM_COMPARE = (1 << 2) UVM_NOCOMPARE = (1 << 3) UVM_PRINT = (1 << 4) UVM_NOPRINT = (1 << 5) UVM_RECORD = (1 << 6) UVM_NORECORD = (1 << 7) UVM_PACK = (1 << 8) UVM_NOPACK = (1 << 9) # parameter UVM_DEEP = (1<<10); # parameter UVM_SHALLOW = (1<<11); # parameter UVM_REFERENCE = (1<<12); UVM_PHYSICAL = (1 << 13) UVM_ABSTRACT = (1 << 14) UVM_READONLY = (1 << 15) UVM_NODEFPRINT = (1 << 16) # Extra values that are used for extra methods UVM_MACRO_EXTRAS = (1 << UVM_MACRO_NUMFLAGS) UVM_FLAGS = UVM_MACRO_EXTRAS+1 UVM_UNPACK = UVM_MACRO_EXTRAS+2 UVM_CHECK_FIELDS = UVM_MACRO_EXTRAS+3 UVM_END_DATA_EXTRA = UVM_MACRO_EXTRAS+4 # Get and set methods (in uvm_object). Used by the set/get* functions # to tell the object what operation to perform on the fields. UVM_START_FUNCS = UVM_END_DATA_EXTRA+1 UVM_SET = UVM_START_FUNCS+1 UVM_SETINT = UVM_SET UVM_SETOBJ = UVM_START_FUNCS+2 UVM_SETSTR = UVM_START_FUNCS+3 UVM_END_FUNCS = UVM_SETSTR # Global string variables uvm_aa_string_key = "" # ----------------- # Group: Reporting # ----------------- # Enum: uvm_severity # # Defines all possible values for report severity. # # UVM_INFO - Informative message. # UVM_WARNING - Indicates a potential problem. # UVM_ERROR - Indicates a real problem. Simulation continues subject # to the configured message action. # UVM_FATAL - Indicates a problem from which simulation cannot # recover. Simulation exits via $finish after a #0 delay. UVM_INFO = 0 UVM_WARNING = 1 UVM_ERROR = 2 UVM_FATAL = 3 UVM_SEVERITY_LEVELS = [UVM_INFO, UVM_WARNING, UVM_ERROR, UVM_FATAL] UVM_SEVERITY_NAMES = ["UVM_INFO", "UVM_WARNING", "UVM_ERROR", "UVM_FATAL"] # Enum: uvm_action # # Defines all possible values for report actions. Each report is configured # to execute one or more actions, determined by the bitwise OR of any or all # of the following enumeration constants. # # UVM_NO_ACTION - No action is taken # UVM_DISPLAY - Sends the report to the standard output # UVM_LOG - Sends the report to the file(s) for this (severity,id) pair # UVM_COUNT - Counts the number of reports with the COUNT attribute. # When this value reaches max_quit_count, the simulation terminates # UVM_EXIT - Terminates the simulation immediately. # UVM_CALL_HOOK - Callback the report hook methods # UVM_STOP - Causes ~$stop~ to be executed, putting the simulation into # interactive mode. # UVM_RM_RECORD - Sends the report to the recorder UVM_NO_ACTION = 0b0000000 UVM_DISPLAY = 0b0000001 UVM_LOG = 0b0000010 UVM_COUNT = 0b0000100 UVM_EXIT = 0b0001000 UVM_CALL_HOOK = 0b0010000 UVM_STOP = 0b0100000 UVM_RM_RECORD = 0b1000000 # Enum: uvm_verbosity # # Defines standard verbosity levels for reports. # # UVM_NONE - Report is always printed. Verbosity level setting cannot # disable it. # UVM_LOW - Report is issued if configured verbosity is set to UVM_LOW # or above. # UVM_MEDIUM - Report is issued if configured verbosity is set to UVM_MEDIUM # or above. # UVM_HIGH - Report is issued if configured verbosity is set to UVM_HIGH # or above. # UVM_FULL - Report is issued if configured verbosity is set to UVM_FULL # or above. UVM_NONE = 0 UVM_LOW = 100 UVM_MEDIUM = 200 UVM_HIGH = 300 UVM_FULL = 400 UVM_DEBUG = 500 UVM_VERBOSITY_LIST = [UVM_NONE, UVM_LOW, UVM_MEDIUM, UVM_HIGH, UVM_FULL, UVM_DEBUG] ### typedef int UVM_FILE; # ----------------- # Group: Port Type # ----------------- # Enum: uvm_port_type_e # # Specifies the type of port # # UVM_PORT - The port requires the interface that is its type # parameter. # UVM_EXPORT - The port provides the interface that is its type # parameter via a connection to some other export or # implementation. # UVM_IMPLEMENTATION - The port provides the interface that is its type # parameter, and it is bound to the component that # implements the interface. UVM_PORT = 0 UVM_EXPORT = 1 UVM_IMPLEMENTATION = 2 # ----------------- # Group: Sequences # ----------------- # Enum: uvm_sequencer_arb_mode # # Specifies a sequencer's arbitration mode # # UVM_SEQ_ARB_FIFO - Requests are granted in FIFO order (default) # UVM_SEQ_ARB_WEIGHTED - Requests are granted randomly by weight # UVM_SEQ_ARB_RANDOM - Requests are granted randomly # UVM_SEQ_ARB_STRICT_FIFO - Requests at highest priority granted in fifo order # UVM_SEQ_ARB_STRICT_RANDOM - Requests at highest priority granted in randomly # UVM_SEQ_ARB_USER - Arbitration is delegated to the user-defined # function, user_priority_arbitration. That function # will specify the next sequence to grant. UVM_SEQ_ARB_FIFO = 0 UVM_SEQ_ARB_WEIGHTED = 1 UVM_SEQ_ARB_RANDOM = 2 UVM_SEQ_ARB_STRICT_FIFO = 3 UVM_SEQ_ARB_STRICT_RANDOM = 4 UVM_SEQ_ARB_USER = 5 ### typedef uvm_sequencer_arb_mode UVM_SEQ_ARB_TYPE; // backward compat # Enum: uvm_sequence_state_enum # # Defines current sequence state # # UVM_CREATED - The sequence has been allocated. # UVM_PRE_START - The sequence is started and the # <uvm_sequence_base::pre_start()> task is # being executed. # UVM_PRE_BODY - The sequence is started and the # <uvm_sequence_base::pre_body()> task is # being executed. # UVM_BODY - The sequence is started and the # <uvm_sequence_base::body()> task is # being executed. # UVM_ENDED - The sequence has completed the execution of the # <uvm_sequence_base::body()> task. # UVM_POST_BODY - The sequence is started and the # <uvm_sequence_base::post_body()> task is # being executed. # UVM_POST_START - The sequence is started and the # <uvm_sequence_base::post_start()> task is # being executed. # UVM_STOPPED - The sequence has been forcibly ended by issuing a # <uvm_sequence_base::kill()> on the sequence. # UVM_FINISHED - The sequence is completely finished executing. UVM_CREATED = 1 UVM_PRE_START = 2 UVM_PRE_BODY = 4 UVM_BODY = 8 UVM_POST_BODY = 16 UVM_POST_START = 32 UVM_ENDED = 64 UVM_STOPPED = 128 UVM_FINISHED = 256 # Enum: uvm_sequence_lib_mode # # Specifies the random selection mode of a sequence library # # UVM_SEQ_LIB_RAND - Random sequence selection # UVM_SEQ_LIB_RANDC - Random cyclic sequence selection # UVM_SEQ_LIB_ITEM - Emit only items, no sequence execution # UVM_SEQ_LIB_USER - Apply a user-defined random-selection algorithm UVM_SEQ_LIB_RAND = 0 UVM_SEQ_LIB_RANDC = 1 UVM_SEQ_LIB_ITEM = 2 UVM_SEQ_LIB_USER = 3 # --------------- # Group: Phasing # --------------- # Enum: uvm_phase_type # # This is an attribute of a <uvm_phase> object which defines the phase # type. # # UVM_PHASE_IMP - The phase object is used to traverse the component # hierarchy and call the component phase method as # well as the ~phase_started~ and ~phase_ended~ callbacks. # These nodes are created by the phase macros, # `uvm_builtin_task_phase, `uvm_builtin_topdown_phase, # and `uvm_builtin_bottomup_phase. These nodes represent # the phase type, i.e. uvm_run_phase, uvm_main_phase. # # UVM_PHASE_NODE - The object represents a simple node instance in # the graph. These nodes will contain a reference to # their corresponding IMP object. # # UVM_PHASE_SCHEDULE - The object represents a portion of the phasing graph, # typically consisting of several NODE types, in series, # parallel, or both. # # UVM_PHASE_TERMINAL - This internal object serves as the termination NODE # for a SCHEDULE phase object. # # UVM_PHASE_DOMAIN - This object represents an entire graph segment that # executes in parallel with the 'run' phase. # Domains may define any network of NODEs and # SCHEDULEs. The built-in domain, ~uvm~, consists # of a single schedule of all the run-time phases, # starting with ~pre_reset~ and ending with # ~post_shutdown~. # UVM_PHASE_IMP = 0 UVM_PHASE_NODE = 1 UVM_PHASE_TERMINAL = 2 UVM_PHASE_SCHEDULE = 3 UVM_PHASE_DOMAIN = 4 UVM_PHASE_GLOBAL = 5 # Enum: uvm_phase_state # --------------------- # # The set of possible states of a phase. This is an attribute of a schedule # node in the graph, not of a phase, to maintain independent per-domain state # # UVM_PHASE_UNINITIALIZED - The state is uninitialized. This is the default # state for phases, and for nodes which have not yet been added to # a schedule. # # UVM_PHASE_DORMANT - The schedule is not currently operating on the phase # node, however it will be scheduled at some point in the future. # # UVM_PHASE_SCHEDULED - At least one immediate predecessor has completed. # Scheduled phases block until all predecessors complete or # until a jump is executed. # # UVM_PHASE_SYNCING - All predecessors complete, checking that all synced # phases (e.g. across domains) are at or beyond this point # # UVM_PHASE_STARTED - phase ready to execute, running phase_started() callback # # UVM_PHASE_EXECUTING - An executing phase is one where the phase callbacks are # being executed. Its process is tracked by the phaser. # # UVM_PHASE_READY_TO_END - no objections remain in this phase or in any # predecessors of its successors or in any sync'd phases. This # state indicates an opportunity for any phase that needs extra # time for a clean exit to raise an objection, thereby causing a # return to UVM_PHASE_EXECUTING. If no objection is raised, state # will transition to UVM_PHASE_ENDED after a delta cycle. # (An example of predecessors of successors: The successor to # phase 'run' is 'extract', whose predecessors are 'run' and # 'post_shutdown'. Therefore, 'run' will go to this state when # both its objections and those of 'post_shutdown' are all dropped. # # UVM_PHASE_ENDED - phase completed execution, now running phase_ended() callback # # UVM_PHASE_JUMPING - all processes related to phase are being killed and all # predecessors are forced into the DONE state. # # UVM_PHASE_CLEANUP - all processes related to phase are being killed # # UVM_PHASE_DONE - A phase is done after it terminated execution. Becoming # done may enable a waiting successor phase to execute. # # The state transitions occur as follows: # # | UNINITIALIZED -> DORMANT -> SCHED -> SYNC -> START -> EXEC -> READY -> END -+-> CLEAN -> DONE # | ^ | # | | <-- jump_to | # | +-------------------------------------------- JUMPING< -+ UVM_PHASE_UNINITIALIZED = 0 UVM_PHASE_DORMANT = 1 UVM_PHASE_SCHEDULED = 2 UVM_PHASE_SYNCING = 4 UVM_PHASE_STARTED = 8 UVM_PHASE_EXECUTING = 16 UVM_PHASE_READY_TO_END = 32 UVM_PHASE_ENDED = 64 UVM_PHASE_CLEANUP = 128 UVM_PHASE_DONE = 256 UVM_PHASE_JUMPING = 512 UVM_PHASE2STR = { 0: 'UVM_PHASE_UNINITIALIZED', 1: 'UVM_PHASE_DORMANT ', 2: 'UVM_PHASE_SCHEDULED ', 4: 'UVM_PHASE_SYNCING ', 8: 'UVM_PHASE_STARTED ', 16: 'UVM_PHASE_EXECUTING ', 32: 'UVM_PHASE_READY_TO_END', 64: 'UVM_PHASE_ENDED ', 128: 'UVM_PHASE_CLEANUP ', 256: 'UVM_PHASE_DONE ', 512: 'UVM_PHASE_JUMPING ' } # Enum: uvm_wait_op # # Specifies the operand when using methods like <uvm_phase::wait_for_state>. # # UVM_EQ - equal # UVM_NE - not equal # UVM_LT - less than # UVM_LTE - less than or equal to # UVM_GT - greater than # UVM_GTE - greater than or equal to # UVM_LT = 0 UVM_LTE = 1 UVM_NE = 2 UVM_EQ = 3 UVM_GT = 4 UVM_GTE = 5 # ------------------ # Group: Objections # ------------------ # Enum: uvm_objection_event # # Enumerated the possible objection events one could wait on. See # <uvm_objection::wait_for>. # # UVM_RAISED - an objection was raised # UVM_DROPPED - an objection was raised # UVM_ALL_DROPPED - all objections have been dropped # UVM_RAISED = 1 UVM_DROPPED = 2 UVM_ALL_DROPPED = 4 # Variable: uvm_default_table_printer # # The table printer is a global object that can be used with # <uvm_object::do_print> to get tabular style printing. #uvm_default_table_printer = UVMTablePrinter() # Variable: uvm_default_tree_printer # # The tree printer is a global object that can be used with # <uvm_object::do_print> to get multi-line tree style printing. ### uvm_tree_printer uvm_default_tree_printer = new(); # Variable: uvm_default_line_printer # # The line printer is a global object that can be used with # <uvm_object::do_print> to get single-line style printing. ### uvm_line_printer uvm_default_line_printer = new(); # Variable: uvm_default_printer # # The default printer policy. Used when calls to <uvm_object::print> # or <uvm_object::sprint> do not specify a printer policy. # # The default printer may be set to any legal <uvm_printer> derived type, # including the global line, tree, and table printers described above. ### uvm_printer uvm_default_printer = uvm_default_table_printer; # Variable: uvm_default_packer # # The default packer policy. Used when calls to <uvm_object::pack> # and <uvm_object::unpack> do not specify a packer policy. ### uvm_packer uvm_default_packer = new(); # Variable: uvm_default_comparer # # # The default compare policy. Used when calls to <uvm_object::compare> # do not specify a comparer policy. ### uvm_comparer uvm_default_comparer = new(); // uvm_comparer::init();