vcs仿真资源分析(2)

vcs工具的仿真资源分析(2)

Unified Simulation Profiler是vcs工具自带的一个专门进行性能分析的脚本工具,能够在 VCS 仿真过程中监控和报告DUT(Design Under Test)和TB(Testbench)的CPU使用率、内存使用情况以及仿真性能指标。通过这些数据,用户可以识别伤真瓶颈并采取措施优化仿真流程。

主要功能

  • 性能分析:
    • 分析DUT和Testbench的CPU使用情况
    • 监测内存消耗,帮助识别内存使用高峰。
    • 提供仿真时间的分布信息,包括不同模块的执行时间
  • 资源优化
    • 识别仿真过程中资源占用较高的部分
    • 帮助用户优化代码或调整测试环境以提高效率
  • 瓶颈定位
    • 找出仿真中的性能瓶颈,例如某些模块或代码段导致的资源消耗过高
  • 提供详细的统计报告,便于进一步分析
  • 仿真报告
    • 输出可视化的统计数据,方便用户理解和对比
    • 可以生成详细的日志文件供后续分析

使用方法

主要步骤:

  1. 编译选项增加 -simprofile
  2. 仿真选项增加-simprofile args
  3. 本地使用分析脚本 proprpt,根据仿真过程生成的库文件生成分析报告
  4. 分析生成分析报告文档

选项simprofile及其参数

编译和仿真真时,如果执行完步骤1、2,会在./simv的同层路径下增加如下三个文件或目录:

  • simprofile_dir:VCS用于提供给后续profrpt脚本进行分析的仿真信息数据库,重要!!!
  • profileReport:
  • profileReport.html:告知总的仿真时间和数据库所在位置
  • 默认会生成一个txt的汇总文件,生成的汇总文件并不会进行rename和递增处理

步骤2仿真选项-simprofile的args主要分为 time、mem、noprof、noreport,其中,time和mem分别代表CPU时间分析信息和机器内存分析信息。

noprof不会生成在仿真阶段分析,避免影响性能

noreporter只是不会生成分析结果

注意事项:

  • 如果已经存在./simv.daidir等文件目录,第一次执行simprofile不会生效
  • 避免编译时增加了-simprofile而仿真时忽略了-simprofile,否则会影响仿真速率而不自知
  • 避免同时收集CPU时间数据和机器内存数据
  • 建议在仿真阶段使用simprofile_dir_path path_name方式将生成的文件单独其他路径
  • 建议在仿真阶段使用simprofile_report name重命名
  • 如果路径中已经存在了分析文件,会自动rename方式并整数递增处理

脚本proprpt

脚本执行命令的格式如下:

profrpt simprofile_dir -view view1[+view2[+...]]
[-h|-help][-format text|html|ALL][-output <name>]
-filter percentage][-snapshot [delta|incr|delta+incr]]
[-timeline [dynamic_memory_type_or_class +...]]

视图类型说明

必须通过-view指定生成报告的类型,在这里称为视图类型!

CPU time views:

参数 说明
time_summary 摘要视图
time_inst 按照实例视图
time_mod 指定模块分析
time_constr 按照构造进行分析
time_solver 约束求解视图分析
time_callercallee 指定用于CPU时间信息的调用者/被调用者视图
time_all 所有时间类型的视图

MEM views:

参数 说明
mem_summary 摘要视图
mem_inst 实例视图
mem_mod 模块视图
mem_constr 构造视图
dynamic_mem 动态存储峰值视图
dynamic_mem+stack 动态内存峰值视图和机器内存堆栈跟踪。堆栈跟踪可以帮助您确定哪些调用者消耗了最多的内存
mem_solver 约束求解视图分析
mem_callercallee 指定用于MEM信息的调用者/被调用者视图
mem_all 所有存储类型的视图

当使用args=all,及收集所有视图.

内存快照机制

profrpt simprofile_dir -view view1[+view2[+...]] -snapshot [delta|incr|delta+incr]

在性能分析工具中,snapshot(快照)通常是指在某个特定时间点捕获的系统状态或数据的副本。它可以帮助用户记录和观察系统或数据在特定时刻的状态变化.

此处分析的对象是内存.当声明后,脚本分析的过程中会生成一系列动态存储大小的报告.
参数delta代表一个数字,默认在内存发生delta变化(增加或减少)都会进行快照,当声明incr只在内存增加时快照,。

时间线机制

profrpt simprofile_dir -view view1[+view2[+...]] -timeline [dynamic_memory_type_or_class+...]

-timeline选项用于指定写入*时间线报告**

在-timeline选项之后包含的关键字参数或子选项用于指定时间线报告中SystemVerrilog动态内存的类型。也可以通过名称指定一个SystemVerilog类,其动态内存将包含在时间线报告中。

dynamic_memory_type_or_class 说明
vcs_ST 关键字;string dynamic memories
vcs_ET 关键字;event dynamic memories
vcs_DA 关键字;dynamic arrays
vcs_SQ 关键字;queues
vcs_AA 关键字;associative arrays
class 类名
a11 以上所有类型

当忽略子参数时,default=all

记录和查看内存与堆栈跟踪

在systemverilog中,常见仿真实现,内存实现分为三种:

  • 堆栈(Stack):用于存储局部变量和函数参数,生命周期短,随着函数调用的结束而销毁。例如:局部变量、非动态数组,通过automatic声明的task等。

  • 堆内存(Heap Memory):用于动态分配的对象,生命周期长,直到手动释放或仿真结束。例如:uvm_object、class类型通过new创建的实例。

  • 静态内存(StaticMemory):用于存储编译时静态分配的实体,生命周期贯穿整个仿真或设计运行。例如:module、interface类型,以及全局变量。

proprpt simprofile_dir -view dynamic_mem+stack

累计视图

显示来自两个或多个数据库的累积视图。能够进行累计显示的视图主要包括摘要视图、模块视图、实例视图和构造视图。

实现方法:

  1. 编写一个文件,列出概要数据库,文件格式如下:
//filename = time_db_list
simprofile_dir
simprofile_dir.1
simprofile_dir.2

2.运行profrpt概要报告生成器,而无需在命令行中输入概要数据库。相反,使用-f选项指定列出数据库的文件

profrpt -view time_all -f time_db_list -output accum_time

比较视图

生成比较来自两个不同仿真的两个概要数据库结果的报告,需要包含-diff选项,并在profrpt命令行中输入两个数据库。

profrpt -view ALL -diff simprofile_dir simprofile_dir.i1 -output diff
posted @ 2025-07-12 15:53  justifice  阅读(211)  评论(0)    收藏  举报