高速介面自用筆記:GT基礎(二)

NoNounknow發表於2024-07-18

FPGA中相同BANK的電壓需要一致,以實現高效的效能。

本章是對GT基礎(一)的補充。

大量搬運:公眾號-數字站:

https://mp.weixin.qq.com/s/Z8ti7DIMdWEh8ogM0SQU4g

https://mp.weixin.qq.com/s/0YoA9jhBOheZFwtTDJ75aQ

老哥寫的很好,推薦都去看。

小知識點:

1.透過原語BUFDGE得到的時鐘,可以去往QPLL,QPLL以及作為使用者時鐘(提供給PCS);

2.PMA的時鐘可以來源於QPLL和CPLL,高效能情況下選擇QPLL(一般當線速率大於6.6Gb/s時,必須使用QPLL,否則可以選擇使用QPLL或者CPLL);

3.生成IP時,一般將QPLL的程式碼放到IP外部,那麼使用者就可以在呼叫多通道高速收發器時,直接把剩餘的IP多次例化,共用一個QPLL;

4.注意7系列FPGA的每個差分時鐘最多隻能驅動12個高速收發器,且只能驅動bank內部高速收發器或者南北相鄰bank內部的高速收發器;

5.GT時鐘獲取步驟:

1.透過原語IBUFD_GTE從引腳上取得參考時鐘;

這裡的參考時鐘可以來源於不同引腳;

2.輸入到QPLL,CPLL,或直接提供;

QPLL和CPLL也可以透過南北橋來取得其他QUAD的參考時鐘;

3.取得的參考時鐘去向:

1.TXOUTCLK,但其實TXOUTCLK也可以來源於很多其他渠道;

TXOUTCLK會提供給BUFG從而驅動其他單元;

2.供給給PMA;

效能:

GTX 收發器支援500 Mb/s 至12.5 Gb/s
的線路速率,GTH 收發器支援 13.1 Gb/s 的線路速率。GTX/GTH 收發器具有高度可配置性,並與 FPGA 的可程式設計邏輯資源緊密整合。

與 Virtex-6 FPGA 中的上一代收發器相比,7 系列 FPGA 中的 GTX/GTH 收發器具有以下新功能或增強功能:
• 2 位元組和 4 位元組內部資料通路可支援不同的線路速率要求。
• 具有最佳抖動效能的 QuadLC 振盪器 PLL (QPLL) 和基於通道的環形振盪器PLL。
• 高能效、自適應線性均衡器模式,稱為低功耗模式(LPM, low-power mode),以及高效能、自適應決策反饋均衡(DFE, decision feedback equalization)模式,用於補償通道中的高頻損耗,同時提供最大的靈活性。
• RX 餘量分析功能可提供非破壞性的二維後均衡眼圖掃描。 建議初次使用的使用者閱讀 High-Speed Serial I/O Made Simple [Ref 1],其中討論了高速序列收發器技術及其應用。

CORE GeneratorTM工具包含一個嚮導,用於自動配置 GTX/GTH 收發器,以支援不同協議的配置或執行自定義配置。GTX/GTH 收發器的資料速率範圍和功能允許物理層支援各種協議。
圖 1-1(第 24 頁)顯示了 Kintex TM-7 器件 (XC7K325T) 中 GTX 收發器的佈局示例。該裝置有 16 個 GTX 收發器。

四個 GTXE2_CHANNEL 原語和一個 GTXE2_COMMON 原語組成的 Quad。

拓撲結構,PCS和PMA

一點知識

搬運自:https://mp.weixin.qq.com/s/0YoA9jhBOheZFwtTDJ75aQ

TX

FPGA TX Interface

GTX傳送通道的使用者介面,使用者資料透過該介面的訊號輸入。使用者輸入的資料TXDATA與使用者傳送時鐘TXUSRCLK2上升沿對齊,資料位寬可以設定為2、4、8位元組,常用資料位寬4位元組,即32位。

8B/10B Encoder

對待傳送的資料進行8B/10B編碼。

在配置IP時,可以選擇傳送/接收資料的編碼/解碼方式,如果把使用者資料位寬設為32位,採用8B/10B編碼,則編碼後的資料位寬為40位,如下圖所示。

這個資料的位寬大小其實與線速率和編碼方式均有關,

如下表所示,當使能8B/10B編碼時,傳送資料位寬TX_DATA_WIDTH只能設定為20、40、80。

