TCAM(三态内容寻址存储器,ternary content-addressable memory)作为一个基本功能广泛应用于网卡、路由器、交换机、防火墙等网络设备中,通常用于路由查找、包过滤等场景。具有并行比较、查找速度快、支持模糊匹配的优势。
TCAM的基本实现方法如图所示:
TCAM实现的基本过程包含搜索广播、匹配比较、优先级编码器三个部分。其中使用key RAM、mask RAM分别存储报文分类所需的关键字(key)和查找掩码(mask)。当报文进入网络设备时,使用报文识别出来的报文特征如五元组进行组合,得到报文的tuple,将报文的tuple进行掩码,得到匹配的特征值。使用掩码后的特征值与配置的key进行匹配,得到若干匹配结果。将匹配结果进行优先级排序。根据排序结果获取报文动作和去向。上述过程如下图所示。
四个过程通常使用4级pipeline进行实现。
考虑逻辑优化,我们可以将4级pipeline压缩为3级。将mask和key压缩为同一级pipeline实现,使用一种替代逻辑进行实现: = (~Key & Mask) | (Key & Tuple)。减少一级pipeline可以减少资源消耗。
压缩后TCAM分为三个过程
TCAM表在逻辑实现中的优化
资源优化:对于一些小规格设备(如小于等于64条TCAM),可以直接使用片上寄存器实现mask表和key表;对于中等规格设备(如数万条TCAM),可以使用片上BRAM实现mask表和key表;对于大规格设备(如百万条TCAM),在进行芯片设计时通常会使用厂商特种芯片库进行非易失性存储,在进行FPGA设计时会使用厂商IP进行设计。
功耗优化:对于大规模设备,一个报文只会命中很小比例的表项,但是会进行所有的表项匹配,可以通过分组分时匹配,牺牲报文转发速率实现功耗降低。
时序优化:对于大规模设备,命中结果进行优先级排序的过程,需要对上百万位宽的匹配结果进行优先级排序,对时序是极大的挑战。可以通过分组匹配搭配分层匹配,层层获取排序结果,经过多个时钟周期得到优先级排序结果。