首页
学习
活动
专区
圈层
工具
发布
36 篇文章
1
形式验证与formality基本流程
2
安全地启动sequence
3
【UVM COOKBOOK】Testbench Architecture【二】
4
【UVM COOKBOOK】Testbench Architecture【一】
5
svlib文档翻译(第一至四章)
6
svlib文档翻译(第五章)
7
浅谈便携式激励(PSS)和UVM
8
便携式激励vs形式化vsUVM验证方法在IP块的整个生命周期中的比较分析
9
通过字符串访问generate模块内部的变量
10
Verilog:笔试面试常考易错点整理
11
【源码】手把手教你用Python实现Vivado和ModelSim仿真自动化
12
如何快速生成Verilog代码文件列表?(内附开源C代码)
13
IC工程师的通用技能:文本处理
14
NCVerilog+SimVision+Vivado仿真环境搭建
15
串扰
16
论STA | 数字电路中的串扰
17
STA | 串扰,理论分析
18
低功耗 | UPF + CLP
19
combinational clock gating Vs sequential clock gating
20
Clock Domain Crossing, 跨时钟域检查
21
低功耗 | Glitch Power 分析
22
P&R | 如何在实现全流程中考虑IR-Drop
23
点论 | 组合逻辑环 Combinational loop 知多少
24
UVM的一个简单验证demo
25
systemverilog之Automatic
26
【手把手系列】:芯片设计中的Makefile简明教程
27
“ 一网打尽 ” 二进制、格雷码、独热码编码方式
28
分而治之(Hierarchical Sequences),处理复杂事物的绝对准则
29
断言(assertion),把黑盒变成白盒
30
针对assertion based验证的一些“建议”和“不建议”
31
python脚本练习(5):读写文件步骤
32
python脚本练习(4):正则表达式实例
33
python脚本练习(3):正则表达式实例
34
python脚本练习(2):使用正则表达式的三部曲
35
python脚本练习(1):表格打印
36
VCS门级仿真系列文章之sdf文件和$sdf_annotate

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系统任务进行反标,其使用格式如下。

代码语言:javascript
复制
$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

代码语言:javascript
复制
`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文件。

代码语言:javascript
复制
(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系统函数:

代码语言:javascript
复制
initial
begin
$sdf_annotate("ring_oscillator.sdf",ring_oscillator);
end

界面打印出信息

代码语言:javascript
复制
***   $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中看到振荡的输出了

举报
领券