synopsys PCIE IP协议解析

synopsys PCIE IP协议解析

1.Overview

Core支持单个Pcie内核的Loopback功能,该功能主要为了做芯片验证,以及在没有远程接收器件的情况下完成自己的回环。同时,Core也支持有远程接收器件的loopback,在该中情况下,远程接收器件称为loopback slave。该种模式可以用来完成板级的debug,BER测试,系统调试。

   在做Loopback的时候需要注意将“Link up”强制写成1(根据specification该位应该是0),造成系统处于L0状态的假象,以便系统完成link的initialize。

1.1    Local Digital Loopback (PIPE/RMMI)

本地的Loopback分为3个阶段:Entering Local Loopback、In PIPE Loopback、Exiting Local Loopback

 synopsys PCIE IP协议解析

 

 1.1.1    Entering Local Loopback

Loopback将PIPE/RMMI RX 与自身的PIPE/RMMI TX相连,在该种Loopback模式下,只能运行LTSSM(link training and statues statemachine),在该状态下无法进行自身的training和进入到L0状态。进入local loopback的流程如下:

Ø  先要disable“Gen3 Control Register GEN3_RELATED_OFF.

Ø  Set the PIPE_LOOPBACK bit in the PIPE_LOOPBACK_CONTROL_OFFregister.

Ø  Set the LOOPBACK_ENABLE bit in the PORT_LINK_CTRL_OFF register.

 synopsys PCIE IP协议解析

1.1.2    In PIPE Loopback

在该Loopback 模式下,通过虚拟系统进入L0状态,可以进行link initialize。在进入了Loopback mode以后,Core会为VC0的flow control进行初始化。当该初始化完成后,application就可以通过XALI0/1/2接口发送TLP。当TLP包 loopback回来后,application 需要发送complete以响应自身发的TLP包。当TLP和DLLP被发出同时被收回时,接口将对自身启动flow control。在L0阶段,当TLP因为link 错误而没有被接收到时,TLP包将会被重新发送。TLP的发送将会像正常的link一样进行credit 检测接收,也会在L0阶段进行正常的error check和filter check。

MessageConsiderations

当接口是一个上行接口(USP),必须保证没有使能生成的error message。当有错误发生在PCIelink时,同时使能了error message的生成,那么USP将会生成一个 Error Message。有接口生成的数据包将会loopback到自身USP不期望接收message,将会生成一个附加的message。

在进入L0阶段时,DSP接口必须自动的发送Set_Slot_Power_Limitmessage该message将会被自身发送并且接收回来。但是DSP接口是不期望接收到Set_Slot_Power_Limit message的,所有该message将会被作为无效的message,同时Device Status 中的unsupported requestdetected bit将会被置位。

    在DSP接口中,Core内部生成的message 将会与application通过XALI0/1/2生成的TLP混合在一起发送。

Enumeration and BAR Setup

必须配置BARS(USP),memory/IO rangs(DSP),将memoryspace 和 bus master 置位,以便可以接收filter accepts TLP。可以将filter rules关掉,以便一些本该被滤掉的TLP能够被接收。

在Loopback 模式下,可以通过DBI 初始化BAR。

Gen3 Operation

Youmust set the Gen3 Equalization Disable bit in the “Gen3 Control Register” GEN3_RELATED_OFF, as the PHY has no role in local loopback.

1.1.3     Exiting Local Loopback

Toexit loopback mode:

■ Clear the PIPE_LOOPBACK bit in the PIPE_LOOPBACK_CONTROL_OFF register.

■ Clear the LOOPBACK_ENABLE bit in the PORT_LINK_CTRL_OFF register.

1.2   配置流程

在loopback模式下,好像没有提到角色为RC或EP称为Loopback master 和salve,所以认为loopback的时候不区分RC和EP的,但是有USP和DSP的区别,不知道怎么设置?

这个流程是自己根据手册推敲的,不知道对不对:

1)SII app_ltssm_enable = 0  disablelink training;

2)DBI 配置系统基本信息

3)SII app_ltssm_enable = 1  enable  link training;

4)DBI “Link up”强制写成1,让系统认为link training 已经完成,并且进入了LTSSM  L0阶段

5)DBI 进入loopback

Ø  先要disable“Gen3 Control Register GEN3_RELATED_OFF.

Ø  Set the PIPE_LOOPBACK bit in the PIPE_LOOPBACK_CONTROL_OFFregister.

Ø  Set the LOOPBACK_ENABLE bit in the PORT_LINK_CTRL_OFF register.

6)设置BAR(USP)如果是DSP,设置memory/IO ranges,在前期可以turn off the filter rules。

7)开始传输TLP。

