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

相關(guān)專題: 芯片 5G

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

其工作流程為:2.5GHz的標(biāo)準(zhǔn)IPV6數(shù)據(jù)包串行差分信號(hào)通過(guò)ROCKETIO高速通道后轉(zhuǎn)換為16位125MHz并行信號(hào),再經(jīng)信號(hào)轉(zhuǎn)換模塊進(jìn)一步轉(zhuǎn)換為66位62.5MHz并行信號(hào)后進(jìn)入FIFO1緩存,然后對(duì)其輸出數(shù)據(jù)進(jìn)行判斷,若是報(bào)頭則送入FIFO3緩存,若是數(shù)據(jù)部分則送入FIFO2緩存,最后將FIFO2數(shù)據(jù)送往密碼芯片進(jìn)行處理;經(jīng)密碼芯片處理的數(shù)據(jù)首先放入FIFO4進(jìn)行緩存,然后控制FIFO3和FIFO4將一個(gè)數(shù)據(jù)包的頭和數(shù)據(jù)寫(xiě)入FIFO5中,重新封裝成一個(gè)完整的數(shù)據(jù)包;重新封裝的IPV6數(shù)據(jù)包經(jīng)過(guò)信號(hào)轉(zhuǎn)換模塊變?yōu)?6位125MHz的并行信號(hào),并通過(guò)ROCKETIO高速通道轉(zhuǎn)換為2.5GHz高速串行差分信號(hào)送出。

可以看出,經(jīng)過(guò)以上流程,實(shí)現(xiàn)了一個(gè)數(shù)據(jù)包的拆分和重新封裝。

用FPGAP實(shí)現(xiàn)IPV6數(shù)據(jù)包的拆分,主要是通過(guò)控制幾個(gè)FIFO的數(shù)據(jù)輸入輸出來(lái)實(shí)現(xiàn)的。FPGA內(nèi)部的拆分單元電路的物理連接如圖2所示,其中FIFO的作用是緩存IPV6數(shù)據(jù)包,F(xiàn)IFO2的作用是緩存IPV6數(shù)據(jù)包的數(shù)據(jù)部分,F(xiàn)IFO3的作用是緩存IPV6數(shù)據(jù)包的包頭。

圖中的三個(gè)FIFO都是由Xilinx公司的開(kāi)發(fā)工具ISE6.1自帶的Core IP生成的。其中FIFO1和FIFO3是同步FIFO,工作時(shí)鐘為頻率62.5MHz,輸入輸出數(shù)據(jù)寬度都是66bit;FIFO2是異步FIFO,輸入時(shí)鐘頻率為62.5MHz,輸出時(shí)鐘頻率為50MHz(密碼芯片的工作時(shí)鐘頻率為50MHz),輸入輸出數(shù)據(jù)寬度都是64bit。

FIFO1的輸入數(shù)據(jù)為IPV6數(shù)據(jù)包?梢钥闯觯摂(shù)據(jù)是以并行的66bit信號(hào)傳輸?shù),即每一時(shí)鐘周期并行傳送66bit數(shù)據(jù),其中每個(gè)周期的高兩位(即65位和64位)為數(shù)據(jù)包的頭尾標(biāo)志,這是IPV6路由器內(nèi)部根據(jù)實(shí)際處理需要加上的,“10”表示一個(gè)完整數(shù)據(jù)包的第一周期,“11”表示數(shù)據(jù)包的中間內(nèi)容,“01”表示一個(gè)完整數(shù)據(jù)包的最后一個(gè)周期。因?yàn)镮PV6數(shù)據(jù)包的包頭是固定長(zhǎng)度的,為40字節(jié)(等于5×64bit),故數(shù)據(jù)的前五個(gè)周期為IPV6數(shù)據(jù)包的包頭,包頭后面跟的就是數(shù)據(jù)包的數(shù)據(jù)部分。

下面討論IPV6數(shù)據(jù)包的包頭和數(shù)據(jù)部分的拆分過(guò)程。

首先判斷FIFO1輸入端數(shù)據(jù)的頭尾標(biāo)志DATA(65~64)與FIFO1的滿標(biāo)志FULL1,如果DATA(65~64)=“10”且FULL1=“0”,即判斷到一個(gè)完整數(shù)據(jù)包的開(kāi)始且FIFO1未滿,則使FIFO1的寫(xiě)使能WR_EN1有效,寫(xiě)入數(shù)據(jù);如果DATA(65~64)=“01”,好判斷到一個(gè)完整數(shù)據(jù)包結(jié)束時(shí),則使WR_EN1無(wú)效,這樣一個(gè)完整的數(shù)據(jù)包就緩存到了FIFO1時(shí)。

