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