《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 業(yè)界動態(tài) > 基于FPGA的IPV6數(shù)據(jù)包的拆裝實現(xiàn)

基于FPGA的IPV6數(shù)據(jù)包的拆裝實現(xiàn)

2008-09-12
作者:王志遠(yuǎn), 杜詩武, 曲 晶

  摘 要: 介紹了一種運用FPGA將IPV6數(shù)據(jù)包的包頭和數(shù)據(jù)部分分離并重新封裝的方法。利用該方法,可以使IPV6數(shù)據(jù)包的拆裝處理速度達(dá)到2Gbit/s以上。
  關(guān)鍵詞: FPGA IPV6數(shù)據(jù)包 拆裝 FIFO


  筆者在參與國家“863”重大專題項目“高速密碼芯片及驗證平臺系統(tǒng)”的過程中,遇到了將IPV6數(shù)據(jù)包的包頭和數(shù)據(jù)部分拆開,然后把數(shù)據(jù)部分送密碼芯片進(jìn)行加/解密處理,最后再將處理后的數(shù)據(jù)部分與包頭重新封裝為數(shù)據(jù)包的課題。以往對IP包進(jìn)行拆裝多利用軟件實現(xiàn),但本項目涉及到配合高速密碼芯片(處理速度在2Gbit/s以上)工作的問題,顯然利用軟件實現(xiàn)IP包的拆裝在速度上達(dá)不到要求。為此,筆者運用FPGA(型號為Xilinx公司的XC2VP20—FF896CGB0345)來實現(xiàn)IPV6數(shù)據(jù)包的拆裝。該FPGA內(nèi)部邏輯框圖如圖1所示。


  其工作流程為:2.5GHz的標(biāo)準(zhǔn)IPV6數(shù)據(jù)包串行差分信號" title="差分信號">差分信號通過ROCKETIO高速通道后轉(zhuǎn)換為16位125MHz并行信號,再經(jīng)信號轉(zhuǎn)換模塊進(jìn)一步轉(zhuǎn)換為66位62.5MHz并行信號后進(jìn)入FIFO1緩存,然后對其輸出數(shù)據(jù)" title="輸出數(shù)據(jù)">輸出數(shù)據(jù)進(jìn)行判斷,若是報頭則送入FIFO3緩存,若是數(shù)據(jù)部分則送入FIFO2緩存,最后將FIFO2數(shù)據(jù)送往密碼芯片進(jìn)行處理;經(jīng)密碼芯片處理" title="芯片處理">芯片處理的數(shù)據(jù)首先放入FIFO4進(jìn)行緩存,然后控制FIFO3和FIFO4將一個數(shù)據(jù)包的頭和數(shù)據(jù)寫入FIFO5中,重新封裝成一個完整的數(shù)據(jù)包;重新封裝的IPV6數(shù)據(jù)包經(jīng)過信號轉(zhuǎn)換模塊變?yōu)?6位125MHz的并行信號,并通過ROCKETIO高速通道轉(zhuǎn)換為2.5GHz高速串行差分信號送出。
  可以看出,經(jīng)過以上流程,實現(xiàn)了一個數(shù)據(jù)包的拆分和重新封裝。
