交换机是局域网最重要的网络连通设备,局域网的管理大多会涉及交换机的管理。交换机分为可网管交换机和不可网管交换机,这两种交换机的区别主要在是否能被管理。这里的管理是指通过管理端口执行监控交换机端口状态、划分 VLAN、设置 Trunk 等操作,可以被管理的交换机就是网管交换机。网管交换机可以通过串口、Web(网络浏览器)和网管软件来管理。


网管交换机的内部大致结构如图 1 所示。

 

 

其工作原理:端口进来的数据包先到交换芯片,交换芯片判定是否是管理包,若不是则通过其他端口转发出去;若是,则传送给接口芯片,由接口芯片传给 CPU 进行处理。同时,一些由 CPU 产生的管理包要通过接口芯片传给交换芯片,用来控制交换芯片,或者通过端口发送出去。总地来说,接口芯片主要起到了 CPU 和交换机芯片间的桥梁作用。


接口芯片和 CPU 之间通常是通过 PCI 总线或一 般的数据/地址总线相连的,和交换芯片间的接口形式主要看交换芯片的接口,不同厂家的交换芯片具有不 同的接口。本文主要讨论如何使用低功耗的接口芯片 GT-48330 来实现对具有 G.Link 接口的交换芯片的控制和管理。


2 芯片介绍
GT-48330 是美国 Marvell 公司的低功耗 G.Link 和 CPU 的接口芯片。他在 8/16 b CPU 总线和 Marvell 公司的具有 G.Link 接口的交换芯片的 G.Link 总线之间提供了一个硬件接口。他支持多种嵌入式 CPU 和微处理器,如 80C186,8051,Motorola Coldfire,Inteli960 等,CPU 可以直接通过他实现对交换芯片的管理。GT-48330 作为低价的 G.Link 到 CPU 的接口芯片,代替了在高端管理系统的 PCI 接口芯片。


他可以与多种不同的 CPU 和微控制器相连接,其 CPU 的接口数据宽度为 8/16 b,具有片内包缓冲器,能够在片内缓存整个完整长度的包,CPU 能够通过简单的读写操作进入包缓存器。具有中断控制器,能够接收来自交换芯片产生的中断并可以对本地的 CPU 或微控制器产生中断。提供屏蔽和触发寄存器。采用 3.3 V 的核心电压,功耗较低。G.Link 口的时钟可达


2.1 接口说明
(1)和交换芯片间的接口 GT-48330 提供了 16 根发送数据线 GTXD[15∶0],16 根的接收数据线 GRXD[15∶0],用来和交换芯片进行数据传输;一根发送命令线 GTXCMD,他只在第一个时钟周期为高,表示传输线上为命令类型,其他的周期将为低电平,表示传输线上为数据;一根接收命令线 GRXCMD;一根 G.Link 时钟输入线 GTXCLK;一根发送数据的参考时钟线 GTXOCLK;一根接收数据的参考时钟线 GRXCLK,需由外部的时钟来提供。一根用于说明其 G.Link 口是否连接的 GUNCC 线。


(2)和 CPU 间的接口 GT-48330 的 CPU 接口提供了 16 b 的数据线 AD[15∶0],用于与 CPU 的数据线相接;12 b 数据线 Add[11∶0],用于与 CPU 的地址线相接;一根片选线 CS;读、写信号线 RD 与 WR 各一根;一根工作模式选择线 Endian,用以设置其输出的数据高低字节是否交换;一根地址锁存信号线 ALE;一根数据返回有效线 DTACK;一根中断线 INT,用来和 CPU 的中断管脚相接;一根 DTACK 模式选择线 DTACKMODE,用以确定何时 DTACK 有效;一根配置线 MB,用来决定数据、地址线是否复用;一根模式选择线 ASM,用以选择异步或同步模式;一根时钟线 CLK,为 GT-48330 提供 CPU 接口的参考时钟;一根复位线 RST,用以复位 GT-48330[page]


2.2 工作原理
GT-48330 作为 CPU 和 G.Link 接口的交换芯片间的桥梁,主要的工作就是将数据从交换芯片转给 CPU,这对 GT-48330 来讲是一个接收过程;并将 CPU 发过来的数据转给交换芯片,这对 GT-48330 来讲是一个发送过程。


2.2.1 GT-48330 的接收
GT-48330 接收的数据分为 4 种:由交换芯片送过来的数据包、由交换芯片送过来的新地址消息(一个数据包只要通过交换芯片,包中的源地址信息就会被交换芯片记录并传送)、由交换芯片送过来的中断消息和 CPU 要从交换芯片中读取的消息。


(1)接收数据包过程 在 GT-48330 中存在 2 kB 的缓冲区(Buffer)用于接收来自交换芯片的包。由交换芯片产生的包发送结束消息(EOP)存在 0x9E4 0x9EF 中,当 GT-48330 接收到包,并监测到 EOP 后,他将发送相应的中断给 CPU,CPU 从 Interrput-cause 寄存器中可以获得中断的原因,这样 CPU 就可以从 Buffer 中读取包。