注意表中TX_DATA_WIDTH表示一個使用者資料經過8B10B編碼後的資料位寬,而FPGA Interface Width表示使用者介面每次傳輸的資料位寬,該資料與後文的TXUSRCLK2對齊。

Internal Data Width表示PCS內部並行資料一個時鐘傳輸的資料位寬,該資料與後文的TXUSRCLK對齊。

當TX_DATA_WIDTH與Internal Data Width相等時,表示PCS內部傳輸一個資料只需要一個時鐘,

此時TXUSRCLK的頻率與TXUSRCLK2頻率會相等。

如果TX_DATA_WIDTH是Internal Data Width的二倍,則PCS內部需要兩個時鐘才能傳輸一個經過8B10B編碼後的使用者資料,

那麼TXUSRCLK的頻率是TXUSRCLK2頻率的2倍。

可以在後文圖12的時鐘關係中進行驗證。

PCS內部每次可以傳輸2位元組或者4位元組資料,透過TX_IN_DATAWIDTH引數進行設定,TX_IN_DATAWI DTH為0時每次傳輸2位元組資料,為1時每次傳輸4位元組資料,

當線速率大於6.6Gb/S時,每次必須傳輸4位元組資料。

因此由下表可知,當線速率為10Gb/S,使能8B/10B時,使用者資料位寬只能為32或者64位,並且編碼後的資料位寬均為40位。

圖5

當不使能8B/10B編碼且線速率小於6.6Gb/S時,使用者輸入的資料位寬可以是16、20、32、40、64、80。

此時如果TXDATA為16/32/64,TX_DATA_WIDTH為20/40/80,

TXCHARDISPMODE和TXCHARDISPVAL埠用於將TXDATA埠從16位擴充套件到20位、32位擴充套件到40位或64位擴充套件到80位,

如下圖所示。透過下圖可知GTX先傳送低位元組資料,後傳送高位元組資料。

在多數情況下都是要使用8B/10B編碼或者64B/66B編碼的,此時TXCHARDISPMODE和TXCHARDISPVAL可以用來控制極性,與TMDS編碼類似,直流均衡,硬核模組可以自己實現,使用者也可以透過這兩個訊號自己實現。

採用8B/10B編碼,每傳輸10bit資料,需要傳輸2bit無效資料。資料傳輸效率只有百分之八十,為了提高資料傳輸速率,同時保留編碼方案的優勢,可以使用64B/66B編碼。

TX Gearbox變速箱

支援使用64B/66B編碼,由圖3可知,8B/10B Encoder和TX Gearbox的輸入、輸出都是連線的同一個埠。

因此在實際使用時,

如果不使用編碼,資料直接到達資料選擇器輸入端,然後輸出。如果使用8B/10B編碼,則會經過8B/10B Encoder到達資料選擇器輸入端。如果使用64B/66B則經TX Gearbox到達資料選擇器輸入埠。在使用64B66B編碼時詳細講解該部分內容。

使用者的並行資料實際是64bit, PCS中會插入兩bit資料讓他變成66bit.(做64b/66b編碼),【補充:也可能是128/130,8/10,可以參考PCIE那邊的筆記】

但是PCS parallel clock 和PMA parallel clock之間的互動,它並不會一次將66位取走,比如他一次取走32位,兩次才會取走64位。多餘的兩位就取不走了,怎麼辦?
每一次多兩位,等到16個週期之後,就滿32位了,此時TX Sync Gearbox快取了32位了,就會告訴使用者端,讓他停一拍,此時TX Sync Gearbox就把積累的32位傳遞給PMA parallel clock這邊了。

TX PIPE Control

全稱為Physical Interface for PCI Express,PCIe物理層介面。如果使能PCIE介面,則該通道是PCIE的資料通道,否則將不會被使用。

Pattern Generator

偽隨機序列(Pseudo-random bit sequences,PRBS),頻譜接近白噪聲,一般用於高速序列通訊通道傳輸的誤位元速率測試。相關的設定埠如下所示,原理與M序列類似。

用於不同應用場景的測試選擇

手冊中顯示提供了四種PRBS波形,分別是PRBS-7、PRBS-15、PRBS-23、PRBS-31,其中PRBS-7的表示式為x^7+x^6+1,輸出資料每2^7-1個時鐘迴圈一次,實現方式也很簡單,幾個移位暫存器加異或門就行了。

