基于Virtex-ⅡPro的高速串行IO及在光互連網(wǎng)絡(luò)中的應(yīng)用
掃描二維碼
隨時(shí)隨地手機(jī)看文章
摘 要 目前,處理器的數(shù)據(jù)傳輸率已遠(yuǎn)高于外部數(shù)據(jù)總線傳輸率。增加并行總線寬度可以提高芯片與芯片之間、背板與背板之間的數(shù)據(jù)吞吐量,但是總線數(shù)目的增多及傳輸速率的加快會(huì)使PCB布線的難度提高并且增加了信號(hào)延時(shí)或偏移。高速串行互連技術(shù)成為提高數(shù)據(jù)傳輸帶寬的有效解決途徑。本文介紹了Xilinx公司的Virtex-Ⅱ Pro FPGA中用于解決高速串行互連問題的RocketIO的使用方法及在光互連網(wǎng)絡(luò)中的應(yīng)用。
關(guān)鍵詞 高速串行互連, RocketIO ,光互連, FPGA
Design And Application In The Optical Interconnection Of High Speed Serial IO Based On Virtex -ⅡPro
FAN Yong WANG Jingcun
University of Science and Technology Beijing .Information Engineering Institute
NO.30,Xueyuan Road,Haidian Zone,Beijing P.R.China 100083
fanyong-2001@sohu.com
wjc9804@163.com
Abstract At present, the data transmitting rate of the processor has already been higher than the transmitting rate of the data bus. Increasing the bandwidth of parallel bus can enhance throughput among chips and backboards. But enhancing bandwidth and transmitting rate increase difficulties of PCB routing and signal delay or skew. The technology of high-speed serial interconnection is an efficient way for enhancing bandwidth of data. In this paper , This paper introduce operation method and the application in the optical interconnection of RocketIO which is embedded in Virtex-Ⅱ Pro FPGA in Xilinx Corp to solve problem of high-speed serial interconnection..
Keywords High-speed serial interconnection , RocketIO , Optical interconnection , FPGA
引言
隨著互聯(lián)網(wǎng)應(yīng)用的日趨普及和飛速發(fā)展,對(duì)數(shù)據(jù)傳輸?shù)男枨蠹眲≡黾?。此外,?shù)字電視及彩色圖像均需要更高的帶寬。數(shù)據(jù)交換的瓶頸存在于系統(tǒng)互連一級(jí),即系統(tǒng)內(nèi)不同器件間的互相通信以及與外部其它系統(tǒng)通信的速度。這就需要一種新的系統(tǒng)互連技術(shù)來將CPU的性能轉(zhuǎn)換為系統(tǒng)性能。
一般來說,增加并行總線寬度可以提高芯片與芯片之間、背板與背板之間的數(shù)據(jù)吞吐量。但是總線數(shù)目增多及傳輸速率的加快會(huì)陡增PCB布線的難度和信號(hào)的延時(shí)或偏移,從而使提高總線數(shù)據(jù)吞吐率的要求面臨一個(gè)極限。
高速串行互連技術(shù)由于將時(shí)鐘與數(shù)據(jù)合并進(jìn)行傳輸,從而克服了時(shí)鐘和數(shù)據(jù)的抖動(dòng)問題,能夠極大提高傳輸速率,降低IC外圍引腳數(shù),降低功耗并獲得較佳的信號(hào)完整性。[1>在Xilinx公司的Virtex-Ⅱ Pro FPGA器件中提供了用于實(shí)現(xiàn)高速串行互連的IP核-RocketIO。本文將比較詳細(xì)地描述該IP核的結(jié)構(gòu)、原理及在應(yīng)用中需要注意的問題,同時(shí)介紹了它的硬件測(cè)試方法及在高速光互連方面的應(yīng)用。
1 RocketIO的結(jié)構(gòu)和原理
在支持高速串行互連技術(shù)傳輸方式的FPGA中,影響傳輸速度的關(guān)鍵因素有以下幾點(diǎn):
(1)串行輸入-并行輸出的轉(zhuǎn)換結(jié)構(gòu)和并行輸入-串行輸出的轉(zhuǎn)換器結(jié)構(gòu),也稱為串化器(Serializer)和解串器(Deserializer)結(jié)構(gòu)
(2)時(shí)鐘和信號(hào)恢復(fù)電路(Clock & Data Recovery),它是保證高速俘獲數(shù)據(jù)的關(guān)鍵因素之一。
(3)系統(tǒng)時(shí)鐘管理和PLL電路,它解決板級(jí)和FPGA內(nèi)部的時(shí)鐘同步問題,將數(shù)據(jù)流的偏移和信道間偏移最小化。
下面將介紹RocketIO是怎樣從原理和結(jié)構(gòu)上解決這些問題的。
1.1 RocketIO的結(jié)構(gòu)
RocketIO是具有時(shí)鐘數(shù)據(jù)恢復(fù)功能的全雙工串行收發(fā)器,可有效實(shí)施每通道帶寬達(dá)到3.125Gb/s的不同協(xié)議設(shè)計(jì),并可利用通道綁定滿足各種應(yīng)用不斷增長的對(duì)數(shù)據(jù)速率和位寬的要求。它的結(jié)構(gòu)如圖1所示[2>:
圖1 RocketIO 結(jié)構(gòu)框圖
RocketIO模塊由以下兩部分構(gòu)成:
(1)物理編碼子層(PCS,Physical Coding Sublayer)
該模塊提供與FPGA邏輯內(nèi)的數(shù)字接口,其內(nèi)部包括:循環(huán)冗余碼校驗(yàn)CRC、8B/10B編解碼器、先進(jìn)先出緩沖器FIFO、接收通道中有彈性緩沖器、通道綁定和時(shí)鐘修正處理器。
(2)物理介質(zhì)接入層(PMA,Physical Media Sublayer)
該模塊提供與外部媒體的模擬接口,其內(nèi)部包括20倍的時(shí)鐘倍頻器、發(fā)送端時(shí)鐘生成器、發(fā)送緩沖器、串化器,接收端的時(shí)鐘恢復(fù)電路、接收緩沖器、解串器、可變速率(50~156.25MHz)的全雙工收發(fā)器、可編程的五級(jí)差分輸出幅度(擺率)控制、可編程的四級(jí)輸出預(yù)加重模型,用于改善輸出信號(hào)的完整性。
1.2 RocketIO的原理
作為FPGA內(nèi)部的IP核,RocketIO對(duì)用戶提供了9類信號(hào),通過它們完成數(shù)據(jù)的發(fā)送,數(shù)據(jù)的接收,數(shù)據(jù)傳輸狀態(tài)的監(jiān)測(cè)以及通道綁定功能,它們分別是數(shù)據(jù)發(fā)送信號(hào)、數(shù)據(jù)發(fā)送狀態(tài)信號(hào)、發(fā)送口控制信號(hào)、數(shù)據(jù)接收信號(hào)、數(shù)據(jù)接收控制信號(hào)、數(shù)據(jù)接收狀態(tài)信號(hào)、通道綁定信號(hào)、收發(fā)器控制信號(hào)、時(shí)鐘信號(hào)。
下面結(jié)合RocketIO的結(jié)構(gòu)框圖來說明它的工作原理。
RocketIO可以通過屬性設(shè)置接收32/16/8位的數(shù)據(jù)并將其轉(zhuǎn)換成串行位流發(fā)送出去。
對(duì)進(jìn)入的并行數(shù)據(jù)可以選擇是否加入CRC校驗(yàn)碼以及校驗(yàn)的范圍。如果選擇加入校驗(yàn)碼,在發(fā)送端,發(fā)送器統(tǒng)計(jì)包頭(SOP)和包尾(EOP)之間的數(shù)據(jù),并形成4字節(jié)的CRC碼。發(fā)送器將該CRC碼插入到數(shù)據(jù)包的最后(EOP標(biāo)志之前)。因此,需要在發(fā)送緩沖器中留有4字節(jié)的空間。另外,在接收端有專用輸出信號(hào)來表示CRC校驗(yàn)是否出錯(cuò)。RocketIO的CRC校驗(yàn)只能在單通道中實(shí)現(xiàn),不能完成對(duì)多通道中所拆分的字節(jié)進(jìn)行CRC校驗(yàn)和統(tǒng)計(jì)。
經(jīng)過CRC統(tǒng)計(jì)校驗(yàn)的數(shù)據(jù)可以選擇是否進(jìn)行8B/10B編碼。這種編碼模式是指8個(gè)數(shù)據(jù)位轉(zhuǎn)換為不連續(xù)5個(gè)以上的“1”或“0”的10位比特碼,以得到更好的直流(DC)平衡性。8B/10B編碼可有256種組合及兩種數(shù)據(jù)類型:(1)數(shù)據(jù)碼組(標(biāo)為D),用于數(shù)據(jù)傳輸。(2)特定控制碼組(標(biāo)為K),用于控制序列傳輸。
經(jīng)過8B/10B編碼的數(shù)據(jù)進(jìn)入TX FIFO,這是一個(gè)4×20位緩沖器(20位寬=2字節(jié)經(jīng)過8B/10B編碼后的寬度),它的主要作用是調(diào)節(jié)時(shí)鐘之間的相位差。
參考時(shí)鐘通過單片集成的PLL電路產(chǎn)生20倍頻的時(shí)鐘,在它的作用下,并行數(shù)據(jù)被轉(zhuǎn)換為串行數(shù)據(jù)由TXP和TXN差分端口輸出。為作測(cè)試方便,通過內(nèi)部閉環(huán)可以將輸出差分信號(hào)直接給解串器。在時(shí)鐘/數(shù)據(jù)恢復(fù)電路的作用下,從接收的串行數(shù)據(jù)流中解出時(shí)鐘的頻率和相位,將它的20分頻時(shí)鐘作為恢復(fù)時(shí)鐘。在恢復(fù)時(shí)鐘作用下從解串器產(chǎn)生10位并行數(shù)據(jù)用于8B/10B譯碼的輸入,譯碼后的數(shù)據(jù)進(jìn)入接收彈性緩沖器。
接收彈性緩沖器(RX Elastic Buffer)是一個(gè)64×13位的緩沖器(13位寬=1字節(jié)的8B/10B譯碼后的寬度+3位狀態(tài)位)。該緩沖器由恢復(fù)時(shí)鐘作為寫時(shí)鐘,而讀時(shí)鐘由寫時(shí)鐘來生成和驅(qū)動(dòng),這兩個(gè)時(shí)鐘的相位關(guān)系是不可預(yù)知的,因?yàn)榛謴?fù)時(shí)鐘需要經(jīng)過DCM(Digitial Clock Manager)或BUFG生成讀時(shí)鐘。因此在接收彈性緩沖器中需要有時(shí)鐘修正來避免它的溢出。時(shí)鐘修正的基本原理是在發(fā)送端,當(dāng)數(shù)據(jù)發(fā)送了一定的字節(jié)或數(shù)個(gè)數(shù)據(jù)包后,通過插入和發(fā)送一些特定的字節(jié)(修正字符);在接收端,當(dāng)接收到這些字符后將會(huì)自動(dòng)地丟棄。
另外,RocketIO提供了通道綁定(Channel Bonding)功能。由于RocketIO的每個(gè)通道最大只能提供3.125Gb/s的數(shù)據(jù)傳輸率,如果需要得到更高的數(shù)據(jù)帶寬,就必須將幾個(gè)通道組合起來,這就是通道綁定。例如,以125M時(shí)鐘傳輸16位的數(shù)據(jù),當(dāng)考慮8B/10B編碼后,實(shí)際的傳輸帶寬為20b×125MHz=2.5Gb/s。這只能在一個(gè)RocketIO實(shí)現(xiàn)。若以同樣的帶寬傳輸數(shù)據(jù)時(shí)就必須用兩個(gè)RocketIO模塊以通道綁定的方式實(shí)現(xiàn)。
對(duì)RocketIO模塊進(jìn)行仿真需要使用SmartModels,通過它可以對(duì)RocketIO模塊的實(shí)際功能進(jìn)行仿真,具體細(xì)節(jié)可以參考XILINX的解決方案Solution Record 15501[2>。
2 RocketIO硬件測(cè)試的幾種方法
當(dāng)RocketIO模塊設(shè)計(jì)完成并且通過仿真驗(yàn)證,需要從硬件上來驗(yàn)證RocketIO的工作情況,下面,結(jié)合我們使用RocketIO的經(jīng)驗(yàn),介紹兩種比較實(shí)用的硬件測(cè)試方法。
2.1 使用集成化邏輯分析工具
Xilinx利用高性能邏輯器件的特點(diǎn)推出了置于FPGA內(nèi)部的邏輯分析儀-ChipScope集成化邏輯分析工具。該分析工具與ISE6項(xiàng)目瀏覽器的集成更為緊密,可方便地選擇和插入驗(yàn)證核心,定義信號(hào)監(jiān)測(cè)點(diǎn),同時(shí)為整體設(shè)計(jì)流程提供實(shí)時(shí)調(diào)試規(guī)劃能力。
它的主要功能是通過JTAG編程接口,在線、實(shí)時(shí)地讀出FPGA內(nèi)部的信號(hào)。其基本原理是利用FPGA中未使用的塊存儲(chǔ)器,根據(jù)用戶設(shè)定的觸發(fā)條件,將信號(hào)實(shí)時(shí)地保存到這些塊存儲(chǔ)器中,然后通過JATG接口傳送到計(jì)算機(jī),并通過計(jì)算機(jī)的用戶界面GUI顯示出所采集的時(shí)序波形。其設(shè)計(jì)流程如圖2所示:
圖2 ChipScope 工具設(shè)計(jì)流程
通過ChipScope集成化邏輯分析工具,可以在RocketIO模塊下載到芯片時(shí)方便地觀測(cè)狀態(tài)變化和數(shù)據(jù)的傳輸情況。
2.2 使用計(jì)算機(jī)串口構(gòu)造分析工具
ChipScope IP核加入原有的設(shè)計(jì),會(huì)占用芯片的一部分資源,對(duì)設(shè)計(jì)的綜合、布局布線造成一定的影響。尤其是在對(duì)時(shí)序要求敏感的設(shè)計(jì)中,額外的資源開銷會(huì)造成不確定的影響。鑒于這種情況,我們參考ChipScope的基本原理,使用計(jì)算機(jī)串口構(gòu)造了一種簡單、有效、資源開銷更小的分析工具。
下面,以測(cè)試RocketIO數(shù)據(jù)傳輸為例介紹這種方法,如圖3所示。
圖3 使用串口觀測(cè)RocketIO數(shù)據(jù)傳輸示意圖
假設(shè)需要傳輸?shù)?2位并行數(shù)據(jù)由FPGA內(nèi)部產(chǎn)生,通過RocketIO模塊生成的串行數(shù)據(jù)通過內(nèi)部閉環(huán)再轉(zhuǎn)換成32位并行數(shù)據(jù),為觀測(cè)數(shù)據(jù)在RocketIO模塊內(nèi)部轉(zhuǎn)換是否正確,將轉(zhuǎn)換后的并行數(shù)據(jù)放入雙端口RAM中,當(dāng)數(shù)據(jù)傳輸完畢,再通過FPGA內(nèi)部構(gòu)造的串口控制器將數(shù)據(jù)通過串口傳到計(jì)算機(jī)加以分析。
這種方法所構(gòu)造的串口控制器只占用很小的芯片資源,雙端口RAM的大小可以由用戶設(shè)定。另外,這種方法也可作為低端FPGA或CPLD的開發(fā)手段,因?yàn)檫@些芯片不支持集成化邏輯分析工具。
3 RocketIO在高速光互連接口卡中的應(yīng)用
我們將RocketIO應(yīng)用于高速光互連接口卡的設(shè)計(jì)中,通過DDR存儲(chǔ)器接口而不是PCI接口作為計(jì)算機(jī)數(shù)據(jù)出口,[3>為解決機(jī)群互連鏈路瓶頸問題做了有益的嘗試。光互連接口卡的結(jié)構(gòu)如圖4所示,它具有標(biāo)準(zhǔn)的DIMM插槽接口,整個(gè)控制邏輯、DDR接口模塊、并/串轉(zhuǎn)換機(jī)制(RocketIO),都在FPGA芯片中設(shè)計(jì)完成。
通過它可以實(shí)現(xiàn)兩個(gè)計(jì)算機(jī)DDR存儲(chǔ)器接口之間的64位、200MHz的數(shù)據(jù)傳輸,鏈路單通道的最高實(shí)測(cè)速率達(dá)到2Gbit/s,充分利用了光互連鏈路的性能優(yōu)越性,提升了整體通訊性能。
圖4光互連接口卡的結(jié)構(gòu)
下面介紹將RocketIO應(yīng)用于光互連接口卡中的設(shè)計(jì)過程。
設(shè)計(jì)中選擇了Custom原型,它包含了RocketIO模塊中所有的屬性,用戶可以根據(jù)需要選擇相應(yīng)的屬性并且制定用戶協(xié)議。通過設(shè)置屬性“TX_DATA_WIDTH”為4,可以允許32位并行數(shù)據(jù)的輸入。數(shù)據(jù)以幀的方式進(jìn)行傳輸,發(fā)送幀的格式如圖5所示:
圖5 發(fā)送幀的格式
設(shè)置時(shí)鐘修正序列及長度,如下所示:
CLK_COR_SEQ_1_1 is 00110111100
CLK_COR_SEQ_1_2 is 00010010101
CLK_COR_SEQ_1_3 is 00010110101
CLK_COR_SEQ_1_4 is 00010110101
CLK_COR_SEQ_LEN is 4
因此,在幀頭之前加入時(shí)鐘修正字符“BC95B5B5”。
設(shè)置CRC校驗(yàn)的頭(SOP)、尾(EOP)及校驗(yàn)?zāi)J剑缦滤荆?BR>CRC_END_OF_PKT is "K29_7"
CRC_FORMAT is "USER_MODE"
CRC_START_OF_PKT is "K27_7"
數(shù)據(jù)幀的發(fā)送程序如下:
…
…
case (txstate)
3'b000: begin
sel<= 1'b0;
txstate <= 3'b001;
txaddr <= 0; //RAM地址信號(hào)
su_cnt <= 0;
data_36 <= 0;
end
3'b001: begin
sel <= 1'b0;
if( su_cnt < 10) //連續(xù)發(fā)送80個(gè) “BC95B5B5”
begin
txaddr <= txaddr+1;
if (txaddr == 7)
begin
txaddr <= 0;
txstate <= 3'b001;
end
end
else
begin
sel <= 1'b0;
txaddr <= 8;//幀頭地址
txstate <= 3'b010;
end
su_cnt <= su_cnt + 1'b1;
end
3'b010: begin
txstate <= 3'b011;
txaddr <= 9; //幀尾地址
end
3'b011: begin
sel <= 1'b1;
data <= data + 1;//發(fā)送的數(shù)據(jù)
if(data==2048)
begin
txstate <= 3'b000;
sel <= 1'b0;
end
end
default: begin
txstate <= 3'b000;
txaddr <= 0;
su_cnt <= 0;
end
endcase
…
…
修正字符、CRC校驗(yàn)EOP、SOP都是存放在RAM中的數(shù)據(jù),在發(fā)送數(shù)據(jù)的時(shí)候根據(jù)需要將它們放入數(shù)據(jù)前后組成發(fā)送幀?!癝el”= 0選擇發(fā)送RAM中的數(shù)據(jù),“Sel”= 1選擇發(fā)送計(jì)數(shù)器的計(jì)數(shù)值。
在接收端,通過判斷EOP、SOP界定數(shù)據(jù)范圍,從而將數(shù)據(jù)存放到雙端口RAM中。
4 結(jié)束語
目前,各種應(yīng)用對(duì)數(shù)據(jù)傳輸率的要求越來越高,高速串行互連技術(shù)由于將時(shí)鐘與數(shù)據(jù)合并進(jìn)行傳輸,從而克服了高速并行數(shù)據(jù)傳輸過程中的時(shí)鐘和數(shù)據(jù)的抖動(dòng)問題。Xilinx公司的Virtex-Ⅱ Pro FPGA器件中所提供的用于實(shí)現(xiàn)高速串行互連的RocketIO IP核具有使用簡單、配置靈活、集成度高等優(yōu)點(diǎn),我們將它用于解決光互連接口卡中高速串行數(shù)據(jù)傳輸問題,簡化了設(shè)計(jì),提高了系統(tǒng)的集成度和可靠性。同時(shí),在基于研祥公司的工控機(jī)主板上我們完成了光互連接口卡的可行性測(cè)試。
參考文獻(xiàn)
[1> 孫航Xilinx可編程邏輯器件的高級(jí)應(yīng)用與設(shè)計(jì)技巧. 北京:電子工業(yè)出版社,2004
[2> RocketIOTM Transceiver User Guide.October 16,2002
[3> 井文才,田勁東,張殉,劉衛(wèi),周革,張以漠.
用于機(jī)群系統(tǒng)的高速光互連網(wǎng)絡(luò)接口卡設(shè)計(jì)[J>. 光電子∙激光,2000
[4> 夏宇聞.從算法設(shè)計(jì)到硬件邏輯的實(shí)現(xiàn).
高等教育出版社,2001
作者簡介
樊勇,北京科技大學(xué)信息工程學(xué)院在讀博士生。研究興趣是儀器儀表的設(shè)計(jì)與應(yīng)用,嵌入式系統(tǒng)等。目前的研究方向是高速數(shù)字設(shè)計(jì)及高速PCB的設(shè)計(jì)與應(yīng)用。