VCS使用SDF文件进行后仿反标

概述

从概念上来说,数字验证包含两方面的内容,一个是验证功能,另一个是验证时序。对应的仿真模型(不论是model,standard cell等)也不外乎这两个部分,功能部分由逻辑,udp元件或gate构成,时序部分则包括了时序反标和时序检查两小块。

平时我们所说的功能验证,也就是前仿真,实现了对功能进行验证的目的,时序被默认为理想情况,不包含延迟信息。门级仿真,也称为后仿真,除了功能验证外,最主要就是用来检查时序是否满足,有没有时序违例的情形。

门级仿真根据网表不同,又可以分为综合后仿真,以及pnr后仿真。前者是用综合后的网表进行仿真,这时由于hold没有修,所以会出现不少时序违例的情况,真正timing clean的网表是后端做完布局布线,修修补补完timing的网表,我们称为pnr网表。

进行pnr网表的后仿真时,我们需要告知仿真工具cell与cell之间的延迟,D端到Q端的延迟,这里,我们就要请出主角SDF文件,闪亮登场!

  • 什么是SDF文件?

SDF(Standard delay file)文件是把布局布线过程中器件延时和线延时的信息保留下来,据此就可以在路径时序分析时将整条路径的时序计算出来,再判断时序约束条件就能知道是否满足时序要求了。

  • 如何反标SDF文件?

反标SDF文件有两种方法,一种作为elaboration的选项指定,另一种是在bench中调用系统函数$sdf_annotate来完成。

  • 作为elaboration的选项

-sdfmin|typ|max:instance_name:file.sdf

如vcs-sdf min:top.i_test.:test.sdf

  • 使用系统函数$sdf_annotate

$sdf_annotate (“sdf_file”[, module_instance] [,“sdf_configfile”][,“sdf_logfile”][,“mtm_spec”] [,“scale_factors”][,“scale_type”]);

这里除了sdf_file必须给出外,其他参数可以使用默认值,如:

$sdf_annotate(“test.sdf”);

要说明下参数scale_type,sdf文件中时序信息都会由3个数字组成,分别对应是minimum,typical,maximum三种情形下的延迟(当然,有时候会只有minimum和maximum的情况,那么typical的延迟没有就省略)

scale_type的可取值为:

  • FROM_MINIMUX
    选择SDF文件中mininum timing

  • FROM_TYPICAL
    选择SDF文件中typical timing

  • FROM_MAXIMUM
    选择SDF文件中maximum timing

  • FROM_MTM
    系统默认

如何确认成功反标呢?

反标完成后,可以从log中看到这样一句话:
在这里插入图片描述
例子

这样我们就反标完成了,接下来让我们通过后仿波形,验证下设计中延迟和sdf文件中延迟是否一致。

我们在i_test中例化了一个DLY4类型的名为i_delay的cell。
在这里插入图片描述
从库文件中我们能够找到DLY4这个cell
在这里插入图片描述
可以看到DLY4这个cell里面包含了一个buf,功能是将输入A 延迟一点时间输出到Y,这个module里面包含了specify块,里面定义了A到Y的延迟。

那么,我们在后仿过程中会使用这里specify的延迟么?

先不回答这个问题,我们继续往下看~

看下SDF文件中对DLY4如何定义的?
在这里插入图片描述
从SDF文件中,我们可以看到对于上升沿而言,A到Y的延迟分别是0.225(min),0.226(max)

将SDF反标进后仿网表,通过仿真我们来验证下A到Y的延迟值
在这里插入图片描述
至此,我们完成了一个cell的反标,并验证了后仿波形中信号的实际延迟和sdf中定义的相一致。

再回到刚才提出的问题,在反标SDF后,specify块中定义的延迟值不再有用,取代的将是SDF文件中的延迟。

存在跨异步如何处理

1. 抽取SDF时,排除。
除去相应单元的 D setup time 和 D hold time。
2. 不导入SDF文件,仿真不带SDF的netlist
+nospecify
Suppresses module path delays and timing checks in specifyblocks.
+notimingcheck
Suppresses timing checks in specify blocks.

+no_notifier
Disables the toggling of the notifier register that you specifyin
some timing check system tasks.
3. VCS提供了很好的方法:
vcs +optconfigfile+vcs_cfg
================vcs_cfg 的内容==========
instance {tb_top.U_TOP.U_CORE.U_Async} {noTiming}
=============================================
或者 vcs +optconfigfile+async.list
async.list内容:
instance {tb_top.U_TOP.U_CORE.U_Async} {noTiming}

注:0. 直接在vcs选项后添加optconfigfile及vcs_cfg即可;
1. vcs_cfg可以针对module、instance、tree起作用;
2. vcs_cfg可以添加的选项有noTiming、noSpecify、noIopath;

转载:http://blog.sina.com.cn/s/blog_9c9b95910102yqqu.html

<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、付费专栏及课程。

余额充值