Xilinx PCIe Gen3.0 For Uscale Plus之(二)Completer Interface

Xilinx PCIe 3.0随笔

  • Completer Interface ---64/128/256-Bit
    • 完成请求接口(CQ)操作
    • 完成请求接口(CQ)描述符格式
      • 完成请求接口(CQ)描述符字段含义
    • 完成接口存储器写操作
  • (未完)

        本节描述了用于64/128/256位接口的内核用户界面的操作

Completer Interface —64/128/256-Bit

         完成接口将从PCIe链路接收到的事务(内存,I / O读/写,消息,原子操作)映射为基于AXI4-Stream协议的Completer request(CQ)接口上的事务。完成接口由两个单独的接口组成,分别用于两个方向上的数据传输。每个接口均基于AXI4-Stream协议,并且其宽度可以配置为64、128或256位。 Completer request(CQ)接口用于将请求(带有任何关联的有效负载数据)传输到用户应用程序,而Completer Completion(CC)接口用于从用户应用程序传输完成数据(针对未发布的请求)以在链路上进行转发。这两个接口独立运行,就是说,IP核可以在接收到先前请求的完成包的同时,通过CQ接口传输新请求。

完成请求接口(CQ)操作

         下图说明了IP核的完成请求接口相关的信号。 IP核在此接口上将每个TLP作为AXI4-Stream数据包提供。 数据包以128位描述符开头,对于带有有效负载的TLP,其后为数据。
*

Xilinx PCIe Gen3.0 For Uscale Plus之(二)Completer Interface_第1张图片

          CQ接口支持两种不同的数据对齐方式。 在双字对齐模式下,有效数据的第一个字节出现在通道    n =(16 + A mod 4)mod w中,其中A是要传输的数据块的字节级起始地址,w是宽度的宽度,在地址对齐模式下,数据始终在描述符结束后以新的节拍开始,并且其第一个有效字节在通道n = A mod w上,其中w是接口的宽度,以字节为单位。 对于内存,I / O和原子操作请求,地址A是请求中包含的地址。 对于消息,为了确定其有效负载的对齐,地址始终为0。

完成请求接口(CQ)描述符格式

        IP核将通过CQ接口从链路接收的每个请求TLP作为独立的AXI4-Stream数据包进行传输。每个数据包均以描述符开头,并且在描述符之后可以具有有效载荷数据。 描述符始终为16个字节长,并在请求数据包的前16个字节中发送。在64位接口的前两个拍子期间以及在128位或256位接口的第一个拍子期间传输描述符。下图说明了用于不同请求类型的描述符的格式。

*

Xilinx PCIe Gen3.0 For Uscale Plus之(二)Completer Interface_第2张图片
图1. 内存,I / O和原子操作请求的CQ描述符格式 Xilinx PCIe Gen3.0 For Uscale Plus之(二)Completer Interface_第3张图片
图2. 供应商定义的消息的CQ描述符格式
Xilinx PCIe Gen3.0 For Uscale Plus之(二)Completer Interface_第4张图片
图3. ATS消息的CQ描述符格式
Xilinx PCIe Gen3.0 For Uscale Plus之(二)Completer Interface_第5张图片
图4. 其余所有消息的CQ描述符格式

完成请求接口(CQ)描述符字段含义

