URL
https://opencores.org/ocsvn/uart2bus_testbench/uart2bus_testbench/trunk
Subversion Repositories uart2bus_testbench
[/] [uart2bus_testbench/] [trunk/] [tb/] [uvm_src/] [base/] [uvm_domain.svh] - Rev 16
Compare with Previous | Blame | View Log
////----------------------------------------------------------------------// Copyright 2007-2011 Mentor Graphics Corporation// Copyright 2007-2010 Cadence Design Systems, Inc.// Copyright 2010 Synopsys, 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.//----------------------------------------------------------------------typedef class uvm_build_phase;typedef class uvm_connect_phase;typedef class uvm_end_of_elaboration_phase;typedef class uvm_start_of_simulation_phase;typedef class uvm_run_phase;typedef class uvm_extract_phase;typedef class uvm_check_phase;typedef class uvm_report_phase;typedef class uvm_final_phase;typedef class uvm_pre_reset_phase;typedef class uvm_reset_phase;typedef class uvm_post_reset_phase;typedef class uvm_pre_configure_phase;typedef class uvm_configure_phase;typedef class uvm_post_configure_phase;typedef class uvm_pre_main_phase;typedef class uvm_main_phase;typedef class uvm_post_main_phase;typedef class uvm_pre_shutdown_phase;typedef class uvm_shutdown_phase;typedef class uvm_post_shutdown_phase;uvm_phase build_ph;uvm_phase connect_ph;uvm_phase end_of_elaboration_ph;uvm_phase start_of_simulation_ph;uvm_phase run_ph;uvm_phase extract_ph;uvm_phase check_ph;uvm_phase report_ph;//------------------------------------------------------------------------------//// Class: uvm_domain////------------------------------------------------------------------------------//// Phasing schedule node representing an independent branch of the schedule.// Handle used to assign domains to components or hierarchies in the testbench//class uvm_domain extends uvm_phase;static local uvm_domain m_common_domain;static local uvm_domain m_uvm_domain; // run-time phasesstatic local uvm_domain m_domains[string];static local uvm_phase m_uvm_schedule;// Function: get_domains//// Provides a list of all domains in the provided ~domains~ argument.//static function void get_domains(output uvm_domain domains[string]);domains = m_domains;endfunction// Function: get_uvm_schedule//// Get the "UVM" schedule, which consists of the run-time phases that// all components execute when participating in the "UVM" domain.//static function uvm_phase get_uvm_schedule();void'(get_uvm_domain());return m_uvm_schedule;endfunction// Function: get_common_domain//// Get the "common" domain, which consists of the common phases that// all components execute in sync with each other. Phases in the "common"// domain are build, connect, end_of_elaboration, start_of_simulation, run,// extract, check, report, and final.//static function uvm_domain get_common_domain();uvm_domain domain;uvm_phase schedule;if (m_common_domain != null)return m_common_domain;domain = new("common");domain.add(uvm_build_phase::get());domain.add(uvm_connect_phase::get());domain.add(uvm_end_of_elaboration_phase::get());domain.add(uvm_start_of_simulation_phase::get());domain.add(uvm_run_phase::get());domain.add(uvm_extract_phase::get());domain.add(uvm_check_phase::get());domain.add(uvm_report_phase::get());domain.add(uvm_final_phase::get());m_domains["common"] = domain;// for backward compatibility, make common phases visible;// same as uvm_<name>_phase::get().build_ph = domain.find(uvm_build_phase::get());connect_ph = domain.find(uvm_connect_phase::get());end_of_elaboration_ph = domain.find(uvm_end_of_elaboration_phase::get());start_of_simulation_ph = domain.find(uvm_start_of_simulation_phase::get());run_ph = domain.find(uvm_run_phase::get());extract_ph = domain.find(uvm_extract_phase::get());check_ph = domain.find(uvm_check_phase::get());report_ph = domain.find(uvm_report_phase::get());m_common_domain = domain;domain = get_uvm_domain();m_common_domain.add(domain,.with_phase(m_common_domain.find(uvm_run_phase::get())));return m_common_domain;endfunction// Function: add_uvm_phases//// Appends to the given ~schedule~ the built-in UVM phases.//static function void add_uvm_phases(uvm_phase schedule);schedule.add(uvm_pre_reset_phase::get());schedule.add(uvm_reset_phase::get());schedule.add(uvm_post_reset_phase::get());schedule.add(uvm_pre_configure_phase::get());schedule.add(uvm_configure_phase::get());schedule.add(uvm_post_configure_phase::get());schedule.add(uvm_pre_main_phase::get());schedule.add(uvm_main_phase::get());schedule.add(uvm_post_main_phase::get());schedule.add(uvm_pre_shutdown_phase::get());schedule.add(uvm_shutdown_phase::get());schedule.add(uvm_post_shutdown_phase::get());endfunction// Function: get_uvm_domain//// Get a handle to the singleton ~uvm~ domain//static function uvm_domain get_uvm_domain();if (m_uvm_domain == null) beginm_uvm_domain = new("uvm");m_uvm_schedule = new("uvm_sched", UVM_PHASE_SCHEDULE);add_uvm_phases(m_uvm_schedule);m_uvm_domain.add(m_uvm_schedule);endreturn m_uvm_domain;endfunction// Function: new//// Create a new instance of a phase domain.function new(string name);super.new(name,UVM_PHASE_DOMAIN);if (m_domains.exists(name))`uvm_error("UNIQDOMNAM", $sformatf("Domain created with non-unique name '%s'", name))m_domains[name] = this;endfunction// Function: jump//// jumps all active phases of this domain to to-phase if// there is a path between active-phase and to-phasefunction void jump(uvm_phase phase);uvm_phase phases[$];m_get_transitive_children(phases);phases = phases.find(item) with (item.get_state() inside {[UVM_PHASE_STARTED:UVM_PHASE_CLEANUP]});foreach(phases[idx])if(phases[idx].is_before(phase) || phases[idx].is_after(phase))phases[idx].jump(phase);endfunction// jump_all// --------static function void jump_all(uvm_phase phase);uvm_domain domains[string];uvm_domain::get_domains(domains);foreach(domains[idx])domains[idx].jump(phase);endfunctionendclass
