基于FPGA的IPV6数字包的分离与封装的实现

笔者在参加国家“863”重大专题项目“高速密码芯片及验证平台系统”的过程中,遇到了将ipv6数据包的包头和数据部分拆开,然后在数据部分送密码芯片进行加/解密处理,最后再将处理后的数据部分与包头重新封装为数据包的课题。以往对ip包进行拆装多利用软件实现,但本项目涉及到配合高速密码芯片(处理速度在2gbit/s以上)工作的问题,显然利用软件实现ip包的拆装在速度上达不到要求。为此,笔者运用fpga(型号为xilinx公司的xc2vp20-ff86cgb0345)来实现ipv6数据包的拆装。该fpga内部逻辑框图如图1所示。
其工作流程为:2.5ghz的标准ipv6数据包串行差分信号通过rocketio高速通道后转换为16位125mhz并行信号,再经信号转换模块进一步转换为66位62.5mhz并行信号后进入fifo1缓存,然后对其输出数据进行判断,若是报头则送入fifo3缓存,若是数据部分则送入fifo2缓存,最后将fifo2数据送往密码芯片进行处理;经密码芯片处理的数据首先放入fifo4进行缓存,然后控制fifo3和fifo4将一个数据包的头和数据写入fifo5中,重新封装成一个完整的数据包;重新封装的ipv6数据包经过信号转换模块变为16位125mhz的并行信号,并通过rocketio高速通道转换为2.5ghz高速串行差分信号送出。
可以看出,经过以上流程,实现了一个数据包的拆分和重新封装。
1 ipv6数据包的拆分
用fpgap实现ipv6数据包的拆分,主要是通过控制几个fifo的数据输入输出来实现的。fpga内部的拆分单元电路的物理连接如图2所示,其中fifo的作用是缓存ipv6数据包,fifo2的作用是缓存ipv6数据包的数据部分,fifo3的作用是缓存ipv6数据包的包头。
图中的三个fifo都是由xilinx公司的开发工具ise6.1自带的core ip生成的。其中fifo1和fifo3是同步fifo,工作时钟为频率62.5mhz,输入输出数据宽度都是66bit;fifo2是异步fifo,输入时钟频率为62.5mhz,输出时钟频率为50mhz(密码芯片的工作时钟频率为50mhz),输入输出数据宽度都是64bit。
fifo1的输入数据为ipv6数据包。可以看出,该数据是以并行的66bit信号传输的,即每一时钟周期并行传送66bit数据,其中每个周期的高两位(即65位和64位)为数据包的头尾标志,这是ipv6路由器内部根据实际处理需要加上的,“10”表示一个完整数据包的第一周期,“11”表示数据包的中间内容,“01”表示一个完整数据包的最后一个周期。因为ipv6数据包的包头是固定长度的,为40字节(等于5×64bit),故数据的前五个周期为ipv6数据包的包头,包头后面跟的就是数据包的数据部分。
下面讨论ipv6数据包的包头和数据部分的拆分过程。
首先判断fifo1输入端数据的头尾标志data(65~64)与fifo1的满标志full1,如果data(65~64)=“10”且full1=“0”,即判断到一个完整数据包的开始且fifo1未满,则使fifo1的写使能wr_en1有效,写入数据;如果data(65~64)=“01”,好判断到一个完整数据包结束时,则使wr_en1无效,这样一个完整的数据包就缓存到了fifo1时。
当判断到fifo1的空标示empty1=“0”,即fifo1非空间,令fifo1的读使能信号rd_en1有效,将fifo1中的数据读出,直到empty1=“1”,即fifo1空为止。对读出的数据设定一计数器counter1进行计数,当dont1不为0即fifo1输出端有信号时开始计数。当05时,令wr_en3无效,wr_en2有效,将ipv6数据包的数据部分送fifo2缓存,准备送密码芯片处理,直到头尾标志dout1(65~64)=“01”时,将counter1清零,在判断到counter1为0后,将wr_en2置为无效。注意:fifo1的输出端口是66位,fifo2的输入端口是64位的,故在fifo1向fifo2写数据的过程中,应将fifo1的输出端口信号dout(63~0)传送给fifo2的输入端口din2(63~-)。当判断到fifo2非空间,将其读使能信号rd_en2置为有效,即可向密码芯片送出数据。
2 ipv6数据包的重新封装
用fpga实现ipv6数据包的重新封装,同时是通过控制几个fifo的数据输入输出来实现的,fpga同部的重新封装单元电路的物理连接如图3所示,其fifo4的作用是缓存密码芯片送出的加解密处理后的数据;fifo5的作用是缓存重新封装后的ipv6数据;fifo3与拆分单元共用,作用是缓用ipv6数据包头。
图中的fifo4和fifo5也都是由xilinx公司的开发工具ise6.1自带的core ip生成的,其中fifo4是异步fifo,输入时钟为50mhz,输出时钟为62.5mhz,输入输出数据宽度都是66bit;fifo5是同步fifo,工作时钟为62.5mhz,输入输出数据宽度都是66bit。
密码芯片对数据进行加/解密处理完毕之后,在送出处理数据前,首先向外部系统发送一64bit长的连接指令,指明处理数据所用的加解密算法和数据长度。例如,在对数据进行2des加密处理的情况下,接收指令格式(16位制)如图4所示,其中高56位为指令编码,低8位为将要输出的处理数据的长度。
因此,在接收处理数据时,首先判断是否有接收指令,如果有接收搦令,则其接收指令中的数据长度放寄存器中进行寄存,并设定计数器counter2开始计数。当0
这时,包头已经缓存到fifo3中了,处理后的数据已经按格式要求缓存到fifo4中了,最后要做的就是控制fifo3和fifo4,把一个完整的ipv6数据包写入fifo5中。具体做法是:设定计数器counter3,当fifo3和fifo4都非空时,counter3开始计数。当counter3>0时,将fifo5的写使能信号wr_en5置为有效;当counter3=0时,wr_en5置为无效。当0l=6时,令rd_en3无效,rd_en4有效,将fifo4的输出数据dout4(65~0)写入fifo5的输入端din5(65~0),直到dout4(65~64)=“01”时,将counter3清零,rd_en4置为无效。这样,一个完整的ipv6数据包就重封装在fifo5中了,当判断到fifo5非空间,就可以令rd_en5有效,向外输出处理后的完整的ipv6数据包了。
从上述讨论可以看出,本课题在fpga中采用了五个fifo,并设定了三个计数器控制这五个fifo的输入输出来实现对ipv6数据包的拆分和重新封装。总的来看,整个fpga设计思路巧妙,电路结构简单,达到了预期的处理速度。图5是整个测试系统在对1024字节的ipv6数据包进行拆包、送密码芯片加密。重装封装处理后测试仪控制软件界面上显示的收包数据统计。从该图可以看出,整个系统对ipv6数据包的处理速度达到了2.372gbit/s,而这样的处理速度用软件是不可能达到的。

荣耀9怎么样?荣耀9评测:华为荣耀9与华为P10五大细节大比拼,亲兄弟的对决你选谁?
谈谈电机行业三个值得关注的问题
能源监测物联网管理系统助节能,促增效
中国移动将持续提升云网一体化的能力5G将加速这一进程
客户替代风华色环电感时所面临的顾虑
基于FPGA的IPV6数字包的分离与封装的实现
数据显示苹果iOS14升级率高达72%
黑莓Playbook OS 2.0将于本月21号发布
英伟达为中国市场量身打造RTX 4090 D显卡,规避美国出口限制
电动汽车入网技术工作原理及系统介绍
苹果A5X四核GPU处理器
绩牛信息荣获“2020中国金融科技领域杰出案例”
RFID技术提高涂装效率,实现机器人装卸等生产自动化
港大ICB助力IOTE2020深圳国际物联网展
常见硬件性能测试项目
中国移动发布超级SIM卡 引入多个技术特性
北控集团钛酸锂电池三大应用成功结题
安科瑞产品实现无人值守详情介绍
物联网市场如何?10家物联网相关上市公司市场半年报汇总分析概述
基于无线技术和大规模批量生产的创新测试