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 回答