微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > 微电子学习交流 > 请教大牛一个前端设计的问题

请教大牛一个前端设计的问题

时间:12-12 整理:3721RD 点击:

..我再弱弱的问一下。。。第一个模块应该怎么写呢。。。。

这个方法貌似高位的有效数字遇到mask为1的值就传播不下去了啊。。。

128x128的阵列
对第k行,考虑mask[127-k],如果是1则复制上级不变,否则
mask[127:127-k] <= {1'b0, mask[127:127-k+1]};
data[127:127-k] <= {1'b0, data[127:127-k+1]};
这样应该可行。。。

最简单的就是,写case,让工具优化
8位宽,256项,不会太复杂的

我的中心思想是要把mask为0的data位吸收掉。
假设mask = 1010,
初始值:    d = d3,d2, d1, d0; m = 1010  
第一行结束,d = d3, d3, d1, d1; m = 0101
第二行结束,d = 0, d3, d3, d1;  m = 0011
mask也需要随着data一起动
data[n] = mask[n] ? data[n] : data[n+1];
mask[n] = mask[n] ? mask[n] : mask[n+1];

嗯嗯 这样就清楚了 也是需要两个128x128的吧。。

楼主有没有在原来移位的思路上,考虑过用CLZ跳过mask中相邻的0和相邻的1?这样最坏
情况下是40个周期,最好是1个周期。假设mask中40个有效位在128位中均匀分布,均值
大概是31.4个周期。如果mask有效位分布集中,期望值会更低。
这种做法的好处是:
1、思路直接,设计简单,面积不大(2个CLZ,几个128位移位器,几个7位加法器)
2、位宽扩展很方便
3、fanout少,routing友好
不好的地方是输出时间不固定需要附加指示信号,最坏情形下latency较长(40 cycle
s)

result[11:0],   [7:0] bit save mask data , [11:8] 4 bit save  the lenght for valid length
always@(*)begin
case(mask[7:0])
8'b0000_0000:  result[11:0]={ 4'd0, (data_in&8b'0000_0000)>>> clz};
8'b0000_0001:  resutl[11:0]={ 4'd1,  (data_in&8b'0000_0001)>>> clz};
8'b0000_0010:  result[11:0]={ 4'd1,  (data_in&8b'0000_0010)>>> clz};

endcase
我给你一个建议,实现这个大表,最好想个办法,用C++ print 一个规规距据的表达式,然后Print出来
或者如果你们部门用Perl  Vperl 用表达式自动生成代码
手写的东西,不安全,其实w我的{ }代码是可以自动生成的,我就是简单写两个

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top