数字电路验证方法 - 浙江大学信息与电子工程学系

Download Report

Transcript 数字电路验证方法 - 浙江大学信息与电子工程学系

数字集成电路验证方法学
2015年1月6日
主要内容

验证的必要性

验证方法学介绍

验证工具介绍

演示
2015/4/13
共79页
2
主要内容

验证的必要性

验证方法学介绍

验证工具介绍

演示
2015/4/13
共79页
3
验证的必要性

验证的概念,验证与测试的区别。

经验表明,验证已经占到整个产品开发周期的
70%以上,它已经成为复杂SOC(System onChip)开发中的重要壁垒。

制造、设计和验证能力之间存在鸿沟
2015/4/13
共79页
4
典型流程
Verification is not just very hard, it is very, very
hard没有一个简单的工具可以解决你所有的验证
问题。(VSIA,Virtual Socket Interface Alliance)
2015/4/13
共79页
5
主要内容

验证的必要性
验证方法学介绍

验证工具介绍

演示

2015/4/13
共79页
6
验证方法学

方法学:又称方法论,是一门学问采用的方法、规
则与公理;一种特定的做法或一套做法。

验证方法学:指完成验证过程中的一系列方法、技
术和规范。

1.仿真技术

2.静态技术

3.物理验证
2015/4/13
共79页
7
仿真技术

基于事件的仿真--任何一个输入的变化都被标记为事件,即
常说的功能仿真,精度高,速度慢。比如Modelsim, VCS。

基于周期的仿真--单周期内只检查一次输入并计算设计的输
出逻辑值。速度快,无时序、毛刺。比如Cyclone。

事务级仿真--一堆事件的集合即为事务,即常说的验证平台。

软硬件协同验证--需要专门的软硬件,成本高 。
2015/4/13
共79页
8
传统验证系统



DUT:Design
Under Test
适用于基于事
件的仿真和基
于周期的仿真。
适用于简单的
设计。
2015/4/13
缺点:
1.可扩展性差
2.可重用性差
共79页
9
层次化的验证系统
适用于事务级仿真
优点:
1.可扩展性好
2.可重用性好
2015/4/13
共79页
10
为什么要用事务级仿真?
基于事件的仿真与事务级仿真的比较
基于事件的仿真
事务级仿真
Testbench代码可读性,可
维护性
差
强
仿真速度
慢
快
Testbench结构
DUT复杂时,结构混乱
DUT复杂时,结构清晰
Testbench代码量
DUT简单时,代码量尚可
DUT复杂时,代码量巨大
DUT简单时,代码量略多
DUT复杂时。代码量较少
与待测设计联系程度
非常紧密
行为级与DUT联系紧密
事务级具有自身独立性
可重用性
无
强
抽象层次
无
有
参考模型
无
有
2015/4/13
共79页
11
事务级仿真

RVM: Reference Verification Methodology, Synopsys公司。

VMM:Verification Methodology Manual, ARM公司和
Synopsys公司。

AVM:Advanced Verification Methodology, Mentor公司。

OVM:Open Verification Methodology, Cadence公司和Mentor
公司。

UVM: Universal Verification Methodology, Cadence公司。
2015/4/13
共79页
12
为什么选用OVM?
各种验证方法学比较
验证方法学
侧重点
EDA验证工具
支持的验证语言
基类库是否
开源
RVM
层次化验证
VCS
OpenVera
否
VMM
RTL级模块
VCS
SystemVerilog
是
AVM
层次化验证
Questasim
SystemC/Syste
mVerilog
是
OVM
开源和不同
仿真器之间
的透明性
支持不同验证
工具
支持
SystemVerilog
等多种语言
是
UVM
开源和快速
入门
Questasim
NC-verilog
支持
SystemVerilog
等多种语言
是
2015/4/13
共79页
13
OVM介绍

OVM是一种基于SystemVerilog的验证方法或者策略,已经实现
了一个基本的层次化验证平台,大大简化验证工程师的工作量。

OVM可以验证HDL代码或者网表文件

OVM特点:
1.开放性:支持所有验证工具
2.开源:OVM库都是基于SystemVerilog实现的,可以在网上下
载。
3.可靠性:两大公司共同开发维护
2015/4/13
共79页
14
OVM结构







2015/4/13
共79页
ovm_env
ovm_sequecer
ovm_agent
ovm_transcation
ovm_scoreboard
ovm_driver
ovm_monitor
15
SystemVerilog介绍