地址地段 域名 含义
1:0 地址类型  此字段仅针对内存事务和原子操作定义。 它包含从请求的TL标头中提取的AT位。
•00:请求中的地址未翻译
•01:交易是翻译请求
•10:请求中的地址是翻译后的地址
•11:保留
63:2 地址 该字段适用于内存,I / O和原子请求。 它提供来自TLP标头的地址,这是请求引用的第一个Dword的地址。 来自m_axis_cq_tuser的First_BE位必须用于确定字节级地址。 当事务指向一个32位地址时,此字段的位[63:32]为0。
74:64 数据量 这11位指示要读取或写入的块的大小(以Dwords为单位)(对于消息,为消息有效负载的大小)。 其范围是0-256个双字。 对于I / O访问,Dword计数始终为1。对于零长度内存读/写请求,Dword计数为1,且First_BE位设置为全0。
78:75 TLP类型 标识事务处理类型。见下表
95:80 请求ID号 与请求关联的PCIe请求ID。 通过对RID的传统解释,这16位被分为8位总线号[95:88],5位设备号[87:83]和3位功能号[82:80]。 启用ARI后,地址位[95:88]携带8位总线号,[87:80]提供功能号。当请求是Non-Posted事务时,用户完成程序应用程序必须存储该字段,并将其与完成数据一起提供给IP核。
103:96 Tag号 与请求关联的PCIe标签。 当请求是非Non-Posted务时,用户逻辑必须存储该字段并将其与完成数据一起提供给IP核。 对于内存写入和消息,可以忽略此字段。
111:104 此字段仅针对内存,I / O和原子请求定义。 它提供了由BAR检查确定的请求所针对的功能编号。 使用ARI时,此字段的所有8位均有效。 否则,只有位[106:104]有效。
114:112 BarID 它为请求中的地址提供匹配的BAR编号。
120:115 Bar区域 这个6位字段仅针对内存,I / O和原子求定义,它提供与请求相匹配的BAR的区域设置。 该信息对于确定用于寻址其存储器或I / O空间的位很有用。 例如,值12表示匹配BAR的区域为4K,因此用户应用程序可以忽略地址的位[63:12]。对于VF BAR,此输出上提供的值基于内存 BAR覆盖的单个VF占用的空间。
123:121 TC
126:124 Attributes

*

请求类型 Xilinx PCIe Gen3.0 For Uscale Plus之(二)Completer Interface_第6张图片

完成接口存储器写操作

        下面的时序图说明了当接口宽度分别配置为64位,128位和256位时,通过Completer request(CQ)接口从链路接收的存储器写入TLP的Dword对齐传输。出于说明目的,对于整数m> 0,假定要写入内存的数据块的起始Dword地址为(m×32 +1),其大小为n个Dword,其中 n = k × 32 + 29, k > 0.。在Dword对齐方式和地址对齐方式下,传输都从16个描述符字节开始,紧接着是有效载荷字节。 m_axis_cq_tvalid信号在数据包的持续时间内保持有效,通过取消设置m_axis_cq_tready可以来延长节拍。AXI4-Stream接口信号m_axis_cq_tkeep(每个Dword位置一个)指示包中的有效Dword,包括描述符以及在描述符和有效载荷之间插入的任何空字节。即,从描述符的第一个Dword到有效载荷的最后一个Dword连续将teep位设置为1。在数据包传输过程中,当数据包未填充接口的整个宽度时,tkeep位只能在数据包的最后一个拍子中为0。 m_axis_cq_tlast信号始终在数据包的最后一个拍中声明。
        CQ接口还包括m_axis_cq_tuser总线中的第一个字节启用位和最后一个启用位。这些指示信号在数据包的第一个节拍中有效,并指定有效载荷的第一个和最后一个Dword的有效字节。m_axi_cq_tuser总线还提供了一些参考信号,可用于简化与用户界面关联的逻辑或支持其他功能。当信号包的描述符出现在总线上时,sop信号在每个数据包的第一个节拍中被声明。字节使能输出byte_en [31:0](每个字节通道一个)指示有效负载中的有效字节。仅当有效载荷字节出现在相应通道中时才会声明对应的byte_en的位(即,对于描述符或在描述符和有效载荷之间的填充字节不声明)。声明的字节使能位从有效负载的开始始终是连续的,除非有效负载大小为两个Dword或更小。对于一字写和两字写的情况,字节使能可以是不连续的。另一个特殊情况是零长度存储器写操作,即IP核传送一个所有byte_en位都设置为0的单字有效载荷时。因此,在所有情况下,用户逻辑都可以直接使用byte_en信号来使能写操作。将相关的字节存入内存。在Dword对齐模式下,基于有效载荷的第一个有效字节的地址,描述符的末尾与第一个有效载荷字节之间可以有零个,一个,两个或三个字节的间隙。有效负载中第一个有效字节的实际位置可以从m_axis_cq_tuser总线中的first_be [3:0]或byte_en [31:0]确定。当接收到的TLP中存在事务处理提示时,IP核会在m_axis_cq_tuser总线内的信号上传输与提示关联的参数(TPH转向标记和转向标记类型)。

(未完)

你可能感兴趣的:(PCIe,Xilinx,FPGA)