Synopsys验证VIP学习笔记(3)总线事务的配置和约束-FPGA常见问题论坛-FPGA CPLD-ChipDebug

Synopsys验证VIP学习笔记(3)总线事务的配置和约束

 

在使用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时间也都有特定的成员控制。

如果需要约束特定信号的数据,如rrespbresp等,也可采用同样方式:

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

请登录后发表评论

    没有回复内容