Source code for uvm.base.uvm_coreservice

#//----------------------------------------------------------------------
#//   Copyright 2013 Cadence Design Inc
#//   Copyright 2019-2020 Tuomas Poikela (tpoikela)
#//   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.
#//----------------------------------------------------------------------

from .uvm_factory import UVMDefaultFactory


[docs]class UVMCoreService: """ Class: UVMCoreService UVMCoreService provides a default implementation of the UVMCoreService API. It instantiates uvm_default_factory, uvm_default_report_server, uvm_root. """ m_inst: 'UVMCoreService' = None def __init__(self): self.report_server = None self.factory = None self.tr_database = None # uvm_tr_database self._visitor = None
[docs] @classmethod def get(cls): """ Returns: UVMCoreService: Core service singleton. """ if UVMCoreService.m_inst is None: UVMCoreService.m_inst = UVMCoreService() return UVMCoreService.m_inst
[docs] @classmethod def reset(cls): """Reset the state of coreservices. Used for unit testing""" UVMCoreService.m_inst = None from .uvm_registry import UVMComponentRegistry, UVMObjectRegistry UVMComponentRegistry.reset() UVMObjectRegistry.reset()
[docs] def get_root(self): """ Returns: UVMRoot: Singleton instance of UVMRoot. """ from .uvm_root import UVMRoot return UVMRoot.m_uvm_get_root()
[docs] def get_factory(self): """ Function: get_factory Returns the currently enabled uvm factory. When no factory has been set before, instantiates a uvm_default_factory Returns: UVMFactory: Enabled UVM factory. """ if self.factory is None: self.factory = UVMDefaultFactory() return self.factory
[docs] def set_factory(self, factory): """ Sets the current uvm factory. Please note: it is up to the user to preserve the contents of the original factory or delegate calls to the original factory Args: factory (UVMFactory): """ self.factory = factory
[docs] def get_default_tr_database(self): """ Returns the current default record database If no default record database has been set before this method is called, returns an instance of `UVMTextTrDatabase` Returns: UVMTrDatabase: Default transaction database """ if self.tr_database is None: #process p = process::self(); p = None tx_db = None # UVMTextTrDatabase s = "" if p is not None: s = p.get_randstate() from .uvm_tr_database import UVMTextTrDatabase tx_db = UVMTextTrDatabase("default_tr_database") self.tr_database = tx_db if p is not None: p.set_randstate(s) return self.tr_database
[docs] def set_default_tr_database(self, db): """ Function: set_default_tr_database Sets the current default record database to `db` Args: db (UVMTrDatabase): Default transaction database to use """ self.tr_database = db
[docs] def get_report_server(self): """ Returns: UVMReportServer: Report server singleton instance. """ if self.report_server is None: from .uvm_report_server import UVMReportServer self.report_server = UVMReportServer() return self.report_server
[docs] def set_report_server(self, server): self.report_server = server
#// Function: set_component_visitor #// sets the component visitor to ~v~ #// (this visitor is being used for the traversal at end_of_elaboration_phase #// for instance for name checking) #virtual function void set_component_visitor(uvm_visitor#(uvm_component) v); # _visitor=v; #endfunction #// Function: get_component_visitor #// retrieves the current component visitor #// if unset(or ~null~) returns a <uvm_component_name_check_visitor> instance #virtual function uvm_visitor#(uvm_component) get_component_visitor(); # if(_visitor==null) begin # uvm_component_name_check_visitor v = new("name-check-visitor"); # _visitor=v; # end # return _visitor; #endfunction