【IC设计】求一个32bits数据中1的个数

本文探讨了两种求解32bits数据中1的个数的方法:移位计数法和全加器法。移位法资源消耗少但时序周期长,而全加器法则能快速计算但占用更多资源。通过结合两者,可以实现时序和资源的优化平衡。
摘要由CSDN通过智能技术生成

在看别人的面试经历中,有一个有意思的问题,就是求一个32bits数据中1的个数。

一、移位计数法

在看到这个问题的第一反应,想到的是用移位的方法检测输入数据每一个bit的数据,再将数据为1的bit进行计数,得到最终结果。代码如下:

module count_bits(
  input rst, clk,
  input [31:0] data_in,
  input request,
  output idle,        // 空闲信号
  output count_done,  // 完成信号
  output [5:0] result // 最多为32个数据都为1
);

  integer i;
  reg [7:0] count;
  reg idle_flag, count_done_flag;
  always @(negedge rst or posedge clk) begin
    if (!rst) begin
      count <= 8'h0;
      i <= 0;
      idle_flag <= 1'b1;
      count_done <= 1'b0;
    end
    else if (!request) begin
      count <= 8'h0;
      i <= 0;
      idle_flag <= 1'b1;
      count_done <= 1'b0;
    end
    else if (request) begin
      idle <= 1'b0;
      if (i < 'd32) begin
        count <= count + data_in[i];
        i <= i + 1'
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值