VCS elab选项 -simprofile功能

article/2025/9/7 20:34:16

#废话不多说,直接上干货

1.简介

VCS提供的simprofile功能是用于分析仿真过程中的CPU time和machine memory消耗情况,可以协助定位一些垃圾代码写法导致的仿真资源消耗过大问题;本篇内容包含,应用此功能的必要工具准备、makefile代码写法、仿真结束时simprofile_REPORT报告的结果分析策略,以及实战应用举例。

也许你在观看此博客之前,会有如下问题:

(1)我的仿真时间 & 内存消耗超出了预期,我该怎么定位问题?

(2)simprofile能做到哪种程度?是否可以具体定位到某行代码?

(3)仿真过程中,耗费资源的具体行为都有哪些?

(4)我是一名DE/DV,这个功能对我有用吗?

(5)我现在就要试一下这个功能,怎么快速上手操作?

希望能够在看完博客后,解决你的疑惑,帮助到深受垃圾代码折磨的ICer们(如果你觉得有用,请点赞此博客,谢谢)。

2.准备工作

2.1 PYTHON准备

VCS官方文档中表明,需要python的最低版本为python 2.3,用于产生HTML reports;(笔者应用的是python 3.7.3)

2.2 VCS准备

VCS版本最好2023及以上;(笔者应用的是V-2023.12-SP2)

2.3 HTML查看工具准备

Firefox或其他工具;(笔者用的是Mozilla Firefox 115.12.0esr)

Firefox需要做如下配置的更改:

(1)地址栏键入:

(2)接受风险提示:

(3)搜索 security.fileuri.strict_origin_policy,将其值改为faulse,并刷新firefox;

3.makefile关键代码

3.1 编译 & elab & 仿真流程

如果你采用2步法编译&仿真,则需要在makefile中加入如下编译 & 仿真指令:

vcs -simprofile -f file_list.fvcs /xxx/xxx/simv -simprofile time -l vcs_run.log +ntb_random_seed=1234

如果你采用3步法编译&仿真,则需要在makefile中加入如下编译 & elab & 仿真指令:

vlogan -lca -kdb xxxx(anycode you want) -f file_list.fvcs -simprofile xxxxvcs /xxxx/xxxx/simv -simprofile time

需要注意的是,如果已经存在了simv/simv.daidir/csrc文件,则需要提前删除这些文件,增量式开发暂不支持;

其中,仿真阶段的simprofile命令的使用很重要,该命令的标准应用格式如下:

simv -simprofile [argument] -simprofile_dir_path [pathname]

[argument]可配置选项为:time、mem、fastmem、noprof、noreport;

time:表示收集CPU时间消耗分布情况;

mem:表示收集机器内存使用分析情况;

fastmem:当你的design很大时,为了尽快收集mem profile时,采用该选项;

noprof:当你在编译阶段加了-simprofile命令时,但不想在仿真阶段收集profile并生成数据库,采用该选项(不建议编译时加入-simprofile但仿真时不加);

noreport:每次仿真结束时,若不添加该选项,则会自动产生report报告;

3.2 仿真后处理流程

当你的仿真选项如下时:

simv -simprofile time -simprofile_dir_path ./profile_dir

则每次仿真后,VCS会将产生的profile相关数据库存放于./profile_dir内,并生成如下目录及文件:

simprofile_dir/profileReport/profileReport.html/profileReport.txt/profileReport.json

其中profileReport.html可直接用firefox打开;

若你的仿真选项如下时:

simv -simprofile noreport -simprofile_dir_path ./profile_dir

4.报告解读

4.1 TimeSummary信息总览

TimeSummary能够提供的是最高层次的仿真耗时信息,如下所示,该信息包括:Constraint时间、Kernel时间、Verilog时间、PLI/DPI/C时间等关键信息:

(1)Constraint时间:顾名思义,constraint时间列出了仿真过程中所有约束求解器工作时所占用的CPU Time;

(2)Verilog时间:verilog代码耗时,包含module耗时、interface耗时、功能覆盖率耗时等;

(3)Kernal时间:核心仿真引擎总耗时,包含事件调度(scheduler)、设计仿真维护(Design Elab)、仿真时间推进(Hsim_Elab)、垃圾回收(Garbage collection);

(4)PLI/DPI/C时间:一些PLI/DPI接口调用时间及C代码执行时间,(其中dump_wave时间也统计于此);

4.2 Time Constraint Solver View

最耗费CPU Time的Solver求解器细节,可具体到某行代码,某个pkt.randomize();

4.3 Time Module View

最耗时的Module,其中耗时<0.5%的模块不做统计;

4.4 Time PLI/DPI/C View

最耗时的PLI/DPI/C调用,其中耗时<0.5%的模块不做统计;

4.5 UVM-Time Caller

UVM环境各个phase执行时间统计,可详细展开查看;

4.6 Time Coverage View

顾名思义,功能覆盖率时间消耗统计,不展开了;

