|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
各位:
最近在使用UVM搭建验证平台,其中涉及到override的问题,我用的是set_type_override_by_type函数来实现override,但是貌似没有替换成功啊。代码如下:
初始的test class:
- class base_test extends uvm_test;
- normal_apb_config demo_cfg;
- ...
- virual function void build_phase(uvm_phase phase);
- demo_cfg=normal_apb_config::type_id::create("demo_cfg");
- ...
- ...
复制代码
新的test class代码:
- class int_test extends base_test;
- ...
- function void build_phase(uvm_phase phase);
- super.build_phase(phase);
- set_type_override_by_type(normal_apb_config::get_type(),ir_apb_config::get_type());
- endfunction : build_phase
- task run_phase(uvm_phase phase);
- super.run_phase(phase);
- $display("***Debug override***");
- demo_cfg.print();
- endtask: run_phase
- ...
复制代码
而两个config类的代码如下:
- class normal_apb_config extends apb_config;
- `uvm_object_utils(normal_apb_config)
- function new(string name ="normal_apb_config");
- super.new(name);
- add_master("master",UVM_ACTIVE);
- add_slave("slave0",32'h0000_0000,32'h0000_0400,0,UVM_PASSIVE);
- endfunction
- endclass : normal_apb_config
- class ir_apb_config extends normal_apb_config;
- `uvm_object_utils(ir_apb_config)
- virtual ir_if irq_if;
- function new(string name ="ir_apb_config");
- super.new(name);
- add_master("master",UVM_ACTIVE);
- add_slave("slave0",32'h0000_0000,32'h0000_0380,0,UVM_PASSIVE);
- endfunction
- task wait_for_irq;
- @(posedge irq_if.irq);
- endtask
- endclass : ir_apb_config
复制代码
而运行到"demo_cfg.print()"时候,打印出来的end_addr还是32'h400,而不是32‘h380.
如何才能override成功呢? |
|