为什么build_phase中不用super.build_phase
时间: 2024-01-11 10:03:00 浏览: 36
在SystemC中,build_phase是一个虚函数,用于在模块实例化时,进行初始化和配置。在子类中重载build_phase时,可以选择调用父类的build_phase,也可以不调用。通常情况下,如果需要在子类中添加一些自己的初始化操作,可以不调用父类的build_phase;如果不需要添加自己的操作,可以调用父类的build_phase以保证父类中的初始化操作得以执行。因此,在build_phase中是否需要调用super.build_phase,取决于具体的场景和需求。
相关问题
为什么Do not call super.build_phase() from any class that is extended from an UVM base class!
在UVM中,每个类都是从uvm_object或其子类派生而来的。这些基类中的build_phase()函数都是纯虚函数,必须在子类中实现。由于这些基类中的build_phase()函数没有实现,因此在使用UVM时,不应该在任何扩展自UVM基类的类中调用super.build_phase(),否则会导致编译器错误。
如果一个类扩展自UVM基类,它应该实现自己的build_phase()函数,并且不需要调用基类的build_phase()。在build_phase()函数中,应该调用uvm_component::build_phase(),这是一个静态函数,它会初始化UVM组件的所有属性和配置。
下面代码的作用是什么:class scp_2_pdma_mem2perip_burst_test extends base_test; `uvm_component_utils (scp_2_pdma_mem2perip_burst_test) virtual function void test_cfg(); endfunction function new (string name="scp_2_pdma_mem2perip_burst_test", uvm_component parent=null); super.new (name, parent); endfunction : new function void build_phase(uvm_phase phase); super.build_phase(phase); endfunction : build_phase task run_phase(uvm_phase phase); ahb1_spi0_std_mode_sequence ahb1_spi0_std_mode_seq; ahb_master_8corecfg_sequence ahb_mst_8ccfg_seq; sysctrl_dma_config_sequence stsctrl_dma_seq; pdma_config_mem2perip_burst_sequence pdma_cfg_mem2perip_burst_seq; super.run_phase(phase); ahb1_spi0_std_mode_seq = ahb1_spi0_std_mode_sequence::type_id::create("ahb1_spi0_std_mode_seq"); ahb_mst_8ccfg_seq = ahb_master_8corecfg_sequence::type_id::create("ahb_mst_8ccfg_seq"); stsctrl_dma_seq = sysctrl_dma_config_sequence::type_id::create("stsctrl_dma_seq"); pdma_cfg_mem2perip_burst_seq = pdma_config_mem2perip_burst_sequence::type_id::create("pdma_cfg_mem2perip_burst_seq"); phase.raise_objection(this); // seq.starting_phase = phase; ahb1_spi0_std_mode_seq.start(env.scp_2_8core_master_agent.sequencer); ahb_mst_8ccfg_seq.start(env.scp_2_8core_master_agent.sequencer); stsctrl_dma_seq.start(env.scp_2_8core_master_agent.sequencer); pdma_cfg_mem2perip_burst_seq.start(env.scp_2_8core_master_agent.sequencer); phase.drop_objection(this); endtask endclass
这段代码定义了一个类 "scp_2_pdma_mem2perip_burst_test",它是 "base_test" 类的子类,并且使用了 UVM (Universal Verification Methodology)框架。这个类包含以下成员函数:test_cfg() 和 new(),以及 build_phase() 和 run_phase() 函数,它们均重写了 base_test 中对应的函数。在 run_phase() 函数中,定义了四个不同的 sequence,然后启动这四个 sequence,实现对 "env.scp_2_8core_master_agent" 中的 sequencer 的控制。这段代码可能是用于硬件验证的测试代码。