错误:<signal>不是常数

时间:2015-06-25 09:49:37

标签: constants verilog

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行:我不是一个常数

请告诉我如何删除它。我真的很感激。

1 个答案:

答案 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中是如何工作的。