zoukankan      html  css  js  c++  java
  • TCAM CAM 说明 原理 结构 Verilog 硬件实现

    TCAM 三态内容地址查找存储器,CAM内容地址查找存储器。区别在于TCAM多了一级掩码功能,也就是说可以指定某几位是dont care。匹配的时候0,1都行的意思。

    广泛应用于数据流处理领域,本文简要介绍TCAM和CAM的逻辑组成和Verilog实例。

    TCAM对于一个带mask的表项,如:“1000 * * * * ”。

    为表达流表项,我们在下载流表之前我们需要做一步计算,

    首先将其分解为entry1 和 mask:

    第二步,令entry1' = entry1 & mask

    所以entry1' = 10000000


    将entry1' 和mask 下载存入TCAM表项组中:

     

    在做查找的时候,key广播到每个表项组中。之后将key和当前表项组中的mask做与运算,如key = 10001010. key& mask = 10001010 & 11110000 = 10000000

    最后再和entry做比较,如果相等则将1写入结果寄存器。之后所有的结果汇总到优先级选路器中。并得到id编号。

    优先级选路器:

    可以用function函数实现:

    参考代码请看这里一个粗糙的实现:https://github.com/qiaosiyi/progASICp4SWITCH/blob/master/tcam.v

    这样我们基本上就可以用Verilog语言去实现了,其次要注意的是,广播,复制,或者做逻辑运算,都会比较占用时延,不要在一个时钟周期去做,很可能无法完成时序约束。

    建议一个操作使用一个时钟周期,所以tcam查找我这里延迟了四个周期,但是fully-pipeline。吞吐还是一周期一次。

    有时候表项很多,也许优先级选路器timing收不了,其实可以考虑将这一步延长俩周期做。其实本质相当于降低了tcam处理频率。

    关于CAM:

    CAM与TCAM类似,CAM是精确匹配,key广播到每个entry,然后比较出结果汇总到优先选路器中,得到id。比tcam操作步骤减少了一些,而且逻辑资源也减少了很多。

    可以在这里看一下我粗糙的代码:https://github.com/qiaosiyi/progASICp4SWITCH/blob/master/cam.v

    ========================

    qsy

    15MAR2019

  • 相关阅读:
    使用turtle库绘制一个叠加等边三角形
    使用turtle库绘制图形
    tar命令常用参数讲解
    elasticsearch 中geo point地理位置数据类型
    count(*)和count(1)的sql性能分析
    别再if/else走天下了
    正则表达式 匹配0次1次或者无限次
    linux shell 字符串操作(长度,查找,替换)
    linux expect工具使用
    mongodb分片balance
  • 原文地址:https://www.cnblogs.com/pandaroll/p/10535994.html
Copyright © 2011-2022 走看看