【问题标题】:Can I get a call graph of C routines which are called via a DPI call from a system verilog testbench我可以从系统 Verilog 测试台获得通过 DPI 调用调用的 C 例程的调用图吗
【发布时间】:2015-04-13 10:56:01
【问题描述】:

我正在做一个验证项目。某些测试台组件是用 c 编写的,通过 DPI 调用,c 例程很广泛,我很难确定哪个例程由谁调用。一个纯 C 程序可能是我可以使用 cachegrind 来完成这项任务。在这种情况下,它不是 main() 正在执行调用,而是在事件中触发。有什么方法可以让我了解模拟期间完成的调用顺序?使用 Cadence Incisive 工具。

【问题讨论】:

    标签: c system-verilog system-verilog-dpi


    【解决方案1】:

    用准确的时间戳记录调用者和被调用者,然后比较

    【讨论】:

    • 您能否详细说明您的解决方案?通过记录,您的意思是在每个 C 函数中放置一个显示/打印语句吗?我不想去破解 C 组件,除非它是唯一的方法。
    • 如果更改系统verilog文件更容易,您可以在运行之前通过DPI调用记录调用的函数
    • C 组件的设置方式是它最初创建一个持续整个仿真时间的数据结构。基于事件通过 dpi 调用函数,每个函数本身可以调用许多其他函数来更新/创建数据结构。正如我所提到的,该组件是广泛的。单个 dpi 调用会导致 C 函数调用的数量,所以如果你说的是这样做的方法,那么我将不得不在所有函数/类构造函数等中打印,我希望避免这种情况。
    【解决方案2】:

    Google 的 "gperftools" 将为您提供性能热点的调用图,如果您将数据收集的阈值设置得足够低,您将获得尽可能多的详细信息:

    您还可以指示它在生成 graphviz 图形时专注于特定功能,以便磨练特定的代码路径。我个人在芯片的测试平台上使用过 google perftools。像冠军一样工作。

    【讨论】:

      猜你喜欢
      • 2011-12-02
      • 2011-07-08
      • 2013-03-28
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-09
      相关资源
      最近更新 更多