verilog .一个clk求出一个位宽为N的数据中1的个数

verilog编程
如何用时序逻辑一拍求出位宽为N的数据中1的个数,N可变

用手机敲的,可能有错,将就着看吧

reg [N-1:0] m;
reg [7:0] x;
integer i;
always@(posedge clk)
begin
    x=0;
    for(i=0;i<N;i=i+1)
    begin
       x=x+m[i];
    end
end


转化为十进制然后利用十进制转二进制的方法逆推?