verilog数组中的数量

时间:2013-10-30 23:04:48

标签: verilog hdl dataflow

我试图知道verilog中4位二进制数的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

2 个答案:

答案 0 :(得分:4)

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

其次,你的范围是关闭的,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

答案 1 :(得分:3)

$countones在测试平台中很有用,但它不可综合(参考IEEE Std 1800-2012,20.9位向量系统函数):

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

*/