位置:51电子网 » 技术资料 » 可编程技术

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

发布时间:2007/8/15 0:00:00 访问次数:651

笔者在参与国家“863”重大专题项目“高速密码芯片及验证平台系统”的过程中,遇到了将IPV6数据包的包头和数据部分拆开,然后把数据部分送密码芯片进行加/解密处理,最后再将处理后的数据部分与包头重新封装为数据包的课题。以往对IP包进行拆装多利用软件实现,但本项目涉及到配合高速密码芯片(处理速度在2Gbit/s以上)工作的问题,显然利用软件实现IP包的拆装在速度上达不到要求。为此,笔者运用FPGA(型号为Xilinx公司的XC2VP20—FF896CGB0345)来实现IPV6数据包的拆装。该FPGA内部逻辑框图如图1所示。


 

图1 FPGA内部逻辑框图


其工作流程为: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数据包的拆分


用FPGA实现IPV6数据包的拆分,主要是通过控制几个FIFO的数据输入输出来实现的。FPGA内部的拆分单元电路的物理连接如图2所示,其中FIFO1的作用是缓存IPV6数据包,FIFO2的作用是缓存IPV6数据包的数据部分,FIFO3的作用是缓存IPV6数据包的包头。




图2 拆分单元电路物理连接图   
图中的三个FIFO都是由Xilinx公司的开发工具ISE6.1自带的Core IP生成的。其中FIFO1和FIFO3是同步FIFO,工作时钟为频率62.5MHz,输入输出数据宽度都是66bit;FIFO2是异步FIFO,输入时钟频率为62.5MHz,输出时钟频率为50MHz(密码芯片的工作时钟频率为50MHz),输入输出数据宽度都是64bit。


FIFO1的输入数据为IPV6数据包,格式如表1所示。可以看出,该数据是以并行的66bit信号传输的,即每一时钟周期并行传送66bit数据。其中每个周期的高两位(即65位和64位)为数据包的头尾标志,这是IPV6路由器内部根据实际处理需要加上的,“10”表示一个完整数据包的第一周期,“11”表示数据包的中间内容,“01”表示一个完整数据包的最后一个周期。因为IPV6数据包的包头是固定长度的,为40字节(等于5×64 bit),故数据的前五个周期为IPV6数据包的包头,包头后面跟的就是数据包的数据部分。


 
表1 FIFO1输入端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进行计数,当DOUT1不为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的输出端口信号DOUT1(63~0)传送给FIFO2的输入端口DIN2(63~0)。当判断到FIFO2非空时,将其读使能信号RD_EN2置为有效,即可向密码芯片送出数据。
2 IPV6数据包的重新封装


用FPGA实现IPV6数据包的重新封装,同样是通过控制几个FIFO的数据输入输出来实现的,FPGA内部的重新封装单元电路的物理连接如图3所示,其中FIFO4的作用是缓存密码芯片送出的加解密处理后的数据;FIFO5的作用是缓存重新封装后的IPV6数据包;FIFO3与拆分单元共用,作用是缓存IPV6数据包包头。


 


图3 重新封装单元电路物理连接图



图4 密码芯片输出指令格式   


图中的FIFO4和FIFO5也都是由Xilinx公司的开发工具ISE6.1自带的Core IP生成的,其中FIFO4是异步FIFO,输入时钟为50MHz,输出时钟为62.5MHz,输入输出数据宽度都是66bit;FIFO5是同步FIFO,工作时钟

笔者在参与国家“863”重大专题项目“高速密码芯片及验证平台系统”的过程中,遇到了将IPV6数据包的包头和数据部分拆开,然后把数据部分送密码芯片进行加/解密处理,最后再将处理后的数据部分与包头重新封装为数据包的课题。以往对IP包进行拆装多利用软件实现,但本项目涉及到配合高速密码芯片(处理速度在2Gbit/s以上)工作的问题,显然利用软件实现IP包的拆装在速度上达不到要求。为此,笔者运用FPGA(型号为Xilinx公司的XC2VP20—FF896CGB0345)来实现IPV6数据包的拆装。该FPGA内部逻辑框图如图1所示。


 

图1 FPGA内部逻辑框图


其工作流程为: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数据包的拆分


用FPGA实现IPV6数据包的拆分,主要是通过控制几个FIFO的数据输入输出来实现的。FPGA内部的拆分单元电路的物理连接如图2所示,其中FIFO1的作用是缓存IPV6数据包,FIFO2的作用是缓存IPV6数据包的数据部分,FIFO3的作用是缓存IPV6数据包的包头。




图2 拆分单元电路物理连接图   
图中的三个FIFO都是由Xilinx公司的开发工具ISE6.1自带的Core IP生成的。其中FIFO1和FIFO3是同步FIFO,工作时钟为频率62.5MHz,输入输出数据宽度都是66bit;FIFO2是异步FIFO,输入时钟频率为62.5MHz,输出时钟频率为50MHz(密码芯片的工作时钟频率为50MHz),输入输出数据宽度都是64bit。


FIFO1的输入数据为IPV6数据包,格式如表1所示。可以看出,该数据是以并行的66bit信号传输的,即每一时钟周期并行传送66bit数据。其中每个周期的高两位(即65位和64位)为数据包的头尾标志,这是IPV6路由器内部根据实际处理需要加上的,“10”表示一个完整数据包的第一周期,“11”表示数据包的中间内容,“01”表示一个完整数据包的最后一个周期。因为IPV6数据包的包头是固定长度的,为40字节(等于5×64 bit),故数据的前五个周期为IPV6数据包的包头,包头后面跟的就是数据包的数据部分。


 
表1 FIFO1输入端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进行计数,当DOUT1不为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的输出端口信号DOUT1(63~0)传送给FIFO2的输入端口DIN2(63~0)。当判断到FIFO2非空时,将其读使能信号RD_EN2置为有效,即可向密码芯片送出数据。
2 IPV6数据包的重新封装


用FPGA实现IPV6数据包的重新封装,同样是通过控制几个FIFO的数据输入输出来实现的,FPGA内部的重新封装单元电路的物理连接如图3所示,其中FIFO4的作用是缓存密码芯片送出的加解密处理后的数据;FIFO5的作用是缓存重新封装后的IPV6数据包;FIFO3与拆分单元共用,作用是缓存IPV6数据包包头。


 


图3 重新封装单元电路物理连接图



图4 密码芯片输出指令格式   


图中的FIFO4和FIFO5也都是由Xilinx公司的开发工具ISE6.1自带的Core IP生成的,其中FIFO4是异步FIFO,输入时钟为50MHz,输出时钟为62.5MHz,输入输出数据宽度都是66bit;FIFO5是同步FIFO,工作时钟

相关IC型号

热门点击

 

推荐技术资料

电动吸锡烙铁
    用12V/2A的电源为电磁阀和泵供电,FQPF9N50... [详细]
版权所有:51dzw.COM
深圳服务热线:13692101218  13751165337
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式


 复制成功!