5.实例;

5.1 解决AXI VIP写操作仿真耗时过大问题

问题描述:使用VIP仿真时发现,对于AXI写操作,每当环境在产生W CH激励时,CPU time都会超长,从而导致仿真时间大大增加,但却难以定位VIP内部问题;

具体波形如下:W CH发送数据这一段,仿真时间只有短短的2688ns,但CPU Time长达5~8min;

本用例中发送了这种长度的wr包3~4次,结果就是导致整个用例跑下来的时间长达15min;

解决方案:打开simprofile功能,跑仿真,profile_dir内产生了profileReport.html报告如下:

报告提示我,Constraint消耗仿真资源太大了,好那就去看Time constraint章节:

提示AXI VIP svt_axi_base_master_common.svp的第9552行代码疯狂调用了112512次(笔者发现是每个axi clk调用一次),总共耗时CPU Time 843s,好家伙,一个15分钟的case,被这行垃圾代码坑了14分钟(这难道就是Synopsys VIP的含金量吗)

已经定位到原因了,VIP在IDLE时候W CH可以配置随机值或者X态/Z态等,如果选择随机值,在idle时候驱动写数据进行随机,会导致VIP每个clk疯狂调用randomize(),改成idle时候驱动X态即可。

重新编译 & 仿真:

是的,你没有看错,原来15min的用例,只需要27s就可以跑完了,速度提升30倍。就这样简单粗暴!

再看下summary view,发现VERILOG运行占据78%的时间,环境其他只占用了22%,debug成功!


http://www.hkcw.cn/article/KvZlpsFTei.shtml

相关文章

30万数据 动态查出用户拥有对应 skuid 数量

项目场景&#xff1a; 提示&#xff1a;30万数据 动态查出用户拥有对应 skuid 数量&#xff1a; 如 skuid1 skuid2 skuid3 skuid4 … 表结构如下 CREATE TABLE eb_nft_user (id int(10) unsigned NOT NULL AUTO_INCREMENT,skuId varchar(255) NOT NULL DEFAULT COMMENT 商品…

快递物流查询接口如何用C#进行调用?

一、什么是快递物流查询接口 支持国内外1500快递公司跟踪服务&#xff0c;包括顺丰、圆通、韵达等主流快递公司。快递物流查询接口为连接电商平台、物流企业与终端用户之间的桥梁&#xff0c;正在发挥着不可替代的作用。它不仅帮助用户实时掌握包裹动态&#xff0c;也为物流企…

【C语言】函数指针及其应用

目录 1.1 函数指针的概念和应用 1.2 赋值与内存模型 1.3 调用方式与注意事项 二、函数指针的使用 2.1 函数指针的定义和访问 2.2 动态调度&#xff1a;用户输入驱动函数执行 2.3 函数指针数组进阶应用 2.4 函数作为参数的高阶抽象 三、回调函数 3.1 指针函数…

第十三章:预处理

预处理功能是C语言特有的功能,可以使用预处理和具有预处理的功能是C 语言和其他高级语言的区别之一。预处理程序包含许多有用的功能,如宏定义、条件编译等,使用预处理功能便于程序的修改、阅读、移植和调试,也便于实现模块化程序设计。 通过本章的学习,您可以: 1、掌握…

9.4 Q1|复旦大学CHARLS发文 | 老年人肌肉减少症和轻度认知障碍

1.第一段-文章基本信息 文章题目&#xff1a;Sarcopenia and mild cognitive impairment among elderly adults: The first longitudinal evidence from CHARLS 中文标题&#xff1a;老年人肌肉减少症和轻度认知障碍&#xff1a;来自CHARLS 的第一个纵向证据 发表杂志&#x…

python h5py 读取mat文件的<HDF5 object reference> 问题

我用python加载matlab的mat文件 mat文件&#xff1a; 加载方式&#xff1a; mat_file h5py.File(base_dir str(N) _nodes_dataset_snr- str(snr) _M_ str(M) .mat, r) Signals mat_file["Signals"][()] Tp mat_file["Tp"][()] Tp_list mat_fil…

【数据结构】图论核心算法解析:深度优先搜索(DFS)的纵深遍历与生成树实战指南​

深度优先搜索 导读&#xff1a;从广度到深度&#xff0c;探索图的遍历奥秘一、深度优先搜索二、算法思路三、算法逻辑四、算法评价五、深度优先生成树六、有向图与无向图结语&#xff1a;深潜与回溯&#xff0c;揭开图论世界的另一面 导读&#xff1a;从广度到深度&#xff0c;…

扫地机产品异物进入吸尘口堵塞异常检测方案

扫地机产品异物进入吸尘口堵塞异常的检测方案 文章目录 扫地机产品异物进入吸尘口堵塞异常的检测方案一.背景二.石头的音频异常检测的方案2.1 音频检测触发点2.1.1时间周期2.1.2根据清洁机器人清扫模式或清扫区域污渍类型,即当清扫模式为深度清洁模式 或清扫区域污渍类型为重度…

