




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数字集成电路验证方法学2013年12月31日2023/1/312主要内容验证的必要性验证方法学介绍验证工具介绍演示共69页2023/1/313主要内容验证的必要性验证方法学介绍验证工具介绍演示
共69页2023/1/314验证的必要性验证的概念,验证与测试的区别。经验表明,验证已经占到整个产品开发周期的70%以上,它已经成为复杂SOC(Systemon-Chip)开发中的
重要壁垒。制造、设计和验证能力之间的鸿沟共69页2023/1/315典型流程
时序不满足动态仿真正确Verificationisnotjustveryhard,itisvery,veryhard没有一个简单的工具可以解决你所有的验证问题。(VSIA,Virtual
Socket
Interface
Alliance)系统功能
不满足系统规划满足
功能不正确系统结构不合理
时序不满足动态仿真正确
功能正确共69页2023/1/316主要内容验证的必要性验证方法学介绍验证工具介绍演示
共69页2023/1/317验证方法学方法学:又称方法论,是一门学问采用的方法、规则与公理;一种特定的做法或一套做法。验证方法学:指完成验证过程中的一系列方法、技术和规范。1.仿真技术
2.静态技术
3.物理验证
共69页2023/1/318仿真技术基于事件的仿真--任何一个输入的变化都被标记为事件,即常说的功能仿真,精度高,速度慢。比如Modelsim,VCS。基于周期的仿真--单周期内只检查一次输入并计算设计的输出逻辑值。速度快,无时序、毛刺。比如Cyclone。事务级仿真--一堆事件的集合即为事务,即常说的验证平台。软硬件协同验证--需要专门的软硬件,成本高。共69页传统验证系统2023/1/319DUT:DesignUnderTest适用于基于事件的仿真和基于周期的仿真。适用于简单的设计。缺点:1.可扩展性差2.可重用性差共69页层次化的验证系统2023/1/3110适用于事务级仿真优点:1.可扩展性好2.可重用性好共69页为什么要用事务级仿真?
2023/1/3111基于事件的仿真事务级仿真Testbench代码可读性,可维护性差强仿真速度慢快Testbench结构DUT复杂时,结构混乱DUT复杂时,结构清晰Testbench代码量DUT简单时,代码量尚可DUT复杂时,代码量巨大DUT简单时,代码量略多DUT复杂时。代码量较少与待测设计联系程度非常紧密行为级与DUT联系紧密事务级具有自身独立性可复用性无强抽象层次无有参考模型无有基于事件的仿真与事务级仿真的比较共69页事务级仿真RVM:Reference
Verification
Methodology,Synopsys公司。
VMM:Verification
MethodologyManual,ARM公司和Synopsys公司。AVM:AdvancedVerificationMethodology,Mentor公司。OVM:OpenVerificationMethodology,Cadence公司和Mentor公司UVM:UniversalVerificationMethodology,Cadence公司2023/1/3112共69页为什么选用OVM?
验证方法学侧重点EDA验证工具支持的验证语言基类库是否开源RVM层次化验证VCSOpenVera否VMMRTL级模块VCSSystemVerilog是AVM层次化验证QuestasimSystemC/SystemVerilog是OVM开源和不同仿真器之间的透明性支持不同验证工具支持SystemVerilog等多种语言是UVM开源和快速入门QuestasimNC-verilog支持SystemVerilog等多种语言是2023/1/3113各种验证方法学比较共69页SystemVerilog介绍SystemVerilog结合了Verilog和C++的概念,具有如下新功能:1.面向对象编程(OOP)、2.随机约束(ConstraintRandom)、3.断言(Assertion)、4.功能覆盖率(FunctionalCoverage)。2023/1/3114共69页OOP:Object-orientedprogramming类:定义实物的抽象特点,包含方法和属性。对象:类的实例。方法:类的行为。继承:子类包含类的特性。2023/1/3115SystemVerilog介绍-面向对象编程
共69页CRT:ConstraintRandomTestclassmy_transactionextendsovm_transaction;
randintdata_i;constraintc_data_i{data_i>=0;data_i<262144;}
virtualfunctionvoidrandomize_();data_i=$random&18'h3ffff;endfunction2023/1/3116SystemVerilog介绍-随机约束共69页SystemVerilog介绍-断言Assertion示例propertyp10;@(posedgeclock)(io.data_check_o<=data_out_design_for_check+2)&&(io.data_check_o>=data_out_design_for_check-2);endpropertya10:assertproperty(p10);2023/1/3117共69页FunctionalCoveragecovergroup:覆盖率模型sample():采样函数bins:仓CovergroupCovkind;coverpointtr.kind{//kind为4位数据binszero={0};binshi[]={[8:$]};};endgroup2023/1/3118SystemVerilog介绍-功能覆盖率共69页OVM介绍OVM是一种基于SystemVerilog的验证方法或者策略。OVM已经实现了一个基本的层次化验证平台,大大简化验证工程师的工作量。OVM可以验证HDL代码或者网表文件OVM特点:1.开放性:支持所有验证工具2.开源:OVM库都是基于SystemVerilog实现
的,可以在网上下载。3.可靠性:两大公司共同开发维护2023/1/3119共69页2023/1/3120OVM结构ovm_envovm_sequecerovm_agentovm_transcationovm_scoreboardovm_driverovm_monitor共69页2023/1/3121静态技术语法检查--用户可以自由控制需要检查的规则,如代码风格,可综合检查,DFT检查。nlint工具。静态时序分析--检查建立、保持时间以及其他延时信息是否满足设计时序要求。PrimeTime。形式验证—不考虑时序信息,通常用于验证两个设计是否在功能上等效。Formality工具。共69页2023/1/3122一般来说,要分析或检验一个电路设计的时序方面的特征有两种主要手段:动态时序仿真(DynamicTimingSimulation)和静态时序分析(StaticTimingAnalysis)
1.动态时序仿真:利用仿真器和延迟文件,通过反标节点延迟信息来仿真。
优点:可直观查看波形;缺点:速度慢,看不到关键路径。
2.静态时序分析:分析每条时间路径上的延迟,来查看是否存在setup/hold违反。
优点:分析速度比较快,全面;缺点:不能查看功能是否正确。静态时序分析
共69页2023/1/3123
所谓形式验证,就是通过比较两个设计在逻辑功能是否等同的方法来验证电路的功能。优点:
1.不依赖于测试矢量,因此能提供更完全的验证;
2.可以实现RTL-to-RTL、RTL-to-gate、gate-to-gate两者之间的验证;
3.有定位功能,可以帮助你找出两个设计之间功能不等同的原因;
4.可以使用的文件格式有VHDL、Verilog、Synopsys的.db格式,以及EDIF网表等;
5.可以实现自动的分层验证;形式验证共69页2023/1/3124物理验证--版图级电源电压降电迁移功耗Astro布局布线工天线效应具中完成串扰共69页2023/1/3125主要内容验证的必要性验证方法学介绍验证工具介绍演示
共69页如何利用OVM完成验证?2023/1/3126共69页基于OVM的数字滤波器验证平台数模转化器(DAC)中的数字插值滤波器做为此验证平台的DUT数字插值滤波器的功能:1.提高采样频率2.滤除带外(带宽20KHz)噪声
2023/1/3127输入信号输出信号共69页传统的滤波器验证平台仿真结果传统的验证平台:基于定向测试矢量+波形查看的方式2023/1/3128共69页传统验证平台没找到BUG的原因
1.仿真时间没有足够长2.借助波形来判断3.没有与理想参考模型比较
基于OVM的验证平台2023/1/3129共69页OVM验证平台验证步骤1.利用OVM库完成平台代码2.启动验证工具3.创建编译库4.编译验证平台代码5.启动仿真2023/1/3130共69页利用OVM库完成平台代码扩展OVM类逐层完成:1.接口2.数据产生3.驱动器4.验证环境5.比较器2023/1/3131共69页OVM平台--接口interfaceio_if();
logic[17:0]data_i;
logic[17:0]data_o;
logic[17:0]data_check_o;
modportdut_if(inputdata_i,outputdata_o);//DUT接口
modportcheck_if(inputdata_i,outputdata_check_o);//比较器模块接口Endinterface
io_ifmy_io();//装载接口
modulecheck(io_if.check_ifio,inputclock,rst,en);dutdut(.io(my_io),.clock(clock),.rst(rst),.en(rst_check));checkcheck(.io(my_io),.clock(clock),.rst(rst),.en(rst_check));2023/1/3132共69页OVM平台—数据产生classmy_transactionextendsovm_transaction;
randintdata_i;
functionnew(stringname="");
super.new(name);
endfunction:new
//产生随机事件的约束条件constraintc_data_i{data_i>=0;data_i<262144;}virtualfunctionvoidrandomize_();
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_transaction2023/1/3133共69页OVM平台—驱动器
classmy_driverextendsovm_driver;//
`ovm_component_utils(my_driver)//注册本类,这个宏的结尾没有符号;
virtualio_ifv_io;//装载虚拟接口
ovm_get_port#(my_transaction)get_port;//装载与激励发生器通信的通道接口:
functionnew(stringname,ovm_componentparent);
super.new(name,parent);
//〖建议〗验证程序中可写一些ovm_report_info的语句供提示用:
ovm_report_info("","Calledmy_driver::new");//在测试结果显示此函数被调用
endfunction:new
2023/1/3134共69页functionvoidbuild;
super.build();
ovm_report_info("","Calledmy_driver::build");
get_port=new("get_port",this);//初始化
endfunction:build
virtualtaskrun;
ovm_report_info("","Calledmy_driver::run");
forever
begin
my_transactiontx;
#1600get_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_driver2023/1/3135共69页OVM平台—验证环境
classmy_envextendsovm_env;//
`ovm_component_utils(my_env)//注册本类
ovm_random_stimulus#(my_transaction)env_stimulus;//装载激励器
tlm_fifo#(my_transaction)env_fifo;//装载通道
my_driverenv_driver;//装载驱动器
functionnew(stringname="my_env",ovm_componentparent=null);
super.new(name,parent);
ovm_report_info("","Calledmy_env::new");
endfunction:new
2023/1/3136共69页virtualfunctionvoidbuild;
super.build();
ovm_report_info("","Calledmy_env::build");
env_stimulus=new("env_stimulus",this);//初始化激励器
env_fifo=new("env_fifo",this);//初始化通道
env_driver=new("env.driver",this);//初始化驱动器
endfunction:build
virtualfunctionvoidconnect;//设定连接关系
ovm_report_info("","Calledmy_env::connect");
env_stimulus.blocking_put_port.connect(env_fifo.put_export);//激励器侧接口-放事件
env_driver.get_port.connect(env_fifo.get_export);//驱动器侧接口-取事件
endfunction:connect2023/1/3137共69页virtualfunctionvoidconfigure;//
ovm_report_info("","Calledmy_env::configure");
env_stimulus.set_report_id_action("stimulusgeneration",OVM_NO_ACTION);//限制显示信息
endfunction:configure//你可删除上一行,看看有什么变化?
taskrun();
ovm_report_info("","Calledmy_env::run");
endtask:run
virtualfunctionvoidreport;
ovm_report_info("","Calledmy_env::report");
endfunction:report
//在运行下面的run_test()函数时,以上函数将自动依次运行
endclass:my_env2023/1/3138共69页modulecheck(io_if.check_ifio,inputclock,rst,en,input[17:0]data_out_design_for_check);wire[17:0]hcic_out;//参考模型Hcic_fullHcic_full
(clock,
en,rst,
io.data_i,
hcic_out,);assignio.data_check_o=hcic_out;propertyp10;
@(posedgeclock)(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;endpropertya10:assertproperty(p10);endmodule2023/1/3139OVM平台—比较器共69页`timescale1ns/10psmoduletop;
importovm_pkg::*;
importmy_pkg::*;
parameterclock_cycle=100;
bitclock;
bitrst;
bitrst_check;
io_ifmy_io();//装载接口
dutdut(.io(my_io),.clock(clock),.rst(rst),.en(rst_check));//装载DUT
checkcheck(.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的类2023/1/3140OVM平台—顶层模块共69页
classmy_testextendsovm_test;
`ovm_component_utils(my_test)//注册本类
my_envtop_env;//装载环境-top_env
functionnew(stringname="my_test",ovm_componentparent=null);
super.new(name,parent);
ovm_report_info("","Calledmy_test::new");
endfunction:new
virtualfunctionvoidbuild;
super.build();
ovm_report_info("","Calledmy_test::build");
top_env=new();//初始化
//〖建议〗在验证程序中可设定看门狗
set_global_timeout(1000000us);
endfunction:build
2023/1/3141共69页virtualfunctionvoidconnect;
ovm_report_info("","Calledmy_test::connect");
top_env.env_driver.v_io=my_io;//连接虚拟接口到驱动器的物理接口
endfunction:connect
taskrun;
my_transactiontx;
tx=new();
ovm_report_info("","Calledmy_test::run");
top_env.env_stimulus.generate_stimulus(tx,2000000);//激励器产生20个事件
endtask:run
endclass:my_test2023/1/3142共69页initialbeginrun_test(“my_test”);
clock=0;
rst=0;
rst_check=0;
#(32*clock_cycle)rst=1;
endalways#(clock_cycle/2)clock=~clock;initial
begin
$fsdbDumpfile("top.fsdb");
$fsdbDumpSVA;
$fsdbDumpvars(0,top,"+all");end
endmodule:top2023/1/3143共69页启动验证工具利用mentor的questasim,界面和操作类似于modelsim环境变量source/opt/demo/questasim.env启动命令vsim&2023/1/3144共69页脚本方式完成验证vlibdac_hcic//创建库vlog+acc-f../rtl/ovm_rtl/compile_questa_sv.f-workdac_hcic-sv+cover//编译整个验证平台vsim-cdac_hcic.top-sv_seed100-coverage-assertcover-assertdebug-sva-voptargs=“+acc”-pli/opt/springsoft/verdi/share/PLI/MODELSIM/LINUX/novas_fli.so//启动仿真viewassertions//查看断言run-all//开始运行quit-sim//结束仿真2023/1/3145共69页compile_questa_sv.f+incdir+/home1t/opt/questasim/questasim/verilog_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_haf_cic/home/liuxp/dac/rtl/ovm_rtl/ovm_start.sv2023/1/3146共69页结果查看断言结果查看代码覆盖率查看2023/1/3147共69页断言结果查看—Questasim下2023/1/3148共69页代码断言结果查看—Verdi下2023/1/3149Verdi(另外一个软件,专门用作波形查看和调试)下查看断言结果更加直观,箭头朝上就表示断言通过,朝下表示断言失败。共69页代码覆盖率查看2023/1/3150共69页代码覆盖率查看2023/1/3151共69页动态时序仿真:利用仿真器(Modelsim)和延迟文件(SDF文件),通过反标节点延迟信息来仿真。需要的文件:1.布局布线完的网表文件2.布局布线后生成的SDF文件3.标准单元库和IO库的Verilog模型文件4.Testbench文件2023/1/3152动态时序仿真(后仿)共69页1.修改Testbench,添加布局布线完导出的SDF文件2.创建新的工程3.添加修改好的Testbench文件top_tb.v4.添加布局布线完导出的网表文件fsk_layout.sv5.添加标准单元的Verilog模型文件/home/smic/smic_40/SCC40NLL_HS_RVT_V0p1a/verilog/SCC40NLL_HS_RVT_V0p1.v6.添加输入输出IO的Verilog模型文件/home/smic/smic_40/SP40NLLD2RN_3P3V_V0p2/verilog/SP40NLLD2RNP_3P3V_V0p1.v7.编译及仿真53/74动态时序仿真(后仿)步骤2023/1/31共69页Testbench中添加SDF文件在Testbench中新建一个initial块,通过系统函数$sdf_annotate()来读入SDF文件,并反标到网表每个节点上。具体代码如下:initialbegin$sdf_annotate(“/home/liuxp/class/astro/SDF/top_pad.sdf”,top_tb.top_pad);end2023/1/3154Testbench模块名称实例化的顶层模块名称共69页后仿真波形整体功能波形:延迟信息:55/742023/1/31共69页静态验证工具静态时序分析—PrimeTime形式验证--Formality2023/1/3156共69页静态时序分析—PrimeTimePrimeTime是Synopsys的静态时序分析软件,常被用来分析大规模、同步、数字ASIC。PrimeTime适用于门级的电路设计。1.逻辑综合后网表2.自动布局布线后网表2023/1/3157共69页PrimeTime流程
1.设置查找和链接路径;2.读入并链接所要分析的设计;3.设置操作条件和线上负载模型;4.设置基本的时序约束;5.检查所设置的约束以及该设计的结构。2023/1/3158共69页PrimeTime工具启动source/opt/demo/synopsys.envpt_shell(无图形界面)或者primetime&2023/1/3159共69页2023/1/3160命令输入区共69页2023/1/3161PrimeTime脚本—sourcept.scrsetlib_path/home/smic/smic_65/SCC65NLL_HS_RVT_V1p1aset
smic_stdlib_path${lib_path}/synopsys/1.2v/setsmic_diolib_path/home/smic/smic_65/SP65NLLD2RP_OV3_TTM_V0p2a/syn/3p3v/setsmic_aiolib_path/home/smic/smic_65/SP65NLLD2RP_OV3_ANALOG_TTM_V0p2a/syn/3p3v/setsmic_stdsymlib_path${lib_path}/symbol/setsearch_path"$search_path$smic_stdlib_path$smic_aiolib_path\$smic_diolib_path$smic_stdsymlib_path$smic_iosymlib_path“setlink_path"*scc65nll_hs_rvt_ss_v1p08_125c_basic.dbscc65nll_hs_rvt_ff_v1p32_-40c_basic.dbSP65NLLD2RP_OV3_TTM_V0p2_ss_V1p08_125C.dbSP65NLLD2RP_OV3_TTM_V0p2_ff_V1p32_-40C.db“setsymbol_library[listSCC65NLL_HS_RVT_V1p1.sdb]remove_design–allread_verilog"../syn/netlist/dac.sv“link_designdacccurrent_designdaclist_designsreport_cell共69页2023/1/3162PrimeTime脚本—sourc
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 椒江区安全员证考试题库及答案解析
- 江门安全员考试题库及答案解析
- 北石道街会计从业考试及答案解析
- 网络安全竞赛题库 专业及答案解析
- 2025年砌筑高级工考试题库(含答案)
- 2025全国“安全生产月活动”《安全知识》竞赛试题库(含答案)
- 2025年国家开放大学(电大)《西方音乐史》期末考试备考试题及答案解析
- 2025年继续教育全科医学概论题库答案
- 2025年国家开放大学《物联网工程》期末考试备考试题及答案解析
- 2025年安全培训考试题库完整及答案
- 2025年“10.13建队日”分批入队活动总结:强国复兴有我争当新时代好少年
- 2024年服装时装项目资金筹措计划书代可行性研究报告
- 2024北森图形推理题
- 公共英语一级真题年月
- 植物生理学(全套PPT课件)
- 外科学题库水电解质代谢和酸碱平衡失调
- 35kV输电线路工程旋挖钻孔专项施工方案
- 抗精神病药物的副作用及处理
- 沥青路面厚度试验检测记录表(钻芯法)
- 口腔科诊断证明书模板
- 拆旧施工方案
评论
0/150
提交评论