当 Buffer 满时,如果 GT-48330 还没有完成对先 前包的处理,又有新的包到来,此时将会产生 G.Link 口的拥塞。GT-48330 可以设置 Disable PacketBlocking(DPB)bit 来防止拥塞,当设为 0 时,GT- 48330 将通过发流控消息来防止 G.Link 口的拥塞;当设为 1 时,GT-48330 将通过拒绝这些包来防止拥塞,此时所有的包将被忽略。


(2)接收新地址消息的过程 GT-48330 中存在一个专用的新地址队列(NA_Q),共可以存储 16 个条目,对应的存储地址为 0x800~0x80F。当有新的地址到来时,GT-48330 将发送一个中断给 CPU,这样 CPU 就可以到 0x800~0x80F 中提取新的地址消息,同时将 Interrput-cause0 寄存器清零;如果 GT-48330 还有新的地址,将会把新的地址消息放入到 0x800~0x80F 中,并再次发出中断。


(3)对于新地址队列溢出的情况,GT-48330 可以通 过忽略或发流控消息来处理。这可以通过设置 GT48330 的 Enable_register<DNAB>bit 来实现,而 CPU 可以通过监测 NAQOF 中断来获得。如果<DNAB>bit 设置为 1 时,当 NA_Q 满时,GT-48330 将忽略到来的新地址消息;如果为 0 时,当 NA_Q 满时则发流控信息,通知交换芯片,暂缓发送。


(4)CPU 要从交换芯片中读取消息的过程 CPU 发送消息给交换芯片,表示要获取数据(例如一些端口状态信息)。此时,交换芯片会发送 Block_write 消息给 CPU,在 GT-48330 中有一个专用的 32B 的 Buffer 用于存储此消息,对应的存储地址为:0x980~0x99F。当有 block_write 到来时,GT-48330 将发送中断消息给 CPU,CPU 通过相关的中断位获取中断,然后来读取 block_write 消息。


2.2.2 GT-48330 的发送
对于 GT-48330 来说他具有 2 种发送方式:自动 DMA 方式和 CPU 传输方式。对于自动 DMA 的方式,不需要 CPU 进行干涉,GT-48330 可以自动完成发送。对于 CPU 传输方式,则需要 CPU 对发送的过程进行干涉。


(1)自动 DMA 方式 CPU 首先写传输数据(TD)寄存器,同时设置<TD>位,GT-48330 根据 TD 来向交换芯片发送 Buffer 请求消息,在 TD 消息中包含了目的交换芯片号、端口号、CPU 号及包的数量等消息。CPU 写数据到 GT-48330 的 32 b 的包存储空间 8LWW Buffer 中,如果 GT-48330 接收到交换芯片可以开始传送包的消息(SOP),他将把包发送给相应的交换芯片;如果收到交换芯片的拒绝消息(Buffer_rejecet),他将发送相应的中断给 CPU,告诉发数据被拒绝。


(2)CPU 传输方式 CPU 先直接通过 GNT-A/B Buffer 来发送 Buffer 请求消息,CPU 等待接收到 SOP 消息,此消息将被 GT-48330 存储在 OGRBuffer 中,然后再传给 CPU。一旦 CPU 收到 SOP 消息,就通过 GT-48330 的 GNT-A/B 通道来发送数据包,同时 CPU 还通过 GNT-A/B 来发送数据包传送结束(EOP)消息给交换芯片。


3 电路设计
GT-48330 的 G.Link 口的电路设计说明:数据发送和接收线 GTXD[15∶0]/GRXD[15∶0]与交换芯片的 G.Link 口的接收和发送线相连;GTXCMD/GRXCMD 发送和接收与交换芯片的接收和发送命令线相连;GTXOCLK 发送数据的参考时钟,通过 22Ω的匹配电阻接到交换芯片的 G.Link 口的接收时钟;GRXCLK 接收数据的参考时钟,由时钟模块来提供;GTXCLK 接收数据的参考时钟,由时钟模块来提供;GTXCLK 作为 GT-48330 的 G.Link 口的系统时钟,同样由时钟模块来提供。GTXCLK 和 GRXCLK 的时钟频率为 83.33 MHz。电路逻辑图如图 2 所示。

 


GT-48330 的 CPU 接口的电路设计说明:此设计 使用的 CPU 是 Motorola 公司的 Coldfire 5206E。由于在 16 b 接口时,MCF5205E 的数据线数据是交换的,即 D[31∶24]表示 BYTE0;D[23∶16]表示 BYTE1。同时在设计中将 GT-48330 的 Endian 管脚下拉,这样 GT-48330 将工作在 Little Endian 模式下,其数据是 不进行交换的,因此在外部需要将数据线进行交换,即将 GT-48330 的 AD[15:18]与 CPU 的 D[23:16]相接,将 GT-48330 的 AD[7:0]与 CPU 的 D[31:24]相连接;GT-48330 的地址线 Add[11:0]与 CPU 的地址线 A[11∶0]直接相接;片选信号 CS 与 MCF5206E 的 CS1 管脚相接;GT-48330 的读 / 写信号 RD 和 WR 相连接后,再与 MCF5206E 的 R/W 信号相接。当 R/W 为高电平时,GT-48330 的读信号 RD 有效;当 R/W 为低电平时,GT-48330 的写信号 WR 有效;地址锁存信号 ALE 与 MCF5206E 的 TS 信号相接,低电平有效;中断管脚 INT 与 MCF5206E 的中断管脚 IRQ4 相接,提供中断信号,低电平有效;GT-48330 的 DTACK 与 MCF5206E 的 TA 相接,低电平有效,表示数据传输结束;RST 信号直接与复位模块的 DSP1832(或 MAX811)的输出信号相连接,用于对 GT-48330GT-48330 的复位,低电平有效;CLK 时钟则由时钟模块提供,其频率为 54MHz。复位时 GT-48330 将对某些管脚进行抽样,以决定系统的工作状态。在配置中拉高通过 4.7 kΩ的电阻接 3.3 V 来实现,拉低通过 4.7kΩ的电阻接地来实现。


4 软件实现
软件分引导层(BOOT)和 CTRL 层。MCF5206E 上电复位后从 BOOT 开始执行,BOOT 层程序功能包括上电初始化,引导或下装 CTRL 层程序及上装整片 Flash 的内容。软件总体框架如图 3 所示。

 


首先对硬件进行配置:包括片选、DRAM 参数、初始化定时器、I/O 等,然后进行 DRAM/CPU ISRAM 自检,若自检失败则从超级终端上输出相应的错误信息,然后停机。若自检通过则检测 CTRL 层程序的完整性,若 CTRL 层程序完整则将其拷贝到 DRAM 的相应位置并将控制权交给 CTRL 层程序;若 CTRL 层程序不完整则通过超级终端输出相应信息并允许下装 CTRL 层程序或上装整片 Flash 的内容。


CTRL 层程序提供一个超级终端界面,进行各项功能模块的设置及测试。界面设置的内容如下:初始化设置及配置的读取,GT48330 寄存器的操作,交换芯片寄存器的操作,Switch 各功能模块操作:帧收发、VLAN 设置、TRUNK 操作、端口配置、MIB 采集等。


在系统上电后,由电源模块为整个系统提供电源支持,然后复位模块将向整个系统提供复位信号,时钟模块向系统提供参考时钟。在 MCF5206E 和 GT48330 模块复位之后,MCF5205E 将从存储模块 Flash 中读取程序进行运行,根据程序运行的结果,MCF5205E 模块将通过 GT-48330 模块对系统中的所有的交换芯片进行初始化,完成对系统的配置。在以后的过程中 MCF5206E 将通过 GT-48330 模块来进行对系统的管理及包的接收和发送。而存储模块中的 EDODRAM 则用于存放在运行过程中所需的程序及数据和包的临时存放。


5 对于拥塞控制的分析
由于 GT-48330 的构架对于接收的 G.Link 口采用共同的 FIFO,然后通过 Out Messager Detecter 来判别 FIFO 中的数据应该送到哪个通道中,这样就有可能产生拥塞。如果某个通道满了,他将不再接受 OutMessager Detecter 判定要发送给他的数据或消息,这样将使得数据聚集在 FIFO 中,从而使得 FIFO 满而产生拥塞。


对于新地址、包接收、中断接收 3 个通道,可以通过一个可选的模式来防止拥塞,也就是他们在不能接收时,将通过丢弃新到的消息来防止其聚集在 FIFO 中导致拥塞。


如果有许多的数据同时发给包 Buffer 的话,会使 Buffer 是满的,同时如果此时<DPB>设为 0(没有丢弃包),这时 G.Link 口将产生流控消息,造成 G.Link 口的堵塞。如果这时 CPU 对某个设备发送了 LW_WRITE 消息时,他将一直等待 Buffer 请求确认(BFR)的到来,在没有收到此消息时,将不会进行其他的数据处理。而由于 G.Link 口的拥塞将导致 BFR 无法送出,因此包 Buffer 中的数据也将一直得不到 CPU 的处理,这样将导致 CPU 的死锁。死锁的解决方法:


(1)可以将交换芯片设置成单包模式(SignalPacket Mode),使其只有在一个包被处理完后,才送下一个包。


(2)使用包拥塞失效位(Disable PacketBlocking),采用对新地址、包接收、中断消息的丢弃来防止。同时 CPU 也可以通过某些方法来判断潜在的拥塞,从而使得该寄存器置位。例如,可以限制发往 CPU 的包的类型和数量来控制。


由上可知,采用相关通道的丢弃功能可以防止 CPU 的死锁问题,同时,他只对本身的通道有影响;如果仅采用流控功能则有可能导致死锁问题的产生,对整个 G.Link 口产生影响。