【Mini-F5265-OB开发板试用测评】RT-Thread的移植(调通串口+LED)

前言 近期&#xff0c;笔者有幸获得灵动微MM32F5265开发板的体验资格。MM32F5260搭载了arm china "Star-MC1 内核"处理器&#xff0c;拥有高性能&#xff0c;主打家电和工业等高可靠性应用领域。 总结一下&#xff0c;有以下亮点&#xff1a; 本土团队打造&#x…

MySQL8.4组复制

https://dev.mysql.com/doc/refman/8.4/en/group-replication.html 1 什么是组复制 组复制主要解决了传统异步复制主机宕机时可能造成主从节点数据不一致问题MySQL Group Replication&#xff0c;简称MGR将原有的gtid复制功能进行可增强&#xff0c;支持单主模式和多主模式组复…

【笔记】Trae+Andrioid Studio+Kotlin开发安卓WebView应用

文章目录 简介依赖步骤AS(Andriod Studio)创建项目AS创建虚拟机TRAE CN 修改项目新增按键捕获功能 新增WebViewWebView加载本地资源在按键回调中向WebView注入JS代码 最终关键代码吐槽 简介 使用Trae配合Andriod Studio开发一个内嵌WebView的安卓应用, 在WebView中加载本地资源…

kibana解析Excel文件,生成mapping es导入Excel

一、Excel转为CSV格式 在线免费网站&#xff1a;EXCEL转CSV - 免费在线将EXCEL文件转换成CSV (cdkm.com) 二、登录kibana 点击左边菜单栏找到Machine Learning&#xff0c; 进入后上面菜单选择Data Visualizer&#xff0c;然后上穿转好的csv格式的Excel 点击导入输入建立的m…

4d毫米波雷达开源算法4DRadarSLAM运行

1.开源代码和论文 &#xff08;1&#xff09;论文名称&#xff1a; 4DRadarSLAM: A 4D Imaging Radar SLAM System for Large-scale Environments based on Pose Graph Optimization &#xff08;2&#xff09;开源代码国内下载地址 https://gitcode.com/gh_mirrors/4d/4DRada…

安卓手机照片在这个目录/storage/emulated/999/DCIM/Camera下的导出解决方案

这里写自定义目录标题 背景解决方案导出过程 导出的成功照片展示 背景 想导出手机的相册照片,发现部分照片无法导出 &#xff0c;原因是在文件管理根本找不到这个目录/storage/emulated/999/DCIM/ 。 照片位置截图&#xff1a; 对应的安卓手机的文件管理截图如下 发现没有…

C++进阶--C++11(04)

文章目录 C进阶--C11&#xff08;04&#xff09;lambdalambda表达式语法捕捉列表lambda的应用lambda的原理 包装器functionbind 总结结语 很高兴和大家见面&#xff0c;给生活加点impetus&#xff01;&#xff01;开启今天的编程之路&#xff01;&#xff01; 今天我们进一步c…

动态设置微信小程序页面标题(navigationBarTitleText属性)

前言&#xff1a; 最近在公司进行小程序研发的时候&#xff0c;产品给出了一个动态加载页面标题的需求&#xff0c;经过调研之后将结果在这里与各位伙伴进行分享。 代码展示&#xff1a; 在.json文件中进行初始配置&#xff1a; { "usingComponents": {}, &q…

PostgreSQL数据库配置SSL操作说明书

背景&#xff1a; 因为postgresql或者mysql目前通过docker安装&#xff0c;只需要输入主机IP、用户名、密码即可访问成功&#xff0c;这样其实是不安全的&#xff0c;可能会通过一些手段获取到用户名密码导致数据被窃取。而ES、kafka等也是通过用户名/密码方式连接&#xff0c;…

基于python 将图像上同一行距离相近的矩形框融合

import os import cv2 import numpy as npdef get_files(path):""" 获取指定路径下所有文件名称 """files []for filename in os.listdir(path):if os.path.isfile(os.path.join(path, filename)):files.append(filename)return filesdef split…

拉取gitlab项目

一、下载nvm管理node 先下载配置好nvm,再用nvm下载node 下载链接&#xff1a;开始 下载nvm - nvm中文官网 情况&#xff1a;npm i 下载依赖缓慢&#xff0c;可能是node版本不对&#xff0c;可能node版本太高 可能得问题&#xff1a;使用nvm 下载低版本的node时&#xff0c;…

Opencv4 c++ 自用笔记 01 Mat类

Mat类 Mat类用来保存矩阵类型的数据&#xff0c;包括向量、矩阵、灰度、通道数。主要分为两部分&#xff0c;矩阵头和矩阵指针。 &#xff08;单通道为灰度图像&#xff0c;3通道或4通道为彩色图像&#xff09; 矩阵头中包含矩阵形状、存储方法、地址、引用次数等。矩阵指针…