数字集成电路验证方法学ppt课件_第1页
数字集成电路验证方法学ppt课件_第2页
数字集成电路验证方法学ppt课件_第3页
数字集成电路验证方法学ppt课件_第4页
数字集成电路验证方法学ppt课件_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数字集成电路验证方法学数字集成电路验证方法学2019年年12月月31日日2022-2-32主要内容主要内容n验证的必要性验证的必要性n验证方法学引见验证方法学引见n验证工具引见验证工具引见n演示演示共69页2022-2-33主要内容主要内容n验证的必要性验证的必要性n验证方法学引见验证方法学引见n验证工具引见验证工具引见n演示演示共69页2022-2-34验证的必要性验证的必要性n验证的概念,验证与测试的区别。n阅历阐明,验证曾经占到整个产品开发周期的70%以上,它曾经成为复杂SOCSystem on-Chip开发中的n 重要壁垒。n制造、设计和验证才干之间的鸿沟共69页2022-2-35典型

2、流程典型流程 时序 不满足动态仿真正确Verification is not just very hard, it is very, very hard没有一个简单的工具可以处理他一切的验证没有一个简单的工具可以处理他一切的验证问题。问题。(VSIA,Virtual Socket Interface Alliance)系统功能 不满足系统规划满足 功能 不正确系统构造不合理 时序 不满足动态仿真正确 功能正确共69页2022-2-36主要内容主要内容n验证的必要性验证的必要性n验证方法学引见验证方法学引见n验证工具引见验证工具引见n演示演示共69页2022-2-37验证方法学验证方法学n方法学

3、:又称方法论,是一门学问采用的方法、规方法学:又称方法论,是一门学问采用的方法、规那么与公理;一种特定的做法或一套做法。那么与公理;一种特定的做法或一套做法。n验证方法学:指完成验证过程中的一系列方法、技验证方法学:指完成验证过程中的一系列方法、技术和规范。术和规范。n 1.仿真技术仿真技术 n 2.静态技术静态技术n 3.物理验证物理验证共69页2022-2-38仿真技术仿真技术n基于事件的仿真基于事件的仿真-任何一个输入的变化都被任何一个输入的变化都被标志为事件,即常说的功能仿真,精度高,标志为事件,即常说的功能仿真,精度高,速度慢。比如速度慢。比如Modelsim, VCS。n基于周期的

4、仿真基于周期的仿真-单周期内只检查一次输入单周期内只检查一次输入并计算设计的输出逻辑值。速度快,无时并计算设计的输出逻辑值。速度快,无时序、毛刺。比如序、毛刺。比如Cyclone。n事务级仿真事务级仿真-一堆事件的集合即为事务,即一堆事件的集合即为事务,即常说的验证平台。常说的验证平台。n软硬件协同验证软硬件协同验证-需求专门的软硬件,本钱需求专门的软硬件,本钱高高 。共69页传统验证系统传统验证系统2022-2-39nDUT:Design Under Testn适用于基于事适用于基于事件的仿真和基件的仿真和基于周期的仿真。于周期的仿真。n适用于简单的适用于简单的设计。设计。缺陷:缺陷:1.可

5、扩展性差可扩展性差2.可重用性差可重用性差共69页层次化的验证系统层次化的验证系统2022-2-310适用于事务级仿真适用于事务级仿真优点:优点:1.可扩展性好可扩展性好2.可重用性好可重用性好共69页为什么要用事务级仿真?2022-2-311基于事件的仿真基于事件的仿真事务级仿真事务级仿真Testbench代码可读性,可代码可读性,可维护性维护性差差强强仿真速度仿真速度慢慢快快Testbench结构结构DUT复杂时,结构混乱复杂时,结构混乱DUT复杂时,结构清晰复杂时,结构清晰Testbench代码量代码量DUT简单时,代码量尚可简单时,代码量尚可DUT复杂时,代码量巨大复杂时,代码量巨大D

6、UT简单时,代码量略多简单时,代码量略多DUT复杂时。代码量较少复杂时。代码量较少与待测设计联系程度与待测设计联系程度非常紧密非常紧密行为级与行为级与DUT联系紧密联系紧密事务级具有自身独立性事务级具有自身独立性可复用性可复用性无无强强抽象层次抽象层次无无有有参考模型参考模型无无有有基于事件的仿真与事务级仿真的比较基于事件的仿真与事务级仿真的比较共69页事务级仿真事务级仿真nRVM: Reference Verification Methodology,n Synopsys公司。 nVMM:Verification Methodology Manual,n ARM公司和Synopsys公司。n

