为什么这个计数器分配错误



我正在使用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

最新更新