在 SystemVerilog 中获取当前进程 ID

Get current process id in SystemVerilog

要在 Java 中得到 process_id,我们使用 ProcessHandle.current().pid();。我们如何在 Systemverilog?

中获取 current-process-id

使用内置 process class

begin
  process pid;
  pid = process::self();
  ...
end

参见 IEEE 1800-2017 SystemVerilog LRM

中的 9.7 细粒度过程控制

SystemVerilog 没有任何工具来获取其进程的 'pid'。它提供了一个对象以独立于系统的方式进行有限的过程控制。您可以检查 lrm 9.7 以获取可用控件。

但是,可以使用 'c' 调用使用 DPI 或 PLI 函数获取 pid。但实现可能取决于系统和模拟器。

例如,以下在 linux 上使用 VCS:

module pid();
   import "DPI-C" function int getpid();
   initial begin
      $display("%d", getpid());
   end
endmodule // pid

上面的 getpid() 是一个标准的 libc 函数,它可以从模拟器中调用。它似乎也适用于 EDA playground 中的 vcs、mentor 和 cadence,但不适用于 aldec。

由于函数是全局定义的,所以至少三个模拟器不需要定义dpi函数体。但是,您可能需要使用 'c' 主体定义不同的 dpi 函数以使其更便携。