2017-10-19 73 views
0

我正在嘗試學習Verilog,並且我有一個Verilog模塊,然後調用另一個文件並從當前模塊中運行該模塊。來自另一個Verilog模塊的調用任務

所以,我有我的模塊,如:

module maths(); 
//register etc details 
initial begin 

`include "add.v" 

end 
endmodule 

和我add.v文件正在從數學模塊調用就像是:

task add; 
    A = $random; 
    B = $random; 
    C = A + B; 
    $display("Answer: %d", C); 
endtask 

但我接收到來自錯誤任務文件near "task": syntax error, unexpected "task"near "endtask": syntax error, unexpected "endtask"

我在How to call tasks from a separate module in Verilog?上看到了答案,但是由於它在模塊中的初始塊內,因此需要從初始塊或總是塊中調用任務的答案沒有幫助。

我在哪裏出錯了?

+0

@toolic它們在開始之前在父模塊中聲明 – Stussy

+0

您不應將任務聲明放在初始塊內。在「initial」行之前移動include行。然後,調用'initial'塊內的任務。 – toolic

+0

@toolic ok我已經這樣做了,但現在它給出了一個關於add.v文件的'BEGIN - END必須在任務/函數語句附近' – Stussy

回答

0

就像Serge說的那樣,在模塊聲明之前,請始終將文件包含在文件的開頭。

`include "add.v" 

module maths(); 
//register etc details 
initial begin 
    add; 
end 
endmodule 

對於這個問題,你是失蹤開始,結束語句添加任務。任務總是需要這兩個語句來包裝你的任務代碼。

所以,這應該工作:

reg A, B, C; 

task add; 
begin 
    A = $random; 
    B = $random; 
    C = A + B; 
    $display("Answer: %d", C); 
end 
endtask 

不要忘了A,B,C聲明:)!

+0

謝謝,我已經定義了父文件中的連線和寄存器,並且它給了我包含文件中未定義的變量錯誤,但是在包含文件中定義它們是不允許的,因爲全局聲明在Verilog 2001語法中是非法的,怎麼能我解決這個問題? – Stussy

+0

在開始語句之前將它們添加到任務中。 – urban