席鵬飛,范曉星,冉 焱
(西安電子科技大學(xué)電子信息攻防對抗與仿真重點實驗室,陜西西安 710071)
隨著現(xiàn)代數(shù)字處理技術(shù)和計算機技術(shù)的不斷發(fā)展,實時處理復(fù)雜系統(tǒng)采集到的大容量數(shù)據(jù)成為可能。一個大型的數(shù)據(jù)采集系統(tǒng),需要采集成百上千個實時數(shù)據(jù),數(shù)據(jù)的高速、實時、可靠傳輸是一個關(guān)鍵技術(shù)[1]。而傳統(tǒng)的并行傳輸技術(shù)已接近理論極限,仍不能滿足要求,因此高速串行傳輸技術(shù)正在成為主流。在實際設(shè)計中,采用現(xiàn)場可編程門陣列(FPGA)實現(xiàn)高速串行接口是一種性價比較高的技術(shù)途徑[2-3]。
RocketIO是Xilinx公司FPGA芯片內(nèi)部集成的可編程高速串行收發(fā)器。本文主要介紹了Virtex-6 LXT以及Virtex-5 FXT中的RocketIO GTX版本,提出了設(shè)計要點,并實現(xiàn)了FPGA之間的通信并給出了采樣波形圖。
RocketIO是Xilinx公司內(nèi)嵌的可配置高速串行收發(fā)器,串行傳輸速度在 600 Mbit·s-1~ 6.6 Gbit·s-1[4]。由于Virtex-5與Virtex-6系列內(nèi)嵌的GTX結(jié)構(gòu)、工作原理基本相同[5-6],故本文以 Virtex-6 GTX 為重點進行介紹。
(1)每個通道收發(fā)器支持從 600 Mbit·s-1~6.6 Gbit·s-1的全雙工傳輸速率。(2)收發(fā)器內(nèi)嵌發(fā)送時鐘生成電路和接收時鐘恢復(fù)電路。(3)支持可編程差分輸出電壓擺幅(110~1 130 mV)和可編程預(yù)加重。(4)收發(fā)器支持直接和交流耦合方式,可兼容多種高速接口標(biāo)準(zhǔn)。(5)片內(nèi)集成可編程差分終端電阻。(6)支持片內(nèi)多種環(huán)回測試模式。(7)支持8B/10B編碼,可編程邊界檢測符(Comma),提供對多種標(biāo)準(zhǔn)協(xié)議的支持。
一個完整的RocketIO收發(fā)器主要包括PMA(物理媒介適配層)和PCS(物理編碼子層)兩個子層,如圖1所示。
圖1 RocketIO收發(fā)器內(nèi)部結(jié)構(gòu)示意圖
其中PMA部分主要包括串行器和解串器、發(fā)送和接收緩沖區(qū)、高速時鐘產(chǎn)生器和線路時鐘恢復(fù)單元;PCS部分主要包括8B/10B編解碼、彈性緩沖區(qū)和CRC32校驗。
(1)8B/10B編解碼。RocketIO收發(fā)器采用標(biāo)準(zhǔn)的8B/10B編碼機制將8位字符轉(zhuǎn)化為10位字符,保證了良好的直流平衡特性,有利于交流和直流耦合和時鐘恢復(fù)。
(2)串行器和解串器。在發(fā)送端,收發(fā)器把輸入GTX的參考時鐘作20倍頻,作為發(fā)送線路的參考時鐘,然后將經(jīng)過編碼的并行數(shù)據(jù)轉(zhuǎn)化為串行數(shù)據(jù),從串行差分端發(fā)送出去;在接收端,時鐘恢復(fù)電路從比特流中提取出時鐘相位和頻率,恢復(fù)出接收時鐘,將串行數(shù)據(jù)解碼并轉(zhuǎn)化為并行數(shù)據(jù),送入用戶接口以進行其他操作。
(3)CRC校驗。CRC循環(huán)冗余檢測用于對被接收數(shù)據(jù)的出錯檢測,RocketIO收發(fā)器CRC檢測邏輯支持32位常量 CRC,被用于如 Gigabit Ethernet、Fibre Channel、Infiniband、User-defined 等通信模式[7]。
要達到RocketIO模塊的最佳性能,需考慮諸多設(shè)計因素,本文針對在設(shè)計過程中遇到的具體問題展開討論。
為滿足高速數(shù)據(jù)通信的需求,GTX收發(fā)器必須具備高性能和低抖動的參考時鐘。一般GTX收發(fā)器提供了3種參考時鐘的驅(qū)動方式:(1)由外部晶振直接驅(qū)動GTX專用時鐘路由得到。(2)從相鄰Quard的專用時鐘路由獲取;(3)從FPGA內(nèi)部獲取。
每個Quad擁有兩個專用差分參考時鐘輸入MGTREFCLK0[P/N]、MGTREFCLK1[P/N],它們用于連接到外部時鐘源。要使用這些參考時鐘,必須對原語IBUFDS_GTXE1進行實例化。用戶設(shè)計必須將IBUFDS_GTXE1的輸出連接至GTXE1的端口MGTREFCLKTX[0]、MGTREFCLKRX[0]。需要注意的是,即使在設(shè)計中未使用 TX PLL,MGTREFCLKTX[0]仍需要被連接[5],單個外部參考時鐘用法如圖2所示。
圖2 單個外部參考時鐘用法
前兩種參考時鐘的驅(qū)動方式的本質(zhì)都是使用GTX專用時鐘路由,而第3種方式是通過FPGA全局時鐘網(wǎng)絡(luò),會引入更大的抖動,因此在實際應(yīng)用中不推薦使用。
FPGA的發(fā)送端接口包括TXUSRCLK和TXUSRCLK2兩個時鐘。其中TXUSRCLK2是GTX收發(fā)器發(fā)送端的用戶時鐘,允許用戶直接使用,由GTX的內(nèi)部時鐘TXOUTCLK驅(qū)動。用戶將并行數(shù)據(jù)傳輸?shù)桨l(fā)送接口,在用戶時鐘上升沿被采樣并送入發(fā)送緩沖,經(jīng)過編碼以及串行化后發(fā)送出去。TXUSRCLK是PCS內(nèi)部邏輯時鐘,不允許用戶直接使用,其大小取決于
由于選擇了8B/10B編碼方式,故16 bit并行數(shù)據(jù)在GTX內(nèi)部傳輸時為20 bit。在雙字節(jié)模式中,需要設(shè)置屬性 GEN_TXUSRCLK=TRUE。此時,TXUSRCLK端口必須降低,邏輯時鐘TXUSRCLK由GTX內(nèi)部提供,并且用戶時鐘TXUSRCLK2大小與TXUSR-CLK相同。根據(jù)線速率3 Gbit·s-1,可以計算出用戶時鐘TXUSRCLK2為150 MHz。其時鐘結(jié)構(gòu)示意圖如圖3所示。
圖3 TXOUTCLK驅(qū)動TXUSRCLK2(雙字節(jié)模式)
FPGA的接收端接口情況類似,包括RXUSRCLK和RXUSRCLK2兩個時鐘。其中,RXUSRCLK2是GTX接收端的用戶時鐘,由恢復(fù)時鐘RXRECCLK驅(qū)動。RXUSRCLK的驅(qū)動方式和屬性設(shè)置與發(fā)送端一致。
GTX收發(fā)器接收端有可編程的Comma檢測機制,可以實現(xiàn)雙字節(jié)符號的檢測[8]。接收器在輸入數(shù)據(jù)流中搜尋Comma字符,若找到,解串器就調(diào)整序列邊界可以匹配檢測到的Comma字符序列,且掃描是連續(xù)進行的,一旦對齊后,后續(xù)的所有數(shù)據(jù)均已對齊。則要求在任意的序列組合里,Comma字符必須唯一。
常用的控制字符有 K28.1、K28.5,設(shè)計選擇K28.5。發(fā)送數(shù)據(jù)時,應(yīng)先發(fā)送足夠數(shù)量的K字符序列以保證通信鏈路的成功建立和接收端的對齊,實際設(shè)計中發(fā)送至少2 000 K字符即可,然后再發(fā)送數(shù)據(jù)部分。發(fā)送端發(fā)送K字符序列時,賦值TXCHARISK=2'b01,TXDATA=16'h43BC。其中TXCHARISK低位賦值為1表明對應(yīng)數(shù)據(jù)的低字節(jié)為K字符,對應(yīng)比特流中的Comma字符。注意,當(dāng)設(shè)置TXCHARISK=2'b11,TXDATA=16'hBCBC時,在接收端存在可能錯位8位的情況,如圖4所示。
圖4 Comma檢測出錯情況
這是因為在發(fā)送的K字符序列中,前一個K字符的低字節(jié)和后一個K字符的高字節(jié)恰好組合為一個新的K字符。如果接收端依據(jù)這個偽K字符進行對齊操作,則后續(xù)所有數(shù)據(jù)均會錯位8位。而當(dāng)設(shè)置TXCHARISK=2'b01時,則不會出現(xiàn)這種偽對齊的情況。
本文構(gòu)建了一個高速數(shù)據(jù)采集存儲系統(tǒng),F(xiàn)PGA分別選擇Xilinx公司Virtex-6系列的XC6VLX240T和Virtex-5系列的 XC5VFX240T。采用 GTX實現(xiàn)FPGA之間數(shù)據(jù)的傳遞,其中,參考時鐘150 MHz,數(shù)據(jù)位寬 16 bit,傳輸速率 3 Gbit·s-1,系統(tǒng)架構(gòu)如圖 5所示。
圖5 高速數(shù)據(jù)采集存儲系統(tǒng)架構(gòu)
高速數(shù)據(jù)采集存儲系統(tǒng)由模數(shù)轉(zhuǎn)換器、FPGA、磁 盤陣列、時鐘芯片等幾個部分構(gòu)成。其中,GTX收發(fā)器被配置成不同的協(xié)議接口以適應(yīng)數(shù)據(jù)傳輸。模數(shù)轉(zhuǎn)換器將采集到的高速數(shù)據(jù)通過GTX送入Virtex-6 FPGA內(nèi)部,經(jīng)過處理后再通過GTX傳遞給Virtex-5 FPGA,然后再通過GTX存入磁盤陣列。可見,RocketIO收發(fā)器是數(shù)據(jù)傳輸?shù)暮诵摹?/p>
本文實現(xiàn)了高速數(shù)據(jù)在FPGA之間的傳輸。為測試方便,采用XC6VLX240T GTX的遠端PCS環(huán)回模式進行測試。Chipscope采樣波形如圖6所示。
圖6 XC6VLX240T遠端PCS環(huán)回測試
由于遠端PCS環(huán)回模式可以同時測試兩端GTX的通信情況,所以由圖 6可知,XC6VLX240T和XC5VFX240T可以正常通信。
IBERT即集成式比特誤碼率測試儀,是Xilinx專門用于具有高速串行接口的FPGA芯片的調(diào)試和交互式配置工具[9]。使用IBERT測試GTX通信質(zhì)量情況,配置MGT/IBERT選項,選取測試時間3 600 s,其測試結(jié)果如圖7所示。在測試期間沒有出現(xiàn)誤碼,設(shè)計滿足高速數(shù)據(jù)的可靠傳輸要求。
圖7 GTX誤碼情況
本文介紹了Xilinx公司Virtex-6系列FPGA集成的RocketIO收發(fā)器的原理和設(shè)計實現(xiàn)。可以看出,利用RocketIO進行高速數(shù)據(jù)的串行傳輸,可以在較大程度上簡化物理層和鏈路層之間的數(shù)據(jù)連接,并提高了芯片之間信號傳遞的速度和可靠性,這對于提高高速數(shù)據(jù)采集存儲系統(tǒng)的整體性能是有利的[10]。
[1]田耕,徐文波.Xilinx FPGA開發(fā)實用教程[M].北京:清華大學(xué)出版社,2012.
[2]李大鵬,陳長勝,王世奎,等.基于FPGA的高速串行傳輸接口研究與實現(xiàn)[J].航空計算技術(shù),2008,38(2):100-103.
[3]杜旭,于洋,黃建.基于FPGA的高速串行傳輸接口的設(shè)計與實現(xiàn)[J].計算機工程與應(yīng)用,2007,43(12):94-96.
[4]Xilinx Conpration.Virtex-6 family overview[M].USA:Xilinx Conpration,2012.
[5]Xilinx Conpration.Virtex - 6 FPGA GTX transceivers user guide[M].USA:Xilinx Conpration,2011.
[6]Xilinx Conpration.Virtex - 5 FPGA GTX transceivers user guide[M].USA:Xilinx Conpration,2011.
[7]李江濤.RocketIO高速串行傳輸原理與實現(xiàn)[J].雷達與對抗,2004(3):48-50.
[8]張守將.基于RocketIO的高速數(shù)據(jù)傳輸系統(tǒng)研究[D].西安:西安電子科技大學(xué),2013.
[9]徐妍,馬麗珍,張麗.IBERT在 FPGA中的應(yīng)用[J].電子科技,2012,25(7):103 -105.
[10]王向陽,趙艷杰.Gbit·s-1試驗系統(tǒng)中高速串行接口的設(shè)計與實現(xiàn)[J].現(xiàn)代電子技術(shù),2008(22):4-7.