TX Phase Interpolator Controller

TX相位插值器控制器模組,允許使用PCS中的TX相位插值器PPM(百萬分之一)控制器模組來控制TX PMA中的TX PI,以最佳化高速資料傳輸過程中的訊號質量,保持傳輸的穩定性和可靠性。

Phase Adjust FIFO

相位調整FIFO緩衝器

如下圖是時鐘域的劃分,在傳送端的PCS子層裡面有兩個並行時鐘域,分別是PMA相連的並行時鐘(XCLK)和TXUSRCLK時鐘。

要傳輸資料,XCLK速率必須與TXUSRCLK速率匹配,並且必須解決兩個域之間的所有相位差。

GTX的傳送資料通道包括一個FIFO緩衝器和一個TX相位對準電路,用於解決XCLK和TXUSRCLK域之間的相位差。

FIFO緩衝器優勢就是設計比較簡單,使用者可以不用去管內部實現,只需要在呼叫IP時勾選下圖中1處選項即可,缺點是FIFO的延遲比較大,導致使用者把資料輸入GTX到GTX輸出資料的時間比較長.如果不考慮這部分延遲,推薦直接使用FIFO即可。

圖10

如果對延時比較敏感,則可以使用相位對齊電路,

只不過需要使用者自己編寫這部分控制程式碼,如果程式碼出現錯誤,將無法正常接收和傳送資料。

在上圖中還可以設定使用者傳送埠TXUSRCLK和使用者接收埠RXUSRCLK的時鐘來源,

首先應該瞭解下TXUSRCLK和TXUSRCLK2。

TXUSRCLK是GTX傳送通道中PCS邏輯的內部時鐘,TXUSRCLK的速率取決於GTXE2_CHANNEL原語的內部資料路徑寬度和GTX傳送通道的線路速率,計算公式如下所示。

TXUSRCLK2是GTX傳送通道所有訊號的主同步時鐘。

TXUSRCLK2和TXUSRCLK的頻率關係與TX_DATA_ WIDTH、TX_INT_DATAWIDTH有關,如下圖所示。

TXUSRCLK和TXUSRCLK2必須正邊沿對齊,並且源時鐘必須相同,兩者之間的偏斜儘可能小。

一般使用BUFG、BUFH、BUFR來驅動TXUSRCLK和TXUSR CLK2。

因此一般將GTX IP輸出的TXOUTCLK時鐘訊號作為TXUSRCLK和RXUSRCLK源時鐘訊號,

使用者其實只需要關注TXUSRCLK2和RXUSRCLK2即可,其餘兩個用於IP內部,與使用者關係不大。

如果IP設定為圖10所示,那麼時鐘關係如下所示,

GTX IP輸出的TXOUTCLK透過一個MMCM生成RXUSR CLK、RXUSR CLK2、TXUSR CLK、TXUSR CLK2時鐘訊號,(TXOUTCLK的來源之一是由CPLL或QPLL輸出的)

全部輸入GTX IP內部,其中RXUSRCLK2和TXUSRCLK2分別輸出作為使用者接收、傳送的時鐘訊號。

圖13

圖10的設定好處在於TXUSRCLK2和RXUSRCLK2訊號是同一個訊號,那麼使用者的傳送端和接收端使用的是同一時鐘訊號,不需要跨時鐘處理。

前文講解了GTX的QPLL和CPLL等時鐘訊號,本文對外部時鐘與傳送、接收通道內部時鐘的關聯做簡要介紹,下圖是傳送通道的時鐘架構。

下圖是傳送通道內部的序列和並行時鐘分頻器,部分內容可以與前文的外部時鐘相互對應

下圖是前文講解QPLL和CPLL出現的圖,上下兩圖中1處其實都是同一個器件,

上圖中IBUFGDS輸出訊號可以透過REFCLK_CTRL控制引腳輸出到BUFG、BUFH、CMT,這是什麼意思?

這就意味著GT bank的差分時鐘轉換為單端時鐘後,可以作為其他bank的時鐘訊號,畢竟BUFG能夠驅動FPGA內部所有時鐘資源吧,不瞭解的可以檢視前文對7系列FPGA時鐘資源的講解。

但REFCLK_CTRL這個訊號由軟體自動生成,使用者無法控制。

上圖中的3處其實與下圖的4處是相同結構,均是資料選擇器、CPLL,

