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行:我不是常数
请告诉我怎么移除它。我会很感激的。
发布于 2015-06-25 12:15:41
看来你的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-循环在可综合的Verilog中是如何工作的。
https://stackoverflow.com/questions/31046853
复制相似问题