发明内容
本发明要解决的技术问题是提供一种三态内容寻址存储器(TCAM)查询方法和装置,以解决消耗资源较多的问题。
为解决上述技术问题,本发明提供了一种三态内容寻址存储器(TCAM)查询方法,该方法包括:
配置步骤,配置TCAM表项,所述TCAM表项包括表项关键字和N位的索引,其中所述索引包括高n1位和低n2位,其中N=n1+n2;
组合关键字生成步骤,生成组合关键字,所述组合关键字包括根据需查找信息生成的第一关键字和n1位的第二关键字;
表项匹配步骤,根据所述组合关键字匹配TCAM表项,得到匹配的索引的低n2位,其中所述组合关键字中的第一关键字与所述TCAM表项中的表项关键字匹配,所述第二关键字与所述TCAM表项中的索引的高n1位匹配;
结果输出步骤,将所述匹配的索引低n2位以及与所述匹配的索引低n2位对应的索引高n1位一起作为查表结果输出。
进一步地,所述组合关键字生成步骤中生成M个组合关键字,所述表项匹配步骤依次根据该M个组合关键字进行匹配;或,所述组合关键字生成步骤中生成一个组合关键字,所述表项匹配步骤根据该组合关键字进行匹配,若匹配不成功则返回所述组合关键字生成步骤生成下一组合关键字,直至匹配成功后执行所述结果输出步骤。
所述n1位第二关键字是采用遍历方式生成,包括但不限于按序递加或递减生成。
优选地,所述TCAM表项中的索引低n2位采用独热(one-hot)码表示,所述表项匹配步骤中,匹配成功后,将所述独热码表示的索引低位转换为索引低n2位。
为解决上述技术问题,本发明还提供了一种三态内容寻址存储器(TCAM)查询装置,该装置包括:
管理模块,用于配置TCAM表项,所述TCAM表项包括表项关键字和N位的索引,其中所述索引包括高n1位和低n2位,其中N=n1+n2;
组合关键字生成模块,用于生成组合关键字,所述组合关键字包括根据报文中需查找信息生成的第一关键字和n1位第二关键字;
表项匹配模块,用于根据所述组合关键字匹配TCAM表项,得到匹配的索引的低n2位,其中所述组合关键字中的第一关键字与所述TCAM表项中的表项关键字匹配,所述第二关键字与所述TCAM表项中的索引的高n1位匹配;
结果输出模块,用于将所述匹配的索引低n2位以及与所述匹配的索引低n2位对应的索引高n1位一起作为查表结果输出。
本发明查询方法和装置通过生成用于匹配索引高位的第二关键字,并进一步生成组合关键字,针对组合关键字进行查表处理的方式,节省ram资源,特别在查表时间要求不高的场景下,该装置的优点得到了充分的体现。
具体实施方式
如图1所示,本发明三态内容寻址存储器(TCAM)查询方法包括:
步骤101:配置步骤,配置TCAM表项,所述TCAM表项包括表项关键字和N位的索引,其中所述索引包括高n1位和低n2位,其中N=n1+n2;
所述TCAM表项中的表项关键字是配置关键字经配置掩码处理后得到的。
步骤102:组合关键字生成步骤,生成组合关键字,所述组合关键字包括根据报文中需查找信息生成的第一关键字和n1位第二关键字(也称为索引高位关键字);
步骤103:表项匹配步骤,根据生成的组合关键字匹配TCAM表项,得到匹配的索引低n2位;
具体匹配时,组合关键字中的第一关键字与所述TCAM表项中的表项关键字匹配,组合关键字中的第二关键字与所述TCAM表项中的索引的高n1位匹配。
步骤104:结果输出步骤,将所述匹配的索引低n2位以及与所述匹配的索引低n2位对应的索引高n1位一起作为查表结果输出。
所述TCAM表项中的索引低n2位采用独热(one-hot)码表示,所述表项匹配步骤中,匹配成功后,将所述独热码表示的索引低位转换为索引低n2位。
若步骤103中,匹配不成功,则不输出上述查表结果,可根据***设置输出“查表失败”的提示或反馈。
具体实现流程可以采用以下两种:
流程一:
所述组合关键字生成步骤中生成M个组合关键字,所述表项匹配步骤依次根据该M个组合关键字进行匹配。
优选地,所述n1位第二关键字采用遍历方式生成,包括但不限于按序递加或递减生成。
具体地,当索引采用二进制表示时,M=2n1;当索引采用十进制,则M=10n1。
采用以上流程一实现本发明方法,则在配置出现错误时,可能同一个第一关键字可匹配到两个或多个查表结果,则可利用该流程发现配置是否有误。
流程二:
所述组合关键字生成步骤中生成一个组合关键字,所述表项匹配步骤根据该组合关键字进行匹配,若匹配不成功则返回所述组合关键字生成步骤生成下一组合关键字,直至匹配成功后执行所述结果输出步骤。
若采用以上流程二,则针对某一报文关键词的匹配次数的最大值为上文涉及的M值,可一定程度上减少查找匹配次数,提高查找效率。本发明方法以牺牲查表时间为代价,在查表时间符合设计要求的情况下,可以最大程度地节约FPGA资源,保证TCAM的实现。
本发明方法可采用FPGA(Field Programmable Gate Array,现场可编程门阵列)实现TCAM(CAM为TCAM的子集),充分利用了FPGA的特点来实现TCAM查表技术,特别在需要最大节约资源实现TCAM情况下,本发明方案充分体现其节约资源的特点且能够同时满足TCAM的设计要求。
为了实现上述方法,本发明还提供了一种三态内容寻址存储器(TCAM)查询装置,如图2所示,该装置包括管理模块、组合关键字生成模块、表项匹配模块、结果输出模块。其中:
TCAM管理模块,用于管理TCAM表项,包括配置、修改、删除TCAM表项等,所述TCAM表项包括表项关键字和N位的索引,其中所述索引包括高n1位和低n2位,其中N=n1+n2;
具体地,可以对整个TCAM清零,配置关键字、掩码以及相应的索引,根据关键字和掩码查询相应的索引,动态删除关键字对应的索引,通常采用CPU(Central Processing Unit,中央处理器)接口实现,可以灵活配置、查询、删除、修改。
以二进制实现方式、端口0实现TCAM表项管理为例,初始化时,通过清零操作把表项进行清零:端口0数据为全0,端口0地址从全0到全1至少轮询一遍,往端口0一直写入。信息配置时,根据应用环境需要进行关键字、掩码、索引等信息的配置,经掩码处理后的配置关键字(即表项关键字)组合配置索引高位作为端口0地址,依此地址从端口0读取出one-hot码,结合配置索引低位转换的one-hot码,作为端口0数据,往端口0写入。
应用过程中,难免需要实时动态地删除和修改配置信息,其删除过程类同于配置过程,只是端口0数据处理不同。而修改过程相当于先删除过程后配置过程。注意的是在配置过程和删除过程中,得先通过端口0进行配置信息读取,以免重复。
可理解地,前述所述的配置关键字经掩码处理后,即可配置得到TCAM表项中的表项关键字。
组合关键字生成模块,用于生成组合关键字,所述组合关键字包括根据需查找信息生成的第一关键字和n1位第二关键字。
具体地,第一关键字是根据需查找信息确定的查表关键字和查表掩码生成的,即是由查表掩码处理后的查表关键字。
依上所述,采用遍历方法产生索引高位关键字,如简单的查询方法:查表启动时刻,索引高位关键字置零,并伴随着查表时钟,索引高位关键字累加,直到索引高位关键字的值为全1,则停止累加。
表项匹配模块,用于根据所述组合关键字匹配TCAM表项,得到匹配的索引的低n2位,其中所述组合关键字中的第一关键字与所述TCAM表项中的表项关键字匹配,所述第二关键字与所述TCAM表项中的索引的高n1位匹配。
具体地,所述TCAM表项中的索引低n2位采用独热(one-hot)码表示,所述表项匹配模块匹配成功后,将所述独热码表示的索引低位转换为索引低n2位输出。
采用one-hot码的另一个作用是,每个one-hot码对应不同的端口地址,相当于具有标识索引表项的作用,可使得***不会重复对某索引表项进行匹配。可理解地,可采用其他方式实现索引表项的标识作用,本发明对此不做限定。
优选地,这里采用了one-hot码这种特定的编码方式,此编码方式具有只有一位为1,其他为0的特点;若例化后各个输出的32位one-hot码进行按位与操作,结果还是one-hot码,表示匹配成功。
具体实现时,需要结合设计要求的最大查表时间,查表关键字位宽和索引深度综合考虑来例化表项匹配模块个数,这可以通过配置参数化来实现。
结果输出模块,用于将所述匹配的索引低n2位以及与所述匹配的索引低n2位对应的索引高n1位一起作为查表结果输出。
具体的,查表结果输出过程则只需把组合关键字(即经查表掩码处理后的查表关键字组合第二关键字)作为端口1地址,固定的时钟拍数后,查表结果从端口1数据输出。
把例化后各个表项匹配模块查表结果输出的one-hot码进行按位与操作,并把它转化成二进制码,作为查表输出索引低位;而对应的索引高位用查表时钟延迟后,作为查表输出索引高位。
应用实例:
下面结合图3,对该发明在CAM查表的实施作进一步详细描述。案例设计OAM(Operation Administration And Maintenance,操作、管理、维护)的性能管理,采用了CAM查表技术用于各层次关键字查表。
依据各层次OAM提取的关键字进行CAM查表,查得索引从配置表读取配置,对各层次OAM类型进行性能统计。下面依据通路层44位OAM关键字(包括2层12位VLAN(Virtual Local Area Network,虚拟局域网)值+20位标签值),索引8位的查表过程对发明进行详细说明,该查表过程要求在20个时钟周期以内完成。
以采用上文中的流程一的方式为例,该实例TCAM表相应索引设计为8位,需查表耗费11个时钟周期,其中生成3位索引高位关键字的遍历过程需要8个时钟周期,索引输出的处理需要3个时钟周期,查表耗费的时钟周期数小于要求的20个时钟周期,符合该实例设计要求,所以除去查表得出的5位索引低位(FPGA内部双端口RAM具有32位数据端口的结构,结合one-hot码的特性,可以使用5位的二进制码),剩下的3位第二关键字采用轮询方法产生:启动查表时,与索引高3位对应的3位第二关键字置零,伴随着查表时钟,索引高位关键字(即第二关键字)累加,直到其值为7(此时,二进制标识为111),则停止累加。
该实例要采用44位关键字,8位索引的CAM,由Altera公司芯片9K位的Ram来实现,每个Ram可以做到5位查表关键字查询,则8<44/5<9,故需要例化9个Ram来实现TCAM表项管理和表项匹配功能。
配置表项中的索引包含了3位索引高位和5位索引低位;配置掩码根据实际需求对配置关键字进行相应的掩码;配置关键字是需配置关键信息或其中的一部分;清除使能有效时表示对整个双端口ram进行清零,也就是往端口每个地址写入数据零;信号1分别使得双端口ram的端口0和端口1有效,整个双端口ram能够正常工作;端口0时钟就是双端口ram中端口0的工作时钟;端口1时钟就是双端口ram中端口1的工作时钟;信号0禁止双端口ram中端口1进行写入;查表关键字是需查找信息或其中的一部分;查表掩码根据实际情况对需查表信息进行相应的掩码;第二关键字为查表时遍历产生的用于匹配索引高位的关键字部分。
首先通过CPU接口对整个TCAM表清零初始化,端口0数据为全0,端口0地址从0到255至少轮询一遍,并往端口0一直写入。结束后依据现场应用需要对TCAM表的TCAM表项进行配置,由于该实例使用的是CAM表,属于TCAM表的一种特殊情况,掩码配置为全0,配置关键字以及相应的索引,还可以依据实际情况对TCAM表的TCAM表项灵活查询、删除和修改。
配置时,配置关键字同配置掩码生成配置的表项关键字,结合配置索引高位作为双端口ram的端口0地址;依此地址从端口0读取出32位one-hot码,把配置索引的低5位转换成32位one-hot码,二者异或后作为端口0数据,往端口0写入。此时配置写使能有效作为双端口ram的端口0写入使能。
以上配置操作可使得保留之前双端口ram配置的信息的基础上增加新的配置。
删除时,配置的关键字组合索引高位作为端口0地址,并从端口0读取出32位one-hot码,把配置索引的低5位转换成32位one-hot码取反,二者同或后作为端口0数据,往端口0写入。
以上删除操作可删除某条之前双端口ram配置的信息。
查表时,查表关键字同查表掩码生成查表的第一关键字,结合遍历生成的3位第二关键字形成组合关键字作为双端口ram的端口1地址,使得第一关键字与TCAM表项的表项关键字匹配,第二关键字与TCAM表项的索引高位匹配。固定的时钟拍数(这个是双端口ram的特性,可以1或2个时钟拍数,这里应该确定为2个时钟拍数)后,相应索引低位从端口1数据输出。
该实例中9个Ram表输出的32位one-hot码进行按位与操作,并把它转化成二进制码,作为查表输出索引低5位;而第二部分中TCAM索引产生的高位用查表时钟延迟后,结合查表成功,作为查表输出索引高位。
本发明查询方法和装置通过生成用于匹配索引高位的第二关键字,并进一步生成组合关键字,针对组合关键字进行查表处理的方式,节省ram资源,特别在查表时间要求不高的场景下,该装置的优点得到了充分的体现。