上圖4是QPLL的輸出時鐘和參考時鐘,

其中QPLL的輸出時鐘QPLLCLK和CPLL的輸出時鐘透過TXSYSCLKSEL[0]的選擇作為TX PMA的輸入時鐘。

該時鐘輸入TX PMA之後,

需要經過 Phase Interp”後被D分頻,然後分為兩路,

一路直接作為並串轉換模組的序列時鐘,

另一路繼續經過兩次分頻作為並串轉換模組並行時鐘,並且輸出到PCS側作為其時鐘,還輸入到下半部分的資料選擇器中。

這裡並串轉換為什麼會配置一個D分頻的分頻器?

首先要明確這個時鐘的頻率能夠影響什麼?

作為並串轉換的序列時鐘,毫無疑問直接影響的就是轉換後的資料的線速率,透過控制該分頻器能夠在一定範圍內調節該通道的線速率。

這樣就好回答具體原因了,每個GT bank有四個通道,但是卻共用同一個QPLL,那如果四個通道的線速率均大於6.6Gb/S,但是線速率卻不等,該如何實現?(大於這個速率的時候需要使用QPLL)

此時只能使用QPLL輸出時鐘,而QPLL輸出時鐘只有一個,此時就只能透過調節每個通道內部的D分頻器,來實現不同通道不同線速率的目的。

但是D分頻器只能實現1、2、4、8分頻,分頻係數可以動態設定也可以靜態設定。

當靜態設定時,必須把分頻係數TXOUT_DIV設定為固定值,並且將TXPATE設定為3’b000。

如果要實現動態線速率,需要在生成IP時勾選TXRATE訊號,TXOUT_DIV和TXRATE必須在器件配置時選擇相同的D分頻器值,器件配置後,透過TXRATE動態更改D分頻器值。

分頻係數設定如下圖所示,靜態時透過TXOUT_DIV的值進行設定,動態時根據TXRATE的值進行設定,預設分頻係數為1。

之後還要講解下圖14中後兩個分頻器的作用,這兩個分頻的輸入作為並串轉換模組的序列時鐘,而輸出作為並串轉換模組的並行時鐘,分頻係數毫無疑問與並行資料位寬有關。

兩個分頻器能夠組成的分頻係數有8、10、16、20,由圖5可知,PCS內部傳輸資料位寬只有16、20、32、40這幾種,

即並串轉換的並行資料位寬取值為16、20、32、40。可以推測序列資料是在序列時鐘的雙沿完成轉換的,在8倍頻率的時鐘下將16位並行資料轉換為序列資料輸出,

其他分頻係數轉換道理類似。下圖中的TXOUTCLKPCS和TXOUTCLKFABRIC使用者不需要關注,沒有輸出到使用者介面。

重點在於TXOUTCLK,

時鐘來源可以是TXOUTCL KPCS、TXOUTCLKPMA、QPLL或者CPLL參考時鐘或參考時鐘二分頻,

還可以選擇是否對時鐘來源進行延遲。

TXOUTCLK輸出到BUFG,就處於“GTPE2_CHANNEL”外部了,根據使用者的資料位寬,生成對應的參考時鐘訊號,下圖是2位元組或者4位元組資料位寬時,可以使用的時鐘結構。

圖19 單通道TXOUTCLK驅動txusrclk 2(2位元組或4位元組模式)

用的比較多的應該是下圖所示的時鐘結構,TXOUTCLK輸出到BUFG,然後透過MMCM生成TXUSCLK和TXUSCLK2,其中TXUSCLK2作為使用者介面的時鐘訊號。圖13就是使用的該結構生成使用者時鐘訊號。

用的比較多的應該是下圖所示的時鐘結構,TXOUTCLK輸出到BUFG,然後透過MMCM生成TXUSCLK和TXUSCLK2,其中TXUSCLK2作為使用者介面的時鐘訊號。

圖13就是使用的該結構生成使用者時鐘訊號.

圖20 單通道TXOUTCLK驅動txusrclk 2(4位元組或8位元組模式)

下圖是單通道的TXOUTCLK透過MMCM生成TXUS RCLK和TXUSRCLK2驅動多個通道的時鐘訊號,這樣做的好處應該是多個通道的資料都處於同一時鐘域下,便於資料同步。

SATA OOB

