Virtex-7 FPGA Gen3 Integrated Block for PCI Express v4.3
官方手册笔记 【持续更新中】Virtex®-7系列FPGA第三代PCI Express®集成模块内核是一款高带宽、可扩展且高可靠的串行互连基础模块解决方案,适用于全部Virtex-7 XT与HT系列FPGA器件,XC7VX485T型号除外。该PCI Express(PCIe®)集成模块方案支持1通道、2通道、4通道以及8通道端点配置,兼容第一代(2.5吉比特每秒)、第二代(5.0吉比特每秒)和第三代(8吉比特每秒)传输速率,符合3.0版本PCI Express基础规范[参考文献2]。本方案为用户侧接口提供AXI4-Stream总线接口支持。Express采用串行架构,通过时钟数据恢复(CDR)与差分信号技术,缓解了并行总线架构存在的诸多局限。相较于源同步时钟技术,采用时钟数据恢复(CDR)可减少引脚数量、实现更优异的频率扩展能力,同时简化数据同步操作。由PCI-SIG®推出、作为下一代PCI™标准的PCI Express技术,能够兼容现有PCI软件模型,具备向下兼容性。该集成模块凭借单引脚更高带宽、低开销、低延迟、更少的信号完整性问题以及时钟数据恢复架构,为高性能、高性价比的PCIe解决方案树立了行业标杆。Virtex-7第三代PCIe集成模块解决方案兼容各类行业标准应用规格,包括PCI Express卡机电规范(CEM)v3.0以及PCI工业计算机制造商联盟标准。该集成模块凭借单引脚更高带宽、低开销、低延迟、更少信号完整性问题以及时钟数据恢复架构,树立了高性能、高性价比高速外设互连标准解决方案的行业标杆。功能概述第三代PCIe内核集成模块是一款高带宽、可扩展、灵活的通用输入输出内核,适用于绝大多数Virtex-7 XT与HT系列现场可编程门阵列。该PCI Express(PCIe®)解决方案集成模块搭载的GTH收发器支持1通道、2通道、4通道及8通道工作模式,可实现2.5吉比特每秒(第一代)、5.0吉比特每秒(第二代)、8.0吉比特每秒(第三代)的线路传输速率,同时支持端点设备配置。客户用户接口符合AMBA® AXI4-Stream接口规范。该接口独立提供请求端、完成端与消息三类接口,支持灵活的数据对齐与奇偶校验,收发双向均具备数据流控能力。发送端额外支持中止正在进行的传输事务。可选的连续传输事务采用跨帧传输机制,以此提升链路带宽利用率。7 系列现场可编程门阵列第三代 PCIe 集成模块内核(速率 8.0 吉比特每秒)的主要特性如下:高性能、高灵活度、可扩展且高可靠的通用输入输出内核符合PCI Express基础规范3.0版本[参考文献2]兼容传统PCI软件模型支持PCI与PCI Express电源管理功能GTH收发器2.5吉比特每秒、5.0吉比特每秒以及8.0吉比特每秒线路速率单通道、双通道、四通道以及八通道工作模式终端配置中的多功能与单根输入输出虚拟化两个物理功能六个虚拟功能标准化用户接口(复数)符合AXI4-Stream规范独立请求端、完成端与消息接口灵活数据对齐AXI4-Stream接口奇偶校验生成与检测简易分组式协议支持全双工通信第三代PCIe集成模块可选连续传输事务,提升链路带宽利用率支持发送端数据流控及中止正在进行的传输事务支持接收端数据流控具备PCI与高速外设互联标准电源管理功能可选标签管理功能最大事务有效载荷可达1024字节端到端循环冗余校验(ECRC)高级错误报告(AER)支持最多32个向量的多向量消息信号中断以及扩展消息信号中断原子操作与事务层数据包处理提示端口描述核心提供以下接口的详细端口定义:AXI4-Stream 接口(CQ、CC、RQ、RC)其他接口(流量控制、配置管理、配置状态、接收消息、发送消息、流量控制、每功能状态、配置控制、中断控制器、扩展接口、时钟复位、PCI Express 接口、用户 TPH 接口等)AXI4-Stream 核心接口Completer Request (CQ) 接口:用于将来自链路的请求传递给用户应用。包含m_axis_cq_tdata、tuser、tlast、tkeep、tvalid、tready,以及pcie_cq_np_req(非转发请求流控)和pcie_cq_np_req_count。Completer Completion (CC) 接口:用户应用通过该接口发送完成响应。包含s_axis_cc_tdata、tuser、tlast、tkeep、tvalid、tready。Requester Request (RQ) 接口:用户应用通过该接口生成请求。包含s_axis_rq_tdata、tuser、tlast、tkeep、tvalid、tready,以及序列号、Tag 管理等信号。Requester Completion (RC) 接口:核心将通过该接口返回收到的完成数据。包含m_axis_rc_tdata、tuser、tlast、tkeep、tvalid、tready,以及用于 256 位接口的跨接(straddle)信号。核心还有四个 AXI4-Stream 接口,用于传输和接收事务。这些接口也有详细说明完成请求 (CQ) 接口Completer reQuest (CQ) 接口由用户应用程序用来传递来自链路的所有接收请求。表 2-4 定义了核心 CQ 接口中的端口。在“宽度”列中,DW 表示配置的数据总线宽度(64、128 或 256 位)。完成请求 (CQ) 接口端口方向宽度描述m_axis_cq_tdata输出数据宽度从Completer reQuest接口传输数据。当接口宽度为128位时,仅使用较低的128位;当接口宽度为64位时,仅使用较低的64位。当接口宽度配置为128位时,核心将1位[255:128]永久设置为0;当接口宽度配置为64位时,位[255:64]永久设为0。m_axis_cq_tuser输出85完成请求用户数据。该信号集包含正在传输的 TLP 的旁带信息。当 m_axis_cq_tvalid 为高时,这些信号有效。第 2-5 表,第 16 页描述了该信号集中的各个信号。m_axis_cq_tlast输出1TLAST 表示 Completer 请求数据的结束。核心会在数据包的最后一个拍上发送这个信号来表示数据包结束。当一个 TLP 在一次传输中完成时,核心会在传输的第一个拍上设置这个信号。m_axis_cq_tkeep输出数据宽度/32TKEEP 指示 Completer 请求数据。在传输过程中,如果这个总线的第 i 位被置位,这就告诉用户应用程序 m_axis_cq_tdata 总线的第 i 个双字(Dword)包含有效数据。核心从描述符的第一个双字到有效负载的最后一个双字,会连续将该位设置为 1。因此,m_axis_cq_tdata 在一个数据包的所有节拍中都会被设置为全 1,除非在最后一个节拍中,总的数据包大小不是数据总线宽度(以双字为单位)的整数倍时才会例外。这对双字对齐和地址对齐的负载传输模式都适用。当接口宽度配置为 128 位时,这个总线的位 [7:4] 会被核心永久设置为 0;当接口宽度配置为 64 位时,位 [7:2] 会被永久设置为 0。m_axis_cq_tvalid输出1完成的请求数据有效。每当核心在 m_axis_cq_tdata 总线上传输有效数据时,它都会断言这个输出。在传输数据包期间,核心会保持有效信号被断言。用户应用可以使用 m_axis_cq_tready 信号来调节数据传输速度。axis_cq_treadyp输入1完成请求数据已准备好。用户逻辑激活此信号表示核心用户应用程序已准备好接收数据。当 m_axis_cq_tvalid 和 m_axis_cq_tready 在同一周期内都被置为有效时,数据会通过接口传输。如果用户应用在 m_axis_cq_tvalid 为高时取消了 ready 信号,核心会在总线上保持数据,并保持 valid 信号有效,直到用户应用再次置位 ready 信号。pcie_cq_np_req输入1完成者请求非发布请求。这个输入由用户应用用来请求传送非发布请求。核心实现了基于信用的流控机制,用于控制非发布请求在接口上的传送,而不会阻塞发布的TLP。这个输入控制核心的内部信用计数。当pcie_cq_np_req为高电平时,每个时钟周期信用计数增加,每次非发布请求通过接口传送时信用计数减少。当信用计数为零时,核心会暂时停止向用户应用传送非发布请求。即使非发布请求传送暂停,它仍会继续传送从链路接收到的任何发布TLP。用户应用可以在每次准备接收非发布请求时,给pcie_cq_np_req提供一个单周期脉冲,或者如果不需要对非发布请求施加选择性背压,可以保持它一直为高电平。pcie_cq_np_req信号的置位和复位不需要与完成者请求接口上的数据包传输对齐。从m_axis_rc_tuser上完成信息呈现到返回的标签可重用之间,至少需要五个user_clk周期。pcie_cq_np_req_count输出6完成器未发布请求计数。这个输出提供了核心为向用户应用程序传递未发布请求而维护的当前信用计数值。只有当此信用计数非零时,核心才会通过完成器请求接口传递未发布请求。该计数器的最大限制为32。由于内部流水线延迟,核心在接收到 pcie_cq_np_req 输入的脉冲与更新 pcie_cq_np_req_count 输出之间可能会有几个周期的延迟。该计数在 user_reset 以及 user_lnk_up 取消断言时会被重置。m_axis_cq_tuser 中的边带信号描述m_axis_cq_tuser 中的边带信号描述索引名称位宽描述3:0first_be[3:0]4字节使能作用于负载的第一个双字。这个字段反映了 TLP 事务层头中 First_BE 位的设置。对于内存读取和 I/O 读取,这四个位表示要在第一个双字中读取的有效字节。对于内存写入和 I/O 写入,这些位表示负载第一个双字中的有效字节。对于带负载的原子操作和消息,这些位都设为 1。这个字段在数据包的第一个拍中有效,也就是当 sop 和 m_axis_cq_tvalid 都为高电平时。7:4last_be[3:0]4字节在最后一个双字上启用。该字段反映了 TLP 事务层头中 Last_BE 位的设置。对于内存读取,这四个位表示要在数据块的最后一个双字中读取的有效字节。对于内存写入,这些位表示有效负载结束双字中的有效字节。对于带负载的原子操作和消息,这些位都设置为 1。这个字段在数据包的第一个节拍有效,也就是当 sop 和 m_axis_cq_tvalid 都为高电平时。39:8byte_en[31:0]32用户逻辑可以选择使用这些字节使能位来确定正在传输的数据包负载中的有效字节。在传输过程中,如果总线的第 i 位被置位,就表示给用户应用程序第 i 个 m_axis_cq_tdata 总线字节包含有效负载字节。描述符字节不会置位该位。虽然字节使能可以由用户逻辑根据请求描述符中的信息(地址和长度)以及 first_be 和 last_be 信号的设置生成,但用户应用也可以选择直接使用这些信号,而不是从其他接口信号生成它们。当有效载荷大小超过两个双字(八字节)时,这个总线的单比特有效载荷总是连续的。当有效载荷大小为两个双字或更少时,单比特可能是不连续的。对于 PCI Express 规范定义的零长度内存写事务的特殊情况,当关联的一个双字有效载荷正在传输时,byte_en 位全部为 0。当接口宽度配置为 128 位时,该总线的 [31:16] 位会被核心永久置为 0;当接口宽度配置为 64 位时,[31:8] 位会被核心永久置为 0。40sop1数据包开始。核心在数据包的第一个节拍上会置位此信号,以表示数据包的开始。使用这个信号是可选的。41discontinue1当核心在TLP的最后一个节拍检测到从其内部FIFO内存读取TLP负载时发生不可校正的错误时,就会断言该信号。当核心发出此类错误信号时,用户应用必须丢弃整个TLP。当TLP没有负载时,该信号不会被断言。它仅在m_axis_cq_tlast为高电平的周期断言。当核心配置为端点时,该错误也会通过高级错误报告(AER)由核心向其连接的根复合体报告。42tph_present1这个位表示在通过接口传递的请求 TLP 中存在事务处理提示(TPH)。当 sop 和 m_axis_cq_tvalid 都为高电平时,这个位有效。44:43tph_type[1:0]2当请求 TLP 中存在 TPH 时,这两个位提供与提示相关的 PH[1:0] 字段的值。当 sop 和 m_axis_cq_tvalid 都为高电平时,这些位有效。52:45tph_st_tag[7:0]8当请求 TLP 中存在 TPH 时,这个输出会提供与提示相关的 8 位引导标签。当 sop 和 m_axis_cq_tvalid 都为高电平时,这些位是有效的。84:53parity32256位传输数据的奇校验。位 i 提供 m_axis_cq_tdata 的第 i 个字节计算出的奇校验。当接口宽度为128位时,只使用低16位;当接口宽度为64位时,只使用低8位。当接口宽度配置为128位时,核心会将 [31:16] 位永久设置为0;当接口宽度配置为64位时,核心会将 [31:8] 位永久设置为0。补全器完成 (CC) 接口完成者完成(CC)接口由用户应用程序用来传输完成者请求。你可以将所有非挂起事务处理为拆分事务。也就是说,它在发送请求完成时,可以继续在完成者请求(CQ)接口上接受新的请求。表 2-6 定义了核心 CC 接口中的端口。在宽度列中,DW 表示配置的数据总线宽度(64、128 或 256 位)。CC Interface Port Descriptions端口方向位宽描述s_axis_cc_tdata输入数据宽度完成器完成数据总线。来自用户应用到核心的完成数据。当接口宽度为128位时,只使用低128位;当接口宽度为64位时,只使用低64位。s_axis_cc_tuser输入33完成器完成用户数据。这个信号集合包含正在传输的 TLP 的边带信息。当 s_axis_cc_tvalid 为高电平时,这些信号有效。第 2-7 表,第 19 页描述了这个集合中的各个信号。s_axis_cc_tlast输入1TLAST 表示完成者完成数据。用户应用必须在数据包的最后一个周期断言这个信号,以表示数据包的结束。当 TLP 在单次传输中完成时,用户应用必须在传输的第一个周期设置这个位。s_axis_cc_tkeep输入数据位宽/32TKEEP表示Completer Completion数据。当在传输期间该总线的第i位被置位时,会向核心表示s_axis_cc_tdata总线的第i个双字包含有效数据。用户应用必须从描述符的第一个双字开始,连续将所有双字的这个位设置为1,直到有效负载的最后一个双字为止。因此,s_axis_cc_tdata在数据包的所有拍中都必须设置为全1,除非在最后一个拍中数据包的总大小不是数据总线宽度(以双字为单位)的整数倍。对于双字对齐和地址对齐的有效负载传输模式,这都是适用的。当接口宽度配置为128位时,该总线的[7:4]位不会被核心使用;当接口宽度配置为64位时,[7:2]位不会被核心使用。s_axis_cc_tvalid输入1完成器完成数据有效。每当用户应用在 s_axis_cc_tdata 总线上传输有效数据时,必须断言这个输出。在传输数据包期间,用户应用必须保持有效信号为高。核心使用 s_axis_cc_tready 信号控制数据传输的节奏。s_axis_cc_tready输出1完备器完成数据已准备好。核心激活这个信号表示它已准备好接收数据。当 s_axis_cc_tvalid 和 s_axis_cc_tready 在同一个周期被同时置高时,数据就会通过接口传输。如果核心在有效信号为高时取消就绪信号,用户应用必须保持总线上的数据,并保持有效信号为高,直到核心再