module concat(
input [7:0] data_in,
input rst,
input clk,
output reg[127:0] data_out,
output reg valid_out
);
integer i;
reg[127:0] datatemp=0;
always@(data_in)
begin
if(rst)
begin
data_out<=0;
datatemp<=0;
end
else
begin
for(i=0;i<=127;i=i+8)
begin
datatemp[i:i+7]<=data_in;
end
if(i==127)
begin
valid_out<=1;
data_out<=datatemp;
end
end
end
endmodule
此代码显示以下错误:
第44行:我不是一个常数
请告诉我如何删除它。我真的很感激。
答案 0 :(得分:0)
看起来你很快就结束了你的for循环。在for循环完成后,您正在检查i的值是否等于127。我认为你的代码要编译你想要这个:
for(i=0;i<=127;i=i+8)
begin
datatemp[i:i+7]<=data_in;
if(i==127)
begin
valid_out<=1;
data_out<=datatemp;
end
end
但你确定这会做你想做的吗?你明白在Verilog for循环中展开了吗?它们在C或Java或任何软件语言中的行为方式非常不同。我不确定为什么你需要检查i的值,除非你不理解for循环在Synthesizable Verilog中是如何工作的。