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
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.
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
图1
如上图为整个PCIE的框架,在C1中PIPE-CompliantPHY部分的SERDES模块,DWC PCIe Core为synopsys提供的IP黄色部分为用户需要完成的部分,主要包括参数的配置和数据的发送和接收。
2. Architecture
图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)在发送的仲裁中优先级相同。
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向一个设备发送数据包时的仲裁规则。
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
而应答机制一样,重发机制用户了解便可。
参考链接:
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