菜鸟求助,这样的逻辑应该怎么实现
时间:10-02
整理:3721RD
点击:

功能:输入数据与存储器或在寄存器阵列的存储内容做比对,
如果已经存有一样数据则输出match信号,否则miss。
求助应该怎样高效地实现(不使用cam,没有这样的ip),
还要方便dc综合。我现在只想到for循坏去一个地址一个地址一一比对了。
分两种情况:
如果你的数据位宽很小,可以将input_data用作mem的地址,mem每个地址只需存储1bit数据,用来表示该数据是否存在。这种方法读一次即可查询出结果。
如果数据位宽很大,那么就需要写search的算法了,基本上就是读出每个数进行比较。这种方法要想快,mem数据的存储需要一定的策略,数据较大就存储在高位地址,数据较小就存在低位地址,这样可以减少一半的时间。总之,需要在mem存储和input_data采取适当的策略才能快速search。
信息给的详细一点呢。输入数据位宽多少?存储器阵列里面存了多少个数?
比如数据位宽8位,存储阵列16或者32...说一下大体思路也行
从理论上讲,这属于查找算法的范畴了。
如果数据量较少,而且对效率要求不高,可以用顺序查找,即一个个比较。
如果效率要求高,就要对存储数据的位置进行修改,所对应的有如下查找:
二分法查找: 要先对存储数据进行排序(楼上已讲到)
二叉树查找:先将存储数据构造成二叉树
Hash查找:先构造hash表。
其实从实现和效率综合看,二分法查找已经不错了。
数据量小就不需要搞复杂查找算法了。
顺序查找吧,地址从0开始,读出SRAM里的数据,与input data比较,相等则match置1并结束,不等则地址加1继续,直到地址加到最大值。
SRAM存了16个数,最多读16次即可,花费16个cycle。
