我目前正在编写一个AXI4母版,它应该也支持AXI4 Lite (AXI4L)。
我的AXI4主机正在接收来自16位接口的数据.这是在XilinxSpartan6FPGA上,我计划使用EDK AXI4互连IP,它的最小WDATA宽度为32位。
起初,我想使用窄突发,即AWSIZE = x"01“(传输中的两个字节)。但是,我发现Xilinx的AXI参考指南UG761状态“支持窄脉冲串,但.不推荐。”未对齐的事务应该被支持。
这让我想到。假设我开始了一个未对齐的爆发:
并采取以下行动:
AX (32-bit word #0: send hi16)
XB (32-bit word #1: send lo16)其中A,B是我的16位字,从一个未对齐(2字节对齐)地址开始.X意味着对于指定的16位,WSTRB被取消声明。
现在,如果这只是针对AXI4,我可能不会那么关心这个用例,因为AXI4外围设备需要使用WSTRB信号。但是,AXI参考指南UG761声明"AXI4L从接口可以选择忽略WSTRB (假设所有字节都是有效的)“。
我读过这里那么多(但不是全部;而且没有列表?)Xilinx AXI4L外围设备确实选择忽略WSTRB。
发布于 2015-05-21 16:14:20
你的例子不是一个狭窄的爆发,应该是有效的。
不推荐窄脉冲串的原因是它提供了次优性能。无论是窄突发和数据调整成本在地区和不推荐IMHO.然而,DRE具有最小的带宽开销,而窄突发具有最小的带宽开销。如果您的AXI端口是100 the 32位,则您有3.2GB的最大吞吐量,如果您使用16位窄突发的50%的时间,则最大吞吐量将降低到2.4GB(32位X 50 the+16位X 50 the)。此外,我也不确定AXI-Lite支持窄突发或数据调整。
你的例子有两个主要的缺陷。首先,它需要3次数据拍来传输32位,这比窄脉冲串更糟糕(我认为AXI不够聪明,无法取消WSTRB到0的最后一次突发)。其次,一次不能超过2 16位,这将挂起您的AXI基础设施的性能,如果您有大量的数据要传输。
处理此问题的最佳方法是将16位连接在一起,形成块中的32位。然后,你缓冲这32位,当你有足够的数据时,你就把它们破解。这是AXI高性能的方式来做到这一点。
但是,如果以16位的形式接收数据,那么使用AXI似乎会更好,AXI支持16位,但没有地址的概念。您可以使用Xilinx的IP核将映射到AXI-4 .或AXI都可以做到这一点。两者都这样做(事实上,AXI-DMA包括一个数据传输),但是AXI-DMA是通过AXI-Lite接口控制的,而Datamover是通过附加的AXI-流来控制的。
最后一点,Xilinx核从来不需要窄脉冲或DRE。如果您需要AXI中的DRE,这是由AXI核心完成的,而不是AXI互连。此外,这些核心是明确的来源,所以你可以检查他们如何操作容易。
https://stackoverflow.com/questions/30377615
复制相似问题