[TOOLS] 解决Verdi 无法打开部分波形

使用Verdi dump waveform经常会遇到部分信号无法打开,可尝试一下办法:

1. 查看filelist中是否加入-v ,如果加入-v 则把他删除; 

 -v filename

        Specifies a Verilog library file. VCS looks in this file for definitions of the module and UDP instances that VCS found in your  source code, but for which it did not find the corresponding module or UDP definitions in your source code.

注:指定一个库文件,VCS会来这个文件中找源代码中例化的但在源代码中找不到的module,这里一个文件可以里面包含很多module。

 

-y directory

Specifies a Verilog library directory. VCS looks in the source files in this directory for definitions of the module and UDP instances that VCS found in your source code, but for which it did not find the corresponding module or UDP definitions in your source code. VCS looks in this directory for a file with the same name as the module or UDP identifier in the instance (not the instance name). If it finds this file, VCS looks in the file for the module or UDP definition to resolve the instance.

注:指定一个库文件目录,目录下的文件名和module名要一致,且要用+libext+来指定文件类型,这里的.v文件里面就只能放一个和文件名同名的module,VCS会来这个目录下找源代码中例化的但在源代码中找不到的module。

2. 如果去掉-v 后仍然无法打开信号:

  • 编译选项加入 -debug_access,-debug_region=cell+lib;
  • 如果有编译选项 -debug_access+all则换成 -debug_all;

          两者的区别如下:

            两者基本等效除了debug_access+all 不能作用与cells 和加密模块。

           -debug_access+all does not apply capability inside cells and encrypted modules.

        

  • 查看是否存在+nocelldefinepli+,如果有则删除;

             +nocelldefinepli+编译选项使用时需要加一个数字,例如+nocelldefinepli+1,+nocelldefinepli+2。

              它的功能是,禁止仿真器对含有`cell_define编译原语的模块的波形转储和PLI访问。它有时也需要和+nolibcell一起使用。
              由于后仿使用的库单元很多,触发器内部实现又有些复杂,所以使用+nocelldefinepli+对Dump波形的大小和仿真性能有极大的提升。波形大小通常可以下降到未使用该选项的1/10,仿真速度也接近于不dump波形时的速度。(即dump波形的开销基本可忽略)但是如果要定位库单元内部的波形则必须去除该选项

 

 

 

 

<think>嗯,用户想在Verdi波形图上显示状态机的名称。我需要根据提供的引用资料来整理方法。首先,引用1提到在nWave窗口使用Tools里的Bus Contetion(可能是Bus Contention?)选项,然后打开状态机。这里可能需要选中状态机的波形,然后通过这个工具来设置。 接着,引用2指出在dump波形时直接显示状态名,可能需要检查是否有Enumerated Literal选项,选中后状态名称就会显示。这一步可能是在生成波形前的设置,或者在Verdi的显示选项里调整。 引用4提到nState查询和状态转移时间的互通,说明状态名称和波形的时间点是同步的。可能涉及到状态机的信号属性设置,确保状态信号被正确识别为枚举类型。 然后需要将这些步骤按顺序整理出来,可能分为自动识别和手动设置两种情况。自动识别需要状态机代码符合规范,比如使用枚举类型或特定注释。手动设置则通过Bus Contention或Enumerated Literal选项来配置。 还要注意用户可能遇到的常见问题,比如状态名未显示,可能需要检查信号类型或选项是否正确启用。此外,状态机报告中的信息(引用3)可以帮助验证状态是否被正确识别,比如检查输入输出信号和状态表是否正确。 需要确保步骤清晰,先自动后手动,并提供验证方法。最后生成相关问题,帮助用户进一步了解状态机调试的其他方面。</think>在Verdi中将状态机名称显示在波形图上的方法可分为以下步骤: ### 一、自动识别状态机名称 1. **代码规范要求** - 状态机信号需使用枚举类型(`enum`)定义 - 或通过注释`// synopsys enum state`声明状态变量[^3] 2. **波形自动显示** ```verilog enum logic [1:0] {IDLE=2'b00, RUN=2'b01, DONE=2'b10} state; ``` 此类规范代码生成的波形会自动显示状态名称[^2] ### 二、手动设置显示方法 1. **在nWave窗口操作** - 选中状态机信号波形 - 路径:`Tools > Bus Contention > Enumerate Literal`[^1] - 或右键选择`Enumerated Literal`选项[^2] 2. **状态关联验证** ```tcl verdi -dbdir simv.daidir -ssf waveform.fsdb ``` 打开波形后,双击状态信号可查看状态名称与数值的映射关系[^3] ### 三、状态机调试辅助 1. **状态转移追踪** - 在波形窗口与状态转移图之间支持双向跳转 - 点击状态转移图中的箭头可定位到对应波形时间点[^4] 2. **状态统计功能** - 通过`Report > State Machine`可查看: $$ \text{状态覆盖率} = \frac{\text{已触发状态数}}{\text{总状态数}} \times 100\% $$ 并显示未覆盖状态的警告信息 ### 常见问题排查 | 现象 | 解决方案 | |------|----------| | 状态名显示为数值 | 检查是否启用Enumerated Literal选项 | | 部分状态未识别 | 验证代码是否规范声明状态机 | | 状态转移不更新 | 确认是否选中正确的时钟域 |
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值