1 IPV6數(shù)據(jù)包的拆分
  用FPGA實現(xiàn)IPV6數(shù)據(jù)包的拆分,主要是通過控制幾個FIFO的數(shù)據(jù)輸入輸出來實現(xiàn)的。FPGA內(nèi)部的拆分單元電路的物理連接如圖2所示,其中FIFO1的作用是緩存IPV6數(shù)據(jù)包,F(xiàn)IFO2的作用是緩存IPV6數(shù)據(jù)包的數(shù)據(jù)部分,F(xiàn)IFO3的作用是緩存IPV6數(shù)據(jù)包的包頭。


  圖中的三個FIFO都是由Xilinx公司的開發(fā)工具ISE6.1自帶的Core IP生成的。其中FIFO1和FIFO3是同步FIFO,工作時鐘為頻率62.5MHz,輸入輸出數(shù)據(jù)寬度都是66bit;FIFO2是異步FIFO,輸入時鐘頻率" title="時鐘頻率">時鐘頻率為62.5MHz,輸出時鐘頻率為50MHz(密碼芯片的工作時鐘頻率為50MHz),輸入輸出數(shù)據(jù)寬度都是64bit。
  FIFO1的輸入數(shù)據(jù)為IPV6數(shù)據(jù)包,格式如表1所示。可以看出,該數(shù)據(jù)是以并行的66bit信號傳輸?shù)模疵恳粫r鐘周期并行傳送66bit數(shù)據(jù)。其中每個周期的高兩位(即65位和64位)為數(shù)據(jù)包的頭尾標(biāo)志,這是IPV6路由器內(nèi)部根據(jù)實際處理需要加上的,“10”表示一個完整數(shù)據(jù)包的第一周期,“11”表示數(shù)據(jù)包的中間內(nèi)容,“01”表示一個完整數(shù)據(jù)包的最后一個周期。因為IPV6數(shù)據(jù)包的包頭是固定長度的,為40字節(jié)(等于5×64 bit),故數(shù)據(jù)的前五個周期為IPV6數(shù)據(jù)包的包頭,包頭后面跟的就是數(shù)據(jù)包的數(shù)據(jù)部分。
  下面討論IPV6數(shù)據(jù)包的包頭和數(shù)據(jù)部分的拆分過程。
  首先判斷FIFO1輸入端數(shù)據(jù)的頭尾標(biāo)志DATA(65~64)與FIFO1的滿標(biāo)志FULL1,如果DATA(65~64)=“10”且FULL1=“0”,即判斷到一個完整數(shù)據(jù)包的開始且FIFO1未滿,則使FIFO1的寫使能WR_EN1有效,寫入數(shù)據(jù);如果DATA(65~64)=“01”,即判斷到一個完整數(shù)據(jù)包結(jié)束時,則使WR_EN1無效,這樣一個完整的數(shù)據(jù)包就緩存到了FIFO1中。
  當(dāng)判斷到FIFO1的空標(biāo)志EMPTY1=“0”,即FIFO1非空時,令FIFO1的讀使能信號RD_EN1有效,將FIFO1中的數(shù)據(jù)讀出,直到EMPTY1=“1”,即FIFO1空為止。對讀出的數(shù)據(jù)設(shè)定一計數(shù)器COUNTER1進(jìn)行計數(shù),當(dāng)DOUT1不為0即FIFO1輸出端有信號時開始計數(shù)。當(dāng)0<COUNTER1<=5時,令FIFO3的寫使能信號WR_EN3有效,將數(shù)據(jù)包的包頭寫入FIFO3緩存;當(dāng)COUNTER1>5時,令WR_EN3無效,WR_EN2有效,將IPV6數(shù)據(jù)包的數(shù)據(jù)部分送FIFO2緩存,準(zhǔn)備送密碼芯片處理,直到頭尾標(biāo)志DOUT1(65~64)=“01”時,將COUNTER1清零,在判斷到COUNTER1為0后,將WR_EN2置為無效。注意:FIFO1的輸出端口是66位的,F(xiàn)IFO2的輸入端口是64位的,故在FIFO1向FIFO2寫數(shù)據(jù)的過程中,應(yīng)將FIFO1的輸出端口信號DOUT1(63~0)傳送給FIFO2的輸入端口DIN2(63~0)。當(dāng)判斷到FIFO2非空時,將其讀使能信號RD_EN2置為有效,即可向密碼芯片送出數(shù)據(jù)。
