别吵了。讨论一个技术问题
差不多。这个问题是有应用背景的,已经解决。我是看今天版上气氛不对,所以提出来,胡诌胡诌
LPM - Longest Prefix Match,最长前缀匹配,路由表IP地址匹配搜索的一种算法,为了在路由表中找出一个与目的地址的高位部分匹配得最多的表项
不行,这种操作相当于用内容来匹配地址,所以最直接(耗费资源)的方案就是CAM
用tcam谁都会。难就难在用单端口普通sram啊。
我不大了解这个东西
但是12个周期怎么把ram遍历下?
是不是ram的表项是有关联的?
嘿嘿,思路对头,再深想想。这些表项假设是一个链表串联在一起,那么已经排好序的,按照对分法是不是就可以12个周期查完了呢。更进一步,就需要加个排序的电路,在CPU每次增加删除表项的时候先排序再添加删除。
其实纯数字电路真该属于cs,而不是ee。不需要电路知识,全是数据结构的知识。
我是就他那个问题回答的,不是针对w总的问题
其实Intel网络处理器的应用手册里面就有解决方案
我上面解释过了,贵版最近火气很大,都在吵架。想转移一下大家焦点话题的。
我的意思是,直接用SRAM的“地址->数据”访问方式是不行的,想省事就用TCAM
一般大的tcam需要外接,内嵌的tcam需要特殊工艺,成本太高。所以,低端的asic都是用sram来实现。
是的,我们当初也是从外接TCAM转为SRAM+算法
这个也要看情况。在相同存储容量的情况下,双口sram比单口要大好几倍。4倍?3倍?记不清了。所以小fifo用双口可以忍。大块的,超过4096bits的都不能忍,必须单口。
有这么夸张吗?
印象中双口比单口大不到一倍啊
当然双口主要在fpga时候用,asic后基本都转成单口了
两倍吧,据说双口底层就是两倍容量
如果有RAM就是要连续读和写,单口很难搞啊
我感觉消费电子一般都用单口,但是设备里面追求带宽还是有不少用双口的
我说的双口是同时一读一写,不是两个口可以同时在读也能同时在写的类型
应该是超2倍的。因为我们这里据说有人评估过。否则也不会花这么大的力气做这要求。
其实本质上,双口128x32的读写带宽和单口64x64的读写带宽几乎是差不多的。
翻了一下TSMC的文档
dual port read&write(两端口都可读写) 比single port的两倍要小
dual port 用得是8T cell,single port是6T
都是high density, sing port的density更高些
为什么会超过2倍?感觉是不是加了特殊的需求?
dual port是那种一个口读一个口写的吧
两个口可以同时读同时写的算四口ram?
我们这里dual port就是一口读一口写,two port就是两个口,每个口都能读写。single port就是单口读写。
看了4096和12,下意识的就联系在一起了,大概就知道怎么回事儿了。。。
这几天一有空就在思考这个问题
查阅了一些IEEE的一些论文,达到O(L)的基本都是基于树状结构的
基于链表,从小到大排好序可以实现,基于对分法查找的关键是怎么找到链表的中间元素。比如1->20->15->7->112-70->18这样的链表,我想到的办法是记录链表长度LL_LEN,整个链表指针存进另外一块ll_sram,数据依次分别是:
ll_sram[0] = 1
ll_sram[1] = 20
ll_sram[2] = 15
ll_sram[3] = 7
ll_sram[4] = 112
ll_sram[5] = 70
ll_sram[6] = 18
有这个信息以后就完全可以通过对分法去做了。但是这样的话需要两块独立sram,同时增加新路由信息的时候就稍微复杂一点,需要更新两块sram。特别是ll_sram,可能需要将整块内容向下移动一个位置(当删除一条信息的时候,ll_sram需要将整块内容向上移动一个位置)
不知道我理解的这种方法合不合理?有没有更好的其他实现方法?谢谢