2016-04-13 1 views
-1

「テストは関数名ではありません」というエラーが表示されます。私はここで間違って何をしていますか?私はいつもブロックからタスクを呼び出すことはできませんか?私はいつもVerilogブロックからタスクを呼び出すことができます

task automatic tests(
    input a, 
    input b, 
    output c); 
    // code 
endtask 

module test123 
(
input clk, 
input a, 
input b, 
input e 
); 

reg d; 

always @(posedge clk) 
    if(e) 
     d <= tests(a, b);  

endmodule 
+2

'C'は、タスクからの出力があるので、あなたは何をする必要があります。これは 'reg d'で出力します。 – sharvil111

+0

値を返す関数を使用するか、LHSオペランドをタスクの引数として渡します。 –

答えて

2

タスクは決して値を返しません - 関数だけがそれを行うことができます。また、SystemVerilogを使用している場合を除き、モジュール内でタスクと関数を宣言する必要があります。 `;`場合(e)のテスト(A、B、D):

2

下図のようにあなたがそれを行うことができ、

module test123 
(
input clk, 
input a, 
input b, 
input e 
); 

task automatic tests(
    input a, 
    input b, 
    output c); 
    // code 
endtask 

reg d; 

always @(posedge clk) 
    if(e) 
          // a=a, b=b, d=c 
     tests(a, b, d);  // d is assigned to your output 

endmodule 
関連する問題