SATA是硬碟介面,建立通訊主要是透過檢測OOB(Out Of Band)實現的,並且向上層傳輸連線情況,因此只有在使用SATA協議時,才會使用該模組,否則不用考慮。

PCIE Beacon

PICE喚醒功能,只有在使用PCIE協議時才會用到,否則不考慮。

Polarity

極性控制,這個作用比較大,主要時針對PCB設計時將差分對設計反了,模組內部可以將極性反轉,從而解決PCB設計問題。

PISO串化模組

並串轉換模組(parallel input Serial output),在前面講解時鐘分頻時已經講解過作用了,就是在時鐘雙沿將PCS傳送的並行資料轉換為序列資料。

TX Pre/Post Emp和TX Driver

GTX的TX驅動器是高速電流模式差分輸出緩衝器,如下圖所示。為了最大限度地提高訊號完整性,具有差分電壓控制、游標前和游標後傳輸預加重、校準終端電阻功能。

需要明白一個道理,高速訊號在長距離、線速率較高的傳輸時,損耗是很嚴重的。經過損耗衰減之後,為了讓接收端還能檢測到資料,在傳送端會做預加重和去加重處理,增大差分輸出訊號的擺幅等等,讓其經過傳輸損耗之後差分訊號的幅值變為零。使用者只需要調節兩個引數的值就可以調節預加重和去加重了,在配置IP時勾選下面兩個選項即可。至於引數具體應該設定為多少,要根據實際的電路進行眼圖掃描,然後確定最佳引數,關於眼圖在接收通道的章節進行講解。

TX OOB and PCIE

使用PCIE、SATA協議時才會使用的功能,否則不會用到。

TX Clock Dividers

時鐘的分頻模組。

PCS(Physical CodeSublayer)層
PMA(Physical Medium Attachment)層
PHY晶片
第一層:PCS,用以編碼,處理跨時鐘域問題,主要是數字訊號的處理;
第二層:PMA,將PCS處理好的編碼過的數字訊號轉換成模擬訊號透過介質(光纖,銅纜)傳送;
傳統低速訊號使用簡單的高低電平,透過比較器和MOS管就能傳送完成(LVCMOS3.3);
在高速訊號的場景下,MOS管不太能滿足需求,而是在PCS中使用高效能的高速DAC將數字訊號透過同軸線或光纖傳送;
PMA還會將編碼好的資料進行串化。

RX

再次推薦:

https://mp.weixin.qq.com/s/KUPBQ_9t7fgm7LgoBNjojw

模擬前端與均衡器

從手冊中可以獲知,接收通道的開始部分有一個模擬前端,結構如下圖所示,模擬前端一般就是對訊號進行放大、濾波等等,消除訊號傳輸過程中的一些干擾,並且然後端能夠正常採集輸入訊號,該電路也是類似作用。

由於GTX的差分訊號線速率很高,可以達到10.312Gb/S,並且傳輸距離可能會很長,導致接收資料的幅值可能很小,甚至達不到檢測要求,

比如輸入端傳送時幅值有1.5V,經過幾十米的光纖傳輸,到接收端時,幅值可能只有600mv了。

解決方式就是在傳送時,透過預加重、後加重把幅值增大一點,

同時在接收時把門限降低一點,比如接收時檢測幅值大於500mv就認為是高電平了,從而能夠正確檢測到衰減後的訊號。

至於預加重、後加重、檢測門限設定多少合適,這與實際的訊號傳輸路徑和線速率有關。

一般做法是當硬體條件確定後,透過眼圖對所有引數進行掃描,確定一個最合適的引數,用作後續開發的值就行了。

眼圖測試的目的:獲得誤位元速率最低,串擾最小的各種引數。

RX OOB

GTX接收器支援解碼序列ATA(SATA)和序列連線SCSI(SAS)規範中描述的帶外(OOB)序列,並支援PCI Express規範中描述的信標。

這個與SATA、PCIE這些協議有關,如果不使用這些協議,可以忽略,具體使用時在查閱手冊即可。

DFE

根據功率和效能之間的系統級權衡,GTX接收通道有兩種型別的自適應濾波器可以使用,分別是LPM和DFE。

如果傳輸過程中損耗比較小,可以使用低功耗模式(LPM)的節能自適應濾波器,對應結構如下圖所示。

如果傳輸過程中損耗比較大,傳輸距離遠,此時應該使用DFE自適應濾波器,對應結構如下圖所示。

