Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >vcs实用技巧

vcs实用技巧

作者头像
数字芯片社区
发布于 2022-09-19 03:30:10
发布于 2022-09-19 03:30:10
2.9K00
代码可运行
举报
文章被收录于专栏:数字芯片数字芯片
运行总次数:0
代码可运行

本节主要介绍: vcs常用选项 vcs仿真流程 vcs代码覆盖率 vcs综合后后仿 图一乐技巧

VCS是编译型verilog仿真器,VCS先将verilog/systemverilog文件转化为C文件,在linux下编译生成的可执行文./simv即可得到仿真结果。

vcs编译后,生成可执行二进制文件simv:执行./simv进行仿真;

vcs常用选项

  • vcs -help :列出所有vcs编译运行选项
  • -Mupdate :增量编译
  • -R:编译后立即执行仿真
  • -l:输出编译log的文件
  • -sverilog:支持systemverilog
  • +v2k:支持2001 verilog标准
  • -f:指定包含文件列表的filelist
  • -o:修改可执行文件simv文件名
  • -full64:支持64位模式下的编译仿真
  • -fsdb:dump fsdb波形
  • -ucli:在UCLI命令行模式下执行simv
  • -gui :DVE 界面运行
  • -work library:将设计库名称映射到接收vlogan输出的逻辑库名称work
  • -v lib_flie:搜索指定lib库文件
  • -y lib_dir:搜索指定lib库路径
  • +libext+ext:搜索具有指定文件扩展名的文件,如+libext+.v +.sv
  • +incdir+directory:搜索指定include文件路径
  • +define+macro:使用源代码中`ifdef所定义的宏或者define源代码中的宏
  • -parameters filename:将filename文件中指定的参数更改为此时指定的值
  • -timescale=1ns/1ns:设置仿真精度
  • -debug、debug_all、debug_pp:打开debug开关

vcs仿真流程

编写makefie脚本运行仿真:

makefie

执行下面编译仿真:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
make vcs
make sim

1.DVE图形界面打开

在编译时,使用 +vpdfile+filename 可以更改生成 VPD 文件的文件名,默认为vpdplus.vpd。

makefile中添加:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ALL_DEFINE = +define+DUMP_VPD
VPD_NAME = +vpdfile+simv.vpd

仿真文件tb.v中添加:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
`ifdef DUMP_VPD
initial begin
    $display("Dump VPD wave!");
    $vcdpluson();
    //$vcdpluson(0,tb);   //记录tb及其所有子模块的波形。
    //$vcdpluson(1,tb ); //只记录tb层的波形
    //$vcdpluson(2,tb ); //记录tb层和tb下一层的波形
end
`endif

在仿真完成后,生成了simv.vpd 这个文件,这个文件记录了仿真过程中所有信号的波形,

可以使用dve打开:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dve -vpd  simv.vpd  &

选中所有信号 --> 右键Add to Waves --> New Wave View

2.verdi图形界面打开

通常使用VCS生成fsdb格式的波形文件,将其导入另一个软件Verdi查看波形,代替DVE进行联合仿真;

vcs选项加上-fsdb,仿真文件tb.v中添加:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
initial begin
   $display("Dump fsdb wave!");
   $fsdbDumpfile("tb.fsdb");     
   $fsdbDumpvars;
end

仿真完成后执行下面命令打开verdi:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
make verdi

推荐查看verdi实用技巧fsdb实用技巧

代码覆盖率

在一个芯片验证的工程中,通常以代码覆盖率和功能覆盖率来体现验证是否完备;

功能覆盖率就是检查设计的功能是否完善,需要考虑很多不同的情况,是使用SV的重点内容。

代码覆盖率是检查代码是否存在冗余,检查所有的代码是否都已经执行,包括:行,状态机,翻转,条件,分支覆盖率等,这里只讨论代码覆盖率。

VCS在统计代码覆盖率的过程中,需要在编译和仿真命令上添加对应的开关选项,生成.vdb文件记录覆盖率情况。

再使用dve打开该文件进行查看覆盖率。

代码覆盖率选项

  • -cm <coveragetype> :打开对应类型覆盖率,例如 -cm cond+tgl+lin+fsm+path为统计所有覆盖率。
  • -cm_name:统计覆盖率文件名字。
  • -cm_dir:指定生成.vdb文件目录。
  • -cm_log+filename.log:记录仿真过程中log信息。
  • -cm_nocasedef: 在统计case语句的条件覆盖率时,不考虑default条件未达到的情况。
  • -cm_hier xxx.cfg:通过.cfg文件选择要查看覆盖率的模块或文件。

通过DVE查看覆盖率(方法1)

仿真完成后执行下面命令dve -covdir *.vdb &打开dve查看覆盖率:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
make dve_cov

代码覆盖到的为绿色,没有覆盖到的为红色:

通过URG查看覆盖率(方法2)

可以以文本格式或者网页格式显示覆盖率;

或者:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
urg -dir *.vdb -report urgReport

进入urgReport目录,执行下面命令打开网页版,查看覆盖率报告

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
firefox *.html

综合后仿真

推荐查看综合与时序分析

推荐查看后仿及反标

vcs门级网表仿真

当RTL功能仿真通过之后,DC工具中进行逻辑综合,在逻辑综合完成之后,需要对综合生成的网表再进行仿真验证。

综合后包含电路的实际信息,如映射的门电路信息、寄生参数、.v的网表、SDF标准延时信息、SDC约束、工作条件等信息。

后仿选项

后仿不需要的选项

带时序的后仿,一定要注意仿真器是否关闭了notimingcheck和nospecify的选项。

如果有-nospecify,那么SDF中的时序信息就反标不到仿真模型中;

如果有-notimingcheck,那么后仿过程中就不检查时序违例,后仿就失去了意义。

后仿添加选项
  • +neg_tchk:若要使用负延时检查,在编译后仿时必须包含+neg_tchk选项。如果省略此选项,VCS将所有负延迟更改为0。
  • -negdelay:用于SDF文件中有负延迟,如果省略此选项,VCS将所有负延迟更改为0。

sdf_annotate反标

使用$sdf_annotate将SDF文件反标到网表中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$sdf_annotate ("sdf_file"[, module_instance] [,"sdf_configfile"][,"sdf_logfile"][,"mtm_spec"] [,"scale_factors"][,"scale_type"]);

在tb中加载sdf文件,指定反标模块:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
`ifdef GLS_SIM
initial begin
  $sdf_annotate("../../netlist_sim/sdf/TOP.sdf",tb.U_TOP,,"sdf.log","TYPICAL");
