URL
https://opencores.org/ocsvn/uart2bus_testbench/uart2bus_testbench/trunk
Subversion Repositories uart2bus_testbench
[/] [uart2bus_testbench/] [trunk/] [tb/] [uvm_src/] [base/] [uvm_links.svh] - Rev 16
Compare with Previous | Blame | View Log
////-----------------------------------------------------------------------------// Copyright 2007-2011 Mentor Graphics Corporation// Copyright 2007-2011 Cadence Design Systems, Inc.// Copyright 2010 Synopsys, Inc.// Copyright 2013 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.//-----------------------------------------------------------------------------// File: UVM Links//// The <uvm_link_base> class, and its extensions, are provided as a mechanism// to allow for compile-time safety when trying to establish links between// records within a <uvm_tr_database>.//////------------------------------------------------------------------------------//// CLASS: uvm_link_base//// The ~uvm_link_base~ class presents a simple API for defining a link between// any two objects.//// Using extensions of this class, a <uvm_tr_database> can determine the// type of links being passed, without relying on "magic" string names.//// For example:// |// | virtual function void do_establish_link(uvm_link_base link);// | uvm_parent_child_link pc_link;// | uvm_cause_effect_link ce_link;// |// | if ($cast(pc_link, link)) begin// | // Record the parent-child relationship// | end// | else if ($cast(ce_link, link)) begin// | // Record the cause-effect relationship// | end// | else begin// | // Unsupported relationship!// | end// | endfunction : do_establish_link//virtual class uvm_link_base extends uvm_object;// Function: new// Constructor//// Parameters:// name - Instance namefunction new(string name="unnamed-uvm_link_base");super.new(name);endfunction : new// Group: Accessors// Function: set_lhs// Sets the left-hand-side of the link//// Triggers the <do_set_lhs> callback.function void set_lhs(uvm_object lhs);do_set_lhs(lhs);endfunction : set_lhs// Function: get_lhs// Gets the left-hand-side of the link//// Triggers the <do_get_lhs> callbackfunction uvm_object get_lhs();return do_get_lhs();endfunction : get_lhs// Function: set_rhs// Sets the right-hand-side of the link//// Triggers the <do_set_rhs> callback.function void set_rhs(uvm_object rhs);do_set_rhs(rhs);endfunction : set_rhs// Function: get_rhs// Gets the right-hand-side of the link//// Triggers the <do_get_rhs> callbackfunction uvm_object get_rhs();return do_get_rhs();endfunction : get_rhs// Function: set// Convenience method for setting both sides in one call.//// Triggers both the <do_set_rhs> and <do_set_lhs> callbacks.function void set(uvm_object lhs, rhs);do_set_lhs(lhs);do_set_rhs(rhs);endfunction : set// Group: Implementation Callbacks// Function: do_set_lhs// Callback for setting the left-hand-sidepure virtual function void do_set_lhs(uvm_object lhs);// Function: do_get_lhs// Callback for retrieving the left-hand-sidepure virtual function uvm_object do_get_lhs();// Function: do_set_rhs// Callback for setting the right-hand-sidepure virtual function void do_set_rhs(uvm_object rhs);// Function: do_get_rhs// Callback for retrieving the right-hand-sidepure virtual function uvm_object do_get_rhs();endclass : uvm_link_base//------------------------------------------------------------------------------//// CLASS: uvm_parent_child_link//// The ~uvm_parent_child_link~ is used to represent a Parent/Child relationship// between two objects.//class uvm_parent_child_link extends uvm_link_base;// Variable- m_lhs,m_rhs// Implementation detailslocal uvm_object m_lhs;local uvm_object m_rhs;// Object utils`uvm_object_utils_begin(uvm_parent_child_link)`uvm_object_utils_end// Function: new// Constructor//// Parameters:// name - Instance namefunction new(string name="unnamed-uvm_parent_child_link");super.new(name);endfunction : new// Function: get_link// Constructs a pre-filled link//// This allows for simple one-line link creations.// | my_db.establish_link(uvm_parent_child_link::get_link(record1, record2));//// Parameters:// lhs - Left hand side reference// rhs - Right hand side reference// name - Optional name for the link object//static function uvm_parent_child_link get_link(uvm_object lhs,uvm_object rhs,string name="pc_link");uvm_parent_child_link pc_link = new(name);pc_link.set(lhs, rhs);return pc_link;endfunction : get_link// Group: Implementation Callbacks// Function: do_set_lhs// Sets the left-hand-side (Parent)//virtual function void do_set_lhs(uvm_object lhs);m_lhs = lhs;endfunction : do_set_lhs// Function: do_get_lhs// Retrieves the left-hand-side (Parent)//virtual function uvm_object do_get_lhs();return m_lhs;endfunction : do_get_lhs// Function: do_set_rhs// Sets the right-hand-side (Child)//virtual function void do_set_rhs(uvm_object rhs);m_rhs = rhs;endfunction : do_set_rhs// Function: do_get_rhs// Retrieves the right-hand-side (Child)//virtual function uvm_object do_get_rhs();return m_rhs;endfunction : do_get_rhsendclass : uvm_parent_child_link//------------------------------------------------------------------------------//// CLASS: uvm_cause_effect_link//// The ~uvm_cause_effect_link~ is used to represent a Cause/Effect relationship// between two objects.//class uvm_cause_effect_link extends uvm_link_base;// Variable- m_lhs,m_rhs// Implementation detailslocal uvm_object m_lhs;local uvm_object m_rhs;// Object utils`uvm_object_utils_begin(uvm_cause_effect_link)`uvm_object_utils_end// Function: new// Constructor//// Parameters:// name - Instance namefunction new(string name="unnamed-uvm_cause_effect_link");super.new(name);endfunction : new// Function: get_link// Constructs a pre-filled link//// This allows for simple one-line link creations.// | my_db.establish_link(uvm_cause_effect_link::get_link(record1, record2));//// Parameters:// lhs - Left hand side reference// rhs - Right hand side reference// name - Optional name for the link object//static function uvm_cause_effect_link get_link(uvm_object lhs,uvm_object rhs,string name="ce_link");uvm_cause_effect_link ce_link = new(name);ce_link.set(lhs, rhs);return ce_link;endfunction : get_link// Group: Implementation Callbacks// Function: do_set_lhs// Sets the left-hand-side (Cause)//virtual function void do_set_lhs(uvm_object lhs);m_lhs = lhs;endfunction : do_set_lhs// Function: do_get_lhs// Retrieves the left-hand-side (Cause)//virtual function uvm_object do_get_lhs();return m_lhs;endfunction : do_get_lhs// Function: do_set_rhs// Sets the right-hand-side (Effect)//virtual function void do_set_rhs(uvm_object rhs);m_rhs = rhs;endfunction : do_set_rhs// Function: do_get_rhs// Retrieves the right-hand-side (Effect)//virtual function uvm_object do_get_rhs();return m_rhs;endfunction : do_get_rhsendclass : uvm_cause_effect_link//------------------------------------------------------------------------------//// CLASS: uvm_related_link//// The ~uvm_related_link~ is used to represent a generic "is related" link// between two objects.//class uvm_related_link extends uvm_link_base;// Variable- m_lhs,m_rhs// Implementation detailslocal uvm_object m_lhs;local uvm_object m_rhs;// Object utils`uvm_object_utils_begin(uvm_related_link)`uvm_object_utils_end// Function: new// Constructor//// Parameters:// name - Instance namefunction new(string name="unnamed-uvm_related_link");super.new(name);endfunction : new// Function: get_link// Constructs a pre-filled link//// This allows for simple one-line link creations.// | my_db.establish_link(uvm_related_link::get_link(record1, record2));//// Parameters:// lhs - Left hand side reference// rhs - Right hand side reference// name - Optional name for the link object//static function uvm_related_link get_link(uvm_object lhs,uvm_object rhs,string name="ce_link");uvm_related_link ce_link = new(name);ce_link.set(lhs, rhs);return ce_link;endfunction : get_link// Group: Implementation Callbacks// Function: do_set_lhs// Sets the left-hand-side//virtual function void do_set_lhs(uvm_object lhs);m_lhs = lhs;endfunction : do_set_lhs// Function: do_get_lhs// Retrieves the left-hand-side//virtual function uvm_object do_get_lhs();return m_lhs;endfunction : do_get_lhs// Function: do_set_rhs// Sets the right-hand-side//virtual function void do_set_rhs(uvm_object rhs);m_rhs = rhs;endfunction : do_set_rhs// Function: do_get_rhs// Retrieves the right-hand-side//virtual function uvm_object do_get_rhs();return m_rhs;endfunction : do_get_rhsendclass : uvm_related_link
