如何阅读SDF文件


sdf- standrad dealy format,标准延时格式文件。


作为一个ASIC工程师,需要时常和这个东西打交道,比如synthesis,STA,post-simulation,eco。也算是一个非常基本的概念,但也时常发现很多工程师对此认识模糊不清,所以写写。


First, delay分为cell delay 和wire delay.顾名思义,cell delay是指元器件内部的delay,wire delay是器件互连Pin-to-pin的delay。


真正的delay,就是这两者的累加。


举个例子:


  (CELL
    (CELLTYPE  "NR2D1")    // cell name
    (INSTANCE  u434)    // cell instantiate name
      (DELAY
 (ABSOLUTE
 (IOPATH A1 ZN  (0.0812::0.0841) (0.0379::0.0395))   //cell delay,A1-->ZN
 (IOPATH A2 ZN  (0.1350::0.1350) (0.0994::0.0994)) //cell delay A2-->ZN
 )
      )
  )


以上是Back end return的 sdf 文件,描述了一个2输入或非门的器件,例化名u434,给出了该器件从输入到输出的每条路径的delay值。


再看,


 (INTERCONNECT  u434/Z  u444/A2  (0.028:0.029:0.029) (0.030:0.031:0.031))


//                                                           上升沿传输delay                       下降沿传输delay


以上是一个wire delay得描述,从u434的Z Ouput pin到U444的A2 input pin,给出了上升delay(rising edge transmit delay)和下降delay(falling edge transmit delay). 括号内的时间分别是最小(Tmin)/典型(Ttyp)/最大(Tmax)delay。


由上即可计算出,由u434的任一输入端到u444的A2端的总延时。


当然,在一个大型的高速ASIC器件中,这只是一个基本的sdf文件(basic sdf file),实际上,我们还会考虑outbound,couple等问题,会有附加的其它sdf文件来描述相应导致的增加delay,最后总的delay还是累加算出。


关于基本元器件的时序定义,就不再进行解释,在任意一本verilog书籍里都可以看到。


P.S 有时在做post-simulation时,会出现不能标上(annotate)sdf的情况,这时就需要仔细检查simulation报出的信息与sdf对应的cell是否一致,是否path相同,例化名正确等。




### 如何在ModelSim中使用和处理SDF文件 #### SDF 文件概述 标准延迟格式 (Standard Delay Format, SDF) 是一种用于描述电路元件之间传播延时的标准ASCII码文件。这种文件通常由综合工具生成,在进行后布局布线的时序仿真时非常重要。 #### 准备工作 为了能够在 ModelSim 中成功加载并应用 SDF 文件,需要确保已经完成了以下准备工作: - 已经完成设计的综合过程,并通过相应的EDA工具生成了对应的网表以及SDF文件[^2]。 - 将这些必要的文件(包括但不限于 Verilog/VHDL源代码、测试平台文件、网表文件SDF文件)加入到当前项目中[^4]。 #### 加载 SDF 文件的方法 当一切准备就绪之后,可以通过命令行方式来指定要使用的SDF文件路径,具体做法是在启动仿真的时候加上 `-sdfmax` 参数: ```bash vsim -t ps -voptargs="+acc" work.design_top +nowarnTFMPC +notimingchecks \ -sdfmax@/path/to/top_level.sdf=../netlist/top_level.v ``` 上述命令中的 `/path/to/top_level.sdf` 应替换为实际的顶层模块相对应的SDF文件位置;而 `../netlist/top_level.v` 则指向综合后的网表文件所在的位置。注意这里的路径可能依据个人项目的不同有所变化。 另外还可以利用 Tcl 脚本来简化这一过程,编写一段简单的脚本可以实现自动化的设置: ```tcl onbreak {resume} transcript on if {[file exists rtl_work]} { vdel -all } vlib rtl_work vmap work rtl_work # 编译 RTL 设计文件 foreach file [getSourceFiles] { vlog $file } # 启动仿真器并加载 SDF 文件 vsim -novopt work.top_module_name -sdfmax @top_instance_path=top_sdf_file_path do wave.do ; # 执行波形配置文件 run -all quit -f ``` 这段Tcl脚本实现了自动化编译RTL级的设计文件,并且指定了具体的实例化路径(`top_instance_path`)与SDF文件路径(`top_sdf_file_path`)给 vsim 命令,从而使得可以在运行期间动态调整模型的时间参数以反映真实的物理特性[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值