DSP6678网络子系统之交换子系统

1 基本介绍

网络交换子系统由EMAC模块、SGMII模块、PHY设备、MDIO模块、网络交换机、以及系统集成的其他相关的子模块。

NETCP的网络交换子系统的主要作用是提供一个在主设备和其他连接设备间进行数据传输的接口。

网络交换子系统主要包括如下三个模块:

?  网络交换部件

?  MDIO模块

?  两个SGMII模块(KeyStone I设备两个;KeyStone II设备四个)

网络交换子系统的交换机有三个端口,以及可以给主机的一组中断。可以通过配置总线进行配置。如图 1.1所示:

1.1  KeyStone I 网络交换子系统框图

KeyStone II的网络交换子系统,拥有两个额外的SGMII端口。网络交换子系统内部的交换机有四个SGMII端口以及一个主机端口。如图 1.2所示:

1.2  KeyStone II 网络交换子系统框图

?  其中端口0是主机端口,该端口允许交换子系统和NETCP进行双向通信

?  端口1至端口4用于在SGMII和交换子系统之间进行双向通信

?  交换子系统的中断连接到DSP上,以允许通知交换状态;

?  配置总线用于连接交换子系统和NETCP,以允许用户配置交换子系统;

?  每个SGMII模块都能独立地连接到网络交换子系统、SerDes、以及配置总线。

?  配置总线允许用户配置SGMII、交换部件、以及MDIO

2 网络子系统架构

2.1 时钟

2.1.1   网络交换子系统使用了如下时钟:

?  网络交换子系统的时钟

?  SGMII SerDes的参考时钟

?  IEEE 1588 时间同步时钟

?  MDIO时钟

?  GMII时钟

2.1.2   网络交换子系统时钟

网络交换子系统的时钟通常用于网络交换子系统的大多数逻辑,通常为350MHz。

2.1.3   SGMII SerDes参考时钟

SGMII SerDes的参考时钟是DSP的输入时钟。SGMII SerDes参考时钟作为SGMII SerDes PLL的输入,可以通过SGMII_SERDES_CFG_PLL寄存器配置。SGMII SerDes PLL控制在SGMII和SerDes模块之间的数据传输速率。对于SGMII SerDes的时钟范围,可以参考设备特定的数据手册。

2.1.4   MDIO时钟

MDIO的时钟有外设系统时钟分频而来。MDIO时钟可以配置达到2.5MHz,但通常配置为1.0MHz。

2.1.5   IEEE 1588时间同步时钟

IEEE 1588时间同步时钟主要用于网络交换子系统的时间同步模块。可以通过配置CPTS_RFTCLK_SEL寄存器的CPTS_RFTCLK_SEL字段,选择一个CPTS_RCLK的输入时钟源

2.1.6   GMII时钟

GMII的时钟频率由802.3指定。

?  10Mbps  : 2.5MHz

?  100Mbps : 25MHz

?  1000Mbps: 125MHz

2.2 GbE交换机的结构

GbE在网络交换子系统中的两个SGMII模块和NETCP之间,提供了一个交换机。如图 2.1所示,GbE交换机包括如下部分:

?  包数据流接口

?  MAC子模块

?  MAC接收FIFO

?  统计子模块

?  时间同步子模块

?  地址查询引擎(ALE)子模块

2.1  GbE交换机

GbE的交换机有三个端口:端口0与包数据流交换部件通信;端口1与SGMII0通信;端口2与SGMII1通信。

GbE交换机内部的模块如下:

?  包数据流接口:用于GbE交换机与NETCP的包数据流交换部件之间通信;

?  MAC子模块:用于在交换机内部信号和SGMII模块的GMII信号之间做转换;

?  统计子模块:用于统计网络交换子系统接收和发送的数据包的个数;

?  时间同步子模块:用于支持IEEE 1588时钟同步;

?  地址查询引擎(ALE):用于依据地址来推送和过滤数据包。

2.2.1   包数据流接口:

包数据流接口用于GbE交换机与NETCP的包数据流交换部件之间通信。

1.      包数据流发送接口