7、AVM:Advanced Verification Methodology,n Mentor公司。nOVM:Open Verification Methodology,n Cadence公司和Mentor公司nUVM: Universal Verification Methodology,n Cadence公司2022-2-312共69页为什么选用OVM?验证方法学验证方法学侧重点侧重点EDA验证工具验证工具支持的验证语言支持的验证语言基类库是否基类库是否开源开源RVM层次化验证层次化验证VCSOpenVera否否VMMRTL级模块级模块VCSSystemVerilog是是AVM层次化验证层次

8、化验证QuestasimSystemC/SystemVerilog是是OVM开源和不同开源和不同仿真器之间仿真器之间的透明性的透明性支持不同验证支持不同验证工具工具支持支持SystemVerilog等多种语言等多种语言是是UVM开源和快速开源和快速入门入门QuestasimNC-verilog支持支持SystemVerilog等多种语言等多种语言是是2022-2-313各种验证方法学比较各种验证方法学比较共69页SystemVerilog引见引见nSystemVerilog结合了结合了Verilog和和C+的概念,的概念,具有如下新功能:具有如下新功能:n1.面向对象编程面向对象编程(OOP)

9、 、n2.随机约束随机约束(Constraint Random)、n3.断言断言(Assertion) 、n4.功能覆盖率功能覆盖率(Functional Coverage) 。2022-2-314共69页nOOP:Object-oriented programmingn类:定义实物的笼统特点,类:定义实物的笼统特点,n包含方法和属性。包含方法和属性。n对象:类的实例。对象:类的实例。n方法:类的行为。方法:类的行为。n承继:子类包含类的特性。承继:子类包含类的特性。2022-2-315SystemVerilog引见引见-面向对象编程面向对象编程共69页CRT:Constraint Rando

10、m 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 & 18h3ffff; endfunction2022-2-316SystemVerilog引见引见-随机约束随机约束共69页SystemVerilog引见引见-断言断言Assertion 例如例如property p10;(posedge clock)

11、 (io.data_check_o=data_out_design_for_check-2);endpropertya10: assert property (p10);2022-2-317共69页nFunctional Coveragencovergroup:覆盖率模型:覆盖率模型nsample():采样函数:采样函数nbins: 仓仓nCovergroup Covkind;ncoverpoint tr.kind /kind 为为4位数据位数据nbins zero=0;nbins hi = 8:$;nendgroup2022-2-318SystemVerilog引见引见-功能覆盖率功能覆盖率

12、共69页OVM引见引见nOVM是一种基于SystemVerilog的验证方法或者战略。OVM曾经实现了一个根本的层次化验证平台,大大简化验证工程师的任务量。nOVM可以验证HDL代码或者网表文件nOVM特点:n 1.开放性:支持一切验证工具n 2.开源:OVM库都是基于SystemVerilog实现 n 的,可以在网上下载。n 3.可靠性:两大公司共同开发维护2022-2-319共69页2022-2-320OVM构造构造novm_envnovm_sequecernovm_agentnovm_transcationnovm_scoreboardnovm_drivernovm_monitor共69

13、页2022-2-321静态技术静态技术n语法检查语法检查-用户可以自在控制需求检查的规用户可以自在控制需求检查的规那么,如代码风格,可综合检查,那么,如代码风格,可综合检查,DFT检检查。查。 nlint工具。工具。n静态时序分析静态时序分析-检查建立、坚持时间以及其检查建立、坚持时间以及其他延时信息能否满足设计时序要求。他延时信息能否满足设计时序要求。 Prime Time。n方式验证方式验证不思索时序信息,通常用于验不思索时序信息,通常用于验证两个设计能否在功能上等效。证两个设计能否在功能上等效。 Formality 工具。工具。共69页2022-2-322 普通来说,要分析或检验一个电路

14、设计的时序方面的特征有两种主要手段:动态时序仿真Dynamic Timing Simulation和静态时序分析Static Timing Analysis 1.动态时序仿真:利用仿真器和延迟文件,经过反标节点延迟信息来仿真。 优点:可直观查看波形;缺陷:速度慢,看不到关键途径。 2.静态时序分析:分析每条时间途径上的延迟,来查看能否存在setup/hold违反。 优点:分析速度比较快,全面;缺陷:不能查看功能能否正确。静态时序分析静态时序分析共69页2022-2-323n 所谓方式验证,就是经过比较两个设计在逻辑功能能否等同的方法来验证电路的功能。n优点:n 1.不依赖于测试矢量,因此能提供

15、更完全的验证; n 2.可以实现RTL-to-RTL、RTL-to-gate、gate-to-gate两者之间的验证; n 3.有定位功能,可以协助他找出两个设计之间功能不等同的缘由; n 4.可以运用的文件格式有VHDL、Verilog、Synopsys 的.db格式,以及EDIF网表等; n 5.可以实现自动的分层验证;方式验证方式验证共69页2022-2-324物理验证物理验证-幅员级幅员级n电源电压降电源电压降n电迁移电迁移n功耗功耗 Astro规划布线工规划布线工n天线效应天线效应 具中完成具中完成n串扰串扰共69页2022-2-325主要内容主要内容n验证的必要性验证的必要性n验证

