后仿中的SDF简介及应用


前言

数字验证包含两方面的内容:功能验证和时序验证。对应的仿真模型也不外乎这两个部分,功能部分由门构成,时序部分则包括了时序反标和时序检查两部分。

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

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

进行pnr网表的后仿时,我们需要告知仿真工具cell和net的延时,因此就需要SDF文件。

一、如何产生SDF?

SDF是指标准延迟格式(Standard Delay Format),是ASCII文本文件。
SDF(Standard delay file)文件是把布局布线过程中器件延时和线延时的信息保留下来,据此就可以在路径时序分析时将整条路径的时序计算出来,然后再判断是否满足时序要求。

write sdf 代码如下(示例):

write_sdf -version 3.0 -input_port_nets -output_port_nets -context verilog -compress gzip -include {SETUPHOLD RECREM} -exclude {checkpins no_condelse} -no_internal_pins top_func_setup_ssgnp0p675vm40c.sdf.gz

在这里插入图片描述
This command writes leaf cell pin-to-pin timing information to a disk file. Timing information is written in SDF format using versions v2.1 or v3.0. The timing file contains data associated with the netlist from which it is created.

二、解析SDF内容

SDF文件包含一个首部(header ),后跟一个或多个单元(cell)。

示例如下:
在这里插入图片描述

1. header

Header包含一般的信息,比如SDF Version、Design Name 、SDF生成日期、Vendor信息、产生SDF用到的PROGRAM name和VERSION、VOLTAGE、PROCESS、TEMPERATURE、TIMESCALE精度等。

示例如下:
在这里插入图片描述

2. cell

Header之后是一个或多个单元的描述,每个单元在设计中代表一个或多个实例(使用通配符),单元可以是库原语或分层块(hierarchical block)。单元中可以描述四种类型的时序规范:
● DELAY:用于描述延迟
● TIMINGCHECK:用于描述时序检查
● TIMINGENV:用于描述时序环境
● LABEL:声明可用于描述延迟的时序模型变量。

示例如下:
在这里插入图片描述

下面主要介绍DELAY和TIMINGCHECK这两部分。

① DELAY

SDF DELAY有四种类型:ABSOLUTE、INCREMETN、 PATHPULSE和PATHPULSEPERCENT。

示例如下:
在这里插入图片描述

a) ABSOLUTE

ABSOLUTE在反标期间替换单元实例的现有延迟值
可以使用ABSOLUTE描述八种延迟定义:

● IOPATH:输入到输出路径的延迟。

示例如下:

//2输入或非门的器件,例化名u434,给出了该器件从输入到输出的每条路径的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,IOPATH指输入到输出的delay, A1-->ZN
			 (IOPATH A2 ZN  (0.1350::0.1350) (0.0994::0.0994)) //cell delay A2-->ZN
 		)
      )
  )

● INTERCONNECT:互连走线延迟,可以用于指定从其源端到接收端的整个网络的传播延迟。

示例如下:

//从u434的Z Ouput pin到U444的A2 input pin,给出了上升delay(rising edge transmit delay)和下降delay(falling edge transmit delay). 括号内的时间分别是最小(Tmin)/典型(Ttyp)/最大(Tmax)delay
      (DELAY
 			(ABSOLUTE
				 (INTERCONNECT  u434/Z  u444/A2  (0.028:0.029:0.029) (0.030:0.031:0.031)) //上升沿传输delay 和下降沿传输delay
 			)
      )

● RETAIN:保留时间定义,可以用于指定输出端口在其相关输入端口改变后应保留其先前值的时间。

示例如下:
在这里插入图片描述
输入A上的值发生更改后,Y将保留其先前值50ps(低电平为40ps)。50ps是保持高电平的值,40ps是保持低电平的值,101ps是传播上升沿延迟,90ps是传播下降沿延迟,如下图所示。
在这里插入图片描述

● COND:条件路径延迟,可以用于指定状态相关的输入到输出路径延迟。

示例如下:
在这里插入图片描述

● CONDELSE:默认路径延迟,可以用于指定条件路径的默认值。

示例如下:
在这里插入图片描述

● PORT:端口延迟,可以用于指定互连走线延迟,该延迟被建模为输入端口的延迟。

示例如下:
在这里插入图片描述

● NETDELAY:网络延迟,可以用于指定从一个网络的所有源端到所有接收端的传播延迟。

示例如下:
在这里插入图片描述

● DEVICE:器件延迟,主要用于描述分布式时序模型,可以用于指定通过单元到输出端口的所有路径的传播延迟。

b) INCREMETN

INCREMETN将新的延迟数据添加到单元实例的任何现有延迟值。也可以使用INCREMETN来描述ABSOLUTE提到的八种延迟定义。

c) PATHPULSE

PATHPULSE指定设计输入和输出之间的脉冲传播极限。此极限值用于决定是将出现在输入上的脉冲传播到输出,还是将其标记为“ X ”,或者将其滤除。
在这里插入图片描述
在这里插入图片描述
RN和Q是单元的输入端口和输出端口。第一个值3是脉冲抑制极限(pulse rejection limit),称为r-limit,它定义了可以出现在输出上的最窄脉冲。窄于此的任何脉冲都会被拒绝通过,也就是说,它将不会出现在输出上。第二个值7(如果存在)是错误极限(error limit),也称为e-limit。任何小于e-limit的脉冲都会导致输出为“ X ”。e-limit必须大于r-limit,如上图所示。 当出现小于3(r-limit)的脉冲时,该脉冲不会传播到输出;当脉冲宽度在3(r-limit)和7(e-limit)之间时,输出为X ;当脉冲宽度大于7(e-limit)时,脉冲会传播到输出且没有任何滤除(unfiltered)。

