关于Synopsys AXI VIP中的SLAVE response的一些设置

本文详细描述了在AXI协议中如何通过SynopsysAXIVIP中的axi_slave_reorder_response_sequence进行交易的顺序管理和优先级设置,包括RANDOM、ROUND_ROBIN和PRIORITIZED算法,以及它们在实际测试中的应用和结果分析。
摘要由CSDN通过智能技术生成

AXI协议中使用五个通道进行数据的传输,分别是:

  • Read address channel
  • Read data channel
  • Write address channel
  • Write data channel
  • Write response channel

其中,Read data channel以及Write response channel是从Slave interface返回给master interface的数据。因此在Synopsys AXI VIP中存在有专门的Slave response。

        directed_test中使用的是axi_slave_reorder_response_sequence,为更清楚的看到各个transaction的返回顺序,给每一个transaction赋一个ID。使用`uvm_do_with在随机化时对某些字段添加约束,使用for循环随机化transaction时,添加约束限制此transanction的ID为一个定值。例如添加以下约束:

    for (int i = 0;i < 8;i++) begin
        `uvm_do_with(write_tran[i], 
        { 
          xact_type == svt_axi_transaction::WRITE;
	      id == i;
          burst_type   == svt_axi_transaction::INCR;
          burst_length inside {4,8,16};
        }
        )

    for (int x = 0;x < sequence_length;x++) begin 
        `uvm_do_with(read_tran[x], 
        { 
          xact_type == svt_axi_transaction::READ;
	      id == x;
        })

添加以上约束后,transaction会被赋予一个ID值,这个ID值会被放到WID和RID上,AXI4中WID被取消,写数据通道的数据必须严格的按照写地址通道的数据顺序传送,这里不讨论写数据的乱序问题。读数据过程分为两个部分,读地址通过Read address channel,Master发送给Slave后,Slave需返回相应数据,这个数据返回的顺序可以通过设置重新排序算法reordering_algorithm进行设置,reordering_algorithm分为三种,分别是:

  • RANDOM
  • PRIORITIZED
  • ROUND_ROBIN

RANDOM,即随机,表示transaction将按照任意随机顺序处理,与收到transaction的顺序无关。

PRIORITIZED,即存在优先,transaction将按照优先顺序处理,优先级通过 reordering_priority指定。reordering_priority通过read_data_reordering_depth 先设置允许访问读取数据通道的transaction,然后对这些transaction的进行重排序优先级。

ROUND_ROBIN,即transaction将按照接收到的transaction顺序处理。

以上三种设置方式仅适用于Slave agent。

1.PRIORITED设置及运行结果

主要讨论PRIORITIZED按照优先级返回transaction的方法,设置代码如下:

      if(req_resp.xact_type == svt_axi_slave_transaction::WRITE) begin
        if(req_resp.id == 5) begin
          req_resp.reordering_priority = 8;
        end
        else begin
          req_resp.reordering_priority = 1;
        end    
        put_write_transaction_data_to_mem(req_resp);
      end
      else begin
       case(req_resp.id)
           4:req_resp.reordering_priority=1;
           3:req_resp.reordering_priority=2;
           2:req_resp.reordering_priority=3;
           5:req_resp.reordering_priority=4;
           1:req_resp.reordering_priority=5;
           6:req_resp.reordering_priority=6;
           7:req_resp.reordering_priority=7;
           default:req_resp.reordering_priority=1;
       endcase
        get_read_data_from_mem_to_transaction(req_resp);
      end

在directed_test中,设置Slave中的read_data_reordering_depth为7,与for循环中的transaction数量相等,这样,7个transaction都可以进行优先级的排序。当下xact_type的类型为READ时,设置各个transaction的优先级,按照上述所示代码的case语句,分别设置相应ID的transaction对应的优先级如下表:

PRIORITIZEDID
14
23
32
45
51
66
77

 跑directed_test,波形显示的Read data channel返回数据的顺序如图所示:

波形显示返回transaction的ID顺序为7,6,1,5,2,3,4。说明对reordering_algorithm的设置生效,其返回顺序是按照设置的优先级进行返回的。

做这样一个实验,将某一个ID值的prioritized设置为最大,设置其它ID的值为相同并且小于最大prioritized,如下列代码所示:

        if(req_resp.id==6) begin 
          req_resp.reordering_priority = 2;
        end
        else begin
          req_resp.reordering_priority = 1;
        end

设置ID为6的reordering_priorited为2,其它所有ID的值为1,运行结果如下图:

根据文档所写,多个transaction ID具有相同的优先级时,按照这些transaction接收到的顺序进行处理,在这种情况下,ID为6的transaction最先出现,后面顺序依次为7,5,4,3,2,1。

问题:文档中所说是The transactions with the least value for this attribute will get higher priority,此属性值最小的将获得更大的优先级,但从波形上来看,是属性值最大的获得更大的优先级。      

2.RANDOM运行结果

设置优先级算法reordering_algorithm为RANDOM。

运行结果如图所示:

从波形图上来看,对transaction的处理非常随机。

3.ROUND_ROBIN运行结果

设置优先级算法reordering_algorithm为ROUND_ROBIN。

运行结果如图所示:

对于ROUND_ROBIN这个算法,在之前顺序无误的情况下,read_data_reordering_depth设置为何值对其结果没啥影响,设置了也是按照返回的顺序进行处理。

通过以上三种reordering_algorithm的讨论,可以得出slave返回response的顺序可以通过指定算法类型进行顺序的设定。其中algorithm=PRIORITIZED可以进行任意顺序的设定。

以上均是等待重排序transaction与transaction数量相等的情况。

  • 17
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值