发送接口主要用于将数据包从GbE交换机的端口0发送到NETCP的包数据流交换部件。GbE交换部件有两个相同的包数据流发送接口。第一个接口(TXA)将端口1的数据包从端口0发送出去;第二个端口(TXB)将端口2的数据包从端口0发送出去。

在包DMA接收流收到的数据包中,除了包数据之外,还提供额外的信息。这些额外信息包括来源的识别信息。如果数据包来自端口1,那么P0_CPPI_SRC_ID寄存器的TXA_SRC_ID字段将被放在接收数据包描述符中的SRC_ID字段中。同样,如果包来自端口2,则P0_CPPI_SRC_ID寄存器的TXB_SRC_ID字段中的值将放在接收包描述符的SRC_ID字段中。

TXA和TXB发送接口都有两个22KB的缓存。只有当发送接口输出缓存中有了整个包数据,或者超过CPPI_THRESH两个字时,才开始发送数据包。加上2是因为还有一个两个字的双缓冲

对于KeyStone II, 还存在端口TXC和TXD。

2.      发送VLAN的处理过程

当CPSW_CONTROL寄存器的VLAN_AWARE被置位时,GbE交换机进入VLAN-aware模式。在VLAN-aware模式下,按照与MAC输出VLAN数据包过程相同的规则对TAG进行添加、删除或替换。当VLAN_AWARE被清零时,发送包不会被修改。

3.      包数据流接收接口

GbE交换机端口0的接收流接口负责从NETCP的包数据流交换部件接收数据包。GbE交换机只有一个包数据流接收端口。

除了包数据,接收流接口还可以提供附加的控制信息,这些信息驻留在发送到GbE交换机的包的描述符的PS_FLAGS字段中。

对于传输到GbE的数据包,PS_FLAGS字段的配置如下:

?  RX_PASS_CRC:1,表示包中已经包含CRC;0,表示包中没有CRC,需要MAC模块生成。

?  TO_PORT:设置非0值时,数据包会跳过ALE,直接从指定端口发送出去。当为0时,表示无效;当为1时,发送数据包到GbE交换机的端口1;当为2时,发送数据包到GbE交换机端口2。对于KeyStone II,还有3和4可供选择。

2.2.2   MAC子模块

MAC子模块支持IEEE802.3标准,并支持10/100/1000 Mbps模式。MAC模块在GbE和SGMII模块之间提供了一个接口。MAC模块主要是在GbE交换机信号和SGMII模块GMII信号之间进行转换。

除了在SGMII模块和GbE交换机之间进行转换外,MAC模块还负责IEEE 802.3以太网帧相关的操作。对于所有包,MAC模块添加或删除前言,开始帧分隔符,以及包间的间隔。MAC模块验证并可选地生成CRC校验和。

2.2.3   MAC接收FIFO

在GbE交换机内部,两个MAC端口都有一个相同的数据包FIFO。每个包FIFO都包含一个独立的逻辑接收队列和四个逻辑发送队列(优先级从0到3)。每个包FIFO包含81920个字节(80k),被组织成10240个64位字。该FIFO存储空间被端口的发送和接收队列共享。可以通过MAX_BLKS寄存器来分配队列占用空间的大小。其中TX_MAX_BLKS字段用于配置发送FIFO的大小,单位是4k;RX_MAX_BLKS字段用于配置接收FIFO的大小,单位也是4k。建议TX_MAX_BLKS与RX_MAX_BLKS字段的和为20,否则会存在空间浪费,默认是17。

2.2.4   统计子模块

GbE交换机有两个统计模块,用于记录数据包进出交换机的事件。对于KeyStone I,统计模块A用于记录端口0的事件;统计模块B用于记录端口1和端口2的事件。

对于KeyStone II,网络交换机有四组统计模块。STATSA用于统计端口0的接收,以及端口0的TXA和TXB;STATSC用于统计端口0的TXC和TXD;STATSB用于统计端口1的事件;STATSD用于统计端口3和端口4。