Overview

 synopsys PCIE IP协议解析

 

 图1

如上图为整个PCIE的框架,在C1中PIPE-CompliantPHY部分的SERDES模块,DWC PCIe Core为synopsys提供的IP黄色部分为用户需要完成的部分,主要包括参数的配置和数据的发送和接收。

 

2.  Architecture

 synopsys PCIE IP协议解析

 

 图2

该IP包含4个重要的模块,CXPL、RADM、XADM、CDM。

Ø  Common ExpressPort Logic (CXPL) Module:

整个协议的核心部分,包含了物理层、数据链路层的全部功能、同时包含了传输层大部分的功能。其中包含了一个重要的缩写,LTSSM(link training and statues state machine),在后面的文档中将重复出现,link training的目的在于完成链路的链接。

Ø  TransmitApplication-Dependent Module (XADM):

面向数据包发送的应用模块,主要包括以下3个功能:

1)TLP(Transaction Layer Packet)arbitration

2)TLP formation

3)Flow control creditchecking

   该模块内部为直接转发的结构,除了重发的缓存区外,内部没有发送的缓存区。

Ø  ReceiveApplication-Dependent Module (RADM):

面向数据包接收的应用模块,主要包括以下3个功能:

1)Sorting/filtering of received TLPs. The filtering rules and routing areconfigurable.

2)Buffering and queuing ofthe received TLPs.

3)Routing of received TLPto the core’s receive interfaces.

Ø  Configuration-DependentModule (CDM):

功能:

1)Standard PCI Express configuration space

2)Core-specific register space (Port Logic Registers)

相关的模块:

Ø  Power ManagementController (PMC)

Ø  Local BusController (LBC) and Data Bus Interface (DBI)

The LBC module providesa mechanism for a link partner (in EP mode only) or a local CPU (through the DBI) to access:

1)Internal registers (in the CDM)

2)External applicationregisters connected externally to the ELBI

Ø  MessageGeneration Module (MSG_GEN)

Ø  Hot Plug ControlModule (HOT PLUG)

内部各个模块间的关系作为用户,不需要与CXPL直接做数据交互需要关心的内容主要是与RADM、LBC、CDM、XADM、MSG_GEN、PMC的数据交换,以及与之交互的一大堆的接口。下面从图中的上往下介绍各个接口的作用和意义。

■“Receive Bypass Interface (RBYP)” on page 233

■“Receive Request Interface (TRGT1)” on page 234

■“Data Bus Interface (DBI)” on page 240

■ “External Local Bus Interface (ELBI)” on page 238

■ “Message Signaled Interrupt (MSI) Interface”on page 242

■ “MSI-X Interface” on page 243

■ “Transmit Interfaces (XALI0/1/2)” on page 22

■ “Vendor Message Interface (VMI)” on page 247

■ “System Information Interface (SII)” on page 248

作为用户,认为需要知道以上各个接口的作用和用法,并且知道每个接口需要在整个传输中扮演的角色在IP生成后,也许部分接口用户不需要知道,但是在C1 bring up阶段,每个接口的具体作用应该都是必须要明白的。

3.Core operation

3.1   Initialization

1)先disable link training

2)通过DBI(data bus interface)配置core的stickyregisters,需要配置什么目前不知道?

3)Enable link training

4)等待link完成。

5)root Complex枚举Downstream Device(什么是Downstreamdevice????)

Ø  读取 Downstream device的配置空间

Ø  配置device的capabilites(具体配置什么?)

Ø  配置switch ports  的base和limit寄存器,以反映devices enumerated downstream的BAR(Base Address Register)的范围。

Ø  配置endpoint的BAR。

(该部分是用户完成,还是IP自动完成?)

6)使能BME、MSE、ISE。

7)开始传输数据。

3.2  Link Establishment

LTSSM是IP core根据PCI Express Base 3.1标准完成的,(是否说linkestablishment不用用户关心???,IP已经搞定了),在link建立的阶段,用户需要关注的只有3问题:

Ø  “How to TieOff Unused Lanes” on page 1145.在系统中有没有用到的lane,需要进行tie off

Ø  “LaneReversal and Broken Lanes” on page 1149.对lanes进行颠倒或者翻转调整,主要是为了解决物理层上的连接错误问题。

Ø  Runtime Link Width Adjustment Through Detect。在传输过程中调整link路的位宽。

问题都属于pcie的高级功能,在bring up可以不予考虑,只有在系统跑起来后需要进一步考虑这些细致的问题。

3.3  Transmit TLP(Tansaction Layer Packet)Processing

主要涉及3个问题:

Ø  “Transmit TLPArbitration”   仲裁

