vcs常用断言debug选项,以及断言的注意点

断言操作符介绍 本文主要针对断言操作夫做了简单总结 阅读详情
AI摘要

本文介绍在仿真环境中如何利用断言进行调试,包括控制断言的开关、限制打印次数、采样函数的应用等高级技巧。

1.compile添加选项-assert enable_diag之后对应的下列run的选项才能使用:

• -assert success (默认只打印assert fail的log,加上此选项后assert success的选项也会打印)
• -assert maxsuccess=N(assert success的最大打印次数)
2.compile添加选项-assert enable_hier之后对应的下列run的选项才能使用:
• -assert hier (可以enable和disable指定的assert)
• -assert maxfail=N (assert fail最大打印次数)
• -assert finish_maxfail=N(如果assert fail次数超过N就就结束仿真)
3.dump断言波形:

对应dump_fsdb_vcs.tcl需要加上fsdbDumpSVA来加入对断言波形的dump。

加上fsdbDumpSVA这样我们可以在波形中直接拉出assert的波形,此波形上会显示断言开始和失败的位置,我们也可以使用ASSERTION DEUBG mode查看断言的相关统计。比如下图中的assert1:

4.关于-assert hier选项的使用:

A.-assert hier后面需要跟一个文件,文件里面写上对于各个断言的使能控制。如果不使用这个选项,默认所有断言是使能的,这样可能打印出来信息较多,不利于我们debug。那么我们就可以使用此选项来disable某些断言。比如下面代码:

B.上面代码中申明有两个断言,那如果我们只希望debug其中as_inst1,那么我们可以在makefile中加上-assert hier选项:

