在使用Synopsys AXI VIP时,需要配置一些信号的属性或定义一些信号的delay,通常可以直接在svt_axi_transaction类中控制。
AXI VIP中描述从事务数据的类是svt_axi_slave_transaction,从事务类提供了配置信号数据(如rresp[], bresp, data[])和延迟(如bvalid_delay, addr_ready_delay)的一些属性,大多数属性为public且可随机化,并且仅在配置vip slave agent为active模式时才生效。
AXI事务对象(transaction object)可用于:
产生随机激励/报告监测到的总线事务/对总线事务请求发起随机响应/收集功能覆盖率数据/支持错误插入
事务对象支持随机化并提供了两组约束:
valid_ranges:限制被driver接收的值,保证VIP基本操作,不能被禁止
resonable_* constraints:可单独被禁止,控制协议和设置仿真边界
如果需要配置信号delay,可以在axi slave sequence或其他派生自svt_axi_slave_base_sequence的自定义sequence内添加如下约束:
p_sequencer.response_request_port.peek(req_resp);
// Randomize the response and delays
status=req_resp.randomize with {
ddr_ready_delay inside {[0:1000]};
addr_ready_delay inside {[0:1000]};
if(xact_type == svt_axi_slave_transaction::READ) {
foreach (rvalid_delay[i]) {
rvalid_delay[i] inside {[0:1000]};
}
}
foreach (wready_delay[i]) {
wready_delay[i] inside {[0:1000]};
}
if(xact_type == svt_axi_slave_transaction::WRITE) {
bvalid_delay inside {[0:1000]};
}
};
if(!status)
`uvm_fatal("body","Unable to randomize a response")
其中addr_ready_delay定义了写地址通道AWREADY信号的delay和读地址通道ARREADY信号的delay,其他各通道的valid或ready信号的delay时间也都有特定的成员控制。
如果需要约束特定信号的数据,如rresp和bresp等,也可采用同样方式:
status=req_resp.randomize with {
foreach(rresp[i]) {
rresp[i] inside {svt_axi_transaction::SLVERR, svt_axi_transaction::DECERR};
}
bresp inside {svt_axi_transaction::SLVERR, svt_axi_transaction::DECERR};
};
VIP还允许通过属性指定延迟的分布权重,如ZERO_DELAY_wt、SHORT_DELAY_wt和LONG_DELAY_wt分别定义了用于控制零延迟、短延迟和长延迟分布的权重。例如:
req.ZERO_DELAY_wt = 10;
req.SHORT_DELAY_wt = 20;
req.LONG_DELAY_wt = 100;
AXI总线的很多属性可以在port_configuration类中配置,除axi_interface_type, data_width, addr_width, id_width, reset_type等变量外,还有各种信号的coverage和protocol check使能等,其中num_outstanding_xact可定义主从机支持的outstanding深度:
this.slave_cfg[0].num_outstanding_xact = 10;
这里outstanding深度默认值为4,最大值为10,并由宏SVT_AXI_MAX_NUM_OUTSTANDING_XACT定义。
如果需要覆盖VIP中某些宏,可以添加svt_axi_user_defines.svi文件在其中重定义,并在编译时添加编译选项“+define+SVT_AXI_INCLUDE_USER_DEFINES”。关于VIP中宏的一些具体覆盖方法可以参考这篇文章:《Synopsys验证VIP学习笔记(5)重写VIP中的系统常数》。
另外,通过配置
svt_axi_system_configuration::enable_delayed_response_port = 1,可以额外提供两个端口并以delay的方式输入response数据,以实现和上面同样的目的,该参数的详细用法可以参考user guide。
参考资料:VC Verification IP AMBA AXI UVM User Guide R-2020.09
没有回复内容