**基于Verilog的TCAM硬件实现**
一、 背景
路由器是网络设备的关键组成部分,它需要接收数据包,然后决定将数据包发送到何处,以便进行IP转发或IP路由。今天的路由器需要在大量数据中进行非常快的查找,以实现快速的数据包路由。其他需要高速搜索的应用程序包括翻译后备缓冲区(TLB)和cpu、数据库引擎和神经网络中的完全关联缓存控制器。虽然设计人员可以从许多选项中选择执行这些搜索,但最有效的方法涉及使用内容寻址存储器(CAMs)。CAMs将搜索数据与存储的数据表进行比较,并返回匹配数据a1的地址。CAM的搜索功能比软件的搜索功能运行得快得多,因此CAM正在取代搜索密集型应用中的软件,如互联网路由器中的地址查找、数据压缩和数据库加速。
二、 原理
我们可能就已经熟悉了哈希表是最有效的搜索实现。CAMs被认为是这种构造的硬件实现。列表的线性搜索类似于在串行搜索中遍历内存的所有位置并与一个键进行比较。基于cam的搜索相当于并行地比较所有内容,然后返回成功比较的地址。这本质上要快得多,尽管构建起来更复杂。其中TCAM支持带掩码的三元匹配,TCAM采用更有效的X/Y编码格式且TCAM支持CPU读写,TCAM中的优先级编码器确保只输出第一个匹配的条目。
通常TCAM/CAM是有对应的Ram_wrapper 库的,但是芯片设计过程中对于比较小的查表,我们完全可以使用寄存器搭建一个TCAM/CAM. 还可以做的更加灵活,这就类似于寄存器搭建RAM一样。如下图所示,TCAM内部实现主要分为三个部分:Seach broadcast(广播)、 Match lines(匹配比较)、Priority encoder(优先级编码)