默认情况下,统计模块是关闭的。当关闭时,所有的统计寄存器可以被正常读写,可以通过写0x00000000对统计寄存器清零。在统计模块使能之后,所有统计数据都是只读的;但是,当此时向寄存器写数据时,会起到减值的作用,即新的寄存器值=原寄存器值-写入的值。如果写入的值大于当前寄存器的值,那么寄存器的值会被清零。可以通过配置STAT_PORT_EN寄存器的3:0位来使能统计模块。

2.2.5   时间同步子模块

根据IEEE 1588规范的附件F, KeyStone 1时间同步模块用于促进主机对时间同步操作的控制。大多数IEEE 1588标准超出了时间同步模块的范围,必须由主机软件处理。

时间同步模块的主要目的是检测时间同步事件并生成时间戳,然后将这些信息提供给托管软件进行处理。KeyStone I的时间同步子模块主要监测以下六种类型的时间同步事件:

?  网络接收事件

?  网络发送事件

?  软件时间戳推送事件

?  时间戳翻转事件

?  时间戳半翻转事件

每个网络端口都可以触发发送和接收事件,时间戳推送事件由软件触发。事件同步模块包含如下几个部分:

?  时间戳计数器

?  网络端口1和端口2接口

?  事件FIFO

?  事件挂起接口

