項目涉及5片FPGA之間的多機通信,1片主FPGA,4片從FPGA,5片FPGA采用星形連接的拓撲結構。4個從機與主機之間通信接口采用基于LVDS_33的差分IO接口標準,以滿足高速率,抗干擾,chip-to-chip的數據流傳輸架構。各從機與主機通信時,采用全雙工傳輸通信模式,收發雙方信號線包括時鐘信號tx_clk+,tx_clk-,rx_clk +,rx_clk-,差分數據信號tx_data+,tx_data -,rx_data +,rx_data -,共計4組差分通信鏈路。由于從主FPGA待傳輸的數據流通常不是單比特流,常見的數據流位寬為8bits或16bits,此時有以下兩種通信方案。
方法1:采用基于源同步的1路差分時鐘信號線和8路并行數據信號線來傳輸8bits位寬的數據流從理論上是可行的。該方法不足之處為:(1)當對數據流傳輸帶寬提出更高要求時,即要求時鐘信號速率更快以滿足高速通信時,就可能對出現8路并行信號線之間相位不同步的問題;(2)需要消耗的FPGA管腳資源更多,布線要求也更高。
方法2:將并行數據轉換為串行數據進行傳輸,然后串行數據在接收端整合為之前發送的并行數據。即在發送端,將8bits的數據流通過OSERDES單元轉換為串行數據流bit0,bit1,... ,bit7,通過1路差分信號線輸出給接收端;同理,接收端采用相反的傳輸原理,ISERDES單元將串行數據流bit0,bit1,... ,bit7通過8個移位寄存器緩存后整合為8位寬的數據流,完成串并轉換。基于LVDS的差分IO接口支持的傳輸速率高達1.9Gb/s,故滿足常用的高速串行數據通信。
1 設計過程
項目使用的芯片型號為Spartan6的xc6slx16-csg324,待傳輸的數據流位寬為8位,故IOSERDES的串并因子為8:1,FPGA的IOB集成了IOSERDES軟核,故可以直接調用和自定義即可完成對ISERDES、OSERDES兩個IP核的配置。
關于對ISERDES、OSERDES的相關配置可參考以下三個個用戶手冊。
UG382 — Spartan6 FPGA Clock Source;
UG381 — Spartan6 FPGA SelectIO Source;
XAPP1064 — source synchronize serialization and deserialization。
項目中使用的OSERDES配置參數如下圖所示。
2 設計關鍵點
(1)Spartan6 FPGA芯片僅bank0和bank2支持OSERDES,其他bank不支持;對于ISERDES,所有bank均支持。如果忽略OSERDES對bank的限制,很容易造成在設計原理圖時,出現LVDS的IO接口管腳分配問題。
(2)OSERDES數據流輸出時鐘信號tx_clk的構建。數據流輸出時鐘信號tx_clk分為兩種,分別基于BUFIO2和基于PLL來實現,詳見下文。
a)基于BUFIO2的SDR時鐘信號
由于上圖可知,將圖中ISERDES用OSERDES等價替換即可。BUFIO2的IOCLK為數據流發送時鐘,CLKDIV為FPGA內部控制并行數據輸送給OSERDES的邏輯時鐘,二者對應關系為:IOCLK = DIVCLK * DataWidth。例如,現在數據位寬為8,要求OSERDES串行通信速率為400Mbps,則IOCLK 為400MHz,DIVCLK經過BUFIO2以8分頻后為50MHz,則外部晶振輸入時鐘CLOCK頻率也為400MHz。該方法優缺點如下。
優點:數據流輸出時鐘信號構造簡單,無需PLL倍頻等;
不足:對外部晶振要求過高,例如要求400M甚至更高頻率的外部晶振是不太實際的,故需要借助PLL/DCM時鐘單元來實現。
b)基于PLL和BUFPLL的SDR時鐘信號
由上圖可知,方法二增加了PLL和BUFPLL時鐘單元,CLKDIV和IOCLK時鐘構建依據上圖即可完成,注意點是PLL_BASE的CLKOUT0輸出沒有BUFG做緩沖。例如,同樣要求OSERDES串行通信速率為400Mbps,外部晶振CLOCK可以為50MHz,通過PLL倍頻,CLKOUT0(8倍頻)輸出為400MHz,用于IOCLK時鐘,CLKOUT2直接作為CLKDIV時鐘源,即可滿足要求。
優點:外部晶振頻率要求低,且通過PLL倍頻操作,IOCLK方便工作于更高頻率;
不足:需要借助PLL/DCM時鐘單元來實現。
(3)ISERDES數據流輸入對BITSLIP信號的控制。
在ISERDES數據流接收端,提供一個Bitslip信號用于將接收到的數據流進行位對齊。例如發送端發送的數據TX_Data為8'b0110_0010,接收端初始接收到的數據為RX_Data為8'b0011_0001,通過使能Bitslip信號(Bitslip上升沿跳變有效)一次,接收端數據流向左移動一位,RX_Data則由8'b0011_0001變為8'b0110_0010,實現了接收端數據對齊操作。由于發送端和接收端相位關系未知,通常情況下,Bitslip需要使能有效的次數也不確定,但移位操作次數不會超過數據的位寬,否則就是通信鏈路出現故障。
上圖是對Bitslip信號的描述,重點關注:Bitslip信號從有效到無效最小時間間隔至少為1個CLKDIV,經過實測,項目中使用的間隔為4個CLKDIV,當使用1個CLKDIV時間間隔時,接收端數據對齊無法實現。這個細節也影響調試結果和調試進度。
此外,對于ISERDES數據流接收端,由于差分數據信號和差分時鐘均有OSERDES端提供,該差分時鐘rx_clk+/-頻率等于數據流傳輸速率,故接收端可以采用基于BUFIO2對rx_clk+/-進行時鐘緩沖處理,無需使用PLL等時鐘單元,即可得到IOCLK和CLKDIV。
3 設計難點
在整個設計中,有很多需要注意的設計要點,前文其實已有所提及。例如OSERDES僅支持bank0和bank2;IOSERDES的IOCLK和CLKDIV的時鐘構建和合理選擇;Bitslip數據流對齊控制信號的操作細節。這些都會影響設計和調試結果。除此之外,遇到過的一個最頭疼的設計難點如下。
Bufpll mapping error:Constrain Resolved NO placeable site for bufpll。
為避免錯誤,項目中所有差分時鐘信號和數據信號管腳均分配在bank2。當對OSERDES的IOCLK和CLKDIV的時鐘信號構建完畢后(外部晶振輸入管腳為V10,位于bank2,頻率為50MHz),進行Implement Design步驟,但是編譯結果出現錯誤提示:Constrain Resolved NO placeable site for bufpll。
由圖示錯誤提示可知,BUFPLL這個instance也需要設置為bank2,才能將BUFPLL和IOB的其他parts,如oserdes放置在同一個bank中,故需要對BUFPLL進行位置限制。
該FPGA芯片位于bank2的BUFPLL有兩個:BUFPLL_X1Y0,BUFPLL_X1Y1,對應的PLL_ADV也有兩個PLL_ADV_X0Y0,PLL_ADV_X0Y1,因為BUFPLL是用于PLL的CLKOUTx輸出緩沖的。
故在ucf添加約束如下:
INST ParaToSerial/bufpll_inst LOC = BUFPLL_X1Y0;
INST clk_struc/pll_base_inst LOC = PLL_ADV_X0Y0;
本項目中單獨對BUFPLL進行位置約束還不能解決問題,于是又進一步對pll_base該instance進行相同的位置約束。此外,發現一個疑點,將約束改為
INST ParaToSerial/bufpll_inst LOC = BUFPLL_X1Y0;
INST clk_struc/pll_base_inst LOC = PLL_ADV_X0Y1;(此處更改)
則implement編譯時依舊還是會出現相同錯誤,這個原因我現在也解釋不了,歡迎知道的網友熱心指導,謝謝!!!
備注:能順利解決上述bufpll mapping error,得到了下面博文的啟發,在此非常感謝該網友的思路分享。
4 設計結果
項目對基于LVDS差分接口的IOSERDES高速串行數據通信進行了收發測試。數據流傳輸速率為625Mbps,測試碼采用FPGA發送端內部產生的0~255的遞增序列,數據流同步碼或前導碼為0x5a,待發送的并行數據位寬為8位。測試結果見下圖所示。
由上圖可知,發送端和接收端經過3次Bitslip完成數據流的位對齊操作,當數據對齊之后,發送端開始輸出0~255的測試遞增序列,接收端經過4個時鐘延遲后,正確的接收到數據流。
此外,為什么接收端與發送端數據流傳輸間隔為4個時鐘,而不是其他? 原因為項目配置ISERDES工作模式為retimed,接收端要經過4級流水線緩沖器后,才將數據接收到的數據輸送給FPGA內部邏輯,故有4個時鐘的延遲。如果采用NETWORKING_PIPELINED Mode,則只經過3級流水線寄存器,故只有3個時鐘延遲,測試結果見下圖。
補充說明:
(1)LVDS信號輸入端需要進行阻抗匹配,阻值通常為100Ω;該匹配電阻可以外接或者開啟FPGA內部片上輸入電阻,屬性設置為DIFF_TERM = "TRUE";
(2)硬件設計時,差分信號線走等長線,設置該走線阻抗為50Ω;可以在差分信號線兩側采用平行GND走線進行屏蔽,減少差分信號線受到的干擾。
(3)基于該LVDS差分IO接口的高速串行通信尚未考慮對傳輸數據流進行數據編碼,如8b10b編碼。采用不同的編碼方式可以應用于不同的場合,且可以提高通信鏈路的穩定性。
-
FPGA
+關注
關注
1626文章
21665瀏覽量
601809 -
電阻
+關注
關注
86文章
5467瀏覽量
171653 -
lvds
+關注
關注
2文章
1036瀏覽量
65703 -
串行通信
+關注
關注
4文章
566瀏覽量
35291 -
差分接口
+關注
關注
0文章
7瀏覽量
11308
原文標題:基于LVDS差分接口之IOSERDES的高速串行通信
文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設計論壇】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論