Combinational for loop 255 bit population count

/*下面的注释的代码为什么不能用:
在Verilog中,generate块通常用于在编译时生成硬件结构,
例如重复的逻辑模块或条件生成的硬件。然而,在你的“人口计数”电路中,目标是计算一个255位输入向量中1的数量,
这本质上是一个组合逻辑问题,而不是硬件结构生成问题。
因此,使用always @(*)块来实现组合逻辑是更合适的选择,而不是使用generate块。


module top_module( 
    input [254:0] in,
    output [7:0] out );
    reg [7:0] cnt;

// 使用一个循环来逐位查看每一位的值
    genvar i;
    generate
        for (i = 0; i < 255; i = i + 1) begin : gen_loop
            always@(*)begin
                if(in[i]==1) 
                    cnt=cnt+1'd1;
                else
                    cnt=cnt;
            end
        end
    endgenerate
    assign out = cnt;
endmodule
*/

module top_module(
    input [254:0] in,
    output reg [7:0] out
);
    integer i; // 用于循环的整数变量
    always @(*) begin
        out = 0; // 初始化计数器为0
        for (i = 0; i < 255; i = i + 1) begin
            if (in[i]) begin
                out = out + 1; // 如果当前位为1,则计数器加1
            end
        end
    end
endmodule