📄 ovm_sequence.svh
字号:
// $Id: //dvt/vtech/dev/main/ovm/src/methodology/sequences/ovm_sequence.svh#1 $//----------------------------------------------------------------------// Copyright 2007-2008 Mentor Graphics Corporation// Copyright 2007-2008 Cadence Design Systems, Inc.// 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.//----------------------------------------------------------------------`ifndef OVM_SEQUENCE_SVH`define OVM_SEQUENCE_SVHtypedef class ovm_sequencer;typedef class ovm_virtual_sequencer;//-----------------------------------------------------------------------------//// CLASS: ovm_sequence////-----------------------------------------------------------------------------class ovm_sequence extends ovm_sequence_item; // Constructor extern function new(string name="ovm_sequence", ovm_sequencer_base sequencer=null, ovm_sequence parent_seq=null); // handle for called sequencer methods ovm_sequencer b_sequencer; // method to cast m_sequencer into b_sequencer extern function void m_set_b_sequencer(); // id counters local static int g_id = 0; local int id; // get the id extern function int get_id(); // events for monitoring progress from outside event started; event ended; // bit to detect if is_relevant()/wait_for_relevant() is changed local bit is_rel_default; local bit wait_rel_default; //invoked by ovm_sequence::start_sequence() extern virtual task pre_body(); //invoked by ovm_sequence::start_sequence() and the DO macro. extern virtual task body(); //invoked by ovm_sequence::start_sequence() extern virtual task post_body(); //invoked by the sequence and sequence item macros after a sequence is //selected to execute, but prior to the randomization of the do action. extern virtual task pre_do(bit is_item); //invoked by the sequence and sequence item macros after randomization of //the action. extern virtual function void mid_do(ovm_sequence_item this_item); //Called by sequence and sequence item. Invoked after the sequencer has // triggered item_done. extern virtual function void post_do(ovm_sequence_item this_item); //actions out of its action queue. extern virtual function bit is_relevant(); //task to re-evaluate when sequence becomes relevant extern virtual task wait_for_relevant(); //A built in function returning a "1" for ovm_sequence types. extern virtual function int is_item(); //invoked by a user-defined sequence to gain sole access to a sequencer extern task grab(ovm_sequencer sequencer = null); //invoked by a user-defined sequence to release sole access to a sequencer extern function void ungrab(ovm_sequencer sequencer = null); //allocate a ovm_sequence_item object extern function ovm_sequence_item create_item (ovm_sequence_item type_var, ovm_sequencer_base l_sequencer); //register and begin processing of ovm_sequence_item objects //call sync() & pre_do() of parent ovm_sequence for a sequence_item object //or body() for a ovm_sequence object extern task start_item(ovm_sequence_item type_var); //Called by sequence and sequence item macros. Calls ovm_sequencer::sync and //waits for acknoledgement to unblock the do invocation. extern task m_sync(ovm_sequence_item item); //Called by sequence and sequence item macros. Places generated item in //a sequencers "last" buffer and triggers sequencer.item_ready with the //generated item. extern task m_post_sync(ovm_sequence_item item); //A user definable function which is evaluated by the sequencer when selecting //complete item processing extern task finish_item(ovm_sequence_item type_var); //used as an identifier in constraints for a specific type rand int unsigned seq_kind; // Returns a new sequence object given its unique kind (integer id) extern function ovm_sequence get_sequence(int req_kind); //Used to get an identifier of the sequence name from the parent sequencer's //sequence library. Calls ovm_sequencer::get_kind(string type_name); //extern function int unsigned get_kind(string type_name); extern function int get_seq_kind(string type_name); //Calls ovm_sequence::do_sequence_kind(). extern task do_sequence_kind(int unsigned req_kind); //invoked by a user to determine block status regarding grab() invocation extern function bit is_blocked(); //returned by is_blocked() and set/cleared by m_set_is_blocked() local bit m_block_status; //invoked by a sequencer to set block status regarding grab() invocation extern function void m_set_is_blocked(bit block_status); //disable a sequences body() extern function void stop(); // pre_apply extern virtual task pre_apply(); // mid_apply extern virtual task mid_apply(); // post_apply extern virtual task post_apply(); //apply an item extern task apply(ovm_sequence_item req, output ovm_sequence_item rsp); // start extern task start(ovm_sequencer_base sequencer, ovm_sequence parent_seq = null);endclass: ovm_sequence`endif // OVM_SEQUENCE_SVH
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -