内容可寻址存储器CAM在交换机中的应用
摘要:介绍了内容可寻址存储器CAM MCM69C233的特点及使用。通过某交换机应用表明,可大幅度提高数据检索速度,增强系统可靠性。
关键词:CAM 数据检索 嵌入式实时控制系统 MAC RTOS
内容可寻址存储器CAM(Content Addressable Memory是一种特殊的存储阵列。它具有将输入数据与CAM中存储的所有数据项同时进行比较,迅速判断输入数据是否与CAM中存储的数据项相匹配,并给出数据项对应地址和匹配信息的特点,因而被广泛地应用于通信、模式识别等领域。在某型号交换机的设计中,笔者应用MOTOROLA公司的CAM芯片——MCM69C233实现数据检索功能,既提高了系统资源的利用率,又保障了系统性能,大大缩短开发周期。
1 MCM69C233功能简述
CAM是一种基于RAM技术的存储器,数据项存储在CAM内部的阵列中。每个数据项的位数叫字宽,阵列内所有数据项的条数叫做CAM的深度,CAM的容量通过字宽和深度来表征。MCM69C233可存储4096条宽度为64 位的数据项。图1所示为MCM69C233的结构框图。
javascript:window.open(this.src);" style="cursor:pointer;"/>
MCM69C233有两个数据端口:控制端口(Control Port)和匹配端口(Match Port)。控制端口用于CAM表(CAM Table)的操作,除用于数据项的增加/删除、校验、统计外,还可以读取芯片内部状态寄存器的信息。数据的检索通过匹配端口完成。尽管基于RAM技术,CAM的存储机制却与RAM大相径庭。如图1所示,MCM69C233没有用于确定内容存储地址的地址总线,地址线A0~A2用于对片内控制寄存器的寻址。在写CAM模式下,MCM69C233从控制端口数据线DQ0~DQ15读取需要写入的数据项,数据项的存储地址由芯片内部逻辑控制。
用户可对MCM69C233的匹配规则进行编程,在读CAM模式(查找匹配)时,MCM69C233直接从匹配口数据线MQ0~MQ31读入数据,并按照预先定义的匹配规则将输入数据项与阵列中的所有数据项进行并行比较。如果数据项存在,匹配口输出该数据项的索引值,且MS为0;如果数据项不存在,MS为1。由于比较过程只需一个时钟周期,所以速度极快。MCM69C233的最长匹配时间为210ns。
MCM69C233有两种工作模式:ATM模式和基本模式。ATM模式主要用于ATM交换机中对ATM信元的处理。基本模式的应用十分灵活,由于匹配规则可编程,用户可根据不同的应用场合实现检索功能。
2 应用实例
2.1 设计要求
某型号交换机根据产品定义用于ATM网络和基于以态网的城域网E-MAN(Ethernet Metropolitan Area Network)的连接。其ATM端口工作速率为155Mbps,以太网端口工作速率为100Mbps。系统数据流如图2所示。
图2 交换机系统数据流图
上行方向,交换机首先在系统内嵌的VP/VC通道表内检查每一个ATM信元内的虚通路值/虚链接值VPI/VCI(Virtual Path Index/Virtual Connection Index,标识一条虚通道/虚链接VP/VC)是否存在。如果存在,CPU获得该VP/VC的配置信息,准备下一步的协议处理。如果输入信元的VPI/VCI不存在,则丢弃该信元。
输入的ATM信元经协议处理后,包含在ATM信元中的以太网帧被提取出来。交换机接着对以太网帧的源MAC地址进行检索,判断该以太网帧是否来自已知的用户。如果在系统内嵌的MAC-VP/VC表中检索到该MAC地址,则表明该以太网帧来自已知的用户,系统随即刷新老化标记,将其转发至以太网接口;如果不存在,则系统将在MAC-VP/VC表中添加该MAC地址并设置老化标记,而后交换机将该以太网帧转发至以太网接口。
下行方向,系统首先以输入以太网帧的目的MAC地址为关键字在MAC-VP/VC表中进行检索,该地址就是上文提到的源MAC地址。如果目的MAC地址不存在,则将输入的以太网帧转换为ATM信元,向所有用户端口广播;如果匹配成功,交换机获得与该MAC地址对应的VPI/VCI,将以太网帧转换为ATM信元,并根据VPI/VCI通道表,从指定的用户端口转发至ADSL终端,最后送达用户主机。
嵌入式实时控制系统的性能主要取决于两方面:硬件平台的运算性能和算法的优越性。其中硬件平台的运算性能最为关键,这一点在交换机中表现得由为突出。按照设计要求,ATM信元的VPI/VCI检索必须在1/4~1/2的信元接收时间内完成,即684ns~1.37μs,以太网帧的MAC地址的检索时间不能超过5.12μs。因此首先要保证数据检索任务的响应速度;其次,由于交换机数据流量大,对于本系统的ATM端口,系统每秒必须处理约365,566帧ATM信元,数据检索任务十分繁重;另外,除了业务数据的ATM-Ethernet双向协议处理外,交换机还必须完成SNMP(Simple Network Management Protocol)协议处理、命令行处理等任务,所以还必须解决数据检索对系统资源的占用问题。
提高性能的方法一般有两种,最直接的方法就是采用高性能的硬件平台,如采用分布式控制系统,一个CPU用于协议处理,另一个CPU用于网管等事务处理;或者协议处理部分由ASIC完成,事务处理部分由CPU实现。但这些方案会带来硬件成本的大幅提高。另外一种方案就是采用更优化的算法。通过分析发现,尽管利用软件实现对ATM信元的VPI/VCI和以太网帧的MAC地址检索并不复杂,但由于检索次数频繁,大量的系统资源被占用,系统的响应速度大大降低,满足不了大流量数据通信的要求。因此纯软件算法解决不了数据检索部分对资源占用的问题。为提高系统的响应速度,必须将这两部分数据检索的任务分离出来由硬件实现,协议处理部分还由CPU完成。数据检索模块和协议处理模块并行工作,两部分通过数据耦合,既可以提高模块的内聚度,又增强了算法的健壮性;并且利用硬件实现数据检索还可以提高检索速度,降低系统资源的占用率。
javascript:window.open(this.src);" style="cursor:pointer;"/>
利用硬件进行数据检索,通常采用两种策略一种是利用FPGA或CPLD等可编程逻辑器件定制数据检索单元。本系统两种地址的数据结构并不复杂,定制简单数据结构的检索单元体现不了可编程逻辑器件功能强大、灵活性强等优越性,并且这类器件的开发难度相对较大,完成后还需要相当长一段时间进行测试。另一种策略是选择CAM实现数据检索。两者比较,本系统采用CAM。根据系统设计,本交换机采用两块CAM实现数据检索功能,MAC-CAM用于以太网帧的MAC地址检索,ATM-CAM用于ATM信元的VPI/VCI检索,如图2所示。
2.2 检索算法设计
下面根据系统设计方案,以MAC-VP/VC表为例说明以太网侧数据检索功能的实现。如图3所示,MAC-VP/VC表由硬件、软件两个子模块构成。MAC-CAM表实现MAC地址到偏移地址的查询,这部分由硬件实现;RAM表实现偏移地址到配置信息的查询,这部分由软件实现;两者通过偏移地址耦合。本系统将每一个VP/VC认为是一个用户端口,VP/VC的值保存在用户端口域。
当进行MAC地址检索时,CPU首先以MAC地址为关键字通过MAC-CAM表的检索得到对应的偏移地址a,然后再根据公式(1)得到RAM表中该MAC地址的存储位置,并由此地址获得相关配置信息。RAM表中标志域1、标志域2分别表示用户MAC地址的状态信息,限于篇幅这里不详述了。
RAM地址=基地址 + a×b (1)
公式(1)中,基地址是RAM表的起始地址;a是通过MAC-CAM表查询得到的偏移量,即MAC地址的索引值;b表示RAM表中的一个表项的宽度为多少字节。
与MAC-VP/VC表的实现基本相同,VPI/VCI通道表的实现也分为两部分,一部分由硬件CAM实现,另一部分由软件实现。执行VPI/VCI检索时,CPU先通过CAM得到某VPI/VCI的偏移地址,然后再根据该偏移地址得到RAM表中保存的具体配置。
正是通过MAC-VP/VC表和VPI/VCI通道表,本系统实现了ATM网络与E-MAN的交换。
2.3 检索算法的实现
按协议规定MAC地址占48位,表示为6字节的数组。图4和图5分别表示了MAC-CAM表中MAC地址的高32位数据和低16位数据的数据结构。
图6所示为MAC地址索引项的数据结构,它分为两部分:最高位为匹配标志(MS),0表示匹配成功,1表示匹配失败;匹配输出的低16位为MAC地址的索引(macIndex),用户可按需要对其进行定义,如MAC地址00-3C-CD-17-65-AB的索引值为0x03EF。
不同的协议要求,VPI/VCI表的数据结构与MAC表的数据结构并不相同。但由于处理方式相近,这里就不赘述了。
MCM69C233的匹配规则由通用屏蔽字(Global Mask)制定。进行检索时,MCM69C233将检索内容与通用屏蔽字进行按位或运算,1表示屏蔽该位的值,0表示对该位敏感。从上文可看到,两种数据检索的数据结构大不相同,因此需要不同的匹配规则。根据本系统设计要求,ATM信元的检索只对VPI/VCI敏感,因此通用屏蔽字为0xFF00_0000_FFFF_FFFF,即忽略GFC字段和PHY地址标识段。对于MAC地址的匹配操作,通用屏蔽字为0x0000_0000_0000_FFFF,即48位匹配。通用屏蔽字的设定必须在CAM初始化时完成。
在执行匹配操作前,CAM须进行初始化。由于ATM-CAM和MAC-CAM的工作模式不同,因此两者的初始化过程亦不尽相同。下面以ATM-CAM为例,用伪码形式说明初始化过程。
atmCamInit()
{
Set ATM_CAM working on ATM mode;
Set the Global mask register for VPI/VCI translation;
Set the ATM_CAM to fast entry mode;
Input VPC table;
Initialize VPC table;
}
对于ATM-CAM,首先必须设定工作模式,ATM-CAM工作于ATM模式;然后对通用屏蔽字进行设置,以保证正确的匹配规则;紧接着,将ATM-CAM设为快速输入模式(Fast entry mode,当需要将大量数据写入CAM时,该模式能加快输入速度),将预先定义好的VPI/VCI-Channel Code表写入CAM;最后执行表初始化指令。至此,ATM-CAM能够正常工作了。前面已提到,MAC表的形成是通过自学习得到的,因此MAC-CAM的初始化并不需要该过程。另外,MAC-CAM工作在基本模式,MCM69C233上电后,默认工作模式为基本模式。因此MAC-CAM的初始化只需要两步,通用屏蔽字的设置和表初始化。
图4、图5和图6
匹配操作通过对匹配口读/写完成。匹配口数据线只有32位。由于MAC地址占48位,因此需要两次写操作才能完整地将一个MAC地址表达出来;而VPI/VCI只占24位,因此只需一次写操作就可以了。下面以MAC地址的检索为例说明CAM的匹配操作过程。
当进行MAC地址检索时,CPU先向匹配口写入如图4所示的低32位数据,其中高16位有效,低16位可以为任意值;紧接着CPU向匹配口写入如图5所示的高32位数据;随后CPU读匹配口,就可得到如图6所示的结果。如果被查询的MAC地址存在,则MS位为0,macIndex为有效输出;如果被查询的MAC地址不存在,则MS位为1,macIndex为输出无效。上述过程可通过伪码表示如下:
STATUS macCamCheckEntry
{
Write low 32-bit word to match port in first cycle
Write high 32-bit word to match port in second cycle
Read 32-bit result from match port
If MS flag is “1”
There is no such Entry
Else return macIndex
}
3 运行结果
某交换机的运行结果表明, 采用CAM, 交换机的以太网端口能工作在100Mbps,基本满足设计要求;如采用软件搜索方法, 则只能达到30Mbps。