基于AXI smartconnect的多主单从的DDR读写


前言

由于项目后续需要实现一个多主单从的DDR读写功能,而FPGA上DDR的AXI通道只有一条,所以不得不采用AXI的IP来实现。
本文记录一下使用AXI smartconnect实现过程中的一些问题。


一、AXI smartconnect是什么?

AXI smartconnect 是为了一个或多个主机通过AXI总线和一个或多个从机进行数据读写而用的,此前常用的应该是AXI interconnect这个IP,实质上smartconnect是interconnect的升级版,使用更加方便一些,延时流和流水线优化的更好些,但是相对的资源就会占用更多

  • AXI smartconnect最高支持主机从机的数量可达16个,如果有更多的需求,则需要更多的smartconnect来支持。
  • AXI smartconnect支持主从机不同时钟域不同数据位宽自动切换(一个突发还没接口位宽大的时候,smartconnect会选择存缓存里,攒一起传)。
  • 此外smartconnect还支持数据读写错误的提示。

二、使用步骤

1.导入IP

基于AXI smartconnect的多主单从的DDR读写
首先在IP catalog栏中输入AXI smartconnect就可以找到这个IP,需要注意的是这个IP为了用户使用更方便,只能在block design模式下生成,否则会出现如下情况。

基于AXI smartconnect的多主单从的DDR读写
随后进入block design界面配置AXI smartconnect即可,配置的GUI如下图
基于AXI smartconnect的多主单从的DDR读写

  • 我在这个工程中测试的是两主一丛的情况,而下方的advanced properties是此IP核内更细节的一些配置,暂时还没用到,如果需要的话可以对照数据手册查阅使用。
    基于AXI smartconnect的多主单从的DDR读写
    IP生成后只需要连接主从机的AXI总线以及时钟、复位信号即可。

2.注意事项

  • 本以为想上述这样完成后就能够实现基本功能,但是仿真发现在AXI
    smartconnect的输入端AXI总线的信号并没有对应出现在输出端。

  • 检查许久后发现AXI总线中bresp值变成3了,正常读写时这个值好像都是0,查找后发现这个信号的3代表读写地址错误

原来需要在仿真前进行地址分配

进入IP integrator选项,在address editor选项卡中进行两个主机所需的地址分配。(这里需要注意,一旦分配错误或者没分配都会读写失败

基于AXI smartconnect的多主单从的DDR读写

3.仿真情况

基于AXI smartconnect的多主单从的DDR读写
基于AXI smartconnect的多主单从的DDR读写

基于AXI smartconnect的多主单从的DDR读写
这里模拟了两个主机同时突发读写的情况,可以看出读写情况正常,没有冲突和数据错误的情况。