SystemVerilog结合了Verilog和C++的概念
,具有如下新功能:

1.面向对象编程(OOP) 、
2.随机约束(Constraint Random)、
3.断言(Assertion) 、
4.功能覆盖率(Functional Coverage) 。



2015/4/13
共79页
16
SystemVerilog介绍-面向对象编程

OOP:Object-oriented programming

对象:对象(Object)是一个现实实体的抽象,对象可被认为是一
个把数据(属性)和程序(方法)封装在一起的实体,这个程序
产生该对象的动作,属性反映了对象当前的状态 。

面向对象编程:主要是将我们实际生活中的对象经过抽象,将

它定义成为一个类,通过类的属性和方法来模拟生活中的这个对
象。这样使得程序更容易结构化、抽象起来更方便。
传统的编程结构和设计方法以过程为中心进行功能组合,代码的
扩充和复用能力很差。对象是对现实世界实体的模拟,因面能更
容易地理解需求,即使用户和分析者之间具有不同的教育背景和
工作特点,也可很好地沟通。
2015/4/13
共79页
17
SystemVerilog介绍-面向对象编程




类:定义实物的抽象特点,
包含方法和属性。
对象:类的实例。
方法:类的行为。
继承:子类包含类的特性。
2015/4/13
共79页
18
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
2015/4/13
共79页
19
SystemVerilog介绍-断言
断言:属于验证方法中的一种,是对设计属性(行为)的描述,
如果一个属性不是我们期望的那样,那么断言就会失败。
assertions与verilog相比:
1.verilog是一种过程性语言。它的设计目的是硬件描述,它可以
很好的控制时序,但是描述复杂的时序关系,代码较为冗长。
2.assertions是一种描述性语言,设计目的为仿真验证。
2015/4/13
共79页
20
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);
2015/4/13
共79页
21
SystemVerilog介绍-功能覆盖率


功能覆盖率: 衡量哪些设计特征已经被测试程序测试过的
一个指标
代码覆盖率
1. 语句覆盖(StatementCoverage):度量被测代码中每
个可执行语句是否被执行到了。
2. 判定覆盖(DecisionCoverage):度量程序中每一个判
定的分支是否都被测试到了。
3. 条件覆盖(ConditionCoverage):度量判定中的每个子
表达式结果true和false是否被测试到了。
4. 路径覆盖(PathCoverage):度量了是否函数的每一个
分支都被执行了。
2015/4/13
共79页
22
SystemVerilog介绍-功能覆盖率

int foo(int a, int b)
{
int nReturn = 0;
if (a < 10)
{// 分支一
nReturn += 1;
}
if (b < 10)
{// 分支二
nReturn += 10;
}
return nReturn;
}
2015/4/13
共79页
23
SystemVerilog介绍-功能覆盖率
Functional Coverage
 covergroup:覆盖率模型
 sample():采样函数
 bins: 仓
Covergroup Covkind;
coverpoint tr.kind{ //kind 为4位数据
bins zero={0};
bins hi[ ] = {[8:$]};};
endgroup

2015/4/13
共79页
24
静态技术

语法检查--用户可以自由控制需要检查的规则,如代码风
格,可综合检查,DFT检查。 nlint工具。

静态时序分析--检查建立、保持时间以及其他延时信息是
否满足设计时序要求。 Prime Time。

形式验证—不考虑时序信息,通常用于验证两个设计是否
在功能上等效。 Formality 工具。
2015/4/13
共79页
25
静态时序分析
一般来说,要分析或检验一个电路设计的时序方面的特征有
两种主要手段:动态时序仿真(Dynamic Timing Simulation)
和静态时序分析(Static Timing Analysis)
1.动态时序仿真:利用仿真器和延迟文件,通过反标节点延迟信息来
仿真。
优点:可直观查看波形;缺点:速度慢,看不到关键路径。
2.静态时序分析:分析每条时间路径上的延迟,来查看是否存在
setup/hold违反。
优点:分析速度比较快,全面;缺点:不能查看功能是否正确。
2015/4/13
共79页
26
形式验证

所谓形式验证,就是通过比较两个设计在逻辑功能是否
等同的方法来验证电路的功能。

优点:
1.不依赖于测试矢量,因此能提供更完全的验证;
2.可以实现RTL-to-RTL、RTL-to-gate、gate-to-gate两
者之间的验证;
3.有定位功能,可以帮助你找出两个设计之间功能不等
同的原因;
4.可以使用的文件格式有VHDL、Verilog、Synopsys
的.db格式,以及EDIF网表等;
5.可以实现自动的分层验证;
2015/4/13
共79页
27
物理验证--版图级