當(dāng)判斷到FIFO1的空標(biāo)示EMPTY1=“0”,即FIFO1非空間,令FIFO1的讀使能信號(hào)RD_EN1有效,將FIFO1中的數(shù)據(jù)讀出,直到EMPTY1=“1”,即FIFO1空為止。對(duì)讀出的數(shù)據(jù)設(shè)定一計(jì)數(shù)器COUNTER1進(jìn)行計(jì)數(shù),當(dāng)DONT1不為0即FIFO1輸出端有信號(hào)時(shí)開(kāi)始計(jì)數(shù)。當(dāng)05時(shí),令WR_EN3無(wú)效,WR_EN2有效,將IPV6數(shù)據(jù)包的數(shù)據(jù)部分送FIFO2緩存,準(zhǔn)備送密碼芯片處理,直到頭尾標(biāo)志DOUT1(65~64)=“01”時(shí),將COUNTER1清零,在判斷到COUNTER1為0后,將WR_EN2置為無(wú)效。注意:FIFO1的輸出端口是66位,F(xiàn)IFO2的輸入端口是64位的,故在FIFO1向FIFO2寫(xiě)數(shù)據(jù)的過(guò)程中,應(yīng)將FIFO1的輸出端口信號(hào)DOUT(63~0)傳送給FIFO2的輸入端口DIN2(63~-)。當(dāng)判斷到FIFO2非空間,將其讀使能信號(hào)RD_EN2置為有效,即可向密碼芯片送出數(shù)據(jù)。

用FPGA實(shí)現(xiàn)IPV6數(shù)據(jù)包的重新封裝,同時(shí)是通過(guò)控制幾個(gè)FIFO的數(shù)據(jù)輸入輸出來(lái)實(shí)現(xiàn)的,F(xiàn)PGA同部的重新封裝單元電路的物理連接如圖3所示,其FIFO4的作用是緩存密碼芯片送出的加解密處理后的數(shù)據(jù);FIFO5的作用是緩存重新封裝后的IPV6數(shù)據(jù);FIFO3與拆分單元共用,作用是緩用IPV6數(shù)據(jù)包頭。

圖中的FIFO4和FIFO5也都是由Xilinx公司的開(kāi)發(fā)工具ISE6.1自帶的Core IP生成的,其中FIFO4是異步FIFO,輸入時(shí)鐘為50MHz,輸出時(shí)鐘為62.5MHz,輸入輸出數(shù)據(jù)寬度都是66bit;FIFO5是同步FIFO,工作時(shí)鐘為62.5MHz,輸入輸出數(shù)據(jù)寬度都是66bit。

密碼芯片對(duì)數(shù)據(jù)進(jìn)行加/解密處理完畢之后,在送出處理數(shù)據(jù)前,首先向外部系統(tǒng)發(fā)送一64bit長(zhǎng)的連接指令,指明處理數(shù)據(jù)所用的加解密算法和數(shù)據(jù)長(zhǎng)度。例如,在對(duì)數(shù)據(jù)進(jìn)行2DES加密處理的情況下,接收指令格式(16位制)如圖4所示,其中高56位為指令編碼,低8位為將要輸出的處理數(shù)據(jù)的長(zhǎng)度。

因此,在接收處理數(shù)據(jù)時(shí),首先判斷是否有接收指令,如果有接收搦令,則其接收指令中的數(shù)據(jù)長(zhǎng)度放寄存器中進(jìn)行寄存,并設(shè)定計(jì)數(shù)器COUNTER2開(kāi)始計(jì)數(shù)。當(dāng)0

