VCS门级仿真系列文章之sdf文件和$sdf_annotate反标

SDF文件(Standard Delay File)提供了延迟信息表示的标准ASCII文件格式,VCS支持版本1.0、1.1、2.0、2.1和3.0。

在SDF格式中可以指定固有延迟(intrinsic delays),互连延迟(interconnect delays),端口延迟(port delays),时序检查(timing checks),时序约束(timing constraints)和路径脉冲(PATHPULSE)。

使用VCS读取SDF文件时,会将延迟值“反向标注(back-annotates)”到设计中,即在源文件中添加或者更改延迟值。

可以使用$sdf_annotate系统任务进行反标,其使用格式如下。

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

其中:

"sdf_file":指定SDF文件的路径。

module_instance:指定反标设计的范围(scope)

“sdf_configfile”:指定SDF配置文件

“sdf_logfile”:指定VCS保存error 和warnings消息的SDF日志文件。也可以使用+sdfverbose runtime option来打印所有反标消息

"mtm_spec":指定延迟类型"MINIMUM(min)", "TYPICAL(typ)“或者"MAXIMUM(max)”。

"scale_factors":分别指定min:typ:max的缩放因子,默认是"1.0:1.0:1.0"

“scale_type”:指定缩放之前延迟值得来源,“FROM_TYPICAL”,“FROM_MIMINUM”, “FROM_MAXIMUM"和"FROM_MTM” (default).

下面通过一个振荡环(ring_oscillator)示例sdf文件和$sdf_annotate的用法。

ring_oscillator.v

`timescale 1ns / 1ps

module ring_oscillator
(
input enable ,
output out
);
wire [2 : 0] inv_net;
INVX1 u1(.Y(inv_net[0]),.A(inv_net[2])) ;
INVX1 u2(.Y(inv_net[1]),.A(inv_net[0])) ;
NAND2X1 u3(.Y(inv_net[2]),.A(enable),.B(inv_net[1])) ;
assign out = inv_net[2] ;
endmodule

上述是振荡环的Verilog代码,直接使用门级单元例化,无需重新综合。

在这里插入图片描述
上述电路在功能仿真时不会振荡环,只有考虑真实电路的单元延时和线延时才会振荡。

使用Design Compiler读入该设计,然后吐出SDF文件。

(DELAYFILE
(SDFVERSION “OVI 2.1”)
(DESIGN “ring_oscillator”)
(DATE “Sun Feb 28 15:11:49 2021”)
(VENDOR “fast”)
(PROGRAM “Synopsys Design Compiler cmos”)
(VERSION “K-2015.06”)
(DIVIDER /)
(VOLTAGE 1.10:1.10:1.10)
(PROCESS “fast”)
(TEMPERATURE -40.00:-40.00:-40.00)
(TIMESCALE 1ns)
(CELL
(CELLTYPE"ring_oscillator")
(INSTANCE)
(DELAY
(ABSOLUTE
(INTERCONNECT enableu3/A (0.000:0.000:0.000))
(INTERCONNECT u2/Y u3/B(0.000:0.000:0.000))
(INTERCONNECT u1/Y u2/A(0.000:0.000:0.000))
(INTERCONNECT u3/Y u1/A(0.000:0.000:0.000))
)
)
)
(CELL
(CELLTYPE"NAND2X1")
(INSTANCE u3)
(DELAY
(ABSOLUTE
(IOPATH A Y(0.011:0.011:0.011) (0.014:0.014:0.014))
(IOPATH B Y(0.013:0.013:0.013) (0.016:0.016:0.016))
)
)
)
(CELL
(CELLTYPE"INVX1")
(INSTANCE u2)
(DELAY
(ABSOLUTE
(IOPATH A Y(0.009:0.009:0.009) (0.008:0.008:0.008))
)
)
)
(CELL
(CELLTYPE"INVX1")
(INSTANCE u1)
(DELAY
(ABSOLUTE
(IOPATH A Y(0.013:0.013:0.013) (0.010:0.011:0.011))
)
)
)
)

在testbench中使用$sdf_annotate系统函数:

initial
begin
$sdf_annotate(“ring_oscillator.sdf”,ring_oscillator);
end

界面打印出信息

*** $sdf_annotate() version 1.2R
*** SDF file: “ring_oscillator.sdf”
*** Annotation scope: ring_oscillator_tb.ring_oscillator
*** No MTM selection argument specified
*** No SCALE FACTORS argument specified
*** No SCALE TYPE argument specified
*** MTM selection defaulted to “TOOL_CONTROL”:
(+typdelays compiled, TYPICALdelays selected)
*** SCALE FACTORS defaulted to “1.0:1.0:1.0”:
*** SCALE TYPE defaulted to: “FROM_MTM”
*** Turnoff delay: “FROM_FILE”
*** Approximation (mipd) policy: “MAXIMUM”

然后就可以在DVE中看到振荡的输出了
在这里插入图片描述

本文转载自公众号:芯片数字实验室
原文链接:https://mp.weixin.qq.com/s/zaWsH06DLQWqqCoYSRoQLw
未经作者同意,请勿转载!

  • 12
    点赞
  • 126
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值