所有IP核沒有正確工作,原因一半是時鐘,一半是復(fù)位。
前言
復(fù)位與初始化部分其實還挺復(fù)雜,還好GTX已經(jīng)幫我們做好了,不想麻煩的直接跳到文末看結(jié)論~~~不過了解下也挺有意思的~~
同時GTX復(fù)位也挺隨意的,你想怎么復(fù)位都可以,支持整體復(fù)位,單個組件復(fù)位。我們也可以不復(fù)位,核不會因為我們沒有進行軟復(fù)位就不對核進行復(fù)位,在上電之后會自動進行一系列的復(fù)位,不隨你的意志而轉(zhuǎn)移。下面我們就來仔細研究研究GTX的復(fù)位吧!
一、復(fù)位與初始化
在FPGA上電配置之后,必須進行初始化才能使用GTX/GTH。(后文全用GTX表示,同樣適用于GTH)GTX的發(fā)送器(TX)和接收器(RX)可以獨立的同步進行初始化。
GTX的TX和RX初始化包含兩步:
1. 初始化相關(guān)的PLL來驅(qū)動TX/RX
2. 初始化TX和RX的數(shù)據(jù)路徑(PMA+PCS)
GTX的TX和RX能從QPLL或者CPLL接收一個時鐘。所以在TX/RX初始化之前必須對相關(guān)的PLL(QPLL/CPLL)進行初始化。TX/RX使用的任何PLL都是單獨的進行復(fù)位,PLL復(fù)位操作與TX/RX復(fù)位完全獨立。TX/RX的數(shù)據(jù)路徑復(fù)位必須在相關(guān)的PLL復(fù)位完成,locked之后進行。(就跟我們使用PLL IP核一樣,等locked拉高之后,時鐘穩(wěn)定才能使用)
看圖說話:TX/RX是獨立的并行的進行復(fù)位操作。
GTX的TX和RX使用一個狀態(tài)機來控制初始化過程,并被劃分為幾塊來分別復(fù)位。該劃分允許復(fù)位狀態(tài)機按順序控制復(fù)位過程:PMA可以首先被復(fù)位,PCS可以在TXUSERRDY或者 RXUSERRDY信號被斷言后進行復(fù)位。在需要的時候,它也同樣允許PMS,PCS,他們內(nèi)部的功能模塊獨立的進行復(fù)位。
GTX提供了兩種復(fù)位類型: initialization 和 component。
? Initialization Reset: 初始化復(fù)位。這種復(fù)位用作GTX完全復(fù)位。必須在設(shè)備上電及配置完成之后。在必要的時候,TX端口和RX端口的復(fù)位(GTTXRESET 和 GTRXRESET)同樣可被用來重新初始化GTX的TX和RX。
? Component Reset: 模塊復(fù)位。對TX / RX 單獨部分進行復(fù)位。 TX模塊復(fù)位端口包括TXPMARESET 和TXPCSRESET 。RX 模塊復(fù)位端口包含RXPMARESET,RXDFELPMRESET,EYESCANRESET, RXPCSRESET, RXBUFRESET和 RXOOBRESET。(有木有很多很復(fù)雜。。)
注:
1. 所有的復(fù)位高電平有效。
2. 這些復(fù)位都是異步的。對這些異步復(fù)位的推薦設(shè)計是一個(各自時鐘域)時鐘周期的脈沖信號。
3. 復(fù)位端口不應(yīng)該被用做下電的目的。
兩種復(fù)位類型主要有以下不同:
TX部分:
RX部分:
二、復(fù)位模式
GTX的初始化復(fù)位 (initialization reset) 只能使用順序復(fù)位模式(Sequential mode )。
GTX的TX復(fù)位只能使用順序復(fù)位模式(Sequential mode )。
GTX的RX復(fù)位可以使用兩種復(fù)位模式:
Sequential mode :順序復(fù)位。隨復(fù)位狀態(tài)機(initialization 或 component)順序復(fù)位各個部分。
Single mode :單獨復(fù)位。僅復(fù)位單個部分(PMA、PCS、內(nèi)部功能塊)。
復(fù)位完成由信號(TX/RX)RESETDONE表示,由低到高。
復(fù)位模式對CPLL和QPLL沒有任何影響。GTX也可以被軟件進行彈性復(fù)位設(shè)置,不管是哪種模式。
使用GTRESETSEL來選擇復(fù)位模式,RESETOVRD必須驅(qū)動為低電平。詳細見下表:
注:復(fù)位前,GTRESETSEL和RESETOVRD需要300-500ns的有效時間。
三、CPLL復(fù)位
在相關(guān)時鐘邊沿信號被檢測到之前,CPLL必須使用CPLLPD端口來下電。在CPLLPD被釋放后,CPLL在使用之前必須進行復(fù)位。每個GTX通道都有3個專用端口用來CPLL復(fù)位。如下圖:
CPLLRESET :CPLL的復(fù)位輸入。推薦設(shè)計是一個時鐘周期。
CPLLLOCK :拉高時,表示CPLL的復(fù)位完成。
內(nèi)部CPLL復(fù)位信號:低有效。但是由GTX內(nèi)部電路產(chǎn)生的真正的CPLL復(fù)位必須比CPLLRESET高脈沖時間要長。這個時間跟帶寬、時鐘頻率等有關(guān)。
四、QPLL復(fù)位
QPLL復(fù)位大致與CPLL相同。放張圖:
五、GTX TX初始化與復(fù)位
開門見山的說:GTX的TX復(fù)位只能使用順序復(fù)位模式(Sequential mode )。
GTX的TX使用一個復(fù)位狀態(tài)機來控制復(fù)位過程。TX復(fù)位分為兩部分:TX PMA和TX PCS。
回憶下(1)GTX基本知識所介紹的:GTX的TX和RX均有PMA+PCS兩個子層組成。
在整個PMA和PCS中,都由這個復(fù)位狀態(tài)機按順序執(zhí)行復(fù)位。如下圖:
使用TXPMARESET來對TX進行復(fù)位,TXRESETDONE拉高表示復(fù)位完成。
直到TXUSERRDY被檢測為高時,TX復(fù)位狀態(tài)機才對PCS進行復(fù)位。但是,驅(qū)動TXUSERRDY為高需滿足以下條件:
1. 所有應(yīng)用到的時鐘包括TXUSRCLK/TXUSRCLK2必須穩(wěn)定,或者locked(在PLL/MMCM被使用的時候)
2. 用戶接口已經(jīng)準備好傳輸數(shù)據(jù)到GTX。
5.1 GTX TX復(fù)位和初始化的端口信號
5.2 GTX TX復(fù)位對配置完成的響應(yīng)
TX復(fù)位必須滿足下列條件:
1. 使用順序復(fù)位模式,GTRESETSEL必須為低。.
2. GTTXRESET必須使用。
3. 在復(fù)位完成前(TXRESETDONE拉高),TXPMARESET和TXPCSRESET 必須驅(qū)動為低不變。
4. 在PLL locked之前,GTTXRESET不能被驅(qū)動為低。
如果加載配置時,復(fù)位模式默認為順序復(fù)位模式,在配置加載后等待最少500ns,C/QPLLRESET 和GTTXRESET 就可以被斷言了。
如果復(fù)位模式為single mode,用戶必須:
1. 在配置加載完成后,等待最少500ns。
2. 將復(fù)位模式改為順序復(fù)位模式 Sequential mode。
3. 再等待300-500ns。
4. 斷言 C/QPLLRESET和 GTTXRESET。
推薦的設(shè)計是使用來自相關(guān)的CPLL或者QPLL的PLLLOCK 來釋放GTTXRESET由高到低。
TX復(fù)位狀態(tài)機等GTTXRESET拉高,開始TX復(fù)位,直到GTTXRESET被釋放低為止。
如下圖所示:
5.3 GTX TX復(fù)位對GTTXRESET脈沖的響應(yīng)
GTX允許用戶在任意時刻對TX進行復(fù)位,只需要給GTTXRESET一個有效的高脈沖信號。 TXPMARESET_TIME和 TXPCSRESET_TIME 可以被設(shè)置為靜態(tài)的也可以通過DRP端口來動態(tài)設(shè)置以適配在申請 GTTXRESET之前要求的復(fù)位時間。
當使用GTTXRESET時必須滿足以下條件:
1. 使用sequential mode必須將GTRESETSEL置低。
2. 在復(fù)位完成之前,TXPMARESET 和 TXPCSRESET 必須一直為低。
3. 相關(guān) PLL必須 locked。
4. GTTXRESET的推薦設(shè)計是一個時鐘周期脈沖。
5.4 GTX TX 模塊復(fù)位
TX PMA和 TX PCS 可以單獨進行復(fù)位。在 TXPMARESET 或者 TXPCSRESE復(fù)位過程完成之前,TGTTXRESET必須保持為低。驅(qū)動TXPMARESET從高到低來啟動PMA復(fù)位程序, 在TXPMARESET復(fù)位過程中,TXPCSRESET必須保持為低。
在順序復(fù)位模式,復(fù)位狀態(tài)機在PMA復(fù)位完成后,(如果TXUSERRDY為高)自動開始PCS復(fù)位。如下圖:
當TXUSERRDY為高時,驅(qū)動TXPCSRESET由高到低來啟動PCS復(fù)位程序。在PCS復(fù)位過程中,TXPMARESET 必須保持為低。
在順序復(fù)位模式,復(fù)位狀態(tài)機僅復(fù)位PCS,如下圖:
六、RX復(fù)位與初始化
已經(jīng)快11點了,累了,溜了溜了,,,放張圖:
結(jié)論
由GTX核分別輸出了發(fā)送端TX和接收端RX的初始化完成信號:
TX: gt0_tx_fsm_reset_done_out(output)
RX: gt0_rx_fsm_reset_done_out(output)
直接使用這兩個信號就好,TX復(fù)位完成就可以開始發(fā)送數(shù)據(jù),RX復(fù)位就可以接收數(shù)據(jù)。
也可以加個信號 GT_RESET_DONE;
assign GT_RESET_DONE = gt0_tx_fsm_reset_done_out && gt0_rx_fsm_reset_done_out;
先用起來,后面再深入研究,不過了解了復(fù)位過程發(fā)現(xiàn)還是有點意思~
OK,前面說了一大堆結(jié)論卻還是很簡單的~
拿去搬磚吧~
審核編輯:湯梓紅
-
FPGA
+關(guān)注
關(guān)注
1630文章
21761瀏覽量
604411 -
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7085瀏覽量
89229 -
Xilinx
+關(guān)注
關(guān)注
71文章
2168瀏覽量
121715
發(fā)布評論請先 登錄
相關(guān)推薦
評論