16、方法学引见验证方法学引见n验证工具引见验证工具引见n演示演示共69页如何利用如何利用OVM完成验证?完成验证?2022-2-326共69页基于OVM的数字滤波器验证平台n数模转化器DAC中的数字插值滤波器做为此验证平台的DUTn数字插值滤波器的功能:n 1.提高采样频率n 2. 滤除带外带宽20KHz噪声 2022-2-327输入信号输入信号输出信号输出信号共69页传统的滤波器验证平台仿真结果n传统的验证平台:基于定向测试矢量+波形查看的方式2022-2-328共69页传统验证平台没找到传统验证平台没找到BUG的缘由的缘由 1.仿真时间没有足够长 2.借助波形来判别 3.没有与理想参考模型比较

17、 基于OVM的验证平台2022-2-329共69页OVM验证平台验证步骤验证平台验证步骤1.利用OVM库完成平台代码2.启动验证工具3.创建编译库4.编译验证平台代码5.启动仿真2022-2-330共69页利用利用OVM库完成平台代码库完成平台代码n扩展OVM类n逐层完成:n 1.接口n 2.数据产生n 3.驱动器n 4.验证环境n 5.比较器2022-2-331共69页OVM平台平台-接口接口interface io_if(); logic 17:0 data_i; logic 17:0 data_o; logic 17:0 data_check_o; modport dut_if(inpu

18、t 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_

19、check) ;2022-2-332共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 & 18h3ffff; endfun

20、ctionovm_object_utils_begin(my_transaction)/在程序中 ovm_field_int(data_i, OVM_ALL_ON + OVM_DEC) ovm_object_utils_end endclass: my_transaction 2022-2-333共69页OVM平台平台驱动器驱动器n class my_driver extends ovm_driver;/ n ovm_component_utils(my_driver)/注册本类,这个宏的结尾没有符号; n virtual io_if v_io;/装载虚拟接口 n ovm_get_port #

21、(my_transaction) get_port;/装载与鼓励发生器通讯的通道接口: n function new(string name, ovm_component parent); n super.new(name, parent); n /建议验证程序中可写一些ovm_report_info的语句供提示用: n ovm_report_info(, Called my_driver:new);/在测试结果显示此函数被调用 n endfunction: new n 2022-2-334共69页function void build; super.build(); ovm_report_i

22、nfo(, 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

23、 endtask: run endclass: my_driver2022-2-335共69页OVM平台平台验证环境验证环境n class my_env extends ovm_env;/ n ovm_component_utils(my_env)/注册本类 n ovm_random_stimulus #(my_transaction) env_stimulus;/装载鼓励器 n tlm_fifo #(my_transaction) env_fifo;/装载通道 n my_driver env_driver;/装载驱动器 n function new(string name = my_env,

24、 ovm_component parent = null); n super.new(name, parent); n ovm_report_info(, Called my_env:new); n endfunction: new n 2022-2-336共69页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);/初始化通

25、道 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: connect202

26、2-2-337共69页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; o

27、vm_report_info(, Called my_env:report); endfunction: report /在运转下面的run_test()函数时,以上函数将自动依次运转 endclass: my_env2022-2-338共69页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,);assi

28、gn io.data_check_o= hcic_out;property p10; (posedge clock) (io.data_check_o=data_out_design_for_check-2)|io.data_check_o=0;endpropertya10: assert property (p10);endmodule2022-2-339OVM平台平台比较器比较器共69页timescale 1ns/10ps module top; import ovm_pkg:*; import my_pkg:*; parameter clock_cycle = 100; bit cloc

29、k; 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的类 2022-2-340OVM平台平台顶层模块顶层模块共

30、69页 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

31、_info(, Called my_test:build); top_env=new();/初始化 /建议在验证程序中可设定看门狗 set_global_timeout(1000000us); endfunction: build 2022-2-341共69页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 t

32、x; tx = new(); ovm_report_info(, Called my_test:run); top_env.env_stimulus.generate_stimulus(tx, 2000000);/鼓励器产生20个事件 endtask: run endclass: my_test2022-2-342共69页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

33、 begin $fsdbDumpfile(top.fsdb); $fsdbDumpSVA; $fsdbDumpvars(0,top,+all);end endmodule: top2022-2-343共69页启动验证工具启动验证工具n利用mentor的questasim,界面和操作类似于modelsimn环境变量source /opt/demo/questasim.envn启动命令vsim&2022-2-344共69页脚本方式完成验证脚本方式完成验证nvlib dac_hcic /创建库nvlog +acc -f ./rtl/ovm_rtl/compile_questa_sv.f -w

