专利名称:从随机存取存储器构建的内容可寻址存储器的利记博彩app
相关申请的参考本申请涉及与本申请同一天提交的标题为“Content Addressable Memory toIdentify Subtag Matches”的美国专利申请。
背景技术:
不同种类的存储器提供了不同的访问数据的方式。例如,图1A描述了称为“随机存取存储器”或RAM的存储器类型。RAM在存储器中的不同地址处存储数据。例如,如图所示,当在读操作中应用二进制地址“0001”时,RAM输出该地址处存储的值“b”。
图1B示出了称为“内容可寻址存储器”或CAM的不同类型的存储器。如图所示,CAM存储称为“标签”的不同的数据值(例如,“a”、“b”和“c”)。响应于给定的查找标签,CAM可以确定该查找标签是否匹配或“命中”先前写入的标签。例如,如图所示,对查找标签“b”的搜索导致一“命中”,因为“b”先前已被写入CAM。
图1A和1B是随机存取存储器(RAM)和内容可寻址存储器(CAM)的示图。
图2A-2D示出了CAM的操作。
图3示出了三重CAM的操作。
图4是CAM的示图。
图5A和5C是示出RAM组织的示图。
图5B和5D示出了CAM的操作。
图6A-6B是检测CAM命中和子命中的电路的示图。
图7是网络处理器的示图。
图8是网络转发设备的示图。
具体实施例方式
图2A示出了从一组RAM块102a-102b构成的CAM100。CAM100执行常规CAM操作,诸如标签写和标签查找。但与常规CAM不同,CAM100不需要明确地存储被写到CAM的标签值的比特。相反,CAM100可通过将一标签作为进入RAM102a-102b的地址的集来隐含地表示该标签。换言之,代替存储“1010”的标签比特,CAM100可在RAM102a-10b的地址“1010”处设定单个比特,以通知标签内这些比特的存在。使用该方法的CAM可从设计库中普通可用的元件构建,节省管芯空间,提供良好的性能特性,并呈现灵活的几何形状。
更详细地,图2A示出了由两个RAM块102a-102b构成的样本CAM100。在该示例中,每一RAM块102a-102b具有4比特地址空间,范围从“0000”到“1111”。这些4比特地址可加以组合以表示8比特标签值。例如,“00001111”的8比特标签值可被分成两个4比特RAM地址来自第一组4比特的“0000”104a的地址和来自第二组4比特的“1111”104b的地址。形成这些地址的不同比特组被称作“子标签”。这样,第一子标签由标签的第一4个比特构成且第二子标签由第二组4个比特构成。在所示的配置中,使每一子标签与给定RAM102a-102b相关联。例如,子标签104a的值被用作进入RAM102a的地址而子标签104b的值被用作进入RAM102b的地址。
为表示被写入CAM100的标签104,CAM在每个地址104a、104b处存储数据,以通知在标签104内地址比特/子标签值的存在。例如,如图所示,为表示标签值“00001111”104,CAM100在RAM102a中的地址104a处设定一比特(粗体)并在RAM102b中的地址104b处设定一比特(粗体)。因此,将标签值作为地址串联能在不同RAM102a-102b上分配标签的表示。
图2A中的粗体比特表示单个CAM条目(例如,条目#1)。但是,CAM100能支持多个条目。例如,如图所示,给定的RAM102a、102b地址可存储数据106a,该数据标识共享给定子标签值的不同条目。例如,行106a标识N个CAM条目中的哪个具有“0000”作为它们的第一子标签值(例如,以“0000..”开始的标签),而行106b标识具有“1111”作为它们的第二个4比特(例如,以“...1111”结束的标签)的CAM条目。共享给定子标签的相同值的条目的“列表”可按各种方式编码。例如,图2A中,这些行将该信息编码为其中每一比特对应于一条目的比特数组。数组中比特的位置标识了相应的条目是否呈现该子标签值。例如,如图所示,行106a为每个CAM条目存储一比特。行106a的列1中的比特将CAM条目1标识为具有“0000”的第一子标签值。类似地,行106b的列1中的比特将CAM条目1标识为具有“1111”的第二子标签值。
图2B示出了另一标签写入操作。在这种情况中,“0000 0000”的标签被写到CAM条目0。因此,用于条目0的比特(粗体)被设定于RAM102a的地址“0000”处以及RAM102b的地址“0000”处。因为“00001111”的先前写入的标签(图2A)和“00000000”的标签值共享相同的第一子标签值,行106a将标识条目0和1的比特呈现为具有“0000”的第一子标签104a值的条目。
图2C示出了样本CAM查找操作。在这种情况中,查找操作搜索“0000 1111”的先前写入CAM条目(图2A)。如图所示,与写入操作相同,被搜索的标签值104被分成子标签104a-104b。这些子标签104a-104b作为地址在并行读取操作中应用于RAM102a-102b。从RAM102a-102b读出的数据106标识哪些条目包括形成标签104的不同的子标签值104a、104b。例如,由RAM102a输出的数据106a将条目0和1两者标识为具有“0000”的第一子标签,而由RAM102b输出的数据106b仅将CAM条目0标识为具有“1111”的子标签。这些结果的交集指示仅条目1包括查找标签104的子标签104a、104b两者。因此,条目1是查找标签的仅有的准确匹配或“命中”。
CAM100可按各种方式标识这些命中。例如,CAM100可对从RAM102a-102b读出的数据的相应比特执行逻辑AND操作。在所示的示例中,AND108操作产生在与条目1对应的位置中具有“1”比特的一组比特114。因此,该结果114将CAM条目1标识为仅有的CAM条目以包括作为第一子标签值的“0000”和作为第二子标签值的“1111”。
CAM100可按各种方式输出查找结果。例如,如图所示,可直接输出所获得的比特矢量。例如,“0..010”的比特矢量可将条目1标识为对一查找标签的命中。或者,CAM100查找的结果可按其它方式编码。例如,CAM100可包括将一比特矢量转换为标识匹配条目号的二进制数的one-hot到二进制编码器。随后,将这种号用作对与常规RAM中的标签相关联的数据的索引。所获得的比特114也可以被一起求OR以生成二进制“命中”(1)或“不命中”(0)信号。
图2D示出了另一CAM查找100,在这种情况中,针对“0000 0001”104的标签值。如图所示,通过应用子标签104a、104b作为RAM102a、102b地址所获得的数据106a、106b的操作产生“0...000”114的值。结果中不出现任何“1”比特表示没有先前存储的CAM条目(“00001111”图2A和“00000000”图2B两者都不)包括“0000”作为第一子标签和包括“0001”作为第二子标签。在这种情况中,对所获得的比特114一起求OR将产生“0”或不命中。
图2A-2D所示的实现仅仅是一示例且CAM可呈现各种不同配置和变型。例如,通过改变RAM102a-102b行106的宽度可改变CAM条目的数量。此外,通过使用不同数量的RAM块和/或使用具有不同地址空间的RAM块可改变标签长度(例如,3地址比特代替4地址比特)。以上的许多其它变型也是可能的。例如,子标签不需要长度相等。此外,子标签不需要是标签内的邻接比特。此外,虽然在图2A-2D中用于访问RAM的地址直接基于子标签,但地址也可基于某种子标签转变。例如,子标签值可用作添加到某些基地址的索引。
从RAM块构建CAM可加速电路开发。例如,RAM块通常可在ASIC(专用集成电路)设计库中找到。从RAM块组成CAM可提供在访问时间和电路大小两方面均有效的解决方案。在该设计可使用比从触发器或锁存器组成的设计更多的比特来表示标签的同时,CAM所占据的面积可以更小。尽管RAM块不能提供完全定制设计的速度或紧凑性,但所获得的设计的开发没那么复杂和费时。
上述方法也可提供非常有效的方法来实现三重CAM。简言之,三重CAM允许写入匹配多个值而不仅仅一个值的标签。可使用标识能匹配“1”或“0”的“无关”通配符比特的“x”来表达三重标签值。例如,“000x0000”的写入三重标签值产生对“00000000”或“0001 0000”的充分指定查找标签的命中。CAM不实际接收用于被写入的三重标签值的“x”字符,而是可以例如接收标识无关比特的“无关”比特掩码。
如图3所示,为表示被写入的三重标签值,CAM100可以为同一子标签标记多个值。例如,如图所示,为在条目“1”中写入“000x 0000”的三重标签值,CAM100可为该条目标记行106f(地址“0000”)和行106g(地址“0001”)。
图3所示的示例呈现具有单个“无关”值的写入的三重标签值。然而,被写入的三重标签值可呈现多个“无关”值,尽管这将导致为匹配这些“无关“比特的不同子标签值设定更多的条目标记比特。
执行三重CAM100的查找按图2C和2D中的如上所述的相同方式进行。即,CAM使用基于从查找标签中提取的子标签的地址访问来自RAM的“条目-矢量”。但在三重CAM中,可能获得多个匹配。例如,“000x 0000”或“x000 0000”的写入的三重条目都将匹配“0000 0000”的查找标签。因此,CAM可呈现优先级编码器,它输出第一匹配比特的二进制值。
除了处理“无关”比特,可使单个CAM条目与不同的分别标签值相关联。例如,通过为第一子标签的三个不同值(例如,“0001”、“0010”和“0100”)设定条目比特,单个CAM条目可匹配“0001 1111”、“0010 1111”或“0100 1111”。在使该条目无效的情况下,这可以通过对给定条目的一串标签写入来实现。这可以节省CAM条目。例如,CAM100使用单个条目代替三个来表示这些不同值。
图4更详细地示出了CAM100设计。CAM100呈现一标签输入、一查找/写入使能输入和标识在标签写入操作中使用哪个条目的一条目输入。该条目输入可馈送诸如二进制到one-hot解码器的解码器(未示出)。条目号可代替地通过按需要分配和牺牲(例如使用最近最少使用(LRU)算法)条目的内部电路生成。CAM100还可接收与每一条目相关联的有效信号(未示出)以及用于被写入的三重标签值的“无关”比特-掩码。
CAM100呈现接收输入并基于输入的标签值和要执行的操作启动RAM102a-102n操作的控制逻辑130。例如,在三重操作的情况中,控制逻辑130可对匹配包括“无关”比特的子标签值的不同子标签值发出多个写操作。
在该示例中,CAM100为m比特长的标签提供N个条目。CAM100呈现(m/s)子标签数和(m/s)相应RAM102a-102h块的数量,其中s是每一子标签的比特长度。如图所示,RAM102a-102n馈送给电路132,该电路标识呈现查找标签的每一子标签值的条目。随后,编码器134进一步编码这些结果。
在上述架构中,RAM102行包括标识N个条目中的哪个包括给定子标签值的一个N比特条目矢量。图5A示出了一变型,其中条目矢量被分成不同存储器部分中存储的片段。例如,如图5A所示,RAM 0 102z的第一部分存储条目0-3的条目矢量片段而RAM 0 102z的第二部分存储条目4-7的条目矢量片段。RAM 102z的不同部分通过在地址中包含一个或多个部分比特得以标识。例如,RAM 0 102z的地址遵循[部分比特][子标签比特]的格式。
如图5B所示,为写入一标签值,CAM 100确定条目落入存储器的哪个部分。例如,条目“7”落入RAM 102y和102z的第二部分内。因此,为将标签值写入条目7,CAM100附加部分标识符“1”到所提取的子标签104a、104b值,以设定与第七条目相关联的条目矢量比特。
本方案中的标签查找操作可依次为每个条目矢量执行一连串查找操作。这样,CAM100可执行在每个RAM上并行查找操作并依次逻辑上AND每个随后的RAM部分的结果以构建“命中”矢量。例如,第一操作将为条目0-3生成查找结果而第二操作将获得条目4-7的查找结果。作为一种优化,CAM100可在找到一命中时停止。例如,如果条目1是一命中,不需要确定后续部分中的条目4-7中的任一个是否提供一命中,尽管如果多命中是可能的话(例如,三重CAM)对其它条目的查找可继续。作为进一步的优化,可将条目分配到较低条目数中频繁访问标签的簇。
如图5A所示的RAM的这种组织可用于形成CAM的印迹形状。例如,当更多空间被分配用于不同部分时,这种组织可伸长但使RAM块变窄。虽然该方法使查找速度变慢,它减少了所使用的AND门电路的数量以及编码/解码块的大小。
在上述实现中,每一RAM块102x的地址对应于单个相关子标签的可能比特值。图5C示出了另外的配置。如图所示,代替单个相关子标签,使给定的RAM块102y与多个子标签相关联。例如,如图所示,RAM块102y呈现(1+子标签比特大小)地址宽度,其中附加比特将RAM块102y分成多个部分,上部对应于第一子标签且下部对应于第二子标签。
为查找标签值,可能发生同一RAM102z的多次读取。例如,如图5D所示,第一次读取可通过将部分标识符(例如,“0”)附加到第一子标签来进行。随后,将不同的部分标识符(例如,“1”)添加到第二子标签时,可出现第二次读取。第一次读取的结果可被缓冲,以与第二次读取的结果进行AND。作为一种优化,如果给定的读取指示没有条目呈现给定的子标签值,则可以不执行附加读取。即,如果没有条目呈现给定的子标签,则没有条目可能是该条目标签的准确匹配。
在所示的示例中,RAM块102y呈现出两个不同部分,然而不同的实现可呈现具有2个以上部分的RAM。此外,多个部分/子标签RAM块102y可包含在也呈现单个部分/子标签RAM块的CAM内。
图6A更详细地示出了用于确定查找匹配的电路。所示的样本实现呈现对八个不同RAM102a-102h的输出的“比特片”进行操作的一逻辑网络。例如,门电路104a对由RAM102a输出的bit-0和由RAM102b的比特-0输出进行AND运算。最后的AND门电路140g的输出指示RAM102a-102h中的每一个是否对比特-0输出“1”。门电路140g输出的“1”指示条目“0”准确匹配整个查找标签。
CAM可呈现这种网络140的N个拷贝,一个网络140用于每个比特-位置。这些不同的网络140可馈送OR门电路142。如果任一网络140标识匹配条目(例如,输入一个“1”),OR门电路142将输出一个“1”命中信号。
2-输入AND门电路的树140允许模块扩展和规则路由。此外,AND门电路常窄于其它门电路(例如,XOR门电路)。然而,其它数字逻辑也可用于执行类似的操作。
图6A所示的排列检测整个查找标签的准确匹配。然而,CAM可以以很小的增加成本在单个查找中执行对子标签或子标签组合匹配的同时搜索。例如,如图6B所示,添加AND网络140中由中间点所馈送的单个逻辑门电路144产生标识由RAM102a-102d跟踪的前4个子标签的匹配的信号,而不管这些条目是否呈现出查找标签的其余子标签值。即,如果一条目匹配由前4个RAM102a-102d所跟踪的子标签a-d,向OR门电路144馈送“1”。假定OR门电路144接收其它比特位置的逻辑网络的输出,如果任何条目是一部分匹配则OR门电路144将输出一“命中”。
所示的逻辑144是可支持子标签匹配的最小电路的简单但强大的示例。但是,基于应用,可使用一个以上的附加门电路来给出许多不同的子标签匹配输出。此外,通过在逻辑网络140内接进不同的点可改变匹配逻辑。此外,可包含其它电路来执行更复杂的布尔操作,例如通过包含倒相器(例如,子标签A而非子标签B)或其它逻辑门电路。
部分标签匹配可加速处理分组的分组中共同使用的各种操作。例如,可从分组的网络源和目标地址以及源和目标端口构成一标签。准确匹配可将一分组标识为匹配一特殊流。然而,源和目标地址上的子标签匹配可用于标识应阻断的通信。
上述技术可在各种硬件环境中实现。例如,内容可寻址存储器(CAM)可用于微处理器、网络处理器、IO控制器和其它数字系统中的各种应用。例如,CAM可包含于诸如网络处理器的多处理器设备内。
例如,图7示出了网络处理器200的示例。所示的网络处理器200是IntelInternet eXchange network Processor(因特网交换网络处理器)(IXP)。其它网络处理器呈现不同的设计。
所示的网络处理器200呈现出单个集成半导体管芯上的处理引擎202的集合。每一引擎202可以是为分组处理制作的精简指令集计算(RISC)处理器。例如,引擎202可不提供通用处理器的指令集通常提供的浮点或整数除法指令。各引擎202可提供多线程执行。例如,引擎202可存储多个程序计数器以及用于不同线程的其它上下文数据。
如图所示,网络处理器200还呈现至少一个接口202,此接口可以在处理器202和其它网络组件之间传递分组。例如,处理器200可呈现交换网状接口202(例如,公共交换接口(CSIX)),它使得处理器200能将一分组发送到与该网状结构连接的其它处理器或电路。处理器200还可呈现一接口202(例如,系统分组接口(SPI)接口),它使得处理器200能与物理层(PHY)和/或链路层设备(例如,MAC或成帧器设备)通信。处理器200还包括用于与例如主机或其它网络处理器通信的接口208(例如,外围组件互连(PCI)总线接口)。
如图所示,处理器200还包括与诸如散列引擎的引擎202共享的其它组件、与那些引擎共享的内部便笺存储器以及提供对与那些引擎共享的外部存储器的访问的存储器控制器206、212。网络处理器200还包括“核心”处理器210(例如,StrongARMXScale),它常被编程以执行网络操作中涉及的“控制平面(controlplane)”任务。但是,核心处理器210也可处理“数据平面”任务。
引擎202可经由核心210或其它共享资源与其它引擎202通信。引擎202还可经由直接连线到邻近引擎204的近邻寄存器相互通信。各引擎202可呈现出如上所述的CAM。或者,CAM可以是由不同引擎202共享的资源。
图8示出了可使用上述CAM处理分组的网络设备。如图所示,该设备呈现了由交换网状结构310(例如,交叉开关或共享存储器交换网状结构)互连的线路卡300(刀片)的集合。例如,交换网状结构可符合CSIX或其它织构技术,诸如HyperTransport、Infiniband、PCI、Packet-Over-SONET、RapidIO和/或UTOPIA(用于ATM的通用测试和操作物理接口)。
各线路卡(例如,300a)可包括处理网络连接上的通信的一个或多个物理层(PHY)设备302(例如,光学、有线和无线PHY)。PHY在不同网络媒介传送的物理信号和数字系统使用的比特(例如,“0”和“1”)之间进行转换。线路卡300还可包括能对帧执行操作(诸如误差检测和/或纠正)的成帧器设备(例如,以太网、同步光学网络(SONET)、高级数据链接(HDLC)成帧器或其它“2层”设备)304。所示的线路卡300还可包括一个或多个网络处理器306,对经由PHY302接收的分组执行分组处理操作并经由交换网状结构310将这些分组引导到提供出口接口的线路卡以转发该分组。可能地,网络处理器306可代替成帧器设备304执行“2层”责任。CAM可在网络处理器或线路卡之一内的其它电路之内使用。
虽然图7和8描述了网络处理器和结合网络处理器的设备的具体示例,但这些技术可在各种架构中实现,包括具有除了所示那些以外的其它设计的网络处理器和网络设备。此外,这些技术可用于各种网络设备(例如,路由器、交换机、网桥、集线器、通信发生器等)。
这里使用的术语电路包括硬连线电路、数字电路、模拟电路、可编程电路等。可编程电路可按计算机程序进行操作。
其它实施例也在以下权利要求书的范围内。
权利要求
1.一种内容可寻址存储器,包括至少一个标签输入;至少一个输出;至少一个随机存取存储器;电路,用于执行所述至少一个随机存取存储器的多个读操作,所述读操作中的不同一些基于标签比特的不同子集指定地址;以及基于所述多个读操作,经由所述至少一个输出生成至少一个信号。
2.如权利要求1所述的内容可寻址存储器,其特征在于,所述至少一个信号包括选择以下组的至少一个信号命中信号和条目数信号。
3.如权利要求1所述的内容可寻址存储器,其特征在于,所述至少一个随机存取存储器包括多个随机存取存储器。
4.如权利要求3所述的内容可寻址存储器,其特征在于,所述在多个读操作中使用的标签子集的数量等于随机存取存储器的数量。
5.如权利要求4所述的内容可寻址存储器,其特征在于,所述标签比特的子集的每一个形成应用于各随机存取存储器的每一个的地址。
6.如权利要求1所述的内容可寻址存储器,其特征在于,所述多个读操作包括应用于同一随机存取存储器的一个以上的读操作。
7.如权利要求6所述的内容可寻址存储器,其特征在于,所述应用于同一随机存取存储器的一个以上读操作中的各自一些基于所述标签值的子集和所述随机存取存储器的一部分的标识符指定一地址。
8.如权利要求1所述的内容可寻址存储器,其特征在于,所述电路被构成为并行地执行所述读操作中的至少两个。
9.如权利要求1所述的内容可寻址存储器,其特征在于,所述电路还包括用于响应于要写到所述内容可寻址存储器的标签值设定至少一个随机存取存储器的比特的电路。
10.如权利要求9所述的内容可寻址存储器,其特征在于,所述要被写入的标签值包括含至少一个“无关”比特的三重标签值;以及其中所述用于设定比特的电路包括用于为所述“无关”比特的不同值设定比特的电路。
11.如权利要求1所述的内容可寻址存储器,其特征在于,所述至少一个随机存取存储器将数据存储于标识共享所述标签比特的子集的值的条目的每个地址。
12.一种内容可寻址存储器,包括至少一个标签输入;多个随机存取存储器,每一个存储器都对应于标签内的不同比特位置组;电路,用于在读操作中将不同的标签比特的子集作为地址应用于不同的各个随机存取存储器;以及响应于所述诸读操作对所述随机存取存储器的输出进行与(AND)运算。
13.如权利要求12所述的内容可寻址存储器,其特征在于,还包括用于编码所述AND结果的编码器。
14.如权利要求13所述的内容可寻址存储器,其特征在于,编码所述结果的电路包括选择以下组的至少一个用于对AND结果进行操作的至少一个OR门电路的网络,以及one-hot到二进制的编码器。
15.如权利要求12所述的内容可寻址存储器,其特征在于,所述电路还包括用于基于要写入的标签值在所述多个随机存取存储器的每一个中设定至少一个比特的电路。
16.如权利要求15所述的内容可寻址存储器,其特征在于,所述用于设定至少一个比特的电路包括用于基于三重标签值写入多个比特的电路。
17.一种方法,包括将接收到的内容可寻址存储器查找标签值分成多个子标签值;基于所述多个分别的子标签值使用地址执行至少一个随机存取存储器的多个读操作;以及基于所述读操作,确定如果有的话哪些条目呈现所述多个子标签中的每一个;以及响应于所述确定输出至少一个指示。
18.如权利要求17所述的方法,其特征在于,执行多个读操作包括将多个子标签中的每一个用作在所述读操作中指定的地址的至少一部分。
19.如权利要求17所述的方法,其特征在于,所述至少一个随机存取存储器包括多个随机存取存储器。
20.如权利要求19所述的方法,其特征在于,所述多个随机存取存储器在子标签地址处存储条目值的比特矢量。
21.如权利要求17所述的方法,其特征在于,还包括接收要写入的标签;以及基于所接收的标签,设定在所述至少一个随机存取存储器中的比特。
22.如权利要求21所述的方法,其特征在于,接收标签包括接收包括至少一个“无关”比特的标签;以及设定比特包括写入与所述至少一个随机存取存储器之一内的同一子标签的多个值相关联的条目数据。
23.一种网络转发设备,包括交换网状结构;以及通过所述交换网状结构互连的多个线路卡,线路卡的各自一些包括至少一个网络端口;以及用于处理经由所述至少一个端口接收的分组的电路,所述数字逻辑电路包括内容可寻址存储器,所述内容可寻址存储器包括至少一个标签输入;至少一个输出;至少一个随机存取存储器;内容可寻址存储器电路用于执行所述至少一个随机存取存储器的多个读操作,所述读操作中的不同一些基于标签比特的不同子集指定地址;以及基于所述多个读操作,经由所述至少一个输出生成至少一个信号。
24.如权利要求23所述的网络转发设备,其特征在于,所述线路卡中的至少一个包括具有在单个管芯上集成的多个多线程引擎的网络处理器。
全文摘要
公开内容包括内容可寻址存储器(CAM)的描述,该CAM包括至少一个标签输入、至少一个输出和至少一个随机存取存储器。该CAM包括一电路,它用于执行至少一个随机存取存储器的多个读操作,所述读操作中的不同一些基于标签比特的不同子集指定地址。基于所述多个读操作,该CAM经由所述至少一个输出生成至少一个信号。
文档编号G01C15/00GK1926545SQ200580006191
公开日2007年3月7日 申请日期2005年3月18日 优先权日2004年3月25日
发明者M·罗森布勒斯 申请人:英特尔公司