AXI Stream VIP使用示例

AXI Stream VIP包含在Synopsys AXI VIP中,可以使用axi_system_env_svt例化集成环境,也可以使用axi_master_agent_svt和axi_slave_agent_svt单独例化stream主/从环境

接口

接口使用svt_axi_if,svt_axi_if中包含可配置数量的svt_axi_master_if 和svt_axi_slave_if,其中又包含带t前缀的AXI Stream信号

配置类

和AXI VIP相同,系统配置类为svt_axi_system_configuration,每个主、从接口又有独立的配置类svt_axi_port_configuration,其中AXI Stream相关变量如下,主要是信号宽度和边带信号支持情况,像default_tready和AXI VIP中定义相似,可以配置ready常低常高

//svt_axi_port_configuration.sv
rand bit tready_enable               = 1;
rand bit tkeep_enable                = 1;
rand bit tstrb_enable                = 1;
rand bit tid_enable                  = 1;
rand bit tdest_enable                = 1;
rand bit tuser_enable                = 1;
rand bit tdata_enable                = 1;
rand bit tlast_enable                = 1;
rand int tdata_width                 = `SVT_AXI_MAX_TDATA_WIDTH;
rand int tid_width                   = `SVT_AXI_MAX_TID_WIDTH;
rand int tdest_width                 = `SVT_AXI_MAX_TDEST_WIDTH;
rand int tuser_width                 = `SVT_AXI_MAX_TUSER_WIDTH;
rand bit byte_stream_enable = 1;

rand bit default_tready = 0;

传输类

传输类使用svt_axi_master_transaction,一次传输对应一次tlast,和AXI区别主要在类型需要修改为DATA_STREAM,同样包含数值类变量和延时,tvalid_delay有从上次valid和上次握手两种策略,tready_delay不支持多策略(2020版本)

//svt_axi_transaction.sv
rand xact_type_enum xact_type = DATA_STREAM;

rand reference_event_for_tvalid_delay_enum reference_event_for_tvalid_delay = PREV_TVALID_TREADY_HANDSHAKE;

rand int tvalid_delay[];
rand int tready_delay[];

rand bit [`SVT_AXI_MAX_TDATA_WIDTH - 1:0] tdata[];
rand bit [`SVT_AXI_TSTRB_WIDTH - 1:0] tstrb[];
rand bit [`SVT_AXI_TKEEP_WIDTH - 1:0] tkeep[];
rand bit [`SVT_AXI_MAX_TID_WIDTH - 1:0] tid = 0;
rand bit [`SVT_AXI_MAX_TDEST_WIDTH - 1:0] tdest;
rand bit [`SVT_AXI_MAX_TUSER_WIDTH - 1:0] tuser[];
rand int stream_burst_length = 1;

示例

示例使用axi_system_env_svt,包含1主1从
test_case和AXI相似,向master、slave发送sequence
master sequence中配置传输类,发送递增数据,发送1周期,间断1周期

`uvm_do_with(req, 
{ 
    stream_burst_length ==16;
    xact_type == svt_axi_transaction::DATA_STREAM;
    foreach(tdata[fi]) begin
	    tdata[fi] == cnt++;
	    tuser[fi] == 'h100 + cnt++;
	    tvalid_delay[fi] = 1;
    end
}

slave sequence中配置传输类,配置ready延时,也为递增值

p_sequencer.response_request_port.peek(req_resp);

req_resp.randomize with {
    foreach (tready_delay[i])
	    tready_delay[i] == i;
};

get_read_data_from_mem_to_transaction(req_resp);
$cast(req,req_resp);
`uvm_send(req)

从波形可以看到发送递增数,tvalid固定延时为1,tready延时为递增值
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值