我正在使用HDLBits网站学习Verilog,我解决了这个问题(电路计算输入向量中的"1"的数量(,但我想了解为什么我以前的尝试是错误的。
正确答案
module top_module(
input [254:0] in,
output [7:0] out );
int i ;
reg [7:0] counter;
always @(*) begin
counter =0;
for (i=0;i<255;i++)begin
counter = (in[i]==1)? counter+1:counter;
end
out = counter ;
end
endmodule
第一个错误答案
module top_module(
input [254:0] in,
output [7:0] out );
int i ;
reg [7:0] counter;
always @(*) begin
counter =0;
for (i=0;i<255;i++)begin
counter = (in[i]==1)? counter+1:counter;
end
end
out = counter ;
endmodule
第二个错误答案
module top_module(
input [254:0] in,
output [7:0] out );
int i ;
always @(*) begin
out=0;
for (i=0;i<255;i++)begin
out = (in[i]==1)? out+1:out;
end
end
endmodule
所有3个代码示例都有语法错误。如果HDLBits网站没有报告错误,请尝试EDA Playground网站模拟器。
在您的";正确的";回答您需要更改
output [7:0] out );
至:
output reg [7:0] out );
对always
块内的信号进行赋值(过程赋值(时,需要将该信号声明为reg
。
在您的";第一个错误答案";,更改:
out = counter ;
至:
assign out = counter ;
连续分配(在always
块之外(需要assign
关键字。
在您的";第二个错误答案";,用reg
代替out
。