您的位置 >> 默认分类

NetFPGA平台系统架构分析(二)——OP_LUT_PROCESS_SM 更新于2010-07-24 04:16:52 文章出处:与非网

关键字:

 

NetFPGA平台系统架构分析(二)——op_lut_process_sm
 
                   本模块是NetFPGA推荐体系中的关键部分,是检测和处理数据包的直接处理模块。具体模块信息如下:
///////////////////////////////////////////////////////////////////////////////
// vim:set shiftwidth=3 softtabstop=3 expandtab:
// $Id: op_lut_process_sm.v 3000 2007-11-21 09:09:56Z jnaous $
//
// Module: op_lut_process_sm.v
// Project: NF2.1 reference router
// Description:   Take the information from the preprocess blocks, write a new
//              module header for the output port, write the packet with the
//              information from the preprocess.
//
///////////////////////////////////////////////////////////////////////////////
             


 
此模块的连接关系如图一所示:
图一 模块连接图
 
一.           变量说明
1.   preprocess_vld  本模块所需的预处理标志位,如果为高电平,则相应准备工作均已就绪。需要5个模块反馈支持:
                eth_parser_info_vld  FIFO中数据包可用;
                arp_mac_vld MAC地址解析完毕;
                is_from_cpu_vld :判断此包是否来自CPU
                ip_checksum_vld:检查此包的IP包校验和;
                dest_ip_filter_vld:转发表查找已经结束(无论是否匹配)。
 
2. eop 检测是否遇到结尾:
               ctrl_prev_is_0:前一段控制字节是否为零;
               in_fifo_ctrl:当前控制字节。
 
 
二.     状态机说明
 

Description
本状态机的主要功能是:读取FIFO中的数据,检查数据包是否合法,如果不合法则丢弃,否则,根据其目的MAC地址和NetFPGA系统中维护的ARP表、路由表等信息决定此包的处理过程:转发给CPU、MAC或丢弃。
WAIT_PREPROCESS_RDY检测数据包是否允许转发来自CPU或者网口且合法命中路由表更新此包的出口端口号包括MAC端口和CPU端口并转入MOVE_MODULE_HDRS否则进入DROP_PKT状态
MOVE_MODULE_HDRS: 判断两种情况
      1. 有额外包头则更新其中的出口端口号,{{(DATA_WIDTH-NUM_QUEUES-`IOQ_DST_PORT_POS){1'b0}}, dst_port, in_fifo_data[`IOQ_DST_PORT_POS-1:0]}表示80+8位出端口号+48位原信息并进入MOVE_PKT状态等待此包传输完毕
      2. 无额外包头的情况下,将选中的出端口MAC地址的高16位填入以太网头的第48-63位,进入更新数据包流程(下一阶段SEND_SRC_MAC_LO)。
SEND_SRC_MAC_LO传输SRC MAC地址的第0-31位,保留其余32位信息,并转至SEND_IP_TTL
SEND_IP_TTL: 以太网的TTL域在自开始的第17个字节,正好在64bit宽数据传输两个周期后。此状态更新TTL域,并转入MOVE_PKT状态;
MOVE_PKT传递此数据包的其余字节,直到遇见EOF,转至WAIT_PREPROCESS_RDY开始处理新数据包;
DROP_PKT:等待(丢弃状态),如果检测到此包结束,则跳转到WAIT_PREPROCESS_RDY状态处理下一个包。
 

 
图二 状态机转换图
 
状态机处理数据流图:
 
 
 
图三 数据流图


 
. 模块说明
       本模块是两大功能模块的交接处,一边通过FIFOInput Arbiter相连,另一边与output queue相连。模块的主要功能是接收数据包并检查是否属于合法数据包(无论从CPU还是从MAC传递而来),并确定数据包的转发路径。由于有包操作,本模块与众多状态检测模块相连,如dest_ip_filter(检查路由表)、eth_parser(头标志处理)、ip_arp(IP地址解析模块)等众多模块交换数据,同时,也必须等待诸多模块数据处理完毕后,才可以进行。