2015-11-25 45 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鏈接進行位分片。