2015-11-25 47 views
-4
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很陌生。请帮助我的错误格式错误的声明Verilog

+2

请发送确切的错误消息。 –

+1

'input'是一个关键字。 '输入[(3 - i * 8)...'看起来很奇怪。它应该是'a'吗? – toolic

+0

我做到了,错误消失了。我得到一个新的错误,如下所示:我是不是在循环 – user3509540

回答

1

我不确定你在这里得到什么错误。不过,我会推荐使用索引部分选择样式,如下所示:

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

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

+0

循环myfunction我不这样做,错误已经消失。我得到一个新的错误,如下所示: 我不是在for循环myfunction不断。 – user3509540

+0

您可能还需要在本地定义我。 –

2

As @ alex.forencich显示,位分片将由+:运算符完成,因为您有非恒定切片索引。

另外,inputSystemVerilog关键字。所以,这里需要更改变量名称。需要声明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链接进行位分片。