基于FPGA实现TCAM流表匹配
- 1 基本原理
- 2 功能仿真
本文主要介绍基于GitHub上的一个 开源工程实现TCAM流表匹配的方法,本文的工程可从 GitHub下载
1 基本原理
本工程一共包含4个设计文件和一个仿真文件,执行run.sh和run.tcl即可创建工程,各文件的说明如下:
| 文件 | 描述 |
|---|---|
| tcam.v | 顶层文件 |
| tcam_line_array.v | 存储规则的匹配项,进行规则的查表匹配 |
| tcam_line_encoder.v | 根据查表匹配的结果,获得匹配规则的地址 |
| tcam_sdpram.v | 存储规则的动作,根据匹配规则的地址取出匹配的动作 |
| tcam_tb.v | 仿真文件 |
该工程的工作流程如下:
- 首先通过set_xxx等端口将规则的匹配项、掩码、动作等存入tcam_line_array.v和tcam_sdpram.v定义的寄存器中,并且通过tcam_line_array.v中定义的变量active标记哪些地址存储有有效的规则。
- 然后通过req_xxx等端口输出待匹配的关键字和掩码,在tcam_line_array.v中进行规则的查找匹配,通过变量match输出匹配成功规则的位置,在tcam_line_encoder.v中通过match标识的位置获取匹配规则的地址。
- 根据匹配规则的地址从tcam_sdpram.v定义的寄存器中取出规则的动作。
- 如果要删除规则,则输入待删除规则的地址时设置set_clr为1,注意set_valid也需要设置为1。
- 如果没有查找到匹配的规则,则在req_valid为1时res_null也为1。
2 功能仿真
创建测试工程,在测试文件中定义的测试流程如下:
- 输入规则地址、匹配项、掩码、动作,定义4条规则
- 输入5个关键字、掩码,进行规则的查找匹配
- 删除地址为0处的规则
- 再次查找地址为0处的规则
仿真的的结果如下图所示