2 IPV6數(shù)據(jù)包的重新封裝
  用FPGA實現(xiàn)IPV6數(shù)據(jù)包的重新封裝,同樣是通過控制幾個FIFO的數(shù)據(jù)輸入輸出來實現(xiàn)的,F(xiàn)PGA內(nèi)部的重新封裝單元電路的物理連接如圖3所示,其中FIFO4的作用是緩存密碼芯片送出的加解密處理后的數(shù)據(jù);FIFO5的作用是緩存重新封裝后的IPV6數(shù)據(jù)包;FIFO3與拆分單元共用,作用是緩存IPV6數(shù)據(jù)包包頭。


  圖中的FIFO4和FIFO5也都是由Xilinx公司的開發(fā)工具ISE6.1自帶的Core IP生成的,其中FIFO4是異步FIFO,輸入時鐘為50MHz,輸出時鐘為62.5MHz,輸入輸出數(shù)據(jù)寬度都是66bit;FIFO5是同步FIFO,工作時鐘為62.5MHz,輸入輸出數(shù)據(jù)寬度都是66bit。
  密碼芯片對數(shù)據(jù)進(jìn)行加/解密處理完畢之后,在送出處理數(shù)據(jù)前,首先向外部系統(tǒng)發(fā)送一64bit長的接收指令,指明處理數(shù)據(jù)所用的加解密算法和數(shù)據(jù)長度" title="數(shù)據(jù)長度">數(shù)據(jù)長度。例如,在對數(shù)據(jù)進(jìn)行3DES加密處理的情況下,接收指令格式(16進(jìn)制)如圖4所示,其中高56位為指令編碼,低8位為將要輸出的處理數(shù)據(jù)的長度。


  因此,在接收處理數(shù)據(jù)時,首先判斷是否有接收指令,如果有接收指令,則將接收指令中的數(shù)據(jù)長度放入寄存器中進(jìn)行寄存,并設(shè)定計數(shù)器COUNTER2開始計數(shù)。當(dāng)0<COUNTER2<=數(shù)據(jù)長度時,則令FIFO4的寫使能WR_EN4有效;當(dāng)COUNTER2為其它值時,WR_EN4無效。當(dāng)0<COUNTER2<數(shù)據(jù)長度時,將“11”寫入DIN4(65~64),將64bit處理數(shù)據(jù)寫入DIN4(63~0);當(dāng)COUNTER2=數(shù)據(jù)長度時,即接收到最后一周期的處理數(shù)據(jù)時,將“01”寫入DIN4(65~64),將64bit處理數(shù)據(jù)寫入DIN4(63~0),并將COUNTER2清零。這樣,密碼芯片處理后的數(shù)據(jù)就按格式要求緩存到FIFO4中了。
  這時,包頭已經(jīng)緩存到FIFO3中了,處理后的數(shù)據(jù)已經(jīng)按格式要求緩存到FIFO4中了,最后要做的就是控制FIFO3和FIFO4,把一個完整的IPV6數(shù)據(jù)包寫入FIFO5中。具體做法是:設(shè)定計數(shù)器COUNTER3,當(dāng)FIFO3和FIFO4都非空時,COUNTER3開始計數(shù)。當(dāng)COUNTER3>0時,將FIFO5的寫使能信號WR_EN5置為有效;當(dāng)COUNTER3=0時,WR_EN5置為無效。當(dāng)0<COUNTER3<6時,令FIFO3的讀使能RD_EN3有效,F(xiàn)IFO3將輸出數(shù)據(jù)DOUT3(65~0)寫入FIFO5的輸入端DIN5(65~0);當(dāng)COUNTER3>=6時,令RD_EN3無效,RD_EN4有效,將FIFO4的輸出數(shù)據(jù)DOUT4(65~0)寫入FIFO5的輸入端DIN5(65~0),直到DOUT4(65~64)=“01”時,將COUNTER3清零,RD_EN4置為無效。這樣,一個完整的IPV6數(shù)據(jù)包就重新封裝在FIFO5中了,當(dāng)判斷到FIFO5非空時,就可以令RD_EN5有效,向外輸出處理后的完整的IPV6數(shù)據(jù)包了。


  從上述討論可以看出,本課題在FPGA中采用了五個FIFO,并設(shè)定了三個計數(shù)器控制這五個FIFO的輸入輸出來實現(xiàn)對IPV6數(shù)據(jù)包的拆分和重新封裝??偟膩砜?,整個FPGA設(shè)計思路巧妙,電路結(jié)構(gòu)簡單,達(dá)到了預(yù)期的處理速度。圖5是整個測試系統(tǒng)在對1024字節(jié)的IPV6數(shù)據(jù)包進(jìn)行拆包、送密碼芯片加密、重新封裝處理后測試儀控制軟件界面上顯示的收包數(shù)據(jù)統(tǒng)計。從該圖可以看出,整個系統(tǒng)對IPV6數(shù)據(jù)包的處理速度達(dá)到了2.372Gbit/s,而這樣的處理速度用軟件是不可能達(dá)到的。
參考文獻(xiàn)
1 Virtex-II Pro Platform FPGA Handbook.Xilinx 公司,2003
2 潘 松,黃繼業(yè).EDA技術(shù)實用教程.北京:科學(xué)出版社,2003
3 Douglas E.Comer..Internetworking With TCP/IP VolI : Principles,Protocols and Architectures(Fourth Edition).北京:電子工業(yè)出版社,2001

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。