Verilog开源项目——百兆以太网交换机(五)TCAM单元设计
🔈声明:未经作者允许,禁止转载
😃博主主页:王_嘻嘻的CSDN主页
🔑全新原创以太网交换机项目,Blog内容将聚焦整体架构、模块设计方面;更新周期可能会略慢,希望朋友们多多包涵
🧡关注本专题的朋友们可以学习到原创交换机设计的全流程,包括设计与验证(FPGA)。
🚩第一代交换机 — 从零开始 verilog 以太网交换机系列专栏:点击这里
💥第二代交换机 — Atom(百兆以太网交换机)专栏:点击这里
Atom支持了包过滤特性,为了支持过滤的多样性,Atom将使用TCAM来存储过滤规则,以实现带优先级的1k条规则匹配,包过滤模块会根据接受包的特征向TCAM发起匹配请求,若匹配成功则进行对应操作,若匹配失败则按部就班的转发。
而为了便于实现,以及资源的平衡,Atom TCAM将使用SRAM实现,并采取分层分列的小块SRAM结构。
一、Feature
- SRAM实现形式;
- 支持分层,分列的TCAM;
- 支持pipeline处理,每cycle查询一次规则;
- 支持添加、查找、删除规则;
二、概述
Atom TCAM是为了实现PF中包过滤的特性,用来判断接收到的packet是否符合用户下达的某些规则。
由于DPI功能过于复杂,所以Atom将DPI简化为包过滤特性,计划支持1K条包过滤规则。使用源地址、目的地址、源端口、目的端口、协议类型、报文长度和TCP flags共128-bits组成固定关键词,所以TCAM大小为128-bits x 1k。
考虑到额外调用一个TCAM IP对成本和移植性不够友好,我们在此使用SRAM来实现TCAM的功能,并通过分层分列的划分方式减少SRAM的用量。
除了PF通过TCAM查询规则外,也有外部通道支持用户直接添加、删除、查询规则。
a)TCAM原理
TCAM是一种三态内容寻址存储器,其比CAM增加了X态的内容寻址,x表示不论0、1都能匹配,TCAM寻址过程如下(和哈希表原理一样):
- 当搜索内容为‘010’时,TCAM搜索到对应内容的地址为0;
- 当搜索内容为‘001’时,TCAM搜索到内容符合‘00x’,对应地址为2;
b)TCAM分层分列
考虑到在工程实现与移植方面,本设计使用SRAM来实现TCAM功能,参考《基于SRAM的硬件搜索引擎设计与实现》[1] 有关想法。
用SRAM实现TCAM本质是将关键字内容作为SRAM的地址,将TCAM的地址映射为onehot形式的数据,表示是否存在对应关键字信息,具体过程如下图:
例如TCAM的第一行数据‘001’,其对应SRAM中第二行的bit0,通过SRAM的行编码表示关键字,SRAM的列编号表示该关键字在TCAM的哪一行中。
同理,TCAM的第八行数据‘1x1’应该映射到SRAM中‘101’行和‘111’行中的bit7。
如果直接把128-bits x 1k rules的TCAM通过SRAM实现,将需要极大的SRAM,如果通过分列的方式,能有效的减少SRAM的使用量。
如果是不分列的4-bits x 8的TCAM,需要一块8-bits x 16的SRAM来实现;但经过上图分列后的TCAM,只需要两块8-bits x 4的SRAM实现,节省了50%的SRAM使用量。
而分列的本质意义就是将TCAM进行横向的拆分,拆成多个小TCAM进行并行的内容匹配,再相互&,只有所有小TCAM都匹配上时,才视为匹配成功,这个优化能以指数级降低SRAM深度。
另一方面,为了更好的适配FPGA中的BRAM,我们将TCAM的行也进行分割,称为分层,具体如Atom TCAM架构图所示,这样一整个TCAM被分为多个小块,能更容易的划分SRAM的大小。每层之间采用优先编码器进行地址的选择,具体如下图所示:
例如关键字‘00’同时hit了地址0、2、3、5,但根据优先级原则,TCAM会返回地址0。
c)外部通道
PF只会发送search请求,而外部通道还可能发送add、delete请求,当发送该类请求时,需要带上对应地址,也就是rule序号,该序号也代表了该rule的优先级。如果是search请求,不需要输入地址。
三、接口
本次设计主要参考以下两篇论文,侵权必删:
【1】 杨蕊. 基于SRAM的硬件搜索引擎设计与实现[D]. 大连理工大学, 2020. DOI:10.26991/d.cnki.gdllu.2020.002322.
【2】 施自林. 基于SRAM的TCAM存储优化技术研究[D]. 国防科技大学, 2020. DOI:10.27052/d.cnki.gzjgu.2020.000507.
若有不专业或错误之处,欢迎指正!
具体电路实现及验证环境代码会在准备完毕后开源,目前暂时不能给出,请见谅
搜索关注我的微信公众号【IC墨鱼仔】,获取我的更多IC干货分享!