Verilog で 4 ビット 2 進数の 1 の数をカウントしようとしていますが、予期しない出力が表示されます。いくつかのアプローチを試しました。これはうまくいくはずだと思いますが、うまくいきません。
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
$countones
この目的に使用できます (IEEE Std 1800-2012、20.9 Bit vector system functionsを参照):
module tb;
reg [3:0] in;
wire [2:0] one = $countones(in);
initial begin
$monitor("in=%b one=%d", in, one);
#1 in = 4'b0000;
#1 in = 4'b0001;
#1 in = 4'b1101;
end
endmodule
出力:
in=xxxx one=0
in=0000 one=0
in=0001 one=1
in=1101 one=3