[VCS]门级仿真及SDF反标

文章讨论了尽管有静态时序分析工具(STA),门级仿真在设计流程中仍然重要的原因,包括检查时序约束完备性、异步电路时序、网表完备性和为功耗分析提供波形等。同时介绍了门级仿真的前仿和后仿选项,以及SDF文件在时序反标中的应用方法。文章强调了后仿前详细检查SDF反标报告和确保正确设置仿真选项的重要性。

数字电路门级仿真及SDF反标

一、后仿

相对于RTL仿真,门级仿真占用的计算资源虽然很多,但是在静态时序检查(STA)工具普遍应用之前,带时序的动态门级仿真几乎可以说是唯一的timing sign-off手段了

那么在STA工具已经成熟的现在,门级仿真还有存在的必要吗?为什么有些公司的设计流程中还包括门级仿真这个必需的步骤呢?

1.1 可能存在以下几个原因:

  • 检查时序约束(SDC)的完备性— 防止约束的遗漏

  • 检查异步电路的时序—STA工具无能为力,异步处理部分在SDC约束文件中做的是fath_path处理,所以这部分时序是否满足,STA工具并不会检查也不会报出violation;

  • 检查网表的完备性—防止综合、布局布线过程中的意外

  • 为后续流程如功耗(Power)分析、压降(IR Drop)分析提供波形—更准确

  • 测试向量的仿真—只有门级网表才包含扫描链,DFT逻辑的插入是否导致功能出现问题;

1.2 门级仿真分为两种:

  • 一种是不带时序反标的门级仿真(零延时仿真,综合的网表就可以做,因为在布局布线之前,所以也叫前仿,这时由于hold没有修,所以会出现不少时序违例的情况);

  • 一种是带时序反标(back-annotation)的门级仿真(布局布线之后的仿真,也叫后仿,这时的网表是后端做完布局布线,修补完timing的网表); 进行PR网表的后仿真时,我们需要告知仿真工具cell与cell之间的延迟,D端到Q端的延迟,这里就需要SDF文件!

二、前仿选项

  • +nospeicy 在仿真时忽略库文件中指定的延时。

  • +delay_mode_zero 将标准库单元中定义的延时替换为0。testbench中的 #延时也都被消除。

  • +notimingcheck时序检查开关,比如setup/hold/width检查等等,如使用了该option,则仿真时不检查时序,行为类似于RTL仿真。 在PR未结束,sdf反标文件还没准备好时,可用该选项忽略延时,可用于功能性的粗略检查。 但真正跑后仿真时,不可使用该选项,否则仿真有效性大大降低。

三、后仿选项

  • +sdfverbose 显示所有的sdf反标错误;

  • +no_notifier 可以关掉时序检查产生的不定态。通过这个命令参数可以使时序检查任务中检测到时序违例后,不影响其参数列表中的notifier的值,从而避免了notifier变化引起udp输出不定态的情况,该命令仅对notifier的值有影响,对于时序检查任务检测到的时序违例不产生任何影响;

  • +neg_tchk若要使用负延时检查,在编译设计时必须包含+neg_tchk选项。如果省略此选项,VCS将所有负延迟更改为0。

  • -negdelay 用于SDF文件中有负延迟,如果省略此选项,VCS将所有负延迟更改为0。

四、SDF文件反标

4.1 方法一

  • 在makefile中调用,使用如下命令:

vcs +neg_tchk -negdelay -sdf min|typ|max:instance_name:file.sdf

启用SDF反标。在file.sdf中指定的最小值、类型或最大值中的一种,在实例instance_name上进行反标。

4.2 方法二 $sdf_annotate

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