d) PATHPULSEPERCENT

PATHPULSEPERCENT除了值以百分比表示外,这与PATHPULSE完全相同。

通常,可以将延迟指定为一个、两个、三个、六个或十二个令牌(token)的集合,这些令牌可用于描述以下过渡的延迟:0-> 1、1-> 0、0-> Z,Z-> 1,1-> Z,Z-> 0,0-> X,X-> 1,1-> X,X-> 0,X-> Z,Z-> X。下表展示了如何使用少于十二个延迟令牌来表示十二种过渡情况。
在这里插入图片描述
**延时从第一个括号开始,每个括号依次是0to1、1to0、0toZ、Zto1、1toZ、Zto0、0toX、Xto1、1toX、Xto0、XtoZ、ZtoX **,一个括号里面的三个数依次表示( 最小值:典型值:最大值)
如下图所示,IOPATH是输入输出路径延时,如果仅指定了两个延迟,则第一个(“上升”)在表中由01表示,第二个(“下降”)在10中表示;如果指定了六个延迟,则它们依次由01,10,0Z,Z1,1Z和Z0表示;如果指定了十二个延迟,则它们依次由01,10,0Z,Z1,1Z, Z0, 0X, X1, 1X, X0, XZ, ZX表示。
在这里插入图片描述

②TIMINGCHECK

在以TIMINGCHECK关键字开头的部分中指定了时序检查的极限。在任何这些检查中,可以使用COND结构指定有条件的时序检查。在某些情况下,可以指定两个额外的条件检查SCOND和CCOND,它们与stamp event和check event关联。

SDF主要包括以下TIMINGCHECK:
● SETUP:建立时间检查

示例如下:
在这里插入图片描述

● HOLD:保持时间检查

示例如下:
在这里插入图片描述

● SETUPHOLD:建立时间和保持时间检查

示例如下:
在这里插入图片描述
在这里插入图片描述

● RECOVERY:恢复时间检查

示例如下:
在这里插入图片描述

● REMOVAL:撤销时间检查

示例如下:
在这里插入图片描述

● RECREM:恢复时间和撤销时间检查

示例如下:
在这里插入图片描述

● SKEW:单向偏斜时序检查

示例如下:
在这里插入图片描述

● BIDIRECTSKEW:双向偏斜时序检查

示例如下:
在这里插入图片描述

● WIDTH:脉宽时序检查

示例如下:
在这里插入图片描述

● PERIOD:周期时序检查

示例如下:
在这里插入图片描述

● NOCHANGE:不变化时序检查

示例如下:
在这里插入图片描述

三、VCS如何反标SDF文件?

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

1. 作为elaboration的选项

-sdf min|typ|max:instance_name:file.sdf
如vcs- sdf min:top.i_test.:test.sdf

2. 使用系统函数$sdf_annotate

$sdf_annotate (“sdf_file”[, module_instance] [,“sdf_configfile”][,“sdf_logfile”] [,“mtm_spec”] [,“scale_factors”] [,“scale_type”]);
这里除了sdf_file必须给出外,其他参数可以使用默认值,如:
$sdf_annotate(“test.sdf”);
“sdf_file”指定sdf文件及其存放路径;module_instance指定sdf文件的反标范围;sdf_configfile”指定sdf配置文件;“sdf_logfile”指定Sdf的log 生成文件,这个文件会保存vcs在运行过程中产生的error信息和warning信息。“mtm_spec”指定vcs 反标哪一类延迟信息,可以使用“MINIMUM,TYPICAL,MAXIMUM,TOOL_CONTROL(default)”;“scale_factors”指定minimum,typical和maximum延迟的因子。通过冒号分割成3个字符串,默认值是“1.0:1.0:1.0”“scale_type”指定在缩放比例之前使用的SDF 文件里面延迟值,可能的值有“FROM_TYPICAL”,”FROM_MIMINUM”,”FROM_MAXIMUM”,”FROM_MTM”(默认值)。
重点要说明下参数scale_type,sdf文件中时序信息都会由3个数字组成,分别对应是minimum,typical,maximum三种情形下的延迟(当然,有时候会只有minimum和maximum的情况,那么typical的延迟没有就省略)。
因此,需要打开sdf文件看一下是否有typical的延迟,一般先进工艺下,typical的延迟为空。如果typical的延迟为空,则scale_type就不能选择FROM_TYPICAL。

如何确认成功反标呢?

反标完成后,可以从log中看到这样一句话:
Annotating SDF file “test.sdf” … Done

这样我们就反标完成了,接下来让我们通过后仿波形,验证下设计中延迟和sdf文件中延迟是否一致。比如,对于一个register, sdf反标成功后,它的D端和CP端一般不会同时到达。

在反标SDF后,specify块中定义的延迟值不再有用,取代的将是SDF文件中的延迟。所以如果sdf文件的条件信息如果在verilog的specify中没有的话,就会报SDFCOM_INF的warning,意思是IOPATH not found。


总结

在实际的数字电路设计中,掌握SDF文件的产生和内容含义、SDF反标的方法和原理对于确保设计质量和时序正确性非常重要。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值