[3]MSF的接收和发送数据流程韩婷

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

MSF的接收和发送数据流程一.概述:TheMediaandSwitchFabric(MSF)Interface是IXP23XX与物理层设备(physicallayerdevice)、交换结构(switchfabric)的接口单元。MSF的特点:·有相互独立的数据接收接口和发送接口(ReceiveInterface和TransmitInterface),每个接口可以独立配置,接口总线宽度为32bit·可配置的总线接口:可配置为一个32-bit,或被分为几个独立的总线:2个16-bit或4个8-bit,或16-bit+2x18-bit(项目采用这种配置)·通过UTOPIA和POS_PHY协议与PHY相连,通过CSIX与交换结构(SF)相连;Note:UTOPIAalwaysreferstocelltransport;POS-PHYreferstovariable-lengthpackettransport.项目中采用的是POS-PHY格式MSF-0位宽为16bit,与SDH接口芯片PM5352通过POS-PHY2规范相连;MSF-2位宽为8bit,与千兆以太网煤质接入模块通过POS-PHY3规范相连;MSF-3位宽为8bit,与高速串行接口模块通过POS-PHY3规范相连;POS-PHY接收状态字格式:POS-PHY发送状态字格式:·MSF在将网络数据接收下来之后,并不直接将其送入DRAM数据存储区,而是先将数据缓存在接收缓存(RBUF)中,然后将其移送到DRAM或ME中。二.MSF接收单元结构·Rxpins:数据接收引脚,可接收UTOPIA、POS-PHY、CSIX协议格式的数据包·ProtocolLogic:协议控制逻辑单元,用于对来自于Rxpins的数据包做相应的协议检查和接收控制·Checksum:对接收的数据包进行校验和计算,检验数据的完整性和正确性·RBUF:ReceiveBuffer,数据包的接收缓存单元,容量为8KB,可划分为:128x64B/Element(项目中选用)、64x128B/Element、32x256B/Element.MSF从PHY或SF接收数据,缓存在RBUF中,当接收数据填满一个RBUFElement(一个RBUFElement缓存一个mpacket)后,MSF通知ME将mpacket读入ME的传输寄存器或DRAM中,然后进行处理。MEs使用msf[read]指令将数据从RBUF读到ME的传输寄存器中。数据RBUFcontrollogic.通过SRAMPushBus传到ME中指令格式如下:msf[read,$s_xfer_reg,src_op_1,src_op_2,ref_cnt],optional_token其中,read指明是从RBUF中读数据,src_op_1+src_op_2为源地址,指明数据在RBUF中的存放地址;$s_xfer_reg为目的地址,指明接收数据的传输寄存器的地址;ref_cnt指明数据长度(以Longword为单位)MEs也可以使用指令将数据从RBUF中读到DRAM中,指令格式如下:dram[rbuf_rd,$s_xfer_reg,src_op1,src_op2,ref_cnt],optional_token·Buffers:数据从Rbuf中向MEs或DRAM存储时的缓冲区,对开发者透明。·FullElementList:用于记录RBUF中的Element的使用情况,当一个mpacket接收完毕后,相应的Element加入FullElementList,被标识为FullElement,之后将其中的mpacket送到ME或DRAM存储单元。·Rx_Thread_Freelists:存储记录当前空闲线程。当将数据包接收下来,缓存在RBUFElement中之后,MSF通知某一特定的空闲线程来对RBUFElement中的数据进行处理。在将RBUFElement中的数据全部读入S_Xfer_in_reg或DRAM之后,线程释放相应的RBUFElement,重新用于新的数据包的接收缓存。·Control:负责从FullElementList中取出一个FullElement,以及从Rx_Thread_Freelists中取出一个空闲线程执行后续的数据处理操作。三.MSF的数据包的接收流程:MEControlElementRx_Thread_FreelistsRBUF_Element_DoneRBUFFullElementListReceiveLogicMSF1.创建相应的信息字并写入到Rx_Thread_Freelists2.接收数据3.将数据包分片写到RBUF4.将RBUF标记为有效5.取出一个FullRBUFElement6.取出一个空闲线程7.将RSW写入到指定传输寄存器中,并发送指定信号唤醒相应ME的线程8.将RBUFElement中的数据读出,将该单元的编号写入到RBUF_Element_Done9.硬件读取可释放的RBUF单元编号,释放该单元Note:在上述9个步骤中,步骤1和步骤8有ME实现,其余步骤有MSF完成。RBUF_Element_Done是一个32bit的寄存器,当ME将某个RBUF_Element中的分片处理完成之后,将该单元的编号写入该寄存器中,MSF根据该寄存器的值释放相应的RBUF_Element接收步骤:1)当某一个Thread完成指定的数据处理任务后,创建相应的Rx_Thread_Free_list_信息字,写入MSF中的Rx_Thread_Free_list寄存器中,将自己加入空闲线程链表;2)网络数据包到达MSF的ReceiveLogic单元;3)根据到来的是数据包的类型(可能是CSIX、UTOPA、SPI),为数据包分配合适的RBUFElement;4)ReceiveLogic将数据移入RBUFElement;5)在ReceiveLogic将数据移入RBUFElement之后,MSF将该RBUFElement标识为FullElement,加入Full_Element_List;6)MSF从Full_Element_List中取出一个RBUFElement;7)MSF从Thread_Free_list中取出一个空闲Thread;8)MSF创建关于RBUFElement中的数据的RSW,并将该RSW送到空闲Thread的传输寄存器中,然后通知空闲Thread处理数据包;9)在将RBUFElement中的数据包读入传输寄存器或DRAM存储器之后,Thread将RBUFElement释放;四.MSF的数据包的发送流程:MSFTBUFRBUF_Element_DoneTransmitLogicControlLogicTransmitThread1.获取可用的TBUFElement的编号2.将DRAM中的数据以mpacket的形式写入TBUF单元3.向MSF写TCW4.发送一个TBUFElement5.读出TBUF中的数据6.将TBUF中的数据发送到物理设备Note:在上述6个步骤中,步骤1、2、3由ME来实现,其余步骤由硬件完成发送步骤:1)Thread取出一个空闲的TBUFElement,分配给要发送的数据包;2)Thread将数据包从传输寄存器或DRAM存储器中移入TBUFElement;3)Thread创建TCW,并将TBUFElement标识为ValidElement;4)MSF将TBUFElement中的数据发送到TransmitLogic单元;5)MSF将TransmitLogic单元的数据包按TCW指定的方式发送出去;

1 / 7
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功