$sdf_annotate("sdf_file"[, module_instance] [,"sdf_configfile"][,"sdf_logfile"][,"mtm_spec"] [,"scale_factors"][,"scale_type"]);
sdf_file: 指定指向SDF文件的路径;
module_instance: 调用$sdf_annotate模块实例的范围。
sdf_configfile: 指定SDF配置文件。
sdf_logfile: 指定SDF log文件,可以使用+sdfverbose显示所有的sdf反标错误。
mtm_spec: 指定哪一种延迟类型,通常有三种min:typ:max,它的可能值是"MINIMUM", "TYPICAL", "MAXIMUM", or "TOOL_CONTROL"(默认值)。在仿真器读入SDF的时候,要指定使用哪一组。避免出现指定的组的时序信息不存在的情况。
scale_factors: 指定min:typ:max的缩放因子,默认为三个正实数“1.0:1.0:1.0”。
scale_type: 指定SDF文件中在缩放前使用的延迟值。它可能的值是“FROM_TYPICAL”、“FROM_MIMINUM”、“FROM_MAXIMUM”和“FROM_MTM”(默认)
  • 在tb中加载sdf文件

`ifdef SDF  initial begin    $sdf_annotate("../../rtl/post_sim/file.sdf", tb,, "sdf.log",);  end`endif
  • 确认成功反标

  • 打印出Doing SDF annotation ...... Done

五、其他

5.1 初始化寄存器的值

在vcs编译选项里添加 +vcs+initreg +random随机化赋初值,可用于对初始状态是x的寄存器。

5.2 导出VCD文件

VCD是不压缩的文本格式,兼容性好,缺点是文件太大。因此后仿先写出高压缩比的FSDB文件,再转成VCD。可指定转换起止时间、结束时间。这样一次后仿,就可以为不同的应用生成不同的VCD文件。

FSDB转VCD的工具通常在Verdi的安装目录,用法:

fsdb2vcd xxx.fsdb -o xxx.vcd -bt 100ns -et 200ns
  • 其中,-bt是begin time,-et是end time;

5.3 关闭某些寄存器的时序检查notiming.list

后仿过程中可能有一些不必要或者不想检查的时序,尤其是跨时钟域的两级同步的第一级DFF出现所谓的时序违例,这是一种假的时序违例所以通常不关心它们是否有时序违例。

instance { tb.U_TOP.reg} { noTiming };

VCS +optconfigfile+notiming.list 可以用上面方法加载这个文件,这样在后仿过程中将不对这些寄存器做时序检查,避免不必要的时序问题而引起X态传递。

六、Note:

  1. 后仿开始前,一定要把详细的SDF反标报告打印出来仔细检查。需要把错误全部解决掉,警告视情况要解决大部分

  1. 带时序的后仿,一定要注意仿真器是否关闭了notimingcheck和nospecify的选项。如果有nospecify,那么SDF中的时序信息就反标不到仿真模型中(仿真模型的时序类型定义在specify block中);如果有notimingcheck,那么后仿过程中就不检查时序违例,后仿就失去了最大的意义。

  1. 带时序的后仿开始阶段,建议dump一些波形出来,看看波形上的延时和SDF中的延时信息是否保持一致,这有助于对反标过程的理解和后仿整体进度的把握。

