在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3734|回复: 5

[招聘] 7bit input 设计电路,算一共有几个1

[复制链接]
发表于 2013-4-29 11:45:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
如题,硬件电路怎么实现呢?
发表于 2013-4-29 22:01:48 | 显示全部楼层
一个模七计数器  一个移位寄存器 再加一个加法器?
发表于 2013-5-1 08:46:36 | 显示全部楼层
四个一位加法器就可以实现了。
发表于 2013-5-1 13:11:57 | 显示全部楼层
本帖最后由 mipsgreen 于 2013-5-1 13:21 编辑

7位的输入很简单, 可以用加法器做, 如果位数多了,用加法器的delay就比较大了。
对于7位的输入, 正好可以用2个一位加法器和一个2位加法器,这样速度也会快些。





  1. module popcnt(di, vcnt);
  2. input [6:0] di;
  3. output [2:0] vcnt;

  4. wire sum0, sum1;
  5. wire [1:0] sum2;
  6. wire [2:0] co;

  7. DW01_add #(1) add1b0 (.A(di[1]), .B(di[2]), .CI[di[0]), .SUM(sum0), .CO(co[0]));
  8. DW01_add #(1) add1b1 (.A(di[4]), .B(di[5]), .CI[di[3]), .SUM(sum1), .CO(co[1]));

  9. DW01_add #(2) add2b0 (.A({co[0], sum0}), .B({co[1], sum1}), .CI(di[6]), .SUM(sum2), .CO(co[2]));

  10. assign vcnt = {co[2], sum2};

  11. endmodule


复制代码


这种操作叫做population count, 常见于X86的SSE4和一些DSP中的POPCNT指令。

当位数比较大,比如64位时, POPCNT的计算就不能这样实现,实现的方法
主要看设计的约束,是需要追求速度,还是追求面积,
http://en.wikipedia.org/wiki/Hamming_weight
这里介绍了64b数据POPCNT的算法, 硬件实现也是可以借鉴的
下面是一个popcnt的generator:
http://opencores.org/project,popcount_gen
发表于 2013-5-2 16:20:33 | 显示全部楼层
还有算1的个数 你们都没说  只是加法了
发表于 2013-5-3 09:51:21 | 显示全部楼层
7bit 输入的每位相加即可:a[0] + a[1] + a[2] + a[3] + a[4] + a[5] + a[6] =  1的个数。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-25 21:06 , Processed in 0.066923 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表