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