<think> 我们正在处理关于VCS SDF仿真中查看率的问题。根据引用内容,特别是引用[1]和引用[2]中提到的信息,我们可以总结出以下几种方法: 1. 在运行后仿之前,VCS会生成一个SDF报告(通过引用[1]中的“后仿开始前,一定要把详细的SDF报告打印出来仔细检查”)。这个报告应该包含率的信息。 2. 引用[2]中提到,在完成SDF时序之后,首先要检查sdfannotation文件,文件中记录了每个sdf文件、每个实例的时序结果率。因此,我们需要查看这个sdfannotation文件。 3. 引用[3]提到,使用“+sdfverbose”选项可以开启VCS记录所有信息的功能,包括error和warning信息,这些信息也会记录在log文件中(通过“sdf_logfile”指定)。 因此,我们可以归纳出查看率的方法如下: - 运行VCS后仿时,使用合适的选项生成SDF报告(通常通过VCS命令行选项实现)。 - 检查生成的sdfannotation文件,该文件会记录率。 - 使用+sdfverbose选项来获取更详细的信息,并查看指定的sdf_logfile。 具体步骤可能包括: 1. 在运行VCS命令时,添加相应的选项来生成报告。根据引用[1],可能是通过`+optconfigfile+notiming.list`来避免对某些寄存器做时序检查,但这不是直接生成报告的方法。而引用[3]提到使用`sdf_logfile`来指定日志文件,并使用`+sdfverbose`来记录所有信息。 2. 查看生成的日志文件(由`sdf_logfile`指定)或默认的日志文件(如引用[3]中提到的log文件),其中会包含成功和失败的比例。 3. 此外,引用[2]提到,可以使用UCLI命令`report_timing`来检查特定实例的时序信息,但这主要用于查看具体路径的延迟值,而不是率。 所以,重点应该是生成并查看SDF报告(sdfannotation文件)以及使用+sdfverbose选项的日志文件。 综上所述,我们可以这样回答: 在VCS中进行SDF仿真时,查看率的方法主要有: - 检查SDF过程中生成的sdfannotation文件,该文件会记录每个SDF文件、每个实例的结果(包括率)。 - 在运行VCS时,使用`+sdfverbose`选项来获得详细的错误和警告信息,这些信息会输出到由`sdf_logfile`指定的日志文件中,其中也包含情况。 - 此外,确保在运行后仿真之前,仔细查看VCS生成的详细SDF报告(通常会在命令行中指定生成报告的文件名或者通过环境变量设置)。 具体操作步骤: 1. 在VCS运行命令中加入以下选项: ``` vcs ... +sdfverbose +sdf_nocheck_celltype [其他选项] ... -sdf_logfile <log文件名> ``` 其中`+sdfverbose`用于记录详细信息,`-sdf_logfile`用于指定日志文件(如果不指定,可能默认输出到某个文件)。 2. 运行仿真后,查看生成的日志文件(例如上面指定的`<log文件名>`),其中会包含成功和失败的信息,以及率。 3. 同时,VCS也会生成一个sdfannotation文件(可能是默认生成或通过选项指定),该文件会详细列出每个实例的情况,包括率。 注意:具体选项和文件名可能根据VCS版本和项目设置有所不同,请参考VCS文档。 §§相关问题§§ 1. 如何解决VCS SDF过程中出现的错误和警告? 2. VCS仿真中如何验证的时序信息是否正确? 3. 在SDF时,如何避免对某些路径进行时序检查? </think> ### VCS SDF仿真查看率的方法 在VCS中进行SDF仿真时,可通过以下方法查看率: 1. **检查SDF报告文件** 运行VCS时使用`-sdfreport`选项生成报告: ```bash vcs ... -sdfreport sdf_annotation.rpt ``` 报告文件`sdf_annotation.rpt`会详细记录每个模块/实例的成功率、失败路径及错误类型[^1][^2]。 2. **启用详细日志模式** 添加`+sdfverbose`选项获取完整错误/警告信息: ```bash vcs ... +sdfverbose -sdf_logfile sdf_errors.log ``` 日志文件`sdf_errors.log`将包含所有详情和统计信息[^3]。 3. **UCLI命令实时检查** 在仿真过程中使用UCLI命令查看具体路径: ```bash simv -ucli ucli% report_timing -file module_timing.rpt tb_top.path.to.module ``` 生成的`.rpt`文件包含该模块精确的时序数据[^2]。 4. **波形验证法** 后通过Verdi查看波形,对比SDF文件中的延迟值与波形实际延迟是否匹配(如引用[2]中40ps的验证案例)[^2]。 > **关键步骤验证**: > - 检查报告中的错误率必须为0%,警告率需低于5%[^1] > - 确认仿真未启用`+notimingcheck`和`+nospecify`选项[^1] > - 首次需dump波形验证延迟一致性[^1][^2] ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值