Search code examples
verilogsystem-veriloghdl

Count number of ones in array


I am trying to count the number of ones in a 4-bit binary number in Verilog, but my output is unexpected. I've tried several approaches; this is the one I think should work, but it doesn't.

module ones(one,in);
input [3:0]in;
output [1:0]one;

assign one = 2'b00; 
assign one = one+in[3]+in[2]+in[1]+in[0] ;

endmodule

Solution

  • First, you can't assign the variable twice.

    Second, your range is off, 2 bits can only go from 0 to 3. You need a 3 bit output to count up to 4.

    This is more like what you need:

    module ones(
      output wire [2:0] one,
      input wire [3:0] in
    );
    
    assign one = in[3]+in[2]+in[1]+in[0] ;
    
    endmodule