请问这样的大mux应该怎么处理?
时间:12-12
整理:3721RD
点击:
reg [127:0] a;
case (a)
128'hFEDC865 : addr = 0;
128'hESDF#FC : addr = 1;
... // 一共6000个case,每个分支的值没有任何关系,但可能平均分布在a的取值空间
128'hGDAFAVD : addr = 6000;
endcase
这种情况怎样处理合理? 在100个周期以内完成这个任务就行。
case (a)
128'hFEDC865 : addr = 0;
128'hESDF#FC : addr = 1;
... // 一共6000个case,每个分支的值没有任何关系,但可能平均分布在a的取值空间
128'hGDAFAVD : addr = 6000;
endcase
这种情况怎样处理合理? 在100个周期以内完成这个任务就行。
这个我想过。每个周期处理8位之类的,但好像会产生很多状态,而且最后产生输出信号addr时还是会好大一个mux
把case拆成60组,每组100个case,default值addr=0;把每组的结果或在一起就可以了。
用ram或者rom也可以,怎么做?这个mux实际上是通过内容来寻找index,而不是传统的通过index来找内容。
就是分2~3级实现,每级用n^0.5: 1 或n^0.333: 1的mux.
对index 按0, 1, 2, ...重新编码,替代之。
哦我理解了,之前我看错了,我以为是全case呢。。。
就是个CAM吧,但是用CAM肯定比较贵
如果周期宽松就慢慢搞吧
这种其实是hash吧,本质就是cam了
对,就是你说的CAM, 同等容量的CAM比普通RAM贵多少?
周期可以在200以内都没问题,但感觉用逻辑实现,代价很大啊
cam密度一般是1rw的ram的三分之一到四分之一,比2rw的RAM密度还要低一点
取决于你们的最终流片厂商,可以去找你们后端聊聊
你不在乎周期的话没啥代价
大不了用一个6000depth128width的ram存下来,6000个clock查就好了
200个周期的话也不太难搞定,分块就好了正好用
晕,只是说明随机数据,在键盘上乱敲的,不是真实代码
ROM, 深度 6000 宽度 128 + 13
128放case中的值,13放addr的值
重新组织数据的顺序:按128中的数据从小大到排序
将重新排序后的数据存入ROM中
对ROM用折半查找,不到200个周期就可以找到你的输入对应的addr在ROM中的位置。
mux 相关文章: