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

  • 2
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VCS中,可以使用SDF(Standard Delay Format)文件来指定电路中的时序信息,以便进行时序仿真。反标sdfannotate)则是VCS中的一个命令,用于将SDF文件中的时序信息应用到仿真中。具体来说,可以通过以下步骤实现VCS SDF反标: 1. 首先,在VCS的工作目录中创建一个SDF文件,例如“ring_oscillator.sdf” 。 2. 在代码中使用$sdf_annotate命令来调用SDF文件。例如,可以在initial begin块中使用以下代码来调用SDF文件中的时序信息:$sdf_annotate("ring_oscillator.sdf", ring_oscillator); 。 3. 然后,使用VCS编译和运行仿真,以使SDF文件中的时序信息生效。 4. 在仿真过程中,VCS将根据SDF文件中的时序信息来模拟电路的时序行为,以确保仿真结果准确。 通过使用SDF文件和$sdf_annotate命令,可以在VCS进行准确的时序仿真,以验证电路的时序行为。这能够帮助设计人员检查和优化电路的时序特性,确保电路在实际应用中能够正常工作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [VCS门级仿真系列文章之sdf文件和$sdf_annotate反标](https://blog.csdn.net/m0_49540263/article/details/114881858)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值