8.1.8 Trace Lengths
以下约束均针对于高速应用,如1333以上。
DQ、DM及其对应的DQS之间的延时应控制在±5ps。
任何address、control及其相应的CK/CK#之间的延时控制在±25ps。
CK/CK#必须在DQS/DQS#之后到达,两者之间的延时必须在0到1600ps之间,推荐值
为150ps到1600ps之间。
7 Series FPGAs Integrated Block for
PCI Express v2.0
参考pg054-7series-pcie.pdf。
“Minimum Device Requirements”描述了支持PCIe Core的7系列器件,同时7系列不
支持PCIe Gen3。
1. Overview
2. Product Specification 3. Designing with the Core 3.1 General Design Guidelines
3.1.1 Designing with the Transaction Layer Interface
1) 当配置为Endpoint时,当core需要发送其自己产生的TLP时将会通知用户程序
(tx_cfg_req)。用户程序可以将tx_cfg_gnt永久性的置高,以允许core以最高优先级发送TLP;用户程序也可以在完成一部分TLP发送后,提高core的优先级(tx_cfg_gnt置高至少一个周期),让core的TLP发送。用户不能无限制的推迟响应core的请求。
2) Figure 3-3:3-DW发送,无负载
Figure 3-5:3-DW发送,带负载。 Figure 3-7:back-to-back TLP发送。
Back-to-back主要用于最大化传输带宽,即在s_axis_tx_tlast后继续保持s_axis_tx_tvalid有效,并立即开始下一个TLP的传输,如下图所示。
3) Source Throttling
Figure 3-8:Source Throttling,发送数据在s_axis_tx_tdata上不连续时使用,是由用户侧发起的。
如果用户程序不能在每个时钟周期都在s_axis_tx_tdata上放置有效数据时,可以通过将
s_axis_tx_tvalid置零,使该周期数据被忽略,如下图所示。
4) Destination Throttling
Figure 3-9:Destination Throttling,core通知用户程序不能发送新的TLP,但是当前已经发生的TLP将正常传输,是由core侧发起的。core通过将s_axis_tx_tready置零通知用户程序。
如果用户使用back-to-back方式传输,s_axis_tx_tready将在s_axis_tx_tlast的下一个周期置零。
5) Discontinuing Transmission of Transaction by Source
用户可以通过置高s_axis_tx_tuser[3](tx_src_dsc)通知core终止当前传输,该信号必须和s_axis_tx_tvalid和s_axis_tx_tready同时有效。tx_src_dsc不能在一个新的包开始时有效,
其他时候出现均可。在没有TLP传输行为时,tx_src_dsc无效。
如果处于非streaming模式,即s_axis_tx_tuser[2](tx_str)为低,则该包在通过串行总线传输前被丢弃;如果处于streaming模式,即s_axis_tx_tuser[2](tx_str)为高,则该包在通过串行总线传输后,在尾部被附加EDB符号。
6) Discarding of Transaction by Destination Core会在以下三种情况下丢弃一个TLP。 ? PCIe链路停止工作。
? TLP违反了Max_Payload_Size规则。
? s_axis_tx_tuser[2](tx_str)为高,且s_axis_tx_tvalid在TLP传输过程中出现不连续
情况。
出现上述情况时,AXI4-Stream interface继续接受当前TLP剩下的内容,然后在EOF后的三个周期内置高tx_err_drop信号,并丢弃当前TLP。
7) Packet Data Poisoning on the Transmit AXI4-Stream Interface 用户程序通过下述方法标明当前TLP的负载是poisoned。 将TLP的header中的EP字段置1。
在当前包的传输过程中,置高s_axis_tx_tuser[1](tx_err_fwd)信号至少1个周期。该方式使TLP header中的EP字段在传输到PCIe的fabric时被置高。在streaming模式下(s_axis_tx_tuser[2]为高)不支持terr_fwd。
如果使用ECRC,用户程序必须置高s_axis_tx_tuser[3],并且通过cfg_err接口报告该错误。
8) Using ECRC Generation
core支持自动产生ECRC信息。用户程序将s_axis_tx_tuser[0](tx_ecrc_gen)置高即可使能ECRC。该信号在包的持续过程中产生。当使能ECRC时,在包的最后会插入一个s_axis_tx_tready无效事件,以允许core在包的最后插入一个digest,如下图所示。
9) Basic TLP Receive Operation 基本的接收流程如下。
? 如果用户程序准备好接收数据,则使能m_axis_rx_tready。
? core使能m_axis_rx_tvalid,并将第一个完整的TLP QWORD放在
m_axis_rx_tdata[63:0]上。
? core继续将数据放置在接收总线上,直到最后一个TLP QWORD。在放置最后一个
数据的同时,core给出m_axis_rx_tlast信号。如果最后的64位全部有效,则m_axis_rx_tkeep置为0xFF;如果仅s_axis_rx_tdata[31:0]有效,则置为0x0F。 ? 如果没有后续TLP则core将m_axis_rx_tvalid置低。 10) Throttling the Datapath on the Receive AXI4-Stream Interface
用户程序可以通过置低m_axis_rx_tready控制位来延时接收数据。在用户置低m_axis_rx_tready时,如果没有正在进行的传输操作,且一个新的TLP有效,则core使能m_axis_rx_tvalid信号,并且将第一个TLP QWORD放置在m_axis_rx_tdata[63:0]上。core会一直保持这个状态,直到用户使能m_axis_rx_tready信号。只要m_axis_rx_tready有效,core会继续将后续的数据放在总线上。用户程序可在传输过程中置低m_axis_rx_tready以延时传输。core不限制用户置低m_axis_rx_tready的时长。
11) Receiving Back-to-Back Transactions on the Receive Interface
与back-to-back一样,接收也可以使用back-to-back模式。在完成上一个TLP后,core会继续使能m_axis_rx_tvalid信号,并开始新的TLP。如果用户不能接收back-to-back包,可以通过前述的throttling方式延迟数据接收。
12) Packet Re-ordering on Receive Interface
Transaction ordering规则允许posted和completion TLP旁路掉Non-Posted TLP。 Core提供两种机制用于管理Non-Posted buffer。第一种是Receive Non-Posted Throttling,