赞
踩
基于64位事务层接口的AXI4-Stream接口设计主要涉及信号定义、数据传输规则以及接口行为等方面。
数据在AXI4-Stream接口上以Big-Endian顺序进行传输和接收,这是遵循PCI Express基本规范[Ref 2]的要求。Big-Endian是一种数据表示方式,其中高位字节存储在内存的低地址处,低位字节存储在内存的高地址处。
下图展示了一个典型的32位可寻址的存储器写请求的TLP。
TLP(事务层数据包)是PCI Express协议中用于在事务层上传输数据的基本单元,包括多个部分,如TLP头、数据有效负载(Data Payload)和可选的TLP摘要(TLP Digest)。
TLP头包含了关于TLP的重要信息,如总线事务类型、路由信息等。
数据有效负载是可选的,其长度可变,用于传输实际的数据。
TLP摘要也是可选的,用于提供数据的完整性检查。
AXI4-Stream接口是一种用于高速数据传输的接口,它支持连续的数据流传输。在使用AXI4-Stream接口传输TLP时,数据包会在整个64位数据路径上进行排列。图3-2展示了AXI4-Stream接口上的相同示例数据包。数据包的字节0出现在第一个QWORD的s_axis_tx_tdata[31:24](发送)或m_axis_rx_tdata[31:24](接收)上,字节1出现在s_axis_tx_tdata[23:16]或m_axis_rx_tdata[23:16]上。数据包的字节8随后出现在第二个QWORD的s_axis_tx_tdata[31:24]或m_axis_rx_tdata[31:24]上。
注意:用户应用程序负责确保其数据包的有效性。内核不会检查数据包是否正确形成,这可能导致传输格式错误的TLP。给定TLP的确切字段会根据传输的数据包类型而有所不同。
7 Series FPGAs Integrated Block for PCI Express IP核会自动传输以下类型的数据包:
注意:某些无法识别的请求,例如意外的完成响应,只能由用户应用程序检测,并由其负责生成适当的响应。
用户应用程序负责构建以下类型的出站数据包:
当配置为端点时,IP核通过断言tx_cfg_req(1位)通知用户应用程序有待处理的内部生成的TLPs需要仲裁传输数据路径。用户应用程序可以通过永久断言tx_cfg_gnt(1位)来优先处理IP核生成的TLPs,而不考虑tx_cfg_req的状态。这样做会阻止在用户交易未完成时传输用户应用程序生成的TLPs。
另一种选择是,用户应用程序可以在用户交易完成之前通过反断言tx_cfg_gnt(0位)来为生成的TLP保留优先级,超过核心生成的TLPs。用户交易完成后,用户应用程序可以断言tx_cfg_gnt(1位)至少一个时钟周期,以允许待处理的核心生成的TLP进行传输。用户应用程序不得无限期地延迟断言tx_cfg_gnt,因为这可能会导致请求者发生完成超时。
IP核不会对Base/Limit寄存器(仅适用于Root Port)进行任何过滤。确定是否需要过滤的责任在于用户。这些寄存器可以通过配置接口从Type 1配置头空间中读取。
通过遵循这些指导原则,用户应用程序可以有效地与PCI Express集成块交互,管理出站数据包的传输,并处理与配置空间相关的请求。
为了发送一个TLP(事务层数据包),用户应用必须在传输事务接口上执行以下事件序列:
1 用户应用逻辑断言s_axis_tx_tvalid信号,并在s_axis_tx_tdata[63:0]上提供TLP的第一个QWORD(四字,即64位)。如果IP核正在断言s_axis_tx_tready信号,则这个QWORD会立即被接受;否则,用户应用必须保持呈现这个QWORD,直到IP核断言s_axis_tx_tready。
2 用户应用继续断言s_axis_tx_tvalid,并在随后的时钟周期(IP核在这些时钟周期中都会断言s_axis_tx_tready)上,在s_axis_tx_tdata[63:0]上呈现TLP的其余QWORDs。
3 用户应用在最后一个QWORD的数据上同时断言s_axis_tx_tvalid和s_axis_tx_tlast。如果最后一个传输的所有八个数据字节都是有效的,它们会被呈现在s_axis_tx_tdata[63:0]上,并且s_axis_tx_tkeep会被设置为0xFF(表示所有64位都有效);否则,仅呈现剩余的四个数据字节在s_axis_tx_tdata[31:0]上,并将s_axis_tx_tkeep设置为0x0F(表示只有低32位有效)。
4 在下一个时钟周期,用户应用取消断言s_axis_tx_tvalid信号,以表示在s_axis_tx_tdata[63:0]上的有效传输已经结束。
这些步骤确保TLP的正确传输,并通过s_axis_tx_tvalid、s_axis_tx_tready、s_axis_tx_tdata、s_axis_tx_tlast和s_axis_tx_tkeep等信号与PCI Express接口IP核进行通信。
图3-4展示了一个没有数据载荷的4-DW(双字,即128位)TLP(事务层数据包)头部,64位可寻址的内存读取请求。当用户应用断言s_axis_tx_tlast时,它也在s_axis_tx_tkeep上放置了一个值0xFF,通知IP核s_axis_tx_tdta[63:0]包含有效数据(只有TLP的头部被传输,而没有实际的数据部分)。
图3-6展示了一个包含数据载荷的4个DWORD(双字)TLP(事务层数据包)头部,64位可寻址的内存写请求。当用户应用程序断言s_axis_tx_tlast
时,它还在s_axis_tx_tkeep
上放置了一个0x0F
的值,通知IP核只有s_axis_tx_tdata[31:0]
包含有效数据。
在这个例子中,s_axis_tx_tdata
仍然是一个64位的信号线,但s_axis_tx_tkeep
现在被用来指示只有s_axis_tx_tdata
的低32位(即s_axis_tx_tdata[31:0]
)是有效的。0x0F
的十六进制值对应于二进制的00001111
,其中只有低4位是1,表示s_axis_tx_tdata
中的前4个字节(即32位)是有效的。
由于这是一个64位地址的内存写请求,但数据载荷只有32位。IP核在接收到这个TLP时,会根据s_axis_tx_tkeep
的值来识别哪些数据是有效的,并忽略s_axis_tx_tdata
中的高32位。
用户应用程序可以在传输AXI4-Stream接口上连续呈现TLPs(事务层数据包),以最大化带宽利用率。图3-7展示了在传输接口上连续呈现的TLPs。用户应用程序保持s_axis_tx_tvalid
的断言,并在为前一个TLP断言s_axis_tx_tlast
后的下一个时钟周期呈现一个新的TLP。
在AXI4-Stream接口中,s_axis_tx_tvalid
信号用于指示s_axis_tx_tdata
上的数据是否有效。当用户应用程序想要发送数据时,它会断言s_axis_tx_tvalid
,并将数据放置在s_axis_tx_tdata
上。为了最大化带宽利用率,用户应用程序可以在前一个TLP传输完成后立即开始传输下一个TLP,这就是所谓的“连续TLPs”或“背靠背TLPs”。
在图3-7中,当第一个TLP的s_axis_tx_tlast
被断言后,表示该TLP的传输已经结束。然而,用户应用程序并不需要在此时停止传输,而是可以在下一个时钟周期继续保持s_axis_tx_tvalid
的断言,并呈现下一个TLP的数据。这样做的好处是可以减少接口上的空闲时间,从而更有效地利用带宽。
源节流在数据传输路径中是一个重要的机制,它允许在用户应用没有数据可供传输时减少数据传输的速率或暂时停止数据传输。
源节流机制的工作流程:
当用户应用没有数据可供传输时,它会在相应的时钟周期内将s_axis_tx_tvalid
置为低。AXI4-Stream接口检测到s_axis_tx_tvalid
为低后,会忽略s_axis_tx_tdata[63:0]
上的数据,不进行任何处理或传输。当用户应用准备好传输新的数据时,它会再次将s_axis_tx_tvalid
置为高,并将数据放在s_axis_tx_tdata[63:0]
上。AXI4-Stream接口检测到s_axis_tx_tvalid
为高后,会开始接收和处理s_axis_tx_tdata[63:0]
上的数据。
图3-8展示了源节流机制的工作原理。在该图中,可以看到s_axis_tx_tvalid
信号在何时被置为高或低,以及这如何影响AXI4-Stream接口对s_axis_tx_tdata[63:0]
上数据的处理。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。