34、ork dac_hcic -sv +cover / 编译整个验证平台nvsim -c dac_hcic -sv_seed 100 -coverage -assertcover -assertdebug -sva -voptargs=“+acc -pli /opt/springsoft/verdi/share/PLI/MODELSIM/LINUX/novas_fli.so /启动仿真nview assertions /查看断言nrun -all /开场运转nquit -sim / 终了仿真2022-2-345共69页compile_questa_sv.fn+incdir+/home1t/opt/

35、questasim/questasim/verilog_src/ovm-2.1.2/srcn/home1t/opt/questasim/questasim/verilog_src/ovm-2.1.2/src/ovm_pkg.sv n+incdir+/home/liuxp/dac/rtl/ovm_rtln+incdir+/home/liuxp/dac/rtl/dac_balise/dac_haf_cicn/home/liuxp/dac/rtl/ovm_rtl/ovm_start.sv2022-2-346共69页结果查看结果查看断言结果查看断言结果查看代码覆盖率查看代码覆盖率查看2022-2-34

36、7共69页断言结果查看Questasim下2022-2-348共69页代码断言结果查看Verdi下2022-2-349Verdi另外一个软件,专门用作波形查看和调试下查看断言结果更加直观,箭头朝上就表示断言经过,朝下表示断言失败。共69页代码覆盖率查看2022-2-350共69页代码覆盖率查看2022-2-351共69页n动态时序仿真:利用仿真器Modelsim和延迟文件(SDF文件),经过反标节点延迟信息来仿真。n需求的文件:n1.规划布线完的网表文件n2.规划布线后生成的SDF文件n3.规范单元库和IO库的Verilog模型文件n4.Testbench文件2022-2-352动态时序仿真后

37、仿动态时序仿真后仿共69页n1.修正Testbench,添加规划布线完导出的SDF文件n2.创建新的工程n3.添加修正好的Testbench文件top_tb.vn4.添加规划布线完导出的网表文件fsk_layout.svn5.添加规范单元的Verilog模型文件n/home/smic/smic_40/SCC40NLL_HS_RVT_V0np1a/verilog/SCC40NLL_HS_RVT_V0p1.vn6.添加输入输出IO的Verilog模型文件n/home/smic/smic_40/SP40NLLD2RN_3P3V_Vn0p2/verilog/SP40NLLD2RNP_3P3V_V0p1

38、.vn7.编译及仿真53/74动态时序仿真后仿步骤动态时序仿真后仿步骤2022-2-3共69页Testbench中添加中添加SDF文件文件在Testbench中新建一个initial 块, 经过系统函数$sdf_annotate()来读入SDF文件,并反标到网表每个节点上。详细代码如下:initial begin$sdf_annotate(“/home/liuxp/class/astro/SDF/top_pad.sdf , top_tb_pad);end2022-2-354Testbench 模块称号实例化的顶层模块称号共69页后仿真波形后仿真波形整体功能波形:延迟信息:55/742022-2

39、-3共69页静态验证工具静态验证工具n静态时序分析静态时序分析Prime Timen方式验证方式验证-Formality2022-2-356共69页静态时序分析静态时序分析PrimeTimenPrimeTime是Synopsys的静态时序分析软件,常被用来分析大规模、同步、数字ASIC。nPrimeTime适用于门级的电路设计。n 1.逻辑综合后网表n 2.自动规划布线后网表2022-2-357共69页PrimeTime流程流程 1.设置查找和链接途径; 2.读入并链接所要分析的设计; 3.设置操作条件和线上负载模型; 4.设置根本的时序约束; 5.检查所设置的约束以及该设计的构造。 2022

40、-2-358共69页PrimeTime工具启动工具启动nsource /opt/demo/synopsys.envnpt_shell无图形界面无图形界面 或者或者nprimetime&2022-2-359共69页2022-2-360命令输入区命令输入区共69页2022-2-361PrimeTime脚本脚本 source pt.scrset lib_path /home/smic/smic_65/SCC65NLL_HS_RVT_V1p1aset smic_stdlib_path $lib_path/synopsys/1.2v/set smic_diolib_path /home/smic

41、/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_

42、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.sdbremove_design allread_verilog ./syn/netlist/dac.sv“link_design dacccurrent_design d

43、aclist_designsreport_cell共69页2022-2-362PrimeTime脚本脚本 source pt.scrset_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_

44、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_clocksset_clock_uncertainty -setup 2.0 clkset_clock_transition 2 get_clocks clkset_drive 0 list clk clk_in_pad set_load 5 all_outputsset_input_delay 5 -clock clk -max remove_from_collection all_inputs get_ports clk_in_pad set_output_delay 5 -clock clk -max all_outputsreport

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论