AXI4(Lite)窄脉冲与未对准突发澄清/兼容性

时间:2015-05-21 15:06:48

标签: vhdl hdl

我目前正在编写AXI4主机,它也应该支持AXI4 Lite(AXI4L)。

我的AXI4主机正在从16位接口接收数据。这是在Xilinx Spartan 6 FPGA上,我计划使用EDK AXI4互连IP,其最小WDATA宽度为32位。

起初我想使用窄突发,即AWSIZE = x“01”(传输中的2个字节)。但是,我发现Xilinx的“AXI Reference Guide UG761状态”支持了狭窄的爆发,但不建议这样做。“应该支持未对齐的交易。

这让我思考。假设我开始一个未对齐的爆发:

  • AWLEN = x“01”(2拍)
  • AWSIZE = x“02”(传输中的4个字节“)

并执行以下操作:

AX (32-bit word #0: send hi16)
XB (32-bit word #1: send lo16)

其中A,B是我的16位字,以未对齐(2字节对齐)地址开始。 X表示WSTRB对指示的16位置为无效。

  • 这是支持还是属于“narrow burst”类别,即使通过AWSIZE = x“02”(传输中的4个字节)而不是AWSIZE = x“01”(传输中的2个字节)?

现在,如果这只是针对AXI4,我可能不会太在意这个用例,因为AXI4外设需要使用WSTRB信号。但是,AXI参考指南UG761规定“[AXI4L] Slaves接口可以选择忽略WSTRB(假设所有字节都有效)。”

我读了here很多(但不是全部;而且没有列表?)Xilinx AXI4L外设确实选择忽略WSTRB。

  • 这是否意味着我基本上禁止进行窄突发(“不推荐”)以及未对齐的突发(“WSTRB可以被忽略”)或者是否有一种简单的方法来卸载我的一些实现工作主机进入互连,保证访问AXI4L外设时的正常系统行为?

1 个答案:

答案 0 :(得分:2)

你的例子不是一个狭窄的爆发,应该有效。

不建议使用窄脉冲的原因是它会产生次优性能。窄突发和数据实现都在区域内成本,并且不推荐恕我直言。然而,DRE具有最小的带宽成本,而窄突发则具有。如果您的AXI端口是100MHz 32位,那么如果在50%的时间内使用16位的窄突发,则最大吞吐量为3.2GB,而最大吞吐量则减少到2.4GB(32位X 50MHz + 16位X 50Mhz)。此外,我不确定AXI-Lite是否支持窄突发或数据实现。

你的例子有两个主要缺陷。首先,它需要3个数据节拍才能传输32位,这比窄突发更糟糕(我不认为AXI足够聪明,可以取消WSTRB为0的最后一次突发)。其次,一次不能突发超过2个16位,如果要传输大量数据,这将会影响AXI基础设施的性能。

处理此问题的最佳方法是将16位连接在一起,在块中形成32位。然后你缓冲这32位并在你有足够的时候将它们爆发。这是AXI高性能的方法。

但是,如果您接收16位数据,那么使用AXI-Stream似乎会更好,它支持16位但没有地址概念。您可以使用Xilinx的IP内核将AXI-Stream映射到AXI-4。 AXI-Datamover或AXI-DMA都可以做到这一点。两者都做同样的事实(实际上,AXI-DMA包括数据转换器),但AXI-DMA通过AXI-Lite接口控制,而Datamover则通过附加AXI-Streams控制。

最后需要注意的是,Xilinx内核从不需要窄突发或DRE。如果你需要AXI-DMA中的DRE,它是由AXI-DMA内核而不是AXI互连完成的。此外,这些内核是清晰的源代码,因此您可以轻松查看它们的运行方式。