5

SystemVerilogで引数として関数を渡すことは可能ですか?

このコードは、機能しませんが、うまくいけば実証されます。何か助けはありますか?ありがとう。

    module funcparam;
            int result;

            function int xxx(int x, ref fun);
                    return fun(x);
            endfunction

            function int yyy(int y);
                    return y * (y + y);
            endfunction

            initial begin
                    result = xxx(5, yyy);
                    $display("result: %d", result);
            end
    endmodule
4

2 に答える 2

5

参照によって渡すことができるものに関しては制限があります。

  • 変数、
  • クラスプロパティ、
  • 解凍された構造のメンバー、または
  • 解凍された配列の要素。

基本クラスのハンドルを渡すことができるかもしれませんが、これがうまくいくとは思えません。

class base;
  function yyy(int x);
  endfunction
endclass

class class1 extends base;
  function yyy(int x);
  endfunction
endclass

class class2 extends base;
  function yyy(int x);
  endfunction
endclass


module funcparam;
   result;

   function int xxx(int x,input base fun);
     return fun.yyy(x);
   endfunction

   class1 cls = new;
   //class2 cls = new;


    initial begin
       result = xxx(5, cls);
      $display("result: %d", result);
    end
endmodule
于 2012-12-12T16:10:06.843 に答える
4

いいえ。

タスクと関数は引数としてデータ型のみを受け入れることができ、関数はデータ型ではありません。また、関数をデータ型にする方法はありません。

于 2012-12-11T17:14:43.570 に答える