数字集成电路可测性设计及验证方法学
Download
Report
Transcript 数字集成电路可测性设计及验证方法学
数字集成电路可测性软件
设计及验证平台
2013年4月25日
主要内容
可测性基础
可测性设计工具
验证的必要性
验证方法学介绍
验证工具介绍
2020/4/26
共102页
2
主要内容
可测性基础
可测性设计工具
验证的必要性
验证方法学介绍
验证工具介绍
2020/4/26
共102页
3
可测性基础
什么是可测性设计?
物理瑕疵及故障模型
单一故障模型:SAF Model
可测性设计常用方法
检测SAF的算法:D算法
测试矢量集
故障覆盖率
2020/4/26
共102页
4
什么是可测性设计?
可测性设计, Design For Test,即DFT 。
为了测试所设计IC有没有被正确的制造出来
(测试半导体生产处理过程中的瑕疵,不是测
试芯片设计的对错)。
DFT=增加芯片逻辑+生成测试矢量集(供测试
设备用)
2020/4/26
共102页
5
物理瑕疵和故障模型
1.开路和短路
2.金属线之间的电桥
3.漏源穿通
CMOS
反相器
中的物
理缺陷
2020/4/26
共102页
6
物理故障
逻辑故障
封装引脚间的漏电或短路
芯片焊接点到管脚连线断裂
表面玷污、含湿气
金属层迁移、应力、脱皮
金属层开路、短路
…
…
2020/4/26
共102页
单一固定故障
延时故障
短路或者开路故障
…
…
7
单一固定故障:stuck-at fault
固定1故障:
U0的输入端A固定接在高
电平上,其值一直为“1”
固定0故障:
U1的输出端Y固定接在
低电平上,其值一直为“0”
2020/4/26
共102页
8
DFT常用方法
功能点测试
需在每个测试点增加可控的输入和输出,I/O增加
扫描测试(基于D算法)
结构化的DFT技术,全扫描和部分扫描
内建自测试
消除了对ATE的存储能力和频率的限制,更具发
展潜力
2020/4/26
共102页
9
D算法
D算法是20世纪60年代IBM提出测试SAF(stuck-at
fault model,简称SAF模型)的,D算法在没有故障和
有故障的电路之间产生了逻辑的差异(Discrepan
cy),D为Discrepancy缩写,D算法即为差异算法。
经典的D算法如下:
1、瞄准特定的SAF。
2、驱动故障节点为反向值。
3、把错误传送到输出端口。
4、记录测试向量,减掉已测试过的故障。
2020/4/26
共102页
10
D算法
第一步:是把某个节点作为测试目标,我们把U1的输出
端作为测试的目标,探测它有无SA0的故障。
2020/4/26
共102页
11
D算法
第二步:是通过驱动该节点为相反的值以激活
(activate)目标的故障。
输入端口输入逻辑“0”,如U1输出没有SA0的故
障,其逻辑“1”;如U1输出有SA0的故障,其逻
辑为“0”。
可以通过测试其逻辑值来判断值该节点是否有
SA0的故障。
2020/4/26
共102页
12
D算法
第三步:是把故障效应传送到输出端口,可以在输出端口
观测到其逻辑值,有故障节点的逻辑值通过组合电路后可
能会反向,但是差异还保留着。
2020/4/26
共102页
13
D算法
第四步:记录向量。成功的测试向量被记录在内
存里,已测试的故障从目标故障的清单里减掉。
2020/4/26
共102页
14
扫描测试
可测试的触发器有两种模式:
正常模式——在这种模式下,所设计芯片以设计的原来
功能工作;
测试模式——在这种模式下,所设计芯片进行生产测试。
2020/4/26
共102页
15
扫描测试
标准D触发器
2020/4/26
与标准D触发器等
效的扫描触发器
共102页
16
扫描测试
使用扫描触发器,会增加设计的面积,增加了路径
的延迟,增大了触发器的输出负载和电路的功耗。
SMIC0.18µm工艺库
AREA(µm2)
FFDQRHDLX
63.2
FFSDQRHDLX
79.83
增加百分比
26.3%
2020/4/26
共102页
17
扫描测试流程
2020/4/26
共102页
18
测试矢量集(Test Pattern)
由一个或多个测试序列组成的测试矢量,测试矢量包含输
入激励和预期的输出响应,以测试一个目标的故障。
2020/4/26
共102页
19
以二输入与非门为例,假设输
入为A,B,输出为Y,
Y=~(A*B);
A
0
0
1
1
B
0
1
0
1
Y
1
1
1
0
A/1
1
0
1
0
A/0
1
1
1
1
B/1
1
1
0
0
B/0
1
1
1
1
Y/0
0
0
0
0
Y/1
1
1
1
1
测试矢量为:00 1,01 1,10 1,11 0
输入激励 输出响应
2020/4/26
共102页
20
故障覆盖率
可以测试到的故障占总故障的比例。
如果电路的每个节点既可以控制(controllable),
又可观测(observable),那么电路的测试覆盖率就
高。
可控,可测
不可控点:冗余电路,门控时钟
2020/4/26
共102页
可控,不可测
21
业界产品测试方法
ATE: Automatic Test Equipment
2020/4/26
共102页
22
2020/4/26
共102页
23
主要内容
可测性基础
可测性设计工具
验证的必要性
验证方法学介绍
验证工具介绍
2020/4/26
共102页
24
DFT Compiler
Synopsys公司的集成于Design Compiler的
先进测试综合工具
独创的“一遍测试综合”技术
功能强大的扫描式可测性设计分析、综合和验
证技术
支持RTL级、门级的扫描测试设计规则检查,
以及给予约束的扫描链插入和优化
启动命令source /opt/demo/synopsys.env
design_vision &
2020/4/26
共102页
25
设计流程
2020/4/26
共102页
26
1.Scan-Ready Synthesis
DFT Compiler
2020/4/26
共102页
27
2.Set ATE Configuration
2020/4/26
共102页
28
2.Set ATE Configuration
即测试时钟周期为100ns,输入端口的数据输入到达时间
为5ns,双向端口的数据输入到达时间为55ns,输出端口
的数据程序采样(strobe)时间为40ns。
测试时间参数的设置一般放在.synopsys_dc.setup文件
中,也可以包含在DC综合脚本文件里。
测试时钟定义了驱动所有扫描触发器的时钟,测试时钟一
般与电路的工作时钟不同,它是由ATE提供的,只在测试
时使用。DFTC进行设计时,假设ATE对芯片做测试的所
有时钟周期是相同的,等于test_default _period。
2020/4/26
共102页
29
3.Pre-Scan Check
执行create_test_protocol命令,生成测试协议
执行dft_drc命令,检查设计中有无测试设计规则的违规。
典型的设计综合规则有:
capacitance, transition, and fanout
典型的测试设计规则主要检查
1. 设计中是否有测试违规使得无法插入扫描链
2. 设计中是否有测试违规使得无法捕获数据
3. 设计中是否有测试违规使得测试覆盖率降低
2020/4/26
共102页
30
4.Scan Specification
在DFTC中,可以用set_scan_configuration命
令进行扫描路径的管理
set_scan_configuration -chain_count 6
set_scan_configuration -clock_mixing
mix_clocks
set_scan_configuration -internal_clocks true
set_scan_configuration -add_lockup false
2020/4/26
共102页
31
4.Scan Specification
用下面的命令定义设计中其中一条扫描链:
set_dft_signal -view spec -type
ScanDataIn -port SI1
set_dft_signal -view spec -type
ScanDataOut -port SO1
set_dft_signal -view spec -type
ScanEnable -port SE –active_satate1
set_san_path -view spec C1 -scan_data_in
SI1 –scan_data_out S01
2020/4/26
共102页
32
5.Scan Preview
执行preview_dft:
1.检查扫描路径的一致性
2.确定扫描链的数目
3.分派扫描单元和为扫描单元排次序
4.加入连接的硬件
2020/4/26
共102页
33
6.Scan Chain Synthesis
执行insert_dft,
• 读取已预览的扫描结构
• 进行所需要的扫描代替
• 插入测试点
• 保证没有竞争
• 连接扫描路径
• 把违规减少到最少
2020/4/26
共102页
34
Setting the Effort Level
2020/4/26
共102页
35
7.Post-Scan Check
2020/4/26
共102页
36
2020/4/26
共102页
37
8.Estimate Test coverage
2020/4/26
共102页
38
File Output
write -format verilog –hierarchy –output ./netlist/top_pad.sv
write_sdc ./sdc/top_pad.sdc
write_test_protocol -format stil -output ./spf/top_pad.spf
.sv文件和.sdc文件供布局布线工具Astro生成芯片版图
.spf文件供测试矢量生成工具Tetramax生成与测试矢量集,待芯片流片
封装好后,测试矢量集供ATE设备来测试芯片。
2020/4/26
共102页
39
主要内容
可测性基础
可测性设计工具
验证的必要性
验证方法学介绍
验证工具介绍
2020/4/26
共102页
40
验证的必要性
验证的概念,验证与测试的区别。
经验表明,验证已经占到整个产品开发周期的
70%以上,它已经成为复杂SOC(System onChip)开发中的重要壁垒。
2020/4/26
共102页
41
典型流程
动态仿真正确
时序 不满足
Verification is not just very hard, it is very, very
hard没有一个简单的工具可以解决你所有的验证
问题。(VSIA,Virtual Socket Interface Alliance)
2020/4/26
共102页
42
主要内容
可测性基础
可测性设计工具
验证的必要性
验证方法学介绍
验证工具介绍
2020/4/26
共102页
43
验证方法学
方法学:又称方法论,是一门学问采用的方法、规
则与公理;一种特定的做法或一套做法。
验证方法学:指完成验证过程中的一系列方法、技
术和规范。
仿真技术
静态技术
物理验证
2020/4/26
共102页
44
仿真技术
基于事件的仿真--任何一个输入的变化都被
标记为事件,即常说的功能仿真,精度高,
速度慢。比如Modelsim, VCS。
基于周期的仿真--单周期内只检查一次输入
并计算设计的输出逻辑值。速度快,无时
序、毛刺。比如Cyclone。
事务级仿真--一堆事件的集合即为事务,即
常说的验证平台。
软硬件协同验证--需要专门的软硬件,成本
高。
2020/4/26
共102页
45
传统仿真系统
DUT:Design
Under Test
适用于基于事
件的仿真和基
于周期的仿真。
适用于简单的
设计。
2020/4/26
缺点:
1.可扩展性差
2.可重用性差
共102页
46
层次化的验证系统
适用于事务级仿真
优点:
1.可扩展性好
2.可重用性好
2020/4/26
共102页
47
为什么要用事务级仿真?
基于事件的仿真与事务级仿真的比较
基于事件的仿真
事务级仿真
Testbench代码可读性,可
维护性
差
强
仿真速度
慢
快
Testbench结构
DUT复杂时,结构混乱
DUT复杂时,结构清晰
Testbench代码量
DUT简单时,代码量尚可
DUT复杂时,代码量巨大
DUT简单时,代码量略多
DUT复杂时。代码量较少
与待测设计联系程度
非常紧密
行为级与DUT联系紧密
事务级具有自身独立性
可复用性
无
强
抽象层次
无
有
参考模型
无
有
2020/4/26
共102页
48
事务级仿真
RVM: Reference Methodology Methodology,
Synopsys公司。
VMM:Verification Methodology Manual,
ARM公司和Synopsys公司。
AVM:Advanced Verification Methodology,
Mentor公司。
OVM:Open Verification Methodology,
Cadence公司和Mentor公司
UVM: Universal Verification Methodology,
Cadence公司
2020/4/26
共102页
49
为什么选用OVM?
各种验证方法学比较
验证方法学
侧重点
EDA验证工具
支持的验证语言
基类库是否
开源
RVM
层次化验证
VCS
OpenVera
否
VMM
RTL级模块
VCS
SystemVerilog
是
AVM
层次化验证
Questasim
SystemC/
SystemVerilog
是
OVM
开源和不同
仿真器之间
的透明性
支持不同验证
工具
支持
SystemVerilog
等多种语言
是
UVM
开源和快速
入门
Questasim
NC-verilog
支持
SystemVerilog
等多种语言
是
2020/4/26
共102页
50
SystemVerilog介绍
SystemVerilog结合了Verilog和C++的概念
,具有如下新功能:
1.面向对象编程(OOP) 、
2.随机约束(Constraint Random)、
3.断言(Assertion) 、
4.功能覆盖率(Functional Coverage) 。
2020/4/26
共102页
51
SystemVerilog介绍-面向对象编程
OOP:Object-oriented programming
类:定义实物的抽象特点,
包含方法和属性。
对象:类的实例。
方法:类的行为。
继承:子类包含类的特性。
2020/4/26
共102页
52
SystemVerilog介绍-随机约束
CRT:Constraint Random Test
class my_transaction extends ovm_transaction;
rand int data_i;
constraint c_data_i { data_i >= 0; data_i <
262144; }
virtual function void randomize_();
data_i = $random & 18'h3ffff;
endfunction
2020/4/26
共102页
53
SystemVerilog介绍-断言
Assertion 示例
property p10;
@(posedge clock)
(io.data_check_o<=data_out_design_for_che
ck+2)&&(io.data_check_o>=data_out_design
_for_check-2);
endproperty
a10: assert property (p10);
2020/4/26
共102页
54
SystemVerilog介绍-功能覆盖率
Functional Coverage
covergroup:覆盖率模型
sample():采样函数
bins: 仓
Covergroup Covkind;
coverpoint tr.kind{ //kind 为4位数据
bins zero={0};
bins hi[ ] = {[8:$]};};
endgroup
2020/4/26
共102页
55
OVM介绍
OVM是一种基于SystemVerilog的验证方法或
者策略。OVM已经实现了一个基本的层次化
验证平台,大大简化验证工程师的工作量。
OVM可以验证HDL代码或者网表文件
OVM特点:
1.开放性:支持所有验证工具
2.开源:OVM库都是基于SystemVerilog实现
的,可以在网上下载。
3.可靠性:两大公司共同开发维护
2020/4/26
共102页
56
OVM结构
2020/4/26
共102页
ovm_env
ovm_sequecer
ovm_agent
ovm_transcation
ovm_scoreboard
ovm_driver
ovm_monitor
57
静态技术
语法检查--用户可以自由控制需要检查的规则,
如代码风格,可综合检查,DFT检查。 nlint工具。
静态时序分析--检查建立、保持时间以及其他延
时信息是否满足设计时序要求。 Prime Time。
形式验证—不考虑时序信息,通常用于验证两
个设计是否在功能上等效。 Formality 工具。
2020/4/26
共102页
58
静态时序分析
一般来说,要分析或检验一个电路设计的时序方面的特征
有两种主要手段:动态时序仿真(Dynamic Timing
Simulation)和静态时序分析(Static Timing Analysis)
1.动态时序仿真:利用仿真器和延迟文件,通过反标节点延迟信息来
仿真。
优点:可直观查看波形;缺点:速度慢,看不到关键路径。
2.静态时序分析:分析每条时间路径上的延迟,来查看是否存在
setup/hold违反。
优点:分析速度比较快,全面;缺点:不能查看功能是否正确。
2020/4/26
共102页
59
形式验证
所谓形式验证,就是通过比较两个设计在逻辑功能是否
等同的方法来验证电路的功能。
优点:
1.不依赖于测试矢量,因此能提供更完全的验证;
2.可以实现RTL-to-RTL、RTL-to-gate、gate-to-gate之
间的验证;
3.有定位功能,可以帮助你找出两个设计之间功能不等
同的原因;
4.可以使用的文件格式有VHDL、Verilog、Synopsys
的.db格式,以及EDIF网表等;
5.可以实现自动的分层验证;
2020/4/26
共102页
60
物理验证--版图级
电源电压降
电迁移
功耗
天线效应
串扰
2020/4/26
Astro布局布线工
具中完成
共102页
61
主要内容
验证的必要性
验证方法学介绍
验证工具介绍
演示
2020/4/26
共102页
62
如何利用OVM完成验证?
2020/4/26
共102页
63
基于OVM的数字滤波器验证平台
输入信号
数模转化器(DAC)中的数字插值滤波器做为
此验证平台的DUT
数字插值滤波器的功能:
1.提高采样频率
2. 滤除带外(带宽20KHz)噪声
输出信号
2020/4/26
共102页
64
传统的滤波器验证平台仿真结果
传统的验证平台:基于定向测试矢量+波形查
看的方式
2020/4/26
共102页
65
传统验证平台没找到BUG的原因
1.仿真时间没有足够长
2.借助波形来判断
3.没有与理想参考模型比较
基于OVM的验证平台
2020/4/26
共102页
66
OVM验证平台验证步骤
利用OVM库完成平台代码
启动验证工具
创建编译库
编译验证平台代码
启动仿真
2020/4/26
共102页
67
利用OVM库完成平台代码
扩展OVM类
逐层完成
2020/4/26
接口
数据产生
驱动器
验证环境
比较器
共102页
68
OVM平台--接口
interface io_if();
logic [17:0] data_i;
logic [17:0] data_o;
logic [17:0] data_check_o;
modport dut_if(input data_i, output data_o);// DUT接口
modport check_if(input data_i, output data_check_o);// 比较器模块
接口
Endinterface
io_if my_io();//装载接口
module check(io_if.check_if io, input clock,rst,en);
dut dut(.io(my_io), .clock(clock), .rst(rst), .en(rst_check));
check check(.io(my_io), .clock(clock), .rst(rst), .en(rst_check)) ;
2020/4/26
共102页
69
OVM平台—数据产生
class my_transaction extends ovm_transaction;
rand int data_i;
function new (string name = "");
super.new(name);
endfunction: new
//产生随机事件的约束条件
constraint c_data_i { data_i >= 0; data_i <262144; }
virtual function void randomize_();
data_i = $random & 18'h3ffff;
endfunction
`ovm_object_utils_begin(my_transaction)//在程序中
`ovm_field_int(data_i, OVM_ALL_ON + OVM_DEC)
`ovm_object_utils_end
endclass: my_transaction
2020/4/26
共102页
70
OVM平台—驱动器
class my_driver extends ovm_driver;//
`ovm_component_utils(my_driver)//注册本类,这个宏的结尾没有符
号;
virtual io_if v_io;//装载虚拟接口
ovm_get_port #(my_transaction) get_port;//装载与激励发生器通信
的通道接口:
function new(string name, ovm_component parent);
super.new(name, parent);
//〖建议〗验证程序中可写一些ovm_report_info的语句供提示用:
ovm_report_info("", "Called my_driver::new");//在测试结果显示此
函数被调用
endfunction: new
2020/4/26
共102页
71
function void build;
super.build();
ovm_report_info("", "Called my_driver::build");
get_port = new("get_port", this);//初始化
endfunction : build
virtual task run;
ovm_report_info("", "Called my_driver::run");
forever
begin
my_transaction tx;
#1600 get_port.get(tx);//从通道中取一个事件
ovm_report_info("",$psprintf("data_i = %2h",tx.data_i));
v_io.dut_if.data_i = tx.data_i;
end
endtask: run
endclass: my_driver
2020/4/26
共102页
72
OVM平台—验证环境
class my_env extends ovm_env;//
`ovm_component_utils(my_env)//注册本类
ovm_random_stimulus #(my_transaction) env_stimulus;//装载激励器
tlm_fifo
#(my_transaction) env_fifo;//装载通道
my_driver
env_driver;//装载驱动器
function new(string name = "my_env", ovm_component parent = null);
super.new(name, parent);
ovm_report_info("", "Called my_env::new");
endfunction: new
2020/4/26
共102页
73
virtual function void build;
super.build();
ovm_report_info("", "Called my_env::build");
env_stimulus = new("env_stimulus", this);//初始化激励器
env_fifo = new("env_fifo", this);//初始化通道
env_driver = new("env.driver", this);//初始化驱动器
endfunction: build
virtual function void connect;//设定连接关系
ovm_report_info("", "Called my_env::connect");
env_stimulus.blocking_put_port.connect(env_fifo.put_export);//
激励器侧接口-放事件
env_driver.get_port.connect(env_fifo.get_export);//驱动器侧接口
-取事件
endfunction: connect
2020/4/26
共102页
74
virtual function void configure;//
ovm_report_info("", "Called my_env::configure");
env_stimulus.set_report_id_action("stimulus generation",
OVM_NO_ACTION);//限制显示信息
endfunction: configure//你可删除上一行,看看有什么变化?
task run();
ovm_report_info("","Called my_env::run");
endtask: run
virtual function void report;
ovm_report_info("", "Called my_env::report");
endfunction: report
//在运行下面的run_test()函数时,以上函数将自动依次运行
endclass: my_env
2020/4/26
共102页
75
OVM平台—比较器
module check(io_if.check_if io, input clock,rst,en, input [17:0]
data_out_design_for_check);
wire [17:0] hcic_out;
//参考模型
Hcic_full Hcic_full (clock, en, rst, io.data_i,
hcic_out,);
assign io.data_check_o= hcic_out;
property p10;
@(posedge clock)
(io.data_check_o<=data_out_design_for_check+2)&&(io.data_chec
k_o>=data_out_design_for_check-2)||io.data_check_o==0;
endproperty
a10: assert property (p10);
endmodule
2020/4/26
共102页
76
OVM平台—顶层模块
`timescale 1ns/1ns
module top;
import ovm_pkg::*;
import my_pkg::*;
parameter clock_cycle = 100;
bit clock;
bit rst;
bit rst_check;
io_if my_io();//装载接口
dut dut(.io(my_io), .clock(clock), .rst(rst), .en(rst_check));//装载DUT
check check(.io(my_io), .clock(clock), .rst(rst), .en(rst_check),
.data_out_design_for_check(my_io.dut_if.data_o));
//〖建议〗在验证程序顶级模块中一般采用继承ovm_test的类包装继承
ovm_env的类
2020/4/26
共102页
77
class my_test extends ovm_test;
`ovm_component_utils(my_test)//注册本类
my_env top_env;//装载环境-top_env
function new(string name = "my_test", ovm_component parent =
null);
super.new(name, parent);
ovm_report_info("", "Called my_test::new");
endfunction: new
virtual function void build;
super.build();
ovm_report_info("", "Called my_test::build");
top_env=new();//初始化
//〖建议〗在验证程序中可设定看门狗
set_global_timeout(1000000us);
endfunction: build
2020/4/26
共102页
78
virtual function void connect;
ovm_report_info("", "Called my_test::connect");
top_env.env_driver.v_io = my_io;//连接虚拟接口到驱动器的物理
接口
endfunction: connect
task run;
my_transaction tx;
tx = new();
ovm_report_info("", "Called my_test::run");
top_env.env_stimulus.generate_stimulus(tx, 2000000);//激励器
产生20个事件
endtask: run
endclass: my_test
2020/4/26
共102页
79
initial begin
run_test(“my_test”);
clock=0;
rst=0;
rst_check=0;
#(32*clock_cycle) rst=1;
end
always #(clock_cycle/2) clock = ~clock;
initial begin
$fsdbDumpfile("top.fsdb");
$fsdbDumpSVA;
$fsdbDumpvars(0,top,"+all");
end
endmodule: top
2020/4/26
共102页
80
启动验证工具
利用mentor的questasim,界面和操作类似于
modelsim
环境变量source /opt/demo/questasim.env
启动命令vsim&
2020/4/26
共102页
81
脚本方式完成验证
vlib dac_hcic //创建库
vlog +acc -f ../rtl/ovm_rtl/compile_questa_sv.f -work dac_hcic -sv
+cover // 编译整个验证平台
vsim -c dac_hcic.top -sv_seed 100 -coverage -assertcover assertdebug -sva -voptargs=“+acc” -pli
/opt/springsoft/verdi/share/PLI/MODELSIM/LINUX/novas_fli.so //启
动仿真
view assertions //查看断言
run -all //开始运行
quit -sim // 结束仿真
2020/4/26
共102页
82
compile_questa_sv.f
+incdir+/home1t/opt/questasim/questasim/ver
ilog_src/ovm-2.1.2/src
/home1t/opt/questasim/questasim/verilog_src
/ovm-2.1.2/src/ovm_pkg.sv
+incdir+/home/liuxp/dac/rtl/ovm_rtl
+incdir+/home/liuxp/dac/rtl/dac_balise/dac_h
af_cic
/home/liuxp/dac/rtl/ovm_rtl/ovm_start.sv
2020/4/26
共102页
83
结果查看
断言结果查看
覆盖率查看
2020/4/26
共102页
84
断言结果查看—Questasim下
2020/4/26
共102页
85
断言结果查看—Verdi下
Verdi(另外一个软件,专门用作波形查看和调
试)下查看断言结果更加直观,箭头朝上就表示
端正通过,朝下表示断言失败。
2020/4/26
共102页
86
覆盖率查看
2020/4/26
共102页
87
覆盖率查看
2020/4/26
共102页
88
静态验证工具
静态时序分析—Prime Time
形式验证--Formality
2020/4/26
共102页
89
静态时序分析—PrimeTime
PrimeTime是Synopsys的静态时序分析软件,
常被用来分析大规模、同步、数字ASIC。
PrimeTime适用于门级的电路设计。
1.逻辑综合后网表
2.自动布局布线后网表
2020/4/26
共102页
90
PrimeTime流程
1.设置查找和链接路径;
2.读入并链接所要分析的设计;
3.设置操作条件和线上负载模型;
4.设置基本的时序约束;
5.检查所设置的约束以及该设计的结构。
2020/4/26
共102页
91
PrimeTime工具启动
source /opt/demo/synopsys.env
pt_shell
primetime&
2020/4/26
共102页
92
命令输入区
2020/4/26
共102页
93
PrimeTime脚本— source pt.scr
set lib_path /home1t/smic/smic_65/SCC65NLL_HS_RVT_V1p1aset
smic_stdlib_path ${lib_path}/synopsys/1.2v/set smic_diolib_path
/home1t/smic/smic_65/SP65NLLD2RP_OV3_TTM_V0p2a/syn/3p3v/set
smic_aiolib_path
/home1t/smic/smic_65/SP65NLLD2RP_OV3_ANALOG_TTM_V0p2a/syn/3p3v/
set smic_stdsymlib_path ${lib_path}/Symbol/
set search_path "$search_path $smic_stdlib_path $smic_aiolib_path
\$smic_diolib_path $smic_stdsymlib_path $smic_iosymlib_path“
set link_path "* scc65nll_hs_rvt_ss_v1p08_125c_basic.db
scc65nll_hs_rvt_ff_v1p32_-40c_basic.db
SP65NLLD2RP_OV3_TTM_V0p2_ss_V1p08_125C.db
SP65NLLD2RP_OV3_TTM_V0p2_ff_V1p32_-40C.db“
set symbol_library [list SCC65NLL_HS_RVT_V1p1.sdb]
remove_design –all
read_verilog "../syn/netlist/dac.sv“
link_design da
ccurrent_design dac
list_designs
report_cell
2020/4/26
共102页
94
PrimeTime脚本— source pt.scr
set_operating_conditions -min_library scc65nll_hs_rvt_ff_v1p32_-40c_basic min ff_v1p32_-40c -max_library scc65nll_hs_rvt_ss_v1p08_125c_basic -max
ss_v1p08_125c -analysis_type bc_wcset_operating_conditions -library
scc65nll_hs_rvt_ff_v1p32_-40c_basic ff_v1p32_-40c
create_clock -name clk -period 300 -waveform [list 0 150] clk_in_pad
set_clock_latency 2.0 [all_clocks]
set_clock_uncertainty -setup 2.0 clk
set_clock_transition 2 [get_clocks clk]
set_drive 0 [list clk clk_in_pad ]
set_driving_cell -library SP65NLLD2RP_OV3_TTM_V0p2_ss_V1p08_125C lib_cell PICDR -pin C [remove_from_collection [all_inputs] [get_ports
{clk_in_pad}]]
set_load 2 [all_outputs]
set_input_delay 5 -clock clk -max [remove_from_collection [all_inputs]
[get_ports {clk_in_pad}] ]
set_output_delay 5 -clock clk -max [all_outputs]
report_constraint
report_timing
2020/4/26
共102页
95
形式验证--Formality
所谓形式验证,就是通过比较两个设计在逻辑
功能是否等同的方法来验证电路的功能。
Formality是Synopsys公司的产品,与
PrimeTime结合起来使用。
2020/4/26
共102页
96
Formality流程
1.设置环境
2.创建container
3.读入库文件
4.读入设计文件
5.定义参考库和设计库
6.连接
7.开始比较
2020/4/26
共102页
97
Formality工具启动
source /opt/demo/synopsys.env
fm_shell
formality &
2020/4/26
共102页
98
命令输入区
2020/4/26
共102页
99
Formality— source fm.scr
set lib_path /home1t/smic/smic_65/SCC65NLL_HS_RVT_V1p1aset
smic_stdlib_path ${lib_path}/synopsys/1.2v/set smic_diolib_path
/home1t/smic/smic_65/SP65NLLD2RP_OV3_TTM_V0p2a/syn/3p3v/set
smic_aiolib_path
/home1t/smic/smic_65/SP65NLLD2RP_OV3_ANALOG_TTM_V0p2a/syn/3p3v/
set search_path "$smic_stdlib_path $smic_aiolib_path $smic_diolib_path "
create_container ref
read_db [list scc65nll_hs_rvt_ss_v1p08_125c_basic.db
\SP65NLLD2RP_OV3_TTM_V0p2_ss_V1p08_125C.db
\SP65NLLD2RP_OV3_ANALOG_TTM_V0p1_ss_v1p08_125C.db]
read_verilog {../rtl/dac_haf_cic/top.v \
../rtl/dac_haf_cic/filter.v \
../rtl/dac_haf_cic/en.v \
../rtl/dac_haf_cic/haf1_new.v \
../rtl/dac_haf_cic/haf2_new.v \
../rtl/dac_haf_cic/Hcic.v \
../rtl/dac_haf_cic/modulator.v \
../rtl/dac_haf_cic/DWA.v}
2020/4/26
共102页
100
Formality— source fm.scr
set_reference_design ref:/WORK/total
link $ref
create_container icmp
read_verilog -netlist ../syn/netlist/dac.sv
set_implementation_design icmp:/WORK/total
set_top icmp:/WORK/total save_session -replace fm_shell_session
exit
formality&
restore_session fm_shell_session.fss
verify
report_failing_points
diagnose
2020/4/26
共102页
101
演示
2020/4/26
共102页
102