SystemVerilog将函数作为参数传递

时间:2012-12-11 15:44:54

标签: system-verilog

是否可以在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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:4)

没有

任务和函数只能接受数据类型作为参数,而函数不是数据类型。此外,无法将函数转换为数据类型。