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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM