URL
https://opencores.org/ocsvn/uart2bus_testbench/uart2bus_testbench/trunk
Subversion Repositories uart2bus_testbench
[/] [uart2bus_testbench/] [trunk/] [tb/] [uvm_src/] [dap/] [uvm_simple_lock_dap.svh] - Rev 16
Compare with Previous | Blame | View Log
////------------------------------------------------------------------------------// Copyright 2007-2011 Mentor Graphics Corporation// Copyright 2007-2011 Cadence Design Systems, Inc.// Copyright 2010-2011 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.//------------------------------------------------------------------------------// Class: uvm_simple_lock_dap// Provides a 'Simple Lock' Data Access Policy.//// The 'Simple Lock' Data Access Policy allows for any number of 'sets',// so long as the value is not 'locked'. The value can be retrieved using// 'get' at any time.//// The UVM uses this policy to protect the ~file name~ value in the// <uvm_text_tr_database>.//class uvm_simple_lock_dap#(type T=int) extends uvm_set_get_dap_base#(T);// Used for self-referencestypedef uvm_simple_lock_dap#(T) this_type;// Parameterized Utils`uvm_object_param_utils(uvm_simple_lock_dap#(T))// Stored datalocal T m_value;// Lock statelocal bit m_locked;// Function: new// Constructorfunction new(string name="unnamed-uvm_simple_lock_dap#(T)");super.new(name);m_locked = 0;endfunction : new// Group: Set/Get Interface// Function: set// Updates the value stored within the DAP.//// ~set~ will result in an error if the DAP has// been locked.virtual function void set(T value);if (m_locked)`uvm_error("UVM/SIMPLE_LOCK_DAP/SAG",$sformatf("Attempt to set new value on '%s', but the data access policy forbids setting while locked!",get_full_name()))else beginm_value = value;endendfunction : set// Function: try_set// Attempts to update the value stored within the DAP.//// ~try_set~ will return a 1 if the value was successfully// updated, or a 0 if the value can not be updated due// to the DAP being locked. No errors will be reported// if ~try_set~ fails.virtual function bit try_set(T value);if (m_locked)return 0;else beginm_value = value;return 1;endendfunction : try_set// Function: get// Returns the current value stored within the DAP//virtual function T get();return m_value;endfunction : get// Function: try_get// Retrieves the current value stored within the DAP//// ~try_get~ will always return 1.virtual function bit try_get(output T value);value = get();return 1;endfunction : try_get// Group: Locking// Function: lock// Locks the data value//// The data value cannot be updated via <set> or <try_set> while locked.function void lock();m_locked = 1;endfunction : lock// Function: unlock// Unlocks the data value//function void unlock();m_locked = 0;endfunction : unlock// Function: is_locked// Returns the state of the lock.//// Returns:// 1 - The value is locked// 0 - The value is unlockedfunction bit is_locked();return m_locked;endfunction : is_locked// Group: Introspection//// The ~uvm_simple_lock_dap~ cannot support the standard UVM// instrumentation methods (~copy~, ~clone~, ~pack~ and// ~unpack~), due to the fact that they would potentially// violate the access policy.//// A call to any of these methods will result in an error.virtual function void do_copy(uvm_object rhs);`uvm_error("UVM/SIMPLE_LOCK_DAP/CPY","'copy()' is not supported for 'uvm_simple_lock_dap#(T)'")endfunction : do_copyvirtual function void do_pack(uvm_packer packer);`uvm_error("UVM/SIMPLE_LOCK_DAP/PCK","'pack()' is not supported for 'uvm_simple_lock_dap#(T)'")endfunction : do_packvirtual function void do_unpack(uvm_packer packer);`uvm_error("UVM/SIMPLE_LOCK_DAP/UPK","'unpack()' is not supported for 'uvm_simple_lock_dap#(T)'")endfunction : do_unpack// Group- Reporting// Function- convert2stringvirtual function string convert2string();if (m_locked)return $sformatf("(%s) %0p [LOCKED]", `uvm_typename(m_value), m_value);elsereturn $sformatf("(%s) %0p [UNLOCKED]", `uvm_typename(m_value), m_value);endfunction : convert2string// Function- do_printvirtual function void do_print(uvm_printer printer);super.do_print(printer);printer.print_int("lock_state", m_locked, $bits(m_locked));printer.print_generic("value",`uvm_typename(m_value),0,$sformatf("%0p", m_value));endfunction : do_printendclass // uvm_simple_lock_dap
