用于在按内容寻址的存储器中执行可变宽度搜索的电路和方法 【技术领域】
本发明涉及按内容寻址的存储器(CAM),尤其涉及利用具有可变码字宽度的搜索数据搜索CAM的电路和方法。
【发明背景】
按内容寻址的存储器(CAM)是一种存储装置,其中根据存储数据的内容而不是根据存储数据的位置来访问和修改存储的数据。通常,普通的CAM搜索操作包括:接收一个搜索数据码字并且把该搜索数据码字与该CAM中的全部输入项比较,确定其中是否存在单个匹配相、多个匹配相或在该搜索数据码字和该CAM中的输入项之间的不匹配地情况。CAM的一行中的每一个存储位置都连接到一个匹配线,该匹配线指示在存储的数据码字和搜索码字之间的比较结果的匹配或不匹配的情况。表示一个匹配条件的全部匹配线通常由一个优先级编码器处理,以便确定被作为该CAM的一个输出提供的最高的优先级匹配地址。
数据码字和匹配线的每一个组合都具有在该CAM之内的唯一N比特地址。因此,针对任何搜索周期都可能有高达2N次的匹配线启动。如提到的那样,该CAM通常包括用于产生对应于最高的优先级启动匹配线的N比特地址的一个优先级编码器。此N比特地址可被用于例如网际协议(IP)路由选择表查寻的网络应用、压缩和解压缩以及在微处理机系统中的完全相关联的高速缓存实施方案。
由于其存储逻辑″1″、逻辑″0″以及″无关″状态的能力,三态CAM被广泛地使用在网络应用中。CAM通常可用的数据宽度是72比特和144比特,而最新的CAM可用于288比特的数据宽度。一般在网络应用中,该72比特存储模式被用于存储针对层2桥接表格的介质存取控制器(MAC),而层3的网际协议(IP)路由选择表则使用144比特模式存储。每一个IP路由选择表输入项都包括一个信源地址、信源端口、目的地址、目的端口和某些种类的QOS(业务质量)或TOS(业务类型)字段。在支持两个数据宽度的CAM中,两个类型的表格都能够被保持,从而降低系统造价,实现一个共同的CAM资源用于该两个功能。
当事先知道搜索数据宽度时,这样的可变宽度CAM是有用的,但是在应用例如URL(统一资源定位器)的查寻中,搜索数据宽度通常很长,并且是长度未定。目前可变数据宽度的CAM仍然局限于不连续预定的宽度,并且因此针对此目的CAM的使用很少得到支持。
如上所述,在CAM中存储URL将有助于加速与频繁访问的万维网页相关的网络信息流通量,以及有效地处理网页缓存。如果能够实现操作大部分URL长度的一个很宽的CAM(数百到数千比特宽度),则当存储普通的或短的URL时,将有大量的储存空间的浪费。在这种情况下,利用同一个CAM来针对桥接或路由选择输入项则将变得很浪费。
因此,虽然确实存在可变预置码字宽度的CAM,但是仍然需要一种支持任意码字宽度搜索并且能够在一个或者多个搜索″运行(on-the-fly)″类型之间切换的CAM。而且,不同码字宽度的输入项应该存储在具有任意边界的CAM中,使得整个CAM都能被使用而在输入项之间没有不用的或浪费的间隙。
用于在CAM中搜索比省缺码字宽度更宽的存储字的一种系统的实例出现于Pereira等人的美国专利U.S.6252789中。Pereira描述的电路实现了在该CAM的一个或者多个行中的比CAM行的宽度更宽的一个数据码字的存储和搜索。结果是,该更宽的码字搜索能够利用实体上组构成多个较小码字的一种CAM来执行。在Pereira等人的专利中,一个或者多个数据码字的序列被存储在一个或者多个CAM单元行中。每一行都有相关的匹配线和宽度扩展逻辑电路。该宽度扩展电路被互连,并且每一个都有进位输入、进位输出和匹配线输出,用于确定把匹配结果提供到该优先级编码器以及相互匹配的方式。由一个指令译码器产生的控制信号被提供到每一个宽度扩展逻辑电路,用于确定提供在该数据码字中的第一、随后以及最后的码字的时间,以便与存储在该CAM中的数据比较。如果提供了具有一个省缺码字宽度的搜索数据码字,则在每一个宽度扩展逻辑电路中的该匹配输出信号都被提供到该优先级编码器,并且该进位输出信号被保持在一个非启动状态。然而,如果提供到该CAM的搜索数据码字是一个多码字链的第一码字,则每一个匹配线输出信号都被设置为指示一个不匹配,即被抑制,并且每一个进位输出信号都被传送到下一个宽度扩展电路。如果提供到该CAM的搜索数据码字是一个多码字链的随后的码字,则每一个匹配线输出信号都指示一个不匹配,并且每一个进位输出信号都由该进位输入信号和该中间匹配线结果的逻辑组合产生,并且被类似地传送到下一个宽度扩展电路。如果提供该CAM的搜索数据码字是一个多码字链的最后码字,则如果该进位输入信号和该中间匹配线结果的逻辑组合都被启动,每一个匹配线输出信号都指示一个匹配。结果是,直至在一个多码字数据链中的最后码字已经被与该CAM的内容比较为止,一个匹配结果将不被提供到该优先级编码器。因此这种方案只在严格匹配多个码字的搜索中才有效。结果是,这一方案的缺点是得不到该中间的搜索结果。例如,如果一个最接近的匹配发生在提供该多码字搜索数据的最后的码字之前,则该最接近匹配结果将实际上是屏蔽。
因此,仍然需要一种CAM,其能够搜索可变宽度的数据码字并且其中的数据码字的存储实现该CAM的高效使用。
发明概要
一种按内容寻址的存储器(CAM),用于在关于一个存储数据码字序列的搜索中产生中间搜索结果,该CAM包括CAM单元的多个行,每一个单元用于以该数据码字的顺序存储一个数据码字;多个匹配线,每一个匹配线都耦合到CAM单元的一个对应行,每一个匹配线用于产生一个对应于的匹配线信号;耦合到该匹配线的一个优先级编码器,用于响应一个匹配线信号而产生一个匹配地址;以及多个逻辑电路,每一个逻辑电路耦合到对应的匹配线,用于响应一个指令信号而有选择地把该匹配线信号耦合到该优先级编码器,该指令信号用于指令该CAM产生关于一个新搜索或关于一个先前搜索的继续搜索的一个匹配地址输出,使得出现在该序列中的任何中间位置的数据码字序列的部分都响应等于该存储数据码字序列的一部分的输入搜索数据而提供匹配结果。
附图描述
以实例而又不打算限制本发明范围的方式示出本发明的特征和优点,
本发明的具体实施例将参照下列附图描述:
图1是根据本发明实施例的CAM的示意简化方框图;
图2是表示用于图1的CAM阵列的搜索定时的一个定时示意图;
图3是表示图1的一个CAM阵列部分的方框图;
图4是表示用于图3的CAM阵列的匹配线定时的一个定时示意图;
图5是一个示意图,示出存储在图1的CAM阵列中的几个按序编址位置的示例数据;
图6(a)和6(b)是用于一个CAM的搜索数据序列的示意图;
图7(a)和7(b)是分别使用图6(a)和图6(b)中的搜索数据搜索操作的定时图;
图8是表示在根据本发明另一实施例的CAM中存储的数据的示意图;
图9是应用到图8中示出的CAM数据的搜索序列的示意图;
图10是表示存储在根据本发明另一实施例的CAM单元中的数据的示意图;和
图11是表示根据本发明一个实施例的用于处理匹配线输出的一个电路的示意图。
最佳实施例的详细描述
在下列描述中,相同的数字在附图中表示相同的结构。
参考图1,其中示出根据本发明一个实施例而构成为128k×72比特输入的单个[128k×72不是9M]CAM阵列100。一个72比特的码字被接入在一个72比特数据总线上用于三个目的:当执行搜索操作时提供72比特的搜索数据;提供写入数据的72比特用于存储输入项;以及读出72比特,以便下载已经存储在该表格中的输入项。该数据总线是双向的数据总线,使得其能够适应这三个功能。该CAM包括一个优先级编码器和多个匹配分解器(MMR)120,其操作和结构在待决美国专利申请09/954,074中有所描述,尽管能够采用其它传统的优先级编码电路而不影响本发明的该实施例,但是美国专利申请09/954,074被结合在此参考。实质上,该优先级编码器和多个匹配分解器102接收作为输入的全部匹配线锁存输出,并且产生一个最高优先级匹配地址。在检索过程中,与每一个匹配线相关的该匹配线锁存器107传送该搜索结果,即在针对每一个输入项的存储数据和搜索数据之间的一个比较的″符合(hit)″(匹配)或″失合(miss)″(不匹配)结果。该优先级编码器和MMR(多匹配分解器)120把该128k的″符合″或″失合″指示信号转换成表示该最重要的″符合″的单个最高的优先级地址从最高到最低优先级组构存储位置。另外,指示在该阵列中是否已经出现一个匹配的(MATCH)比特被提供作为一个输出。而且一个多匹配MM标志输出提供作为一个输出,指示是否已经出现了多个匹配。如果没有″符合″(即匹配),则该MATCH比特保持为逻辑″低″值。如果至少有一个“符合”,则该MATCH比特将被设置为逻辑″高″值。如果在任意给定搜索中出现一个以上的“符合”,则该MATCH比特将设置为逻辑″高″值,并且该多匹配MM标志也将被设置为逻辑″高″值。
参考图2,其中示出对于该CAM阵列100执行的三个典型搜索的操作系列。在系统时钟信号CLK的第一上升沿,搜索数据S1被时钟输入到CAM中。大体在两个半(2 1/2)时钟周期204后,可得到搜索匹配地址(MA)的结果R1。以CAM阵列输出由MATCH=1和MM=0指示的单个匹配。该结果是可供在第三个时钟边沿206上由外部电路(没所示)锁存,因此称为等待时间3操作,即在检索指令的发出和搜索结果的可得到之间的3个系统时钟周期的延迟。这几个时钟周期是CAM内部需要的时钟周期,用于搜索数据的锁存、对数据格式化以便搜索、预充电匹配线、产生针对每一个输入项的匹配结果、编码该最重要的匹配以及驱动该输出接端。
通过实施一个内部流水线结构,可以在每时钟边沿上执行搜索。搜索数据S2导致的是一个″失合″,所以没有匹配地址输出。搜索S3数据导致的是一个多匹配(设置MM=高值),使得只有该最重要的匹配地址R3出现在MA总线输出上。
参考图3,其中示出三态CAM 300的单元阵列320的一个小子集。每一个三态单元322都包含两个表示为bk0和bk1的用于存储两比特数据的存储元件,以及用于比较存储数据和搜索数据的比较晶体管。存储元件可以是任意类型的静态随机存取存储器(SRAM)或动态随机存储器(DRAM)单元,这两种存储元件在本专业是公知的。三态数据被存为下面的表1所示。该阵列中的每一个单元行形成一个数据码字,该行中的每一单元都耦合到匹配线ML。匹配线ML0-MLn被逐一通过分别的预充电晶体管耦合到Vdd。该晶体管由一个启动逻辑″低″预充电信号 PRE控制。阵列中的单元列被耦合到各自的搜索线S01;S00;S11;S10;SN1;SN0。
表格1数据bk0 bk1逻辑“0”0 1逻辑“1”1 0“无关”0 0
按照相同的格式把搜索数据加到每一列。
参考图4,其中示出了在针对图3的CAM阵列的搜索操作过程中该控制和数据信号的一个定时图。在每一时钟周期的开始, PRE信号被脉冲到逻辑″低″值,以把每一个匹配线ML充电到一个正的供电电平Vdd。随后在搜索线上启动搜索数据,例如在图4中,三示出个顺序搜索,第一个是对应于以逻辑″1″进行的搜索Sx0=1和Sx1=0;第二个是对应于以逻辑″0″进行的搜索Sx0=0和Sx1=1;以及第三个是对应于以逻辑″无关″状态,即实际上屏蔽CAM单元的状态进行的搜索,Sx0=0和Sx1=0。因此,对于此最佳实施例来说,通常任何存储一个″无关″状态的CAM单元都将不能把该匹配线从其预充电的″高″状态放电成Vdd状态。在其中搜索数据是一个″无关″(即Sx0=0,Sx1=0)状态的列中的任何CAM单元也将不能下拉该匹配线。如果存储在单元中的数据匹配将搜索数据,则该具体单元将不下拉该匹配线。只有在CAM单元没有把″无关″数据存储在该单元中或该搜索线上、并且一个单元中存储的数据与该搜索数据互补的情况下(即:bk0=Sk1和bk0=Sk0),该匹配线才被放电,以指示一个″失合″状态。耦合到其对应匹配线的任何单元上的一个″失合″状态都将导致一个整行的″失合″状态。换句话说,匹配线被预充电至一个″符合″状态,并且由在任一相关单元上的″失合″状态放电。
如参照图1讨论的那样,锁存在单个匹配线锁存器中的该″符合/失合″指示信号被提供到该优先级编码器/多匹配分解器电路部分,该电路提供最高优先级的“符合”的单个编码地址。CAM中的输入项按照从最低优先级到最高优先级的顺序构制。
到目前为止,根据本发明一个实施例的CAM阵列的通常操作是被提供作为用于构成由本发明解决的具体问题的背景。如在发明背景部分中简要描述的那样,本发明解决的具体问题涉及如何处理一个可变码字宽度搜索的匹配线结果。更具体地说,期望快速和灵便地提供针对其码字宽度大于存储在CAM阵列中的省缺码字宽度的搜索码字的搜索结果。如先前描述的那样,Pereira的专利中描述的传统方案仅在搜索数据的比特和存储在CAM的分别行中数据的比特之间严格匹配的情况下才提供一个″匹配″结果,并且仅在搜索了整个搜索字符串之后才提供这样的一个匹配结果。结果是,虽然一个宽码字(例如URL)有可能已经存储在CAM中,但是在当仅对于该码字的一部分执行搜索的情况下,该宽码字将不能被用于标识一个″匹配″。其它记载的电路也不能实现这一目标。
通过参考一个实例进一步说明此问题。因此参考图5,其中示出一个符号阵列,象征性地表示被用于存储各种长度的URL的一个CAM阵列的几行内容的取样。该符号阵列上的每一单元都表示需要CAM的8比特的该URL的一个符号。空白字符被用于图中指示的位置,从而允许严格匹配出现。因此图5中描述的结构可与一个72比特宽的CAM阵列相比。如可从该实例中看到的那样,在该CAM阵列中的各种输入项可以对应于由用户访问的连续网页。如果用户先前已经在″www.mosaid.com/licensing″访问了URL,则其连续网页被存储在该CAM中,下一次用户想简单地接入网页″www.mosaid.com″,除非该确切的URL已经存储在该CAM中,在该CAM中将不产生一个匹配地址。作为这种严格匹配需求的结果,可能需要把由用户在同一个站点接入的每一URL都必须被输入到该CAM,以便确保一个严格匹配。这是CAM空间的数据项中的浪费。换句话说,假设不是地址″www.mosaid.com″,存储在行0和1中地址对应于″www.mosaid.com/ip″,并且用户想接入″www.mosaid.com″。即使在地址行0、2和5出现针对与″www.mosai″对应的72比特字的一个部分的多个匹配,该U.S.6252789专利建议的现有技术的方案也不会输出一个匹配地址。
因此本发明提供了解决这一问题的方案。根据本发明的一个实施例,具有的码字宽度比存储在CAM中的省缺码字宽度更宽的一个搜索数据字符串被分段成具有在该CAM中被接连搜索的省缺宽度的一组码字。在每一个搜索的结束时,中间搜索结果被提供到该优先级编码器和多个匹配分解器。一旦已经搜索了该组码字中的最后码字,用户就能够根据该中间搜索结果来确定哪个码字是该最佳匹配,并且如果需要的话,则将继续进行进一步更多的限定搜索。
该改进的CAM的优点可以通过参考图6(a)示出的取样搜索数据输入而示出,该6(a)示出的取样搜索数据输入被用于CAM的内容((图5示出)。对于数据码码字D5来说,可以根据该CAM被搜索的方式,即根据是否期望一个严格匹配或是否期望一个部分匹配而存储空白字符或″无关″字符。这些符号将由CAM的持卡人在CAM的内容被初始化时写入。图7(a)示出根据本发明从对应于搜索图6(a)中的数据用户角度来看的搜索定时,以便在搜索操作过程中提供中间搜索结果。在该CAM(没示出)中的一个指令译码器接收每一个连续的检索指令,并且产生对应于每一个搜索码字的一个指令比特,指示该72比特的搜索码字是否表示一个新的搜索操作或一个继续的搜索操作。
参照图6(a)和图7(a),假设该搜索输入是用户想接入的URL″www.mosaid.com/licensing/patents role.htm″。该URL被分解成图6(a)示出的五个72比特的搜索码字D1-D5。该搜索输入的每一个72比特搜索码字D1-D5都在该时钟信号的上升沿随着一个对应于指令字(INST)被加到该CAM。在该指令字中的一个比特(CONT/NEW)指示它的对应搜索码字是否为一个新的搜索码字或一个继续搜索的搜索码字。根据图5示出的CAM阵列的内容,包括部分″www.mosai″的第一个72比特的搜索码字D1在地址0、2和5产生多个匹配。该CAM电路因此认定该MATCH比特和一个多匹配标志(MM)为逻辑″高″值,并且输出该最高优先级匹配地址MA=0。对于与部分URL″d.com/lic″对应的随后72比特的搜索码字D2,以地址3和6指示匹配,并且该最高优先级匹配地址被输出MA=3。在执行第三个搜索并且提供D3(包括部分URL″ensing/pa″)之后,没有进一步的匹配。结果是,由于有两个多匹配结果和没有进一步的匹配结果出现,所以用户很可以根据提供的中间的多个匹配结果而继续更精确的搜索。应该指出,不同于抑制这些中间搜索结果的现有技术的方案,中间的多个匹配结果MA=0、MA=3是在搜索了整个URL的搜索之前提供的。
从该中间的匹配地址输出中,用户能够确定对于前两个连续的搜索码字来说存在有针对搜索输入的一部分的匹配。用户可以发现,这种部分匹配表明其中可能有存储在该CAM中的一个URL地址,它包含了继续该搜索而实质寻找对于一个更精确搜索数据码字的严格匹配的足够信息。根据此信息,如图6(b)中所示第二个搜索序列″www.mosaid.com/licensing″能被提供到该CAM。如果把已有技术的方案使用在此情况,则由于不存在直接匹配,而该搜索的结果将是一个″失合″。但是在本发明的情况下,图6(b)中示出的第二搜索序列的结果将是一个多匹配,具有最高优先级匹配地址MA=0的输出、最高优先级匹配地址MA=3的输出、以及最后的单个匹配MA=4的输出。该最后的单个匹配MA=4的输出是最佳匹配URL。在此情况中,搜索数据中的不用的后缀字符被设置为″无关″。即使发现了一个严格匹配,该CAM也将不象已有技术方案的情况那样来屏蔽或抑制该发现的部分匹配,所以如果先前的地址(MA=0和MA=3)没有用的话,则用户(而不是CAM自己)能够选择忽略该先前的地址(MA=0和MA=3)。对于该搜索的定时图在图7(b)中示出。
另外,不象图5示出的那样把URL存储在该CAM中,可以解析或分段该URL,使得以一个新CAM码字位置开始而存储每一个分段,即没有分段相交一个CAM码字边界。图8示出了在根据本发明的另一实施例的存储装置中,表示URL″www.mosaid.com/licensing/whatis_patent.htm″的存储的一个实例。如可以看到的那样,与图5示出的装置比较,此装置节省了三个存储位置。通常,如果正在存储的URL是紧密相关的,则使用这类分析数据存储是有益的。如果将要存储在CAM中的URL不相关,则这样一个方案需要的空间将比参考图5描述的方案需要的空间更多。此方案还给出在单个搜索序列中的最佳匹配,而不必象在前面实例中那样必须提交另一组输入来解析一个MM状态。通过插入空白字符或通过在该输入字符串中插入″无关″来使得一个分段产生一个“符合”,此方案还给出寻找该确切存储的URL的灵活性。
利用图10所示的输入搜索数据序列″www.mosaid.com/licensing/patents-role.htm″执行对于图9所示存储数据的一个搜索,将导致匹配MA=0、1、2、3和4,随后是失合。即使该输入序列比先前方案中的输入序列更长,也将在单个传送中获得该结果,从而避免象参考图6(b)和7(b)讨论的那样需要一个第二搜索。
如可以从图9示出的实例中所见,针对该分析的数据结构的存储器需求较小,因为不必重复该前缀,虽然这可能随着共享一个共同前缀的URL的数量而根据具体情况改变。一个进一步的变型是采用压缩的数据结构,但是利用后缀″无关″字符检索。在此情况中,输入项0到4将是不必要的。
参考图11,示出根据本发明一个实施例的电路,用于处理匹配线信号以便支持可变码字宽度搜索。能够从指令解码该CONT/NEW信号或其可以是在该指令字中的一个单独的比特。通过锁存该组合搜索的结果,而不是仅该单独的匹配结果,码字搜索能够被中断用于背景操作。例如,用于表格维护的读出或写入操作能够被插入在图6示出的任意搜索操作之间,而该多码字搜索功能将不受影响。
在图12中,通过反相器125放大匹配线信号ML0、ML1、ML2...,然后输入到一个逻辑电路122中。逻辑电路122包括针对每个对应的匹配线输出的一个″与或非″门123和一个反相器124。每个″与或非″门123以一个各自的输入端接收由该反相器125驱动的该匹配线输出,并且作为另一输入,是CONT/NEW逻辑信号与通过反相器124提供在一个低优先级匹配线上的一个寄存匹配条件的结果的组合。″与或非″门123的输出被作为输入提供到匹配线D型触发器126,其Q输出被提供到该优先级编码器和多个匹配分解器127。
逻辑电路122的操作可以说明如下。在一个新的多码字搜索的开始,第一个数据码字被加到CAM阵列以便产生在该匹配线上的单独的匹配指示。同时从指令译码器提供适当的比特,产生被设置为逻辑″0″的CONT/NEW控制信号,指示一个新的多码字搜索的开始。结果是,该D型触发器将锁存单独匹配线的结果,而与相邻的匹配线触发器的状态无关。根据多码字搜索的随后的码字,通过该指令字的适当的解码,内部CONT/NEW控制信号被设置为逻辑″1″。一旦CONT/NEW已经设置为逻辑″1″,指示一个多码字搜索的随后码字正被搜索,则为了任一D型触发器记录一个匹配,在该CAM阵列中的其相关的匹配线以及先前匹配线位置都将必须该先前周期中寄存一个匹配。如能够在图12中看到的那样,每一个D型触发器接收其相关的″与或非″门123的输出,该″与或非″门123把相关的匹配线的结果与经反相器124从前个D型触发器提供一个低优先级匹配线的结果相组合。以此方式,从由最低到最高优先级的每一匹配线产生的一个累积的匹配在一个多码字的搜索过程中从一个位置传送到一个位置,产生中间的匹配结果,供一个传统的优先级编码器和多个匹配分解器电路使用。
虽然URL被用作一个实例,但实际上能够执行任何种类的搜索。例如能够以同样方式存储语句和短语。如图11所示,语句″is this awretched demibee″能够以解析模式存储在72比特的6个码字之内。在此情况中,假设用户想寻找不一定以该输入项的开头为起始的一个短语,例如想寻找″demibee″。该已有技术方案将不能提供信息所在放置的提示,因为已有技术要寻找的是一个严格匹配。结果是,一个部分结果将被放弃,因此失去了已知在该CAM中有该搜索数据的一个匹配的优势。但是,利用本发明的提供部分匹配结果的能力,将指示用户在该CAM的一个确定的地址,在此情况中中是在码字4和码字5,包含了该数据搜索。据此结果,用户能够确定该发现的数据是否与该期望的搜索相关。
在所有的这些实例中,在整个输入数据字符串被输入之前获得一个部分匹配结果的好处是清楚显见的。一个部分匹配的URL将给予该路由器关于一个网页可能处在何处的一个良好的指示。这要比反复地搜索该URL的连续截断版本而直到一个匹配出现有高得多的效率。
虽然已经结合具体实施例和具体的使用描述了本发明,但是在不背离本发明精神的条件下,本领域的技术人员将能够想到各种修改。
说明书中已经采用的术语和表达式被用作描述的术语与非限制,其中无意使用这种术语和表达式来排除展示和描述的等效特征或等效部分,而是认识到可能在本发明的范围之内有各种修改。