电源电压降
串扰
天线效应
电迁移
2015/4/13
Astro布局布线工
具中完成
共79页
28
物理验证--版图级




电迁移 EM(electrical mobility)
概念:金属线在电流和温度的作用下产生的金属
迁移的现象
原因:电子沿着电压梯度漂移,与组成导线的金
属粒子发生碰撞,若能量很高,会使金属导体的
某些部位产生空洞或小丘,从而引起导线失效。
失效模式:主要包括短路、断路以及参数退化和时
序违规等
2015/4/13
共79页
29
主要内容

验证的必要性
验证方法学介绍

验证工具介绍

演示

2015/4/13
共79页
30
如何利用OVM完成验证?
2015/4/13
共79页
31
基于OVM的数字滤波器验证平台
输入信号


数模转化器(DAC)中的数字插值滤波器作为
此验证平台的DUT
数字插值滤波器的功能:
1.提高采样频率
2. 滤除带外(带宽20KHz)噪声
输出信号
2015/4/13
共79页
32
传统的滤波器验证平台仿真结果

传统的验证平台:基于定向测试矢量+波形查
看的方式
2015/4/13
共79页
33
传统验证平台没找到BUG的原因
1.仿真时间没有足够长
2.借助波形来判断
3.没有与理想参考模型比较
基于OVM的验证平台
2015/4/13
共79页
34
OVM验证平台验证步骤
1.利用OVM库完成平台代码
2.启动验证工具
3.创建编译库
4.编译验证平台代码
5.启动仿真
2015/4/13
共79页
35
利用OVM库完成平台代码


