axi协议里面burst的4k越界问题,及cross 4k master IP的RTL代码

AXI的burst操作不能跨越4K边界

  • 因为AXI系统中,slave地址空间一般为4KB的整数倍,一个page大小也是4K。

如:32'ha100_1000, 32'ha100_2000,32'ha100_3000

  • AXI协议会在读/写地址通道的开头发出addr/len/size等信息,若一笔burst跨越了A和B两个slave,则会只有A收到开头的addr/len/size等信息,B则收不到上述信息,从而造成burst无法完成。

AHB的burst操作不能跨越1K边界

  • 因为AHB系统中,slave的最小的地址空间为1KB,即slave至少地址空间是1K,或者2K等。

如:32'ha100_1000,32'ha100_1400,32'ha100_1800,32'ha100_1c00

  • ABH协议addr/len等信息是随着data一起发给slave的,若一笔burst跨越了A和B两个slave,可能造成对B的误写入引发错误。

处理越界的RTL代码

总线的master(如:DMA、CPU等)需要支持4K越界处理,基本思路就是把越界的transfer拆分成两笔非越界transfer

实现逻辑很简单,一共两步:越界检测、拆分传输。下面代码仅用于描述基本实现思路,具体问题需要具体的设计修改。

 

这个模块位于DMA和总线之前,接管对总线的请求,并根据情况做传输拆分。

 

 

计算首、末地址,末地址=首地址+len*数据位宽。上图中数据位宽为64bit(8byte),因此对len左移3位,即乘8

仅需判断首、末地址的第12bit是否相等,即可判断当前传输是否越界。

 

非越界传输,状态机一直处于IDLE;

越界传输,则拆分成BURST_FIRST和BURST_LAST

注:图中的burst_running信号是处理异常中断的,一般DMA中没有此信号,不用考虑

 

当4K越界发生时,DMA侧不需要知道实际对总线发起了两笔传输,仅给DMA侧返回一笔传输accept即可

 

接管总线,发起两笔传输即可

 


对于写传输,还要额外对burst做计数,需要在发完第一个拆分的burst后,再发第二笔拆分的busrt,如下所示:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值