**基于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(优先级编码)

三、 实现
3.1 模块接口
如下图所示,key以及随路的key_vld信号是待查找的键值,比如48bit的mac地址。TCAM模块对应的cpu接口完成表项的配置,输出接口tcam_vld是key_vld的delay,(查表消耗的周期)。hit_vld 表示命中有效信号(0:未命中,1:命中),命中的结果则是index。而hit_vector 是所有表项的命中信号(hit_vld = | vector),用于debug使用,尤其是在多个命中情行下。

特别注意的是,cpu_wdat的内容是{data,mask},假设key的位宽为WIDTH,则cpu_wdat/cpu_dout位宽为WIDTH+WIDTH. Mask 0 表示不进行比较,Mask所示进行比较。
3.2 编码
TCAM还允许对搜索词中的一个或多个位使用第三个匹配状态X或“不关心”, 比如一个TCAM可能有“10XX0”作为它的一个存储词,TCAM灵活匹配四个搜索词中的任意一个——“10000”、“10010”、“10100”或“10110”。通过为每个存储单元添加一个掩码位来添加“不关心”状态,从而进一步增加了复杂性。TCAM中的优先级编码器确保只输出第一个匹配项。X的灵活编码减少了存储条目的数量,从而进一步提高了搜索效率。

***标准编码:***标准的数据/掩码编码的真值表如表3.1所示,可以看到给定key、 data以及mask必然有一个结果:1:命中,0:不命中.逻辑表达式为Hit=~( (Data|Key) &Mask))这种编码方式缺陷在于只有两种状态。而我们在逻辑设计中常常设计一个vld来指示逻辑是否在工作状态.
Table 3.1 标准编码
Key Data Mask Hit
0 0 0 1
0 0 1 1
0 1 0 1
0 1 1 0
1 0 0 1
1 0 1 0
1 1 0 1
1 1 1 1

XY编码:
在逻辑设计中我们常常使用XY编码格式替代标准编码格式,以达到最高密度(含有0、1和无效三种态),相当于比标准编码多了一个vld开关。使用{entry_Y,entry_X}替换{key,mask}的XY编码的真值表如表3.1所示。{Y,X}={0,0}表示始终没有命中,{Y,X}={1,1}表示不关心(等于被屏蔽)。逻辑表达式是Hit = ((~Key)& X)| (Key&Y) 。这里的表达式也就是一个2mux1电路单元。
Table 3.2 XY编码
Key Y X Comment Hit
0 0 0 Never hit. 0
0 0 1 1
0 1 0 0
0 1 1 don’t care 1
1 0 0 never hit. 0
1 0 1 0
1 1 0 1
1 1 1 don’t care 1
注意:本文定义mask为0 不进行比较,mask为1进行比较。
四、 仿真

