3

我试图在 Verilog 中计算 4 位二进制数中的个数,但我的输出是意外的。我尝试了几种方法;这是我认为应该工作的一个,但它没有。

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
4

2 回答 2

5

首先,您不能将变量分配两次。

其次,您的范围已关闭,2 位只能从 0 到 3。您需要 3 位输出才能计数到 4。

这更像是您需要的:

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

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

endmodule
于 2013-10-30T23:14:16.937 回答
3

$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
于 2013-10-30T23:52:05.993 回答