2.2.6   地址查找引擎(ALE

地址查找引擎(ALE)处理所有接收到的数据包,以确定数据包应该转发到哪个端口(如果有的话)。ALE使用接收到的数据包的端口号、目标地址、源地址、长度/类型和VLAN信息来确定如何转发数据包。ALE将端口掩码输出到交换机构,该机构指示应该转发到的端口。当ALE_CONTROL寄存器中的ALE_ENABLE位被设置时,ALE被启用。当ALE_ENABLE位被清除为0时,所有包被删除。

可以通过ALE_CONTROL寄存器的ALE_BYPASS位,将ALE配置为bypass(跳过)模式。当为bypass模式时,所有由MAC模块接收到的数据包都被发往主机端口(端口0)。主机端口同样可以跳过ALE,直接将数据包发送到MAC端口。

1.      ALE 表

ALE表包含1024个表项。每个表项表示一个空闲条目、一个地址、一个VLAN、一个地址/VLAN对或一个OUI地址。

2.      ALE数据包转发流程

对于发送到ALE的每一个数据包,ALE会确定该数据包是否应该丢弃或者转发。如果需要转发,那么ALE需要确定该数据包应该发往哪一个或哪些端口。每个端口都有一个相应的数据包转发状态,该状态可以是以下四个中的一个:

?  Disable(无效)

?  Blocked(阻塞)

?  Learning(学习)

?  Forwarding(转发)

默认状态下,所有端口都是关闭的。为了使能端口,主机必须通过设置各自的ALE_PORTCTL寄存器以配置数据包转发状态。

一个数据包的转发需要经过以下四个步骤

1、  入口过滤

2、  VLAN Aware查询

3、  VLAN Unaware查询

4、  发出

2.3 SGMII架构

SGMII模块的主要功能是在CPGMAC模块和SerDes模块之间做数据格式转换。SGMII模块也负责与其他设备建立连接和自协商。

2.3.1   SGMII接收端口

SGMII接收端口主要负责将经过编码的SerDes信号,转换成MAC模块需要的GMII信号。

2.3.2   SGMII发送端口

SGMII发送端口主要负责将MAC模块的GMII信号,转换成SerDes模块需要的8B/10B编码信号。

2.3.3   SGMII的操作模式

1、  回环模式

SGMII模块支持在内部将发送信号和接收信号连接起来。这样连接起来后,是不会经过SerDes的。当处于回环模式时,发送时钟同时作用于接收时钟。可以通过SGMII_CONTROL寄存器的LOOPBACK位设置回环模式。当进入或退出回环模式时,一定要通过SOFT_RESET寄存器的RT_SOFT_RESET位,重置发送和接收逻辑。进入和退出回环模式的配置步骤如下:

?  将SGMII_CONTROL寄存器的MR_AN_ENABLE位清零

?  将SOFT_RESET寄存器的RT_SOFT_RESET位置位

?  将SGMII_CONTROL寄存器的LOOPBACK位置位

?  将SOFT_RESET寄存器的RT_SOFT_RESET位清零

2、  与PHY的连接配置

当连接到外部PHY时,PHY作为主设备,SGMII模块需要被配置为从设备,配置步骤参见数据手册。连接如图 2.2所示:

2.2  SGMII与PHY连接

3、  SGMII与SGMII自协商

当两个SGMII设备以自协商的方式连接时,一个SGMII必须配置为主设备,另一个必须配置为从设备,配置步骤参见数据手册。如图 2.3所示:

2.3  两个SGMII以自协商的方式连接

4、  SGMII与SGMII强制连接

当两个SGMII设备强制连接,那么每个SGMII设备都必须被配置为主设备,配置过程参见数据手册。如图 2.4所示:

2.4  两个SGMII以强制方式连接

2.4 MDIO架构

MDIO模块可以最多管理32个连接到EMAC的PHY设备。MDIO模块允许几乎透明的MDIO接口操作,几乎没有DSP的维护。MDIO模块通过不断轮询32个MDIO地址来枚举系统中的所有PHY设备。当它检测到一个PHY设备时,MDIO模块读取PHY状态寄存器来监控PHY链接状态。

2.5 KeyStone I SerDes架构

SerDes宏是一个自包含的宏,包括两对发送(TX)和接受(RX),以及锁相环(PLL)。每对发送和接收端口对应一个SGMII模块。内部的PLL会乘以一个用户提供的参考时钟。

2.6 GbE交换子系统初始化流程

?  配置CPSW_CONTROl寄存器

?  配置MAC1_SA和MAC2_SA源地址寄存器

?  通过CPSW_STAT_PORT_EN寄存器,使能需要统计的端口

?  配置ALE

?  配置MAC模块

?  配置MDIO和PHY

?  配置SGMII模块

2.7 中断

在GbE交换子系统中,有三个模块可以生成中断,分别是MDIO模块、统计模块、以及时间同步模块。

原文地址:http://blog.51cto.com/7183031/2149922

时间: 2024-11-10 16:34:28

DSP6678网络子系统之交换子系统的相关文章

全网络对Linux input子系统最清晰、详尽的分析

Linux input分析之二:解构input_handler.input_core.input_device 输入输出是用户和产品交互的手段,因此输入驱动开发在Linux驱动开发中很常见.同时,input子系统的分层架构思想在Linux驱动设计中极具代表性和先进性,因此对Linux input子系统进行深入分析很有意义. 本文继续在<Linuxinput子系统分析之一:软件分层>的基础上继续深入研究Linux输入子系统的分层架构思想以及其实现.软件分层探讨的是输入消息从底层硬件到内核.应用层

深入理解Linux网络技术内幕——路由子系统的概念与高级路由

本文讨论IPv4的路由子系统.(IPv6对路由的处理不同). 基本概念 路由子系统工作在三层,用来转发入口流量. 路由子系统主要设计 路由器.路由.路由表等概念. 路由器: 配备多个网络接口卡(NIC),并且能利用自身网络信息进行入口流量转发的设备. 路由: 流量转发,决定目的地的过程 路由表:转发信息库,该库中储存路由需要本地接收还是转发的信息, 以及转发流量时所需要的信息.(即,信息库用来判断,要不要转发,如果要转发,向哪里转发). 我们了解,路由器有多个网卡,但是多个NIC的设备不一定就是

网络跨路由交换

网络拓扑图 在这个网络上有四个网段三个路由.我要实现1.4网段互通. 为满足这个要求需要满足一网段到四网段的通信同时也要满足四网段到一网段的通信 每个路由上两个网段可以互通,但是不能跨路由. 我的一网段在R1上想要访问R3上的四网段就必须跳到R2上让R2帮我将数据发送到R3上 反之同上,这种情况下我们就要让路由实现跨路由跨网段寻找目标主机. 下面开始配置: 首先确认各接口IP R1 GE 0/0/1 ip192.168.1.254 GE 0/0/0 ip192.168.2.254 R2 GE 0

9、网络知识(路由交换和ARP协议)+配置单网卡多ip和配置默认路由

网络知识详解 提问:网络到底是什么?我们在电缆中传输的都是电信号(高电压或者是低电压),所以高电压就是1,低电压就是0,所以规定一定的时间传输固定的高低电压来当做是接收的数据我们所谓的10Mbps:每秒中可以传输10M个bit所以别人说你的是4M的带宽,指的就是4Mbps,要除以8才是实际的速率那就是4Mbps=4/8MBs=0.5MBs=0.51024KBs=(41024)Kbps=512KB/s的下载速率我们平时说的下载速度就是以KB/s为单位的1KB/S=8Kbps 512KB/S=8K*

网络学习:交换机上的常用操作(开关端口)

上午有一个计算机突然上不了网了,星期五还是好的,怀疑被屏蔽了(访问控制列表或者端口被关闭了<就近原则>). 在计算机上查到IP地址对应的MAC地址,cmd下输入ipconfig/all可以得到. 进入交换机,执行sh mac-address-table | in MAC地址的后四位(注意要小写). 没有显示,说明没有连接上,也可能端口没有打开. 找到这个IP对应的VLAN号. 再显示VLAN状态,sh vlan,在VLAN列表中找到对应的接口. 显示具体的接口状态,sh int 接口名称(gi

DSP网络子系统

1.  基本架构 网络协处理器(NETCP)有四个主要的模块,分别是PKTDMA控制器.包加速器(PA).安全加速器(SA).GbE交换子系统.这些模块通过包数据流交换部件连接.如图 1.1所示: 图 1.1  网络协处理器功能块图 1.1  时钟控制 网络协处理器有三个主时钟域,分别是PA.SA.GbE交换子系统.这三个时钟域都共享一个公共的时钟源,通常为350MHz.在使用PA.SA或GbE交换模块之前,必须启用各自的时钟域.在某些设备中,这个时钟可以由锁相环产生. NETCP也有辅助时钟,

邻居子系统学习

所谓邻居,是指在同一个IP局域网内的主机,或者邻居之间在三层上仅相隔一跳的距离.而邻居子系统,则提供了三层协议地址与二层协议地址之间的映射关系,此外还提供二层首部缓存,以加速发送数据包. 在发送数据的时候,先进行路由查找,如果找到目的地址的路径,再查看邻居表中是否存在相应的映射关系,如果没有则新建邻居项:然后判断邻居项是否为可用状态,如不可用则把数据报存至发送缓存队列后发送请求:在接收到请求应答后,将对应邻居项置为可用,并将其缓存队列中的数据包发送出去:如果在指定时间内未收到相应包,则将对应邻居

misc子系统

跟着内核学框架-从misc子系统到3+2+1设备识别驱动框架 misc子系统在Linux中是一个非常简单的子系统,但是其清晰的框架结构非常适合用来研究设备识别模型.本文从misc子系统的使用出发,通过了解其机制来总结一套的设备识别的驱动框架,即使用使用同一个驱动,向上提供多个设备文件接口,向下控制多个(相应的)设备,这就需要该驱动可以根据不同的设备文件来控制与之相应的设备. misc的使用 Linux 中有三大类设备:字符,网络,块设备,每一种设备又细分为很多类,比如字符设备就被预先分为很多种类

存储子系统剖析——从存储子系统角度看FCoE模块

        note:在之前的一篇FCoE模块设计和实现的文章,大致讲到了FCoE模块的设计.虽然很清楚地讲了FcoE模块的组成,可是没有站在整个存储子系统的角度来看FCoE,总是有点局限的感觉,然后存储子系统和网络子系统是怎么交互的也没有说清楚,希望在这里这些疑问都能得到解答. 我们知道linux内核是层次设计的设计模式,存储子系统也不例外.下面这张图(来自网络)表示了linux下面存储子系统的层次化模块. e.g.Application 访问文件 根据上图,如果一个用户空间中的应用程序(