基于Verilog的TCAM硬件实现相关推荐

  1. 基于verilog贪吃蛇游戏设计

    概述 基于verilog贪吃蛇游戏设计.使用verilog语言 小游戏主要分为以下几个模块:顶层模块.VGA显示模块.蛇身控制模块.苹果控制模块. 系统主要分为顶层模块.VGA显示模块.蛇身控制模块. ...

  2. FPGA学习之路—应用程序—基于Verilog设计单总线8位ALU

    FPGA学习之路--基于Verilog设计单总线8位ALU 定义 ALU(arithmetic and logic unit) 算术逻辑单元,简称ALU,是计算机的数学运算核心,也就是负责运算的组件, ...

  3. 基于Verilog HDL的数字时钟

    目录 一.实验目的 二.实验概述 三.实验过程 一.实验目的 1.学习相关的设计方法及原理 2.学习设计方法 二.实验概述 基于Verilog HDL设计一个时钟 三.实验过程 新建一个工程 选择芯片 ...

  4. 国产智多晶FPGA基于Verilog的设计开发流程

    大家好,我是小梅哥,这里给大家介绍国产FPGA厂家"西安智多晶"微电子的FPGA基于Verilog进行逻辑设计的开发流程,步骤详细,可作为大家的评估参考.本博客将陆续发表更多国产F ...

  5. 异步FIFO基本原理(基于Verilog的简单实现)

    参考文献: [1]彭莉, 秦建业, 付宇卓. 异步FIFO的设计与验证[J]. 计算机工程与应用, 2005, 41(3):4. [2]魏芳, 刘志军, 马克杰. 基于Verilog HDL的异步FI ...

  6. Verilog时序逻辑硬件建模设计(四)移位寄存器

    Verilog时序逻辑硬件建模设计(四)移位寄存器 -Shift Register 没有任何寄存器逻辑,RTL设计是不完整的.RTL是寄存器传输级或逻辑,用于描述依赖于当前输入和过去输出的数字逻辑. ...

  7. 基于verilog的正弦波发生器

    基于verilog的正弦波发生器 这是我在CSDN里的第一篇文章,先做个小广告.. 我建了一个嵌入式和FPGA的公众号,里面也是我写的一些文章,有的是平时学习的笔记,或者实验的记录,我希望和大家一起学 ...

  8. 基于 SoC 的卷积神经网络车牌识别系统设计(4-2)基于 Verilog 的 RGB2HSV IP 设计

    引言         这是车牌识别预处理(RGB2HSV + 二值化 + 形态学)的 IP 设计之一.主要功能是针对从 OV5640 IP 输出的 RGB888 真彩色车牌识别数据(视频传输格式:64 ...

  9. 基于 SoC 的卷积神经网络车牌识别系统设计(4-3)基于 Verilog 的 HSV2Binary IP 设计

    引言         这是车牌识别预处理(RGB2HSV + 二值化 + 形态学)的 IP 设计之一.主要功能是针对从 RGB2HSV IP 的输出数据转换成 Binary 二值化格式的数据,为之后的 ...

最新文章

  1. 使用交换机的dhcp snooping拒绝非法dhcp服务
  2. python中文意思k-python-RepeatedKFold实际上是什么意思?
  3. Creating-Observables
  4. python函数定义与使用
  5. 前端学习(2338):记录解决问题的一次
  6. html缩进快捷键_Windows IDEA 快捷键终极大全,果断收藏!
  7. Spring AOP之注解配置篇
  8. Lc1013将数组分成相等的三个部分
  9. 解决Weblogic与Hibernate的jar冲突
  10. 阶段5 3.微服务项目【学成在线】_day01 搭建环境 CMS服务端开发_04-项目概述-技术栈和开发步骤...
  11. 强大的发包工具fine packet builder
  12. 神仙打架!Python web框架大比拼,哪个学习成本低?
  13. 帮你自动化办公的python - 自动提取pdf指定页(项目概述)
  14. 速抢:500份粉丝购书优惠券
  15. oracle 数据库网络传输,Oracle数据库之间数据传输方法探讨
  16. visio设置图片默认大小_学习PS第6课(图片大小设置)
  17. Qt:Qt Widgets
  18. 安卓入坑第一篇——搞个录音的软件
  19. 基于模糊PID控制的电加热炉温度控制系统设计
  20. 网安信科技—与黑客上演速度与激情

热门文章

  1. 带问题重读ijkPlayer
  2. 如何使用JavaScript检查数字是否为素数?
  3. JavaScript【判断一个数是否是素数】函数实现
  4. 批量在DHCP中设定IP地址保留
  5. Mentor Graphics Calibre 2017.1 Linux 1DVD寄生參數萃取
  6. Java 实例 - 字符串分割和字符串分隔
  7. 【python】python中os.listdir的排序问题
  8. 香港服务器适合用来搭建app吗。
  9. [shell脚本] realtek平台 Mifi初始化时候,初始化wifi的黑白名单的sh脚本
  10. 框架到底是什么,干什么的