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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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控制在SGMIISerDes模块之间的数据传输速率。对于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与包数据流交换部件通信;端口1SGMII0通信;端口2SGMII1通信。

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字段中。

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

对于KeyStone II 还存在端口TXCTXD

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_CRC1,表示包中已经包含CRC0,表示包中没有CRC,需要MAC模块生成。

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

 

2.2.2   MAC子模块

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

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

 

2.2.3   MAC接收FIFO

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

 

2.2.4   统计子模块

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

对于KeyStone II,网络交换机有四组统计模块。STATSA用于统计端口0的接收,以及端口0TXATXBSTATSC用于统计端口0TXCTXDSTATSB用于统计端口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  SGMIIPHY连接

3、  SGMIISGMII自协商

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

技术分享图片

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

4、  SGMIISGMII强制连接

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

技术分享图片

2.4  两个SGMII以强制方式连接

2.4 MDIO架构

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

 

2.5 KeyStone I SerDes架构

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

 

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

?  配置CPSW_CONTROl寄存器

?  配置MAC1_SAMAC2_SA源地址寄存器

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

?  配置ALE

?  配置MAC模块

?  配置MDIOPHY

?  配置SGMII模块

 

2.7 中断

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

 


以上是关于DSP6678网络子系统之交换子系统的主要内容,如果未能解决你的问题,请参考以下文章

DSP网络子系统

DSP6678 多核导航器

DSP篇--C6678功能调试系列之EMIFGPIO调试

DSP篇--C6678功能调试系列之TIMERUART调试

TMS320C6678 + XC7K160T DSP+FPGA高性能嵌入式单板计算机设计方案

DSP篇--C6678功能调试系列之EDMA3调试