我正在尝试在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到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
$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
*/