扩展OVM类
逐层完成:
1.接口
2.数据产生
3.驱动器
4.验证环境
5.比较器
2015/4/13
共79页
36
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)) ;
2015/4/13
共79页
37
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
2015/4/13
共79页
38
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
2015/4/13
共79页
39
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
2015/4/13
共79页
40
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
2015/4/13
共79页
41
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
2015/4/13
共79页
42
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
2015/4/13
共79页
43
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_check_o
>=data_out_design_for_check-2)||io.data_check_o==0;
endproperty
a10: assert property (p10);
endmodule
2015/4/13
共79页
44
OVM平台—顶层模块
`timescale 1ns/10ps
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的类
2015/4/13
共79页
45
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
2015/4/13
共79页
46
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
2015/4/13
共79页
47
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
2015/4/13
共79页
48
启动验证工具



利用mentor的questasim,界面和操作类似于
modelsim
环境变量source /opt/demo/questasim.env
启动命令vsim&
2015/4/13
共79页
49
脚本方式完成验证






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 // 结束仿真
2015/4/13
共79页
50
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
2015/4/13
共79页
51
结果查看
断言结果查看
代码覆盖率查看
2015/4/13
共79页
52
断言结果查看—Questasim下
2015/4/13
共79页
53
代码断言结果查看—Verdi下
Verdi(另外一个软件,专门用作波形查看和调
试)下查看断言结果更加直观,箭头朝上就表示
断言通过,朝下表示断言失败。
2015/4/13
共79页
54
代码覆盖率查看
2015/4/13
共79页
55
代码覆盖率查看
2015/4/13
共79页
56
动态时序仿真(后仿)


动态时序仿真:利用仿真器(Modelsim)
和延迟文件(SDF文件),通过反标节点延迟
信息来仿真。
需要的文件:
1.布局布线完的网表文件
2.布局布线后生成的SDF文件
3.标准单元库和IO库的Verilog模型文件
4.Testbench文件
2015/4/13
共79页
57
动态时序仿真(后仿)步骤
1.修改Testbench,添加布局布线完导出的SDF文件
2.创建新的工程
3.添加修改好的Testbench文件top_tb.v
4.添加布局布线完导出的网表文件fsk_layout.sv
5.添加标准单元的Verilog模型文件
/home/smic/smic_40/SCC40NLL_HS_RVT_V0
p1a/verilog/SCC40NLL_HS_RVT_V0p1.v
6.添加输入输出IO的Verilog模型文件
/home/smic/smic_40/SP40NLLD2RN_3P3V_V
0p2/verilog/SP40NLLD2RNP_3P3V_V0p1.v
7.编译及仿真
2015/4/13
共79页
58
Testbench中添加SDF文件
在Testbench中新建一个initial 块, 通过系统函
数$sdf_annotate()来读入SDF文件,并反标到网
表每个节点上。具体代码如下:
initial begin
$sdf_annotate(“/home/liuxp/class/astro/SDF/top
_pad.sdf ”, top_tb.top_pad);
end
Testbench
模块名称
2015/4/13
实例化的顶
层模块名称
共79页
59
后仿真波形
整体功能波形:
延迟信息:
2015/4/13
共79页
60
静态验证工具

静态时序分析—Prime Time

形式验证--Formality
2015/4/13
共79页
61
静态时序分析—PrimeTime


PrimeTime是Synopsys的静态时序分析软件,
常被用来分析大规模、同步、数字ASIC。
PrimeTime适用于门级的电路设计。
1.逻辑综合后网表
2.自动布局布线后网表
2015/4/13
共79页
62
PrimeTime流程
1.设置查找和链接路径;
2.读入并链接所要分析的设计;
3.设置操作条件和线上负载模型;
4.设置基本的时序约束;
5.检查所设置的约束以及该设计的结构。
2015/4/13
共79页
63
PrimeTime工具启动
source /opt/demo/synopsys.env
 pt_shell(无图形界面) 或者
 primetime&

2015/4/13
共79页
64
命令输入区
2015/4/13
共79页
65
PrimeTime脚本— source pt.scr
set lib_path /home/smic/smic_65/SCC65NLL_HS_RVT_V1p1a
set smic_stdlib_path ${lib_path}/synopsys/1.2v/
set smic_diolib_path
/home/smic/smic_65/SP65NLLD2RP_OV3_TTM_V0p2a/syn/3p3v/
set smic_aiolib_path
/home/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 dac
current_design dac
list_designs
report_cell
2015/4/13
共79页
66
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_load 5 [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
2015/4/13
共79页
67
形式验证--Formality


所谓形式验证,就是通过比较两个设计在逻辑
功能是否等同的方法来验证电路的功能。
Formality是Synopsys公司的产品,与
PrimeTime结合起来使用。
2015/4/13
共79页
68
形式验证--Formality
A design contains Logic Cones and Compare Points
Compare Point
Logic
Cone
BB
BB
Inputs
Compare Points
•
•
•
•
•
•
Outputs from Registers
Primary Input Ports
Outputs from Black Boxes
2015/4/13
共79页
Inputs to Registers
Primary Output Ports
Inputs to Black Boxes
69
形式验证--Formality

Breaks the two logic circuits up into logic
cones:

End points (compare points) are primary
outputs, registers, and black box inputs
D Q
BB
Determining Compare Points
2015/4/13
共79页
70
形式验证--Formality

Compare points are then aligned:
 This process is called “compare point matching”
 End points of logic cones (compare points) are primary outputs,
registers, and black box inputs
Reference Design
D Q
BB
CP
CP
CP
D Q
BB
Implementation Design
2015/4/13
共79页
71
形式验证--Formality
Verify Design

For each matched pair of compare points Formality tries to :
Either
 Confirms same response for all possible input combinations.
 Marks point as “passed”
Or
 Finds a “counter example” that shows different response
 Marks point as “failed”
2015/4/13
共79页
72
Formality流程
1.添加工艺库
2.创建container
3.读入参考库文件
4.读入设计文件
5.定义参考库和设计库
6.连接
7.开始比较
2015/4/13
共79页
73
Formality工具启动
source /opt/demo/synopsys.env
 fm_shell (无图形界面)或者
formality &

2015/4/13
共79页
74
命令输入区
2015/4/13
共79页
75
Formality— source fm.scr
set lib_path /home/smic/smic_65/SCC65NLL_HS_RVT_V1p1a
set smic_stdlib_path ${lib_path}/synopsys/1.2v/
set smic_diolib_path
/home/smic/smic_65/SP65NLLD2RP_OV3_TTM_V0p2a/syn/3p3v/
set smic_aiolib_path
/home/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}
2015/4/13
共79页
76
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
verify
report_failing_points
diagnose
2015/4/13
共79页
77
作业
后仿布局布线导出的网表文件(带SDF文件)。
2015/4/13
共79页
78
附录--FSK电路基本功能
输入一个564KHz的键控信号,(这里为了简化描述,
使用564 KHz来描述键控信号的速率,正常情况下是
用kbps。)
当键控信号为1时,模块产生并输出4.5MHz左右的信号(8倍)
当键控信号为0时,模块产生并输出3.9MHz左右的信号(7倍)
2015/4/13
共79页
79