DFE透過提供更接近的濾波器引數調整來更好地補償傳輸通道損耗,DFE模式是一種離散時間自適應高通濾波器,抽頭值是由自適應演算法設定的該濾波器的係數。

在呼叫IP時,如下圖所示,在1處可以設定濾波器型別,短距離、低損耗首選LPM模式,節省功耗。

在2處把接收資料的幅值檢測設定為可程式設計,之後可以透過IP埠訊號gt0_txdiffctrl_in的值調節輸入檢測幅值。

RX Clock Divider

這部分與傳送通道的時鐘部分一致,直接去檢視傳送通道的原理即可。對應框圖如下所示,與傳送通道一摸一樣,不再贅述。

CDR

注意接收端只有一對差分資料線,並沒有時鐘線,接收端如何採集資料線的資料呢?接收端可以得知資料傳輸的頻率,從而確定時脈頻率,但是如何得知時鐘的相位呢,

傳送的時候在時鐘雙沿完成的並串轉換。由上圖知,串並轉換也應該是在時鐘雙沿進行的,此時就需要保證時鐘與資料的相位關係。

因此上圖中QPLL或CPLL輸出時鐘進入PMA之後,需要先經過CDR調整時鐘相位,然後再經過分頻作為串並轉換模組的序列時鐘和並行時鐘,

保證時鐘與資料的相位關係正確。時鐘資料恢復(CDR)技術是從接收的序列資料中提取恢復的時鐘和資料的相位關係,CDR的結構框圖如下所示。

CDR原理手冊中是這麼說的:CDR狀態機使用來自邊沿和資料取樣器的資料確定輸入資料流的相位並控制相位插值器(PI)。

邊緣取樣器的相位被鎖定到資料流的過渡區域,而資料取樣器的相位位於資料眼的中間。

具體實現方式可能就是CDR FSM能夠精確控制相位,根據兩個輸入去調整相位偏移量,猜測是這樣。

SIPO

串並轉換模組,將接收的序列資料轉換為並行資料,然後輸出到PCS側進行解析。

Polarity

如果PCB的RXP和RXN差分走線被意外交換,GTX接收的差分資料就會反轉。

GTX接收通道可以在串並轉換之後對PCS中的並行位元組進行反轉,以抵消差分對上的反轉極性。

在配置IP時勾選RXPOLARITY選項,可啟用接收極性控制引腳,當gt0_rxpolarity_in訊號為高電平時,接收資料極性翻轉。

PRBS Checker

GTX收發器接收器包括一個內建的PRBS檢查器,如下圖所示,能夠檢測四種函式對應的PRBS序列,與前文傳送端生成的四種PRBS序列保持一致。

要使用內建PRBS檢查器,檢測序列類似必須為與傳送通道傳送的PRBS序列匹配。

如果輸入資料被髮送器反轉或RXP/RXN反轉,則接收資料也應透過控制RXPOLARITY反轉,否則,PRBS檢查器不會鎖定。

當PRBS檢查器執行時,會在傳入資料中查詢選定的PRBS序列。當它找到該模式時,它可以透過將輸入資料與預期資料進行比較來檢測PRBS錯誤。

Comma Detect and Align

位元組對齊,低速串列埠UART這種通訊會有一個起始位,來判斷一次傳輸的開始,但是GTX這類高速序列介面在傳輸資料時,並沒有起始位、停止位這類標誌,

那接收端如何確定每個位元組的開始位置呢?下圖是傳送端傳送一段資料,接收機可能因為上電等各種原因,並不是從第一位資料開始接收的,可能是從紅色框開始接收第一個並行資料,

也可能是從藍色框位置接收第一個資料,也可能是紫紅色框處開始接收,該如何確定哪個位置開始接收資料才能正確解析出並行資料?

這裡的功能與ISERDESE的功能其實一致,需要在合適的位置接收資料,對齊方式就是透過檢測規定的K碼資料來調整串並轉換的起始位置。

如上圖所示,首先將藍色框中的10位資料透過8B/10B解碼,如果解碼結果是設定的K碼,

則從藍色框開始,每10位資料轉換為並行資料去解碼輸出。如果藍色框中的解碼結果不是K碼,

則將起始位置後移一位,把紫紅色框中10位資料拿去解碼,之後再進行比對,迴圈往復,直到檢測到K碼為止。