end
`endif

修改makefie脚本运行仿真:

LIB_NET_FILE指定的是基本的工艺库单元, 因为网表文件netlist_TOP.v中包括综合后的由门电路和触发器等例化形成的verilog文件,所以需要基本的工艺库单元。

makefile

rtl仿真和netlist仿真结果对比:

可以看到netlist仿真的输出信号存在一些毛刺及延迟,与理想的没有延迟信息的rtl仿真不同。

rtl仿真

netlist仿真

图一乐技巧

display打印彩色字/背景

可在仿真中加入颜色显示case的情况,如:

红色:前景色31,背景色41:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$display("\033[31;41m Hello error!\033[0m");

绿色:前景色32,背景色42:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$display("\033[32;42m Hello pass!\033[0m");

黄色:前景色33,背景色43:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$display("\033[33;43m Hello warning!\033[0m");

涉及的颜色:

涉及的颜色

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数字ICer 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
芯片后仿及SDF反标
启用SDF反标。在file.sdf中指定的最小值、类型或最大值中的一种,在实例instance_name上进行反标。
数字芯片社区
2021/12/02
5.6K0
芯片后仿及SDF反标
VCS仿真VHDL VERILOG混合脚本「建议收藏」
IC小白有感于第一次参与的流片工程,总结了一下参与过程中的Makefile配置,以及一些环境配置,希望能够帮助到大家;
全栈程序员站长
2022/11/08
1.7K0
VCS入门教程(一)
接触Synopsys 家的VCS工具有一段时间了,在此简单分享下个人的学习笔记。供刚接触到数字前端设计的同学提供一些参考资料。在学校我们经常使用的verilog仿真软件都是quartus和modelsim,但是看一下一些公司的招聘要求,公司里使用的基本都是VCS。所以学习一下对找工作还是有帮助的。
数字芯片社区
2020/09/04
5.7K0
VCS入门教程(一)
VCS与Verdi的联合仿真
Verdi主要用于生成fsdb模型,同VCS使用的vcd文件相比,verdi使用的fsdb相当于vcd文件经过霍夫编码压缩之后的精简版,可用于查看fsdb波形并追踪RTL代码。
根究FPGA
2020/07/28
9.6K0
VCS与Verdi的联合仿真
VCS入门教程(三)
1.在进行功能验证时,给设计添加激励信号,查看仿真结果,需要考虑覆盖率的问题。覆盖率分为代码覆盖率(code coverage)和功能覆盖率(function coverage)。功能覆盖率就是检查设计的功能是否完善,需要考虑很多不同的情况,是使用System verilog的重点内容。代码覆盖率是检查代码是否存在冗余,检查所有的代码是否都已经执行,状态机所有的状态是否都有到达,检查 if else 和 case 条件语句的条件是否都有使用。防止一些不必要的代码浪费芯片面积,毕竟面积就意味着钱。我们这里只讨论代码覆盖率。
数字芯片社区
2020/09/04
2K0
VCS入门教程(三)
数字IC设计 | 入门到放弃指南
Verilog语言与软件语言最大的区别就是,因为它是用于描述电路的,因此它的写法是非常固定的,因为电路的变化是非常有限的。学习Verilog的时候,很多时候我们并不是在学习这门语言本身,而是学习其对应的电路特征,以及如何对这个电路进行描述。如果心中没有电路,那么你是不可能写好Verilog的。
数字芯片社区
2022/04/06
2.6K0
数字IC设计 | 入门到放弃指南
VCS入门教程(四)
本文主要介绍VCS门级网表的仿真。当我们把所写的RTL进行的功能仿真通过之后,便输入到 Design Compiler工具中进行逻辑综合,逻辑综合的结果便是RTL代码转化为由与、或、非等门电路和触发器组成的电路,称为门级网表(netlist)。门级网表中便包含了电路的实际信息,例如逻辑门单元的扇入扇出系数,延迟等等。因此在逻辑综合完成之后,需要对网表再进行仿真验证,防止出现意想不到的错误。
数字芯片社区
2020/09/04
2.2K0
VCS入门教程(四)
【手把手系列】:芯片设计中的Makefile简明教程
Makefile可以根据指定的依赖规则和文件是否有修改来执行命令。常用来编译软件源代码,只需要重新编译修改过的文件,使得编译速度大大加快。
ExASIC
2022/04/28
1.9K0
手撕distributed ram类型同步FIFO
同步fifo设计的核心在于full与empty信号的控制,今天看网上发布的部分verilog代码,虽然可以完成读写操作,但是存在部分问题,就是最后一个数据的读取问题,该问题的导致是因为full与empty信号的控制失误。
根究FPGA
2020/08/18
1.1K0
fsdb实用技巧
将clk==1&rst==1&cnt_flag==1时对应的pwm_cnt数据写到fsdb.txt文件中;
数字芯片社区
2021/12/15
5.4K0
fsdb实用技巧
vcs+verdi仿真Verilog代码
我们以一个简单的加法器为例,来看下如何用vcs+verdi仿真Verilog文件并查看波形。
猫叔Rex
2024/05/21
4980
vcs+verdi仿真Verilog代码
代码覆盖率是什么?如何查看?
覆盖率分为代码覆盖率和功能覆盖率,代码覆盖率常用来作为测试好坏的指标,包含:行覆盖率、条件覆盖率、fsm状态覆盖率、翻转覆盖率和分支(branch)覆盖率5种。
根究FPGA
2020/08/10
3.7K0
VCS入门教程(二)
首先我们在编写verilog模块的testbench时,可以在里面使用一些verilog的系统函数,在运行simv文件跑仿真时,进行一些控制。例如:
数字芯片社区
2020/09/04
3.5K0
VCS入门教程(二)
极说・IC圆桌派复盘笔记之闲话DV
说实话,我们都希望疫情可以很快过去,但真不知道何时能过去,焦虑和恐慌仍然笼罩在每个家庭的心头,2/10号复工,几家欢喜几家愁,自上班以来就没放过这么长的假,但苦了企业主们,工资照发,房租照缴,这些都是成本。
老秃胖驴
2020/02/17
1.6K0
极说・IC圆桌派复盘笔记之闲话DV
摆脱Vivado单独建仿真环境的终极解决方案
)中就曾提到,隔行如隔山,做芯片的人永远无法理解只做FPGA样机的人在某些情况下不做仿真就直接上板的做法,非芯片设计出身只做FPGA样机的人也不知道这个世界上还存在更为高效的Verilog或VHDL语言的仿真工具和仿真方法,也不理解为了把一个芯片做到极致,必须严格要求代码规范的做法。为了能够使用上一篇文章中高效的Verdi或者SimVision仿真调试工具,脱离Vivado等仿真工具单独搭建仿真环境的就成为比较急迫的需求了。
网络交换FPGA
2019/10/29
1.9K0
摆脱Vivado单独建仿真环境的终极解决方案
芯片设计中的Makefile简明教程
Makefile可以根据指定的依赖规则和文件是否有修改来执行命令。常用来编译软件源代码,只需要重新编译修改过的文件,使得编译速度大大加快。
ExASIC
2020/07/16
2K0
芯片设计中的Makefile简明教程
验证仿真提速系列--认识“时间”与平台速度定量分析
仿真时间(simulation time)
IC验证
2022/02/28
2.3K0
验证仿真提速系列--认识“时间”与平台速度定量分析
VCS门级仿真系列文章之sdf文件和$sdf_annotate
SDF文件(Standard Delay File)提供了延迟信息表示的标准ASCII文件格式,VCS支持版本1.0、1.1、2.0、2.1和3.0。
AsicWonder
2020/06/12
10.3K0
VCS门级仿真系列文章之sdf文件和$sdf_annotate
【仿真技巧】 0:00 VCS+VERDI+reverse=败者食尘!!
假设一种场景,在调试环境的时候,运行到15min的时候,环境出现bug,需要去debug。也许错误的第一现场并不是15min的时候,可能在14min30s-15min之间,那么如果正向执行就需要14min30s以上。所以这个时候如果能够直接反向运行到14min30s,就可以节省很多时间。就像jojo的奇妙冒险中吉良吉影的招式,败者食尘一样,逆转时间
空白的贝塔
2021/09/08
1.5K0
【仿真技巧】 0:00 VCS+VERDI+reverse=败者食尘!!
当我们做后仿时我们究竟在仿些什么(补充)
自从上次关于后仿的文章发布以后,又陆续收集到了一些关于后仿的其它小技巧。这次整理出来作为前文的补充,希望对大家有所帮助。文中提到的仿真器默认是VCS.
icsoc
2020/07/06
1.3K0
相关推荐
芯片后仿及SDF反标
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验