格式错误的声明Verilog

时间:2015-11-25 20:21:17

标签: verilog

module myfunction();
    function [31:0] myfunction;
            input [31:0] a;
            localparam bytes = 4;
            begin
              for(i=0; i<4;i= i+1)
              begin
                myfunction[8*i + 7: 8*i] = input[(3 - i*8) + 7 :   (3 -i)*8];
              end
    endfunction
endmodule

我在for循环中的myfunction上遇到格式错误的语句错误。我对verilog很新。请帮我解决错误

2 个答案:

答案 0 :(得分:2)

正如@ alex.forencich所示,位切片+:运算符完成,因为你有非常量切片索引。

此外,input SystemVerilog关键字。因此,此处需要更改变量名称。需要声明i。以下代码段是代码的编译版本。

module myfunction_mod();
    function [31:0] myfunction;
            input [31:0] a;
           // Dummy input1 declared for sample
            reg [31:0] input1;
            localparam bytes = 4;
            begin
              for(int i=0; i<4;i= i+1) // declare i
              begin
               // Note input1 here
               myfunction[8*i +: 8] = input1[8*(3-i) +: 8];
               // Else use a here
               // myfunction[8*i +: 8] = a[8*(3-i) +: 8];
              end
            end
    endfunction
endmodule

这将解决编译错误。我的另一个评论是,尽可能保持不同的功能名称和模块名称。这将有助于层次结构问题。

请参阅thisthis链接进行位切片。

答案 1 :(得分:1)

我不确定你到底发生了什么错误。但是,我建议使用索引部分选择样式,如下所示:

myfunction[8*i +: 8] = input[8*(3-i) +: 8]

您还应确保所有开始和结束都匹配。