微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > IC验证交流 > 关于 UVM寄存器模型的问题,寻求帮助

关于 UVM寄存器模型的问题,寻求帮助

时间:10-02 整理:3721RD 点击:
最近研究UVM源码中提供的相关例子,在测试register模型时遇到一些问题想向大家请教。摘部分代码如下:



virtualfunction void connect_phase(uvm_phase phase);

if (apb !=null) begin

reg2apb_adapter reg2apb = new("reg2apb");

reg2apb_adapter mon_reg2apb = new("mon_reg2apb");

regmodel.default_map.set_sequencer(apb.sqr,reg2apb);

`ifdefEXPLICIT_MON

apb2reg_predictor.map = regmodel.default_map;

apb2reg_predictor.adapter = mon_reg2apb;

regmodel.default_map.set_auto_predict(0);

apb.mon.ap.connect(apb2reg_predictor.bus_in);

`else

regmodel.default_map.set_auto_predict(1);

`endif

end

regmodel.print();

endfunction

这是在环境中配好转换器。
转换器中的bus到寄存器函数为:
virtualfunction void bus2reg(uvm_sequence_item bus_item,

ref uvm_reg_bus_op rw);

apb_rw apb;

if(!$cast(apb,bus_item)) begin

`uvm_fatal("NOT_APB_TYPE","Provided bus_item is notof the correct type")

return;

end

uvm_report_info("kind(adapter):",$sformatf("kind:%0h",apb.kind));

uvm_report_info("addr(adapter):",$sformatf("addr:%0h",apb.addr));

uvm_report_info("data(adapter):",$sformatf("data:%0h",apb.data));

rw.kind =apb.kind == apb_rw::READ ? UVM_READ : UVM_WRITE;

rw.addr =apb.addr;

rw.data =apb.data;

rw.status =UVM_IS_OK;

endfunction

drv会根据收到的transaction转发到总线上,monitor监测总线行为,并把收到transaction进行ap.write(tr)。

遇到的问题是:运行时带上宏定义EXPLICIT_MON,测试reg_predictor的用法。

发现调用一个寄存器read或write函数时,bus2reg函数会执行两遍,对于read,最终返回的值不是monitor传回来的,而是drv之前收到并转发出去的transaction中的data字段。感觉regmodel.default_map.set_auto_predict(0);没有起作用。或者我理解的reg_predictor运行机制有误,我认为非自动预测模式下,bus2reg只会在mon把监测到的transaction传给pre_predictor之后,才会被调用。但目前实验的结果是在drv把transaction转发出去后也会调用,而且该处的调用决定了read函数的返回值。

请高手帮忙解答

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top