這時(shí),包頭已經(jīng)緩存到FIFO3中了,處理后的數(shù)據(jù)已經(jīng)按格式要求緩存到FIFO4中了,最后要做的就是控制FIFO3和FIFO4,把一個(gè)完整的IPV6數(shù)據(jù)包寫(xiě)入FIFO5中。具體做法是:設(shè)定計(jì)數(shù)器COUNTER3,當(dāng)FIFO3和FIFO4都非空時(shí),COUNTER3開(kāi)始計(jì)數(shù)。當(dāng)COUNTER3>0時(shí),將FIFO5的寫(xiě)使能信號(hào)WR_EN5置為有效;當(dāng)COUNTER3=0時(shí),WR_EN5置為無(wú)效。當(dāng)0l=6時(shí),令RD_EN3無(wú)效,RD_EN4有效,將FIFO4的輸出數(shù)據(jù)DOUT4(65~0)寫(xiě)入FIFO5的輸入端DIN5(65~0),直到DOUT4(65~64)=“01”時(shí),將COUNTER3清零,RD_EN4置為無(wú)效。這樣,一個(gè)完整的IPV6數(shù)據(jù)包就重封裝在FIFO5中了,當(dāng)判斷到FIFO5非空間,就可以令RD_EN5有效,向外輸出處理后的完整的IPV6數(shù)據(jù)包了。

從上述討論可以看出,本課題在FPGA中采用了五個(gè)FIFO,并設(shè)定了三個(gè)計(jì)數(shù)器控制這五個(gè)FIFO的輸入輸出來(lái)實(shí)現(xiàn)對(duì)IPV6數(shù)據(jù)包的拆分和重新封裝?偟膩(lái)看,整個(gè)FPGA設(shè)計(jì)思路巧妙,電路結(jié)構(gòu)簡(jiǎn)單,達(dá)到了預(yù)期的處理速度。圖5是整個(gè)測(cè)試系統(tǒng)在對(duì)1024字節(jié)的IPV6數(shù)據(jù)包進(jìn)行拆包、送密碼芯片加密。重裝封裝處理后測(cè)試儀控制軟件界面上顯示的收包數(shù)據(jù)統(tǒng)計(jì)。從該圖可以看出,整個(gè)系統(tǒng)對(duì)IPV6數(shù)據(jù)包的處理速度達(dá)到了2.372Gbit/s,而這樣的處理速度用軟件是不可能達(dá)到的。

作者:王志遠(yuǎn) 杜詩(shī)武 曲晶 來(lái)源:《電子技術(shù)應(yīng)用》

  免責(zé)聲明:本文僅代表作者個(gè)人觀點(diǎn),與C114中國(guó)通信網(wǎng)無(wú)關(guān)。其原創(chuàng)性以及文中陳述文字和內(nèi)容未經(jīng)本站證實(shí),對(duì)本文以及其中全部或者部分內(nèi)容、文字的真實(shí)性、完整性、及時(shí)性本站不作任何保證或承諾,請(qǐng)讀者僅作參考,并請(qǐng)自行核實(shí)相關(guān)內(nèi)容。


微信掃描分享本文到朋友圈
掃碼關(guān)注5G通信官方公眾號(hào),免費(fèi)領(lǐng)取以下5G精品資料
  • 1、回復(fù)“YD5GAI”免費(fèi)領(lǐng)取《中國(guó)移動(dòng):5G網(wǎng)絡(luò)AI應(yīng)用典型場(chǎng)景技術(shù)解決方案白皮書(shū)
  • 2、回復(fù)“5G6G”免費(fèi)領(lǐng)取《5G_6G毫米波測(cè)試技術(shù)白皮書(shū)-2022_03-21
  • 3、回復(fù)“YD6G”免費(fèi)領(lǐng)取《中國(guó)移動(dòng):6G至簡(jiǎn)無(wú)線接入網(wǎng)白皮書(shū)
  • 4、回復(fù)“LTBPS”免費(fèi)領(lǐng)取《《中國(guó)聯(lián)通5G終端白皮書(shū)》
  • 5、回復(fù)“ZGDX”免費(fèi)領(lǐng)取《中國(guó)電信5GNTN技術(shù)白皮書(shū)
  • 6、回復(fù)“TXSB”免費(fèi)領(lǐng)取《通信設(shè)備安裝工程施工工藝圖解
  • 7、回復(fù)“YDSL”免費(fèi)領(lǐng)取《中國(guó)移動(dòng)算力并網(wǎng)白皮書(shū)
  • 8、回復(fù)“5GX3”免費(fèi)領(lǐng)取《R1623501-g605G的系統(tǒng)架構(gòu)1
  • 本周熱點(diǎn)本月熱點(diǎn)

     

      最熱通信招聘

    業(yè)界最新資訊


      最新招聘信息