VCS中VPD的使用简单教程

Dumping VPD文件

文章参考:《VCS/VCSi User Guide》


前言

可使用如下方式产生一个VPD文件:
  1. 使用系统任务——用于Verilog设计;
  2. 使用UCLI——用于VHDL、Verilog和混合设计;
  3. 使用DVE

一、使用系统任务?

VCS提供如下的Verilog系统任务:

  1. 是否使能Dumping;
  2. 覆盖VPD文件;
  3. Dump多维度队列和内存;
  4. 捕获增量周期信息

1. 是否使能Dumping

可以使用Verilog系统任务$vcdpluson $vcdplusoff控制是否使用VPD格式dumping仿真历史。
注意:默认的VPD文件名为vcdplus.vpd。但我们可使用 $vcdplusfile替换默认文件名。

$vcdpluson语法格式:

$vcdpluson (level |"LVL=integer", scope*, signal*);

level | LVL=integer_variable
指定要下降以记录信号值更改的层次结构作用域级别数(如果是0,将会把所有作用域实例记录到层次结构的末尾;默认值为0)。
可使用“LVL=integer_variable”指定层次结构作用域级别的数。在本例中,integer_variable 指定要下降的级别以记录信号值的变化。

scope
指定记录信号值更改的作用域名称(默认为全部)。

signal
指定记录信号值变化的信号名称(默认为全部)。
注意:在语法中,* 表示参数可以有一个包含多个值的列表(对于作用域或信号)。

$vcdplusoff语法格式:

$vcdplusoff (level |"LVL=integer", scope*, signal*);

例子:

`timescale 1ns/1ns
module test();
...
initial
  begin
    $vcdpluson; // Enable Dumpling
    $vcdplusoff(test.risc1.alu1); // Does not dump signal
    							  // value
    ...
  end
...
endmodule

上面的示例,将这个设计使能dumping。但通过使用$vcdplusoff将实例alu1以及低于alu1层次结构的实例们取消使能dumping。
注意:如果多个 $vcdpluson 命令导致给定信号被保存,则该信号将继续保存,直到将等效数量的 $vcdplusoff 命令应用于该信号。

2. 覆盖VPD文件名

$vcdpluson默认将仿真历史记录在vcdplus.vpd文件中。但我们可以通过使用系统任务 $vcdplusfile覆盖默认文件名:

$vcdplusfile ("filename.vpd");
$vcdpluson ();

注意:在使用$vcdplusfile指定文件名后,必须在其之后使用 $vcdpluson(),从而实现覆盖默认vpd文件名。

例如:

`timescale 1ns/1ns
module test();
...
initial
  begin
    $vcdplusfile("my.vpd); // Dumps signal value changes 
    	     	   	       // in my.vpd
    $vcdpluson; // Enable Dumping
    ...
  end
...
endmodule

以上示例中,使用my.vpd替代默认的vcdplus.vpd文件,将真个设计的信号变量改变值记录到my.vpd文件中。

3. Dump多维度队列和内存

本节介绍提供对多维数组 (MDA) 的可见性的系统任务和功能。

对于可见的MDA数据具有以下两种方法:

  • 方法1。使用系统任务 $vcdplusmemon $vcdplusmemoff,从而在每次 MDA 有数据更改时都会记录数据。
    注意:我们应该使用编译选项 +memcbk 来使用这些系统任务。。
  • 方法2。使用系统函数 $vcdplusmemorydump,从而仅在调用任务时存储数据。

总结

未完待续...
### VCS 中 SVA 的参数配置与使用 #### 参数配置 在 VCS 中,SystemVerilog Assertions (SVA) 可通过多种方式配置以满足不同的验证需求。这些配置可以通过命令行选项或者 `.sverilog` 文件中的编译指令实现。 1. **启用 SVA 支持** 默认情况下,VCS 启用了 SystemVerilog 和其断言语法的支持。如果需要显式指定支持 SVA,则可以在运行仿真时添加 `-sva` 选项[^1]。 2. **控制断言的行为** 断言行为可通过以下几种方式进行调整: - `+define+NO_ASSERTIONS`: 定义此宏可禁用所有断言功能,在某些性能优化场景下可能有用。 - `+assertion_report_level=<level>`: 设置断言报告的详细程度,其中 `<level>` 可以为 `none`, `low`, `medium`, 或者 `high`[^2]。 - `+acc+=rw`: 如果需要调试波形并查看断言内部状态机的变化,建议开启该选项以便于观察信号变化。 3. **波形文件格式的选择** 对于不同类型的波形文件(如 vpd, shm),可以选择适合的形式来记录仿真的数据流信息。例如,VPD 是 Cadence 提供的标准波形数据库格式之一;而 SHM 则是由 NC-Sim 所采用的记忆模型共享机制衍生而来。 #### 使用示例 下面展示了一个简单的例子,演示如何定义带有参数的 property 并将其应用于 assert statement: ```verilog module test_sva; logic clk, reset_n, a, b; initial begin $dumpfile("test.vcd"); $dumpvars(0, test_sva); // Example of driving inputs to the DUT or TB here... #100; $finish(); end always #5 clk = ~clk; property p1(input signal_a, input signal_b); @(posedge clk) disable iff (!reset_n) !(signal_a && !signal_b); endproperty : p1 assert property(p1(a,b)) else $error("Assertion failed at %t", $time); endmodule : test_sva ``` 上述代码片段展示了如何创建一个名为 `p1` 的 parameterized property,并利用它构建了一条基本的 assertion rule 来监控两个输入信号之间的关系。 --- ### 波形显示及相关工具集成 当涉及到具体项目开发过程中遇到的实际问题时,比如 license 管理或是与其他EDA 工具链协作等问题也值得注意: - 当 Synopsys License Manager 出现异常状况无法获取所需授权许可时,请核查服务器端服务是否在线运转良好以及客户端环境变量 SNPSLMD_LICENSE_FILE 是否被正确定位指向有效的许可证路径[^3]. - 动态波形调试方面推荐配合 Verdi 进行深入剖析;对于更广泛的 RTL 设计质量保障则离不开 SpyGlass 这样的静态分析利器辅助完成 CDC 跨时钟域检测等工作流程环节. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值