//------------------------------------------------------------------------------ // Copyright 2018 AMD // Copyright 2007-2018 Cadence Design Systems, Inc. // Copyright 2007-2009 Mentor Graphics Corporation // Copyright 2018-2020 NVIDIA Corporation // 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. //------------------------------------------------------------------------------ // Title -- NODOCS -- Sequence-Related Macros //----------------------------------------------------------------------------- // // Group -- NODOCS -- Sequence Action Macros // // These macros are used to start sequences and sequence items on the default // sequencer returned by get_sequencer(). This is determined a number of ways. // - the sequencer handle provided in the method // - the sequencer used by the parent sequence // - the sequencer that was set using the method //----------------------------------------------------------------------------- // MACRO -- NODOCS -- `uvm_do_pri // //| `uvm_do_pri(SEQ_OR_ITEM, PRIORITY) // // This is the same as `uvm_do except that the sequence item or sequence is // executed with the priority specified in the argument `define uvm_do_pri(SEQ_OR_ITEM, PRIORITY) \ `uvm_do(SEQ_OR_ITEM, get_sequencer(), PRIORITY, {}) // MACRO -- NODOCS -- `uvm_do_with // //| `uvm_do_with(SEQ_OR_ITEM, CONSTRAINTS) // // This is the same as `uvm_do except that the constraint block in the 2nd // argument is applied to the item or sequence in a randomize with statement // before execution. `define uvm_do_with(SEQ_OR_ITEM, CONSTRAINTS) \ `uvm_do(SEQ_OR_ITEM, get_sequencer(), -1, CONSTRAINTS) // MACRO -- NODOCS -- `uvm_do_pri_with // //| `uvm_do_pri_with(SEQ_OR_ITEM, PRIORITY, CONSTRAINTS) // // This is the same as `uvm_do_pri except that the given constraint block is // applied to the item or sequence in a randomize with statement before // execution. `define uvm_do_pri_with(SEQ_OR_ITEM, PRIORITY, CONSTRAINTS) \ `uvm_do(SEQ_OR_ITEM, get_sequencer(), PRIORITY, CONSTRAINTS) //----------------------------------------------------------------------------- // // Group -- NODOCS -- Sequence on Sequencer Action Macros // // These macros are used to start sequences and sequence items on a specific // sequencer. The sequence or item is created and executed on the given // sequencer. //----------------------------------------------------------------------------- // MACRO -- NODOCS -- `uvm_create_on // //| `uvm_create_on(SEQ_OR_ITEM, SEQR) // // This is the same as <`uvm_create> except that it also sets the parent sequence // to the sequence in which the macro is invoked, and it sets the sequencer to // the specified ~SEQR~ argument. `define uvm_create_on(SEQ_OR_ITEM, SEQR) \ `uvm_create(SEQ_OR_ITEM, SEQR) // MACRO -- NODOCS -- `uvm_do_on // //| `uvm_do_on(SEQ_OR_ITEM, SEQR) // // This is the same as <`uvm_do> except that it also sets the parent sequence to // the sequence in which the macro is invoked, and it sets the sequencer to the // specified ~SEQR~ argument. `define uvm_do_on(SEQ_OR_ITEM, SEQR) \ `uvm_do(SEQ_OR_ITEM, SEQR, -1, {}) // MACRO -- NODOCS -- `uvm_do_on_pri // //| `uvm_do_on_pri(SEQ_OR_ITEM, SEQR, PRIORITY) // // This is the same as <`uvm_do_pri> except that it also sets the parent sequence // to the sequence in which the macro is invoked, and it sets the sequencer to // the specified ~SEQR~ argument. `define uvm_do_on_pri(SEQ_OR_ITEM, SEQR, PRIORITY) \ `uvm_do(SEQ_OR_ITEM, SEQR, PRIORITY, {}) // MACRO -- NODOCS -- `uvm_do_on_with // //| `uvm_do_on_with(SEQ_OR_ITEM, SEQR, CONSTRAINTS) // // This is the same as <`uvm_do_with> except that it also sets the parent // sequence to the sequence in which the macro is invoked, and it sets the // sequencer to the specified ~SEQR~ argument. // The user must supply brackets around the constraints. `define uvm_do_on_with(SEQ_OR_ITEM, SEQR, CONSTRAINTS) \ `uvm_do(SEQ_OR_ITEM, SEQR, -1, CONSTRAINTS) // MACRO -- NODOCS -- `uvm_do_on_pri_with // //| `uvm_do_on_pri_with(SEQ_OR_ITEM, SEQR, PRIORITY, CONSTRAINTS) // // This is the same as `uvm_do_pri_with except that it also sets the parent // sequence to the sequence in which the macro is invoked, and it sets the // sequencer to the specified ~SEQR~ argument. `define uvm_do_on_pri_with(SEQ_OR_ITEM, SEQR, PRIORITY, CONSTRAINTS) \ `uvm_do(SEQ_OR_ITEM, SEQR, PRIORITY, CONSTRAINTS) //----------------------------------------------------------------------------- // // Group -- NODOCS -- Sequence Action Macros for Pre-Existing Sequences // // These macros are used to start sequences and sequence items that do not // need to be created. //----------------------------------------------------------------------------- // MACRO -- NODOCS -- `uvm_send_pri // //| `uvm_send_pri(SEQ_OR_ITEM, PRIORITY) // // This is the same as `uvm_send except that the sequence item or sequence is // executed with the priority specified in the argument. `define uvm_send_pri(SEQ_OR_ITEM, PRIORITY) \ `uvm_send(SEQ_OR_ITEM, PRIORITY) // MACRO -- NODOCS -- `uvm_rand_send_pri // //| `uvm_rand_send_pri(SEQ_OR_ITEM, PRIORITY) // // This is the same as `uvm_rand_send except that the sequence item or sequence // is executed with the priority specified in the argument. `define uvm_rand_send_pri(SEQ_OR_ITEM, PRIORITY) \ `uvm_rand_send(SEQ_OR_ITEM, PRIORITY, {}) // MACRO -- NODOCS -- `uvm_rand_send_with // //| `uvm_rand_send_with(SEQ_OR_ITEM, CONSTRAINTS) // // This is the same as `uvm_rand_send except that the given constraint block is // applied to the item or sequence in a randomize with statement before // execution. `define uvm_rand_send_with(SEQ_OR_ITEM, CONSTRAINTS) \ `uvm_rand_send(SEQ_OR_ITEM, -1, CONSTRAINTS) // MACRO -- NODOCS -- `uvm_rand_send_pri_with // //| `uvm_rand_send_pri_with(SEQ_OR_ITEM, PRIORITY, CONSTRAINTS) // // This is the same as `uvm_rand_send_pri except that the given constraint block // is applied to the item or sequence in a randomize with statement before // execution. `define uvm_rand_send_pri_with(SEQ_OR_ITEM, PRIORITY, CONSTRAINTS) \ `uvm_rand_send(SEQ_OR_ITEM, PRIORITY, CONSTRAINTS) `define uvm_create_seq(UVM_SEQ, SEQR_CONS_IF) \ `uvm_create(UVM_SEQ, SEQR_CONS_IF.consumer_seqr) \ `define uvm_do_seq(UVM_SEQ, SEQR_CONS_IF) \ `uvm_do(UVM_SEQ, SEQR_CONS_IF.consumer_seqr, -1, {}) \ `define uvm_do_seq_with(UVM_SEQ, SEQR_CONS_IF, CONSTRAINTS) \ `uvm_do(UVM_SEQ, SEQR_CONS_IF.consumer_seqr, -1, CONSTRAINTS) \