Ø  “ACK/NAKScheduling”

Ø  “TransmitReplay”

3.3.1    Transmit TLP Arbitration

阅读本章节可以参考http://blog.sina.com.cn/s/blog_6472c4cc01018893.html相关的内容

需要注意的:

Ø  Core 不检测TLP是否有错误

Ø  Core不检测TLP是否超出有效负载的最大值

TLP(Tansaction Layer Packet)和DLLP(Data Link Layer Packet)在发送的仲裁中优先级相同。

 synopsys PCIE IP协议解析

 

 Selecting Transmit ClientArbitration Scheme

所有的发送端的接口XALI0/1/2(或者AHB/AXI master 或者slave)都遵循3中仲裁的方式,

(注:其实PCIe规定的内部仲裁规则作为用户,只有了解仲裁规则即可,在core内部已经完成,用作FPGA系统,在PCIe的总线体系中,一般扮演endpoint的角色较多作为RC,其组成的拓扑结构也会相对简单。)

1)VC(virtual channal) based,virtual channel的概念来自switch中,规定的是多个EP向一个设备发送数据包时的仲裁规则。

 synopsys PCIE IP协议解析

 

 2)round robin(RR)可以翻译为轮叫调度

3)strictpriority()

For moredetails, see “VC-BasedArbitration” on page1173.

Effects of Flow Control Credits On Transmit Client Arbitration(重要)

在允许远程的设备发送一个TLP(transation layer package )之前,core需要检测远程设备的特殊传输方式(posted, non-posted,completion)的flow control credit 是有效的。而TLPs是否通过credit check 取决于所提供的仲裁方案,内部生产的报文(completions)和消息(messages)同样需要经过仲裁,即使是最高优先级也不例外。

(注:其中posted和non-posted的解释如下,PCI总线规定了两类数据传送方式,分别是Posted和Non-Posted数据传送方式。其中使用Posted数据传送方式的总线事务也被称为Posted总线事务;而使用Non-Posted数据传送方式的总线事务也被称为Non-Posted总线事务。

其中Posted总线事务指PCI主设备向PCI目标设备进行数据传递时,当数据到达PCI桥后,即由PCI桥接管来自上游总线的总线事务,并将其转发到下游总线。采用这种数据传送方式,在数据还没有到达最终的目的地之前,PCI总线就可以结束当前总线事务,从而在一定程度上解决了PCI总线的拥塞。

而Non-Posted总线事务是指PCI主设备向PCI目标设备进行数据传递时,数据必须到达最终目的地之后,才能结束当前总线事务的一种数据传递方式。)

比如当使用RR仲裁方式,当posted数据传输(通过XALI1接口完成)紧跟在completion(通过XALI0进行)传输的后面此时如果credit通过,则posted传输将先于completion进行传输,但是如果posted的credit是无效的,那么completion可以绕过posted通过XALI0,发送出去,但是XALI1接口将会被posted阻塞之后的XALI1将无法通过任何的no-posted、posted、CPL(completion)的TLP(tansaction  layer packet)。也就是XALI1接口被完全阻塞了。而作为用户,需要合理的利用这3个数据接口,以避免阻塞。

当应用单一的接口发送多种类型的信息(posted、non-posted),但是当前的请求(如posted)如果因为缺失credit而导致阻塞,那么当前接口将会同时阻塞类型的信息传输(比如no-posted),即使其可以通过credit。为了避免这种情况,应用应该保证不同的接口发送不同类型的请求(如:XALI0 for postedrequests, XALI1 for non-posted requests, and XALI2 for completions)另外的方法就是保证每次只生成可以通过FC credit的request,具体的实现方式就是每次通过检查core输出的FC credit的标准位xadm_*_cdts。

当使用xadm_*_cdts检查credit是,应用程序需要考虑以下问题,core在生成一个message或者completion TLP 的同时,应用程序刚好需要生成一个request并正在检查xadm_*_cdts。

see “FlowControl” on page 139.

3.3.2  ACK/NAK Scheduling

应答机制由core内部完成,用户了解便可,涉及到的控制寄存器一般情况也不许要用户进行修改。

3.3.3  Transmit Replay

而应答机制一样,重发机制用户了解便可。

 synopsys PCIE IP协议解析

 

 

 

参考链接:

http://t.zoukankan.com/chengqi521-p-8777908.html

http://blog.sina.com.cn/s/blog_6472c4cc01018893.html

https://blog.csdn.net/yijingjijng/article/details/48028809

https://blog.csdn.net/yijingjijng/article/details/48029149

 

上一篇:prometheus数据上报方式-pushgateway


下一篇:PCIe扫盲——中断机制介绍(MSI)