位置:51电子网 » 技术资料 » EDA/PLD

基于FPGA的IPV6数字包的拆装实现

发布时间:2008/5/28 0:00:00 访问次数:425

摘要:介绍了一种运用fpga将ipv数据包的包头和数据部分分离并重新封装的方法。利用该方法,可以使ipv6数据包的拆装处理速度达到2gbit/s以上。

关键词:fpga ipv6数据包 拆装 fifo

笔者在参加国家“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。

图2

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输出端有信号时开始计数。当0<counter1<=5时,令fifo3的写使能信号wr_en3有效,将数据包的包头写fifo3缓存;当counter1>5时,令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置为有效,即可

摘要:介绍了一种运用fpga将ipv数据包的包头和数据部分分离并重新封装的方法。利用该方法,可以使ipv6数据包的拆装处理速度达到2gbit/s以上。

关键词:fpga ipv6数据包 拆装 fifo

笔者在参加国家“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。

图2

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输出端有信号时开始计数。当0<counter1<=5时,令fifo3的写使能信号wr_en3有效,将数据包的包头写fifo3缓存;当counter1>5时,令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置为有效,即可

相关IC型号
版权所有:51dzw.COM
深圳服务热线:13692101218  13751165337
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式


 复制成功!