assert.txt中这样写(注意层次要写到断言,不能只到断言所在的module。除了+/-assert方式写之外,也能按照+/- module(比如在assert.txt写-module as,则两个断言都会disable),+/- tree(比如在assert.txt写-tree test.as_inst2,则断言2会被disable,注意这里是写到断言所在module)方式写,另外可以用//来注释):

 make之后log如下,看到只会打印as_inst2断言:

C.注意如果assert.txt中,只写+as_inst1的控制不对as_inst2做控制,那么默认as_inst2是关闭的。如下:

 log:

 D.注意如果assert.txt中,只写-as_inst1的控制不对as_inst2做控制,那么默认as_inst2是打开的。如下:

log:

E.但是如果assert.txt文件是空的(没有内容)那么会报错:

F.如果想把所有assert都加上,又不想assert.txt又不能为空,那么可以在assert.txt中只写一句对不存在assert的控制。如下:inst4是不存在的(对其+/-都可以达到目的)

 log:

G.也可以通过tree来跨层次整个控制一个module中assert。

比如我们将testbenchd代码改为,具有多层次的assert:testbench下有as_in_as_in_as,里面包含有一个断言as_inst5,并且还包含一个as_in_as,as_in_as中又有一个assert as_inst4:

assert.txt:

 log:可以看到module as_in_as_in_as下所有assert都打开了。

即使断言没有名字,使用tree的方式也可以控制,比如在as_in_as_in_as中增加一个always控制的断言(assert.txt不变):

 log中也会显示这个没有name的断言的结果:

5.注意断言的采样是采的之前的时刻,但是注意clk和disable iff是实时的。比如下面这个例子。

波形:

 如下面的log,clk和disable iff是实时的,所以断言的起始点,clk都是上升沿,且sig0都是1,不用往前一个time看,但是sig1采样是往前看的,比如20000ps时,断言被触发,此时sig1为上沿,但是往前此时刻之前看sig1为0,所以断言失败。比如50000ps是断言被触发,此时sig1为0,但是往此时刻之前看,前一个时刻后面部分sig1也为0,所以断言失败。但是在60000ps时,断言被触发,此时sig0为下降沿1->0,往前此时刻之前看,sig1为1,所以断言成功。

由此可以看出断言的采样是采的之前的时刻,但是注意clk和disable iff是实时的。

 6.使用disable iff和蕴含符|->,|=>可以减少比必要的报错,但是disable if是实时的,这里指的是如果disable if后面有延时,在延时后如果disable iff条件不满足,断言仍然不会执行disable iff后面的语句。比如,我们在上面代码的断言中加一个##1的延时:

 断言波形会是这样:

如下log,在0和20000这里按照常理iff(~sig0)=0断言虽然会触发,但是##1延时一个周期后也就是在10000和30000时iff(~sig0)=1,此时断言由被disabable,所以断言最终是被disable的:

 但是如果把disable if改为蕴含语句,那么则不会出现这种情况,比如:

 波形:

如下log,0时刻没有断言触发,这个可能是因为往前采样0时刻之前状态不确定(但是disable iff是实时的,所以上面那种情况可以从0时刻开始)。比如10000ps时刻采样此时往前看sig0(注意由于没有使用disable iff,所以sig0往前采样,不再看实时的)为1,所以断言触发,一个周期后采样sig1为0(sig1也是往前看),所以断言失败。50000时刻没有断言也是因为sig0往前采样为0,所以断言没有触发:

7.断言中的延时##1这个是按照断言中所使用的时钟实时变动的。

比如下面有两个clk:

 两个##1,用的时钟不同,即使其中一个clk比如clk1整个仿真过程中会变化,比如周期是变化的,那么对应##1也会跟着变化。

8.断言中采样函数。

$rose是判断时钟采样信号前后是否存在0->1/x->1/z->1的变化。

$fell是判断时钟采样信号前后是否存在1->/x->0/z->0的变化。

$stable当表达式在连续两个采样时钟周期保持不变时返回真。

$past用于检查当前表达式前一个时钟周期(注意不指定number_of_ticks,默认指向前一个时钟)值是否为真,如果为真则$past返回为真。格式$past(expression[,number_of_ticks]);

例1 $rose

 波形:

如下log,在10000ps时断言触发,在此时刻$rose往前看,存在0时刻sig0从不定态到1的变化,所断言触发,或者如果在0-10000ps中存在到1的变化也会触发,见下面一个波形图。30000ps,$rose往前看,20000ps时存在sig0从0到1的变化,所以断言触发,同样60000ps也一样:

 

9.$assertoff,$assertkill,$asserton。

10.比较大的断言,可以拆分成小断言分别check。

VCS仿真中用好断言Debug选项,让波形里的SVA不再‘隐身’(附FSDB配置) 本文详细介绍了在VCS仿真中如何高效使用断言Debug选项,解决SVA在波形中不可见的问题。通过`-assert hier`实现断言分级管控,结合`fsdbDumpSVA`捕获断言触发前后的完整上下文波形,提升调试效率。文章还分享了避免采样时序陷阱的实用技巧,帮助工程师在芯片验证中快速定位问题。 阅读详情

相关推荐

#VCS#关于 <-debug*> 和 <-debug_access*> 切记晕头转向

为了仿真性能的提高,我们可以在编译时使用-debug_access+选项,来更好地控制仿真中调试的功能。与-debug_pp选项相比,-debug_access选项允许存储VPD和FSDB文件以进行后处理调试,并减少不必要的调试选项。可以使用-debug_access+指定其他选项,以有选择地启用所需的调试功能。 只启用所需的调试功能,即可优化仿真性能。语法: debug_access(+<option>)* -debug_access支持的选项: 选项 描述 r The -d

那么菜的博客 8399

vcs仿真教程(查看断言)

vcs仿真教程(查看断言)

qq_33300585的博客 1731

VCS仿真中用好断言debug选项,让你的验证效率翻倍(附避坑指南)

本文深入探讨VCS仿真中断言调试的高效方法,重点解析编译选项配置、断言控制文件编写及波形分析策略。通过分层调试方案和精准过滤策略,有效解决日志爆炸、定位困难等痛点,显著提升验证效率。特别推荐使用`enable_hier`和`enable_diag`选项优化断言调试流程。

weixin_26800111的博客 372

ASSERT的用法

ASSERT(   pcage!=   NULL   )     ASSERT(   pcage->IsKindOf(   RUNTIME_CLASS(   CAge   )   )   )     编译过程中判断语句的成功(合法)函数是一种断言语句。主要用来调试程序就是说Debug(调试)的时候,ASSERT(   *******)   这句要运行,         但是到了releas

jianxiong8814的专栏 1578

VCS仿真器高级选项全解析:从覆盖率统计到调试技巧

本文深入解析Synopsys VCS仿真器的高级应用,重点探讨如何通过分层覆盖率控制(-cm_hier)、条件覆盖优化(-cm_cond)及数据库管理实现精准验证。同时,详细介绍了从基础调试选项(-debug_pp)到精细化控制(-debug_access)的实战技巧,以及编译性能调优和高级问题定位方法,帮助工程师显著提升芯片验证效率与质量。

s3t4u的博客 1108

VCS编译选项深度解析:-debug_access+all、-kdb这些参数到底在做什么?(以UVM仿真为例)

本文深入解析VCS编译选项-debug_access+all和-kdb在UVM仿真中的核心作用,揭示VCS与Verdi协同工作的底层机制。通过详细的技术分析和最佳实践,帮助验证工程师优化调试流程,提升仿真效率。特别关注调试信息流拓扑、性能平衡技巧以及跨工具版本兼容性等关键问题。

weixin_30859423的博客 496

verdi/vcs常用debug功能

记录verdi中常用的功能,以便自查使用

qq_40571921的博客 1万+

VCS仿真排雷指南:从`-debug_all`到`-fsdb`,这些选项你真的用对了吗?

本文深入解析VCS仿真中常用命令行选项的正确使用方法,从`-debug_all`到`-fsdb`,揭示其工作原理与最佳实践。通过对比不同调试选项的优劣、波形生成工具的选择以及大型设计仿真优化技巧,帮助工程师提升仿真效率与调试效果。特别针对`-fsdb`配置流程和并行编译等实用技巧进行详细说明,是VCS仿真排雷的必备指南。

weixin_30905133的博客 428

VCS:三步法的仿真流程

本文介绍了VCS仿真工具的三步流程:分析(Analysis)、展开(Elaboration)和仿真(Simulation)。分析阶段使用vhdlan或vlogan命令检查语法错误并生成中间文件;展开阶段用vcs命令构建层次结构并生成可执行文件;仿真阶段通过simv文件运行,支持调试和优化两种模式。文章详细说明了各阶段的命令选项和参数,包括文件处理、库管理、调试功能等,并通过具体示例解释了编译单元和逻辑库的概念及其在解析模块时的优先级差异。

保持终身学习的能力,温故而知新 6513

VCS仿真选项深度解析:从新手到高手的效率提升指南

在数字芯片设计与验证领域,仿真工具是验证工程师的核心生产力工具。其工作原理在于通过编译和运行两个阶段,将硬件描述语言转化为可执行的仿真模型,从而预测芯片在实际硅片上的行为。掌握仿真工具的高级配置能力,对于提升验证效率、缩短项目周期具有关键的技术价值。尤其在处理大规模SoC设计时,合理的仿真选项配置能显著优化仿真速度、内存占用和调试体验。本文聚焦于Synopsys VCS这一业界标准仿真器,深入剖析其核心仿真选项的分类、设计逻辑与实战配置技巧,涵盖调试访问、性能优化、覆盖率收集等关键场景,帮助工程师从被动使用

weixin_33868027的博客 438

VCS仿真选项深度解析:从编译优化到调试覆盖率的实战指南

在数字芯片设计与验证领域,仿真技术是验证电路功能正确性的核心手段。其原理在于通过软件模拟硬件行为,在流片前发现设计缺陷,从而大幅降低研发成本与风险。掌握高效的仿真工具与配置方法,对于提升验证效率、保证芯片质量具有关键的技术价值。无论是进行单元测试、系统级验证,还是覆盖率收集,合理的仿真策略都直接影响项目周期。本文聚焦于业界广泛使用的Synopsys VCS仿真器,深入探讨其丰富的编译与运行时选项。通过解析如`-debug_access`、`-cm`等关键参数,并结合**波形文件优化**与**覆盖率收集**的

weixin_30838873的博客 411

VCS与Verdi联合调试实战:从编译选项到FSDB波形分析的全流程指南

芯片验证调试中,仿真器与波形分析工具的分工协作是高效定位问题的关键。VCS作为事件驱动仿真引擎,负责执行RTL与testbench,而Verdi则作为分析前端,通过FSDB波形文件实现信号级、逻辑级乃至状态机级的深度洞察。正确理解编译期debug选项(如-debug_access+all、-kdb)与PLI接口配置,是确保波形可观测性的基石。本文从VCS仿真与FSDB dump的底层原理出发,结合nTrace信号回溯、nWave波形搜索、nSchema原理图提取等高频功能,系统梳理了从编译到分析的标准调试链

weixin_33907511的博客 359

Verdi高效debug技巧:如何用nWave快速定位RTL问题(附VCS联动配置)

本文详细介绍了如何利用Verdi的nWave工具高效定位RTL设计问题,并提供了与VCS的联动配置技巧。通过kdb数据库实现源码级跳转、nWave的高级总线操作与逻辑分析,以及VCS编译关键参数解析,帮助验证人员大幅提升调试效率。文章还涵盖了波形生成优化和分布式调试方案等实战技巧。

weixin_28308325的博客 402

超越手册:用VCS编译选项玩转高级验证场景(UVM调试、低功耗验证、门级仿真)

本文深入探讨了如何利用VCS编译选项优化高级验证场景,包括UVM调试、低功耗验证和门级仿真。通过精准的编译命令组合,工程师可以显著提升验证效率,解决复杂芯片设计中的调试难题和性能瓶颈。文章提供了实用的选项配置和性能优化技巧,帮助验证团队在项目中实现更高效的验证流程。

weixin_29159995的博客 222

快速搭建VCS仿真

TC不是一个专门的模块,它的作用是产生激励并接收响应做检查(比如:调用VIP,比如使用SPI发送指令并接受DUT返回的数据进行检查;仿真完成后,会在当前目录下生成一个cm.vdb文件夹,可以将该文件夹剪切到对应的TC下,所有的TC运行完,及回归完成时,每个TC都会有一个cm.vdb文件夹,里面存放着对应TC下DUT的覆盖率数据。但是对于一个模块,有非常多的测试场景,不可能每个TC中都例化一遍TB,最好是将TB和TC分开放置,每个TC对应一个文件夹,TB尽量保持不动。搭建好TB和TC后,接下来就是仿真。

weixin_38420127的博客 1076

从波形反推问题:手把手教你用VCS的fsdbDumpSVA和断言统计功能

本文详细介绍了如何利用VCS工具的fsdbDumpSVA和断言统计功能进行逆向调试,帮助验证工程师从波形中快速定位断言失败的根本原因。通过配置编译选项、解析断言波形、获取统计信息以及高级调试技巧,提升debug效率,特别适合处理复杂的时序逻辑和隐蔽问题。

weixin_42549496的博客 388

VCS NLP 低功耗验证系列(八):Assertion 深度专题——从内建断言到 PAVE 自定义断言完整工程

低功耗验证中的断言技术:从基础到自定义 本文系统介绍了低功耗验证中的三层断言技术体系: 设计功能断言处理:通过SNPS_assertion_control属性控制断电时断言行为,提供CONTINUE/SUSPEND/KILL三种模式,解决断电误报问题。 内建自动断言: 上电复位时序检查(assert_reset_sequence) 源断隔离检查(src_off_clamp_check) 钳位稳定性检查(clamp_toggle_check系列) 断电写入阻断(check_power_down_write)

元直的博客 76

VCS仿真命令实战指南:从编译优化到调试技巧

数字芯片验证是确保集成电路功能正确的关键环节,其核心原理是通过仿真工具模拟设计在特定激励下的行为。仿真器的性能与调试能力直接影响验证效率与项目周期。在工程实践中,Synopsys VCS作为业界主流编译型仿真器,其丰富的命令行选项为性能调优与问题定位提供了强大支持。通过精细控制编译选项(如-debug_access与-fast)、合理配置覆盖率收集(-cm)以及运用交互式调试(UCLI),工程师能在仿真速度、内存占用与调试可见性之间取得最佳平衡。这些技术对于处理数亿门级网表仿真、定位异步时序问题等复杂场景具

weixin_30458043的博客 409
上一篇: 地址读写hang住case中,怎样中断hang住的读写进程,继续测试后面地址(关于fork的应用)。
下一篇: 验证中filelist以及package的使用
geter_CS
博客等级 码龄10年 7311粉丝 118原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值