SystemVerilog 是否支持全局函数?

Does SystemVerilog support global functions?

我想创建一个 parity_check 函数,它可以被三个不同的模块访问。这在 SV 中可能吗?如果是,我在哪里声明这个函数以及如何将它导入我的模块?

您可以将一个函数放入一个单独的文件中,然后使用 `include:

包含它
`include "some_file_name.sv"

但是,更好的方法是使用 :

package some_package_name;
  function string some_function_name;
    return "some_function_name called";
  endfunction
endpackage

您可以将其放入单独的文件中,并且必须在编译使用它的任何模块之前对其进行编译。然后,您 将包导入 到每个模块中:

module some_module_name;
  import some_package_name::*;   // or import some_package_name::some_function_name;
  initial
    $display(some_function_name);
endmodule

将函数放入包中比将其放入文件中并使用 include 更好,因为包是一个 命名范围 .因为包是一个命名范围,任何名称冲突的问题都可以通过引用包中函数的全名来解决,而不是使用 import,例如:

module some_module_name;
  initial
    $display(some_package_name::some_function_name);
endmodule