為了使對齊成為可能,發射機傳送一個可識別的序列,即Comma,通常稱為逗號。

接收方在傳入資料中搜尋逗號,當發現逗號時,將該逗號移動到一個位元組邊界,

以便接收的並行字與傳送的並行字匹配。

如下圖中1所示,位元組對齊常用K碼為K28.5,2處可以設定在資料的什麼位置進行位元組對齊檢測,一般可以設定為全程檢測。

圖13

2處還有個comma Mask訊號,檢測器支援檢測部分K碼的數值。

如下圖所示,Mask高三位設定為0,則檢測K碼時,不需要檢測高三位,只需要低5位滿足要求即可,從而實現部分檢測。但一般不會這麼使用,瞭解即可。

圖13的3處Decode valid comma only勾選後,檢測器就只會檢測預設的K28.5和K28.1的K碼。

勾選Combine plus/minus commas使用雙位元組對齊檢測,要求比較嚴格時才會使用。

檢視圖13中1處可知,當K碼設為K28.5後,

由於8B/10B編碼的極性問題,

下面會出現兩種編碼結果Plus Comma和Minus Comma,

兩種編碼的各位資料相反。檢測器怎麼知道檢測哪種編碼的K碼呢?

透過使能圖中4的ENPCOMMALIGN和ENMCOMMALIGN兩個選項進行選擇,

與其中一種模式對齊即可。

為實現位元組,GTX有兩種方式,一種是自動對齊,IP預設使用自動對齊。

另一種是手動對齊,勾選圖13的RXSLIDE來啟用手動對齊,該功能與ISERDESE一致,透過拉高一個訊號來對串並轉換的起始位置進行調整,

如果不是需要字元,則繼續調整,會比較麻煩。

RXBYTE LS ALIGN訊號為高電平時,表示已經完成位元組對齊,輸出給使用者的資料正確。

RXBYTE RE ALIGN訊號為高電平時,表示IP正在進行位元組對齊。

RXCOMMAD ET為高電平表示檢測到K碼,該訊號有效幾個週期。

線上路速率大於5 Gb/s且系統噪聲過大的應用中,位元組對齊模組可能會錯誤地對齊錯誤的位元組邊界,並在沒有有效資料時錯誤地拉高RXBYTEISALIGNED訊號。

在此類應用中,應進行系統級檢查,以檢查RXBYTEISALIGNED是否符和資料的有效性。

8B/10B Decoder

8B/10B解碼模組,將接收的10位並行資料解碼位8位並行資料,具體的在8B/10B相關文章進行講解,本文不過多敘述。

RX Elastic Buffer

彈性buffer主要用於解決PMA並行時鐘域(XCLK)和PCS內部並行時鐘域RXUSRCLK的跨時鐘域問題。

XCLK是串並轉換後,並行資料的時鐘訊號,由圖7可知,QPLL或者CPLL的時鐘經過CDR相位調整後作為串並轉換模組的時鐘。

而RXUSRCLK一般是由TXOUTCLK或者RXOUTCLK經過MMCM生成的,而TXOUTCLK或者RXOUTCLK的來源有幾種,可能並不是CDR輸出時鐘,

因此XCLK和RXUSRCLK的相位不相同,即兩者是非同步時鐘。
需要解決兩個時鐘域的相位差,最簡單的方法就是使用buffer,如下圖所示。

與傳送通道一樣,接收通道提供了兩種解決方式,一種是透過buffer同步資料,優點是使用者不需要進行控制,硬核內部即可完成同步,缺點在於延遲比較大,如果對延遲沒有要求,首選buffer,IP設定如下所示。

圖16 使能接收通道buffer

注意如果傳送通道和接收通道的協議和速率一致,可以使用TXOUTCLK生成RXUSRCLK,

原因在於同一個高速收發器的傳送和接收通道共用同一個QPLL和CPLL,那麼TXOUTCLK和RXOUTCLK其實可以是同一QPLL或者CPLL的參考時鐘訊號。

當然如果對延遲比較敏感,則可以將彈性buffer旁路,使用相位對準電路調整SIPO並行時鐘域和XCLK之間的相位差,

實現從SIPO到PCS可靠資料傳輸。

還可以透過調整RXUSCLK來補償溫度、電壓變化,從而執行RX延遲對齊。

接收相位和延遲組合對準可以由GTX收發器自動執行或由使用者手動控制。

