【问题标题】:Getting the hierarchical scope from where a function was called获取调用函数的层次范围
【发布时间】:2014-06-27 14:32:48
【问题描述】:

在调用函数时,该函数是否可以获取调用位置的层次范围?

让我举个例子。我有以下代码:

package some_pkg;

function void some_function();
  $display("%m");
endfunction

endpackage


module top;
  import some_pkg::*;

  initial
    some_function();

endmodule

运行时会显示“some_pkg::some_function”。有什么办法可以让功能显示“顶部”?或者如果我有一些其他的子模块从中调用它,它会显示“top.submodule”吗?

【问题讨论】:

  • 我认为您可以在不借助模拟器特定功能的情况下通过 VPI 在 C 中实现您的功能来做到这一点 - 这是一种选择吗?
  • 是的,但我想避免编译任何额外的 C 代码。无论如何,我在模拟器系统功能($ nc_force/$ signal_force)之上构建了一个层来处理白盒信号,我也不想实现这些。无论如何,代码都会有很多`ifdefs。
  • 您是否找到任何适用于 VCS 的解决方案?
  • @Ari 我不使用 VCS。
  • 我今天在使用 "%m" 甚至 svGetScope() 使用 DPI-C 时遇到了完全相同的问题。如果有兴趣,请参阅下面的my comment 了解详细信息,如果您最终能够将当前范围作为字符串检索,请告诉我。谢谢!

标签: system-verilog


【解决方案1】:

这将是特定于工具的,并且需要额外的调试器信息来动态跟踪范围。 Modelsim/Questa 有$stacktrace,它将显示范围和文件名/行号

【讨论】:

  • 作为参考,在 VCS 中是 $stack
  • 有没有办法以编程方式获取它。说成字符串?
  • 如原始问题 cmets 所述,您可能可以使用 VPI 获取此信息。然后它可以以你想要的任何形式返回。
  • Cadence/Xcelium 也有$stacktrace;。但我和@Krishna 有同样的问题。有没有办法将该信息转换为 Verilog 字符串?如果使用 VPI,我可以看一个例子吗?我尝试使用 DPI-C 使用svGetScope(),但我面临与@TudorTimi 在原始问题中发布的相同限制。有什么方法可以使用 DPI-C?
  • DPI-C 本身不会有帮助。您需要遍历 LRM 37.41 Frames 中定义的 VPI 对象模型
【解决方案2】:

我用宏让它工作了:

`timescale 1ns/1ns

`define here_str $sformatf("%s::%0d %m", `__FILE__, `__LINE__)
`define here(DUMMY="") $display("I am here: %s", `here_str);

package some_pkg;

  function void some_function();
    $display("%m");
  endfunction

endpackage : some_pkg

module top;
  import some_pkg::*;

  initial begin

    some_function(); // Gives the wrong scope https://stackoverflow.com/q/24454395/1219634
    $stacktrace; // Does not return the stacktrace as a string value

    `here() // This works, but I would rather not use a macro as I
            // would like to make this portable in a package

    $finish;
  end

endmodule : top

在 Cadence/Xcelium 18.09-s014 上测试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-11
    • 2022-01-17
    • 1970-01-01
    • 2016-12-11
    • 2014-06-27
    • 1970-01-01
    • 2015-01-15
    • 1970-01-01
    相关资源
    最近更新 更多