當RX恢復時鐘用於提供RXUSRCLK和RXUSRCLK2時,可以旁路RX彈性buffer以減少延遲。

當RX彈性buffer被旁路時,透過RX資料路徑的延遲很低且具有確定性,但時鐘校正和通道繫結不可用。

RX PIPE Control與RX Geartox

這個與傳送通道的 PIPE Control應該功能是一樣的,與PCIE協議有關,不使用該協議時可以忽略。RX Geartox與TX Gearbox類似,只有在使用64B/66B或者64B/67B編碼的時候,才會被使用,其餘時間忽略。

RX Status Control及時鐘校正

RX Status Control對彈性buffer的一些狀態進行檢測,包括溢位等等,然後去做一個時鐘糾正的處理。

RX彈性buffer用於同步兩個不同的時鐘域RXUSRCLK和XCLK的資料,XCLK是從CDR恢復的時鐘。

即使RXUSRCLK和XCLK以相同的時脈頻率執行,頻率差異也始終很小,日積月累,也會導致讀寫資料的速率不一致,可能造成資料溢位。

這是因為RXUSRCLK和XCLK差異決定的,並不能消除,因此提供了一種時鐘糾正的方式來防止資料出現錯誤。

為了允許校正,傳送資料時需要在有效資料中週期性的插入一個或多個特殊字元,GTX接收通道可以根據需要在彈性buffer中刪除或者複製這些字元。

當彈性buffer快要裝滿資料時,可以刪除buffer中的一些特殊字元使得buffer不被溢位。當彈性buffer快要被讀空時,可以複製一些特殊字元存入buffer,防止彈性buffer被讀空,最終使得彈性buffer始終保持在半滿的狀態。

由於XCLK和RXSUCLK頻率只有微小差異,所以可以透過上述方式進行糾正,防止buffer上溢或者下溢。

上述所說的特殊字元一般為K碼,IP設定如下所示,勾選1處啟用時鐘校正功能,在2處選擇每次插入特殊字元的個數,3處設定需要插入特殊字元的數值,4處確定插入的字元是不是K碼。下圖插入2個特殊字元,一個是K28.5對應的8’hBC,另一個是普通字元8’h50。

通道繫結

XAUI和PCI Express等協議結合了多個序列收發器連線,以建立一個更高吞吐量的通道。每個序列收發器連線稱為一個通道,

除非每個序列連線的長度完全相同,否則通道之間的偏斜會導致資料同時傳輸,但到達時間不同。RX buffer可以用作可變延遲模組,

通道繫結消除了GTX收發器各個通道之間的偏斜。用於繫結通道的傳送通道在傳送資料都同時傳送通道繫結字元(或字元序列)。

當接收到序列時,GTX接收通道可以確定每個通道之間的偏斜,並調整RX buffer的延遲,以便在RX fabric使用者介面上呈現無偏斜的資料。

後續在使用PCIE這種多通道協議時,

在進行詳細瞭解,本質上傳送端向每個通道同時傳送一組資料,接收端檢測這組資料,確定每條線路延遲,進而調整彈性buffer輸出資料的延遲,來達到多個通道輸出給使用者的資料對齊的目的。

使用者接收埠

經過前文這麼久的講述,終於來到最後GTX接收資料的使用者介面了,

毫無疑問該介面的主要作用就是將接收的資料輸出給使用者。

該介面的所有訊號與RXUSRCLK2的上升沿對齊,讀取資料RXDA他的位寬可以配置為2、4或8位元組,實際位寬與RX_DATA_WIDTH和RX_INT_DATAWIDTH的取值有關,與傳送通道的設定一樣,如下圖所示。

介面寬度配置7系列GTX收發器包含2位元組和4位元組內部資料路徑,可透過設定RX_INT_DATAWIDTH屬性進行配置。

FPGA介面寬度可透過設定RX_DATA_WIDTH屬性進行配置。

當8B/10B解碼器使能時,RX_DATA_WIDTH必須配置為20位、40位或80位,這種情況下,FPGA RX介面僅使用RXDATA埠。

當8B/10B解碼器被旁路且RX_DATA_WIDTH為20、40或80時,RXDISPERR和RXCHARISK埠用於將RXDATA埠從16位擴充套件至20位、32位擴充套件至40位或64位至80位,如下圖所示。

相關文章