FPGA设计基础-第4章设计验证.ppt
《FPGA设计基础-第4章设计验证.ppt》由会员分享,可在线阅读,更多相关《FPGA设计基础-第4章设计验证.ppt(79页珍藏版)》请在三一办公上搜索。
1、第四章 设计验证,随着集成度的提高,系统的规模日益庞大且复杂。强壮的系统应有完备的验证作保障。验证工作量远大于系统设计工作量。验证工作的基本技术和方法。,Page 1,目前,验证一般通过仿真实现本章节中,验证和仿真不加区分,4.1 验证概述,Page 2,验证过程是证明设计正确的过程,验证的目的是为了保证设计实现与设计规范是一致的,保证从设计规范开始,经过一系列变换后得到的网表与最初的规范是一致的,整个变换的过程是正确的。,4.1.1 验证的概念,Page 3,4.1 验证概述,从自然语言表述的系统规范变换成完整的、可验证和无二义性的系统规范。从系统规范变换成可实现的模块设计规范。从模块设计规
2、范变换成RTL及代码描述。从RTL代码通过综合工具变换成门级网表。从门级网表通过后端布局布线工具变换成具有延时信息的网表。,FPGA设计可能包含的几个变换:,Page 4,4.1 验证概述,验证是一个多次重复的过程,是一个不断向期望结果靠近的过程。,系统规范,网表,交换,验证,Page 5,4.1 验证概述,验证和测试是ASIC设计流程中两个不同的环节。验证的目的则是为了确认设计符合设计规范,目前验证一般通过仿真实现。测试的目的是为了确认生产后的设计产品是否合格、正确,一般由加工厂家或封装测试厂家完成。,4.1.2 验证和测试(Verification vs Test),4.1 验证概述,系统
3、规范,网表,芯片,电路设计,生产,验证(仿真),测试,对物理器件高低电平的确认不属于本教材范畴,对设计规范及功能的确认,Page 6,4.1 验证概述,传统的电子线路设计验证方法,4.1.3 Top-Down/Bottom-Up 验证方法,目前的电子线路设计验证方法,逻辑设计、画电路图、搭建电路、测试验证,借助 EDA 工具在计算机上进行 RTL 级设计和验证。,Page 7,4.1.3 Top-Down/Bottom-Up 验证方法,Top-Down 验证法,系统级验证:根据系统规范对系统进行建模,并对建立的模型进行验证。功能验证:验证设计的RTL代码应符合系统规范。主要方法-功能仿真(形式
4、化验证为辅)。门级网表验证:通过功能仿真或形式化工具检验RTL代码和综合后网表的是否相等。时序验证:验证综合后含有延时信息的网表时序是否满足要求。对于同步设计一般通过静态时序分析工具完成验证。,Page 8,4.1.3 Top-Down/Bottom-Up 验证方法,Bottom-Up 验证法,模块级验证-验证模块的各种工作情况,保证每个单元的设计质量。子系统验证、系统级验证-分层次组装模块进行子系统验证直至完成系统级验证。,备注:系统级验证,目标是验证整个设计的功能。验证主要集中在设计和外环境之间能否协调工作,包括一些极端情况、边界条件和错误处理等。,Page 9,目前主流的两类“验证技术”
5、:,4.1.4 验证技术,(1)基于形式化的验证-通过数学的方法,证明设计的功能是否与规范一致。等价性检验:比较两个设计是否完全等价。两个网表比较,网表与RTL代码比较模型检验:根据设计的RTL代码,提取有限状态机并穷举搜索设计状态空间,验证设计特性。模型检验工具:Cadence的FormalCheck、IBM的Sugar和 Sypopsys的Vera,局限性很大1、设计规模越来越大复杂2、模型检验所描述的特性有限,4.1.4 验证技术,(2)基于TestBench的验证(目前主要的验证方式)Testbench测试平台 即:Testbench产生激励给被验证设计(DUV)或待测设计(DUT),
6、同时检查DUV/DUT输出是否满足要求,Page 10,4.1.4 验证技术,TB 结构模型,黑盒验证法 白盒验证法灰盒验证法,解释:,DUV/DUT,Design Under VerificationDesign Under Test,Testbench功能:,为DUV/DUT提供激励信号正确实例化DUV/DUT将仿真数据显示在终端或者存为文件,也可以显示在波形窗口用于分析复杂设计可以使用EDA工具,自动比较仿真结果与理想值。,激励,实例化DUT,终端显示值、存成文件,波形显示,自动比较结果正确性,4.1.5 仿真工具,1、仿真器,仿真器是验证中最常用的工具。仿真器试图创建一个能够模拟真实设
7、计的工作环境,使验证工程师和设计进行交互,在设计生产之前发现设计错误,以减少损失。之所以称为仿真器,是因为它们是真实状态的一种近似。,Page 11,Page 12,4.1.5 仿真工具,验证人员在仿真器中,通过 testbench 为设计提供输入激励(为电路建立模拟工作环境),仿真器通过一定方式与验证人员交互,将电路的输出状态随环境变化的信息反映给验证人员。业界常用的仿真器有:Cadence 的 NC-Verilog,Synopsys的VCS 和 Mentor的ModelSim,Page 13,4.1.5 仿真工具,最常见的和仿真器一起使用的验证工具。通过波形观察器的图形界面,设计人员可以直
8、观地观察随时间变化的信号以及信号之间的相互关系,定位设计错误或测试文件的错误。,2、波形观察器工具,TB运行中即统计被测设计代码的测试覆盖情况,给出报告,验证者可依据此报告分析判断验证工作的完备性。几个主要覆盖分析方面:,3、代码覆盖分析工具,4.1.5 仿真工具,使用代码覆盖技术必须非常了解设计细节,通过代码覆盖分析工具了解哪些语句、路径已经被执行,那些表达式已经被执行,那些过程没有被触发等等,然后修改测试程序,提高代码覆盖率。提高覆盖率可以提高测试的完备性。,语句覆盖路径覆盖表达式覆盖,触发覆盖自动机覆盖,Page 15,4.1.6 验证计划和流程,随着设计规模的加大,验证工作量越来越大,
9、制定验证计划或者验证规范是验证过程的一个重要环节,验证计划可以提高验证效率,减少验证的盲目性。制定验证规范在系统设计规范签收(signoff)后开始。,Page 16,4.1.6 验证计划和流程,应该注意:验证工程师应与总体设计师以及设计人员一起讨论整个设计功能、模块划分、接口方式等,详尽理解设计规范。在此基础上制定验证方案-确定需要验证的功能特性,确定验证策略,规划验证环境和验证程序的开发,确定整个验证所需的验证人员的数目,资源和时间等等。,Page 17,4.1.6 验证计划和流程,典型的验证流程,Page 18,4.1.6 验证计划和流程,验证方案的要点(验证什么、如何验证),确定设计需
10、要验证的特性(验证内容);确定验证策略-系统级/模块级,黑/白/灰盒式验证,激励产生策略,验证响应方式(观察法、记录法、自检查法),人员、设备、环境管理安排等。确定验证方法-具体验证的步骤和方法,如自顶向下/自下向上,激励的具体方式等。,4.1.6 验证计划和流程,制作标准的测试组件和测试模板。个人编制相关部分的测试方案;编制、调试测试程序,进行系统测试。测试记录及分析,编制测试报告。,回归测试:对发现问题修改后的设计重新测试。(1)确认修改是否正确(2)修改是否影响其他设计,4.2 功能验证,所谓的“验证程序”-是对“待测电路”的输入序列和预期输出相应的代码集合。,4.2.1 验证程序(Te
11、stBench)的组成,一个典型的验证程序模型,4.2.1 验证程序(TestBench)的组成,一个典型的Testbench的六个组成部分:,DUV(被验证的设计)-Design Under Verification,可能是RTL设计,也可以是网表。输入激励-产生DUV需要的各种输入信号。时序控制模块-产生TB和DUV所需的时钟信号。参考模块-产生预期信号(行为级编码模块/以验证过正确的设计)。诊断记录-相关信号变化情况的记录。断言检查器-对特定的信号形式检测。,编写仿真激励:,1、仿真激励与被测对象的连接模块实例的端口方式:(1)名称对应:将模块实例外部的信号直接对应于模块的端 口名称。m
12、odule halfadd(x,y,sum,cout);endmodule名称对应halfadd u_halfadd_a(.x(ax),.y(ay),.sum(asum),.cout(acout);(2)位置对应:外部信号按照该模块端口声明的顺序一一对 应。Halfadd u_halfadd_b(bx,by,bsum,bcout);,2、使用initial语句和always语句 通常主动产生激励用initial,被动检测响应用always。前者执行一次,后者不断重复执行。在initial中多次运行一个语句块,使用嵌入循环语句:while、repeat、for和forever。,initialb
13、egin forever bengin.endend,条件发生时执行always(posedge clk)begin siga=sigb end,3、时钟、复位写法(1)普通时钟信号/产生一个周期为10的时钟 parameter FAST_PERIOD=10;reg clk;initial begin clk=0;forever#(FAST_PERIOD/2)clk=clk;end,用always产生一个周期为10的时钟 parameter FAST_PERIOD=10;reg clk;initial clk=0;always#(FAST_PERIOD/2)clk=clk;,(2)非50%占空
14、比时钟 parameter Hi_time=5;parameter Lo_time=10;reg clk;always begin#Hi_time clk=0;#Lo_time clk=1;end由于clk0时刻未初始化,前5纳秒输出为x,(3)固定数目时钟产生两个高脉冲 parameter PulseCount=4,PERIOD=10;reg clk;initial begin clk=0;repeat(PulseCount)#(PERIOD/2)clk=clk;end,(4)异步复位信号 parameter PERIOD=10;reg Rst_n;initial begin Rst_n=1
15、;#PERIOD Rst_n=0;#(5*PERIOD)Rst_n=1;end Rst_n为低有效,代码表示10ns时复位,复位延时50ns,(5)同步复位:initial begin Rst_n=1;(negedge clk);/等待时钟下降沿 Rst_n=0;#30;(negedge clk);/等待时钟下降沿 Rst_n=1;end,另一种同步复位initial begin Rst_n=1;(negedge clk);/等待时钟下降沿 Rst_n=0;/复位开始 repeat(3)(negedge clk);/经过3个时 钟下降沿 Rst_n=1;/复位撤销 end,4、利用系统函数和系
16、统任务,display在显示数据$display(“Addr:%b-Data:%d”,add,data);时序检查系统任务$setup(sig_d,posedge clk,1);/若clk上升沿到达之前的1ns时间内sig_d发生跳变,则建立时间不足告警$hold(posedge clk,sig_d,0.1);/若clk上升沿到达之后的0.1ns时间内sig_d发生跳变,则保持时间不足告警 dato_out=$random%256;从文本文件中读出和写入数据(类似C语言文件操作),搭建仿真环境,单顶层的TestBench代码:module testbench;/测试平台顶层/时钟激励产生 in
17、itial bengin end/复位激励产生 initial begin end,/各种测试激励 initial bengin end,/设计模块实例mpi u_mpi(.clk(clk),.rst_n(rst_n),.mpi_data(data),.mpi_addr(addr),.mpi_csn(csn),.mpi_rw(rw);,确认仿真结果,1、直接观测波形2、观察文本输出 利用系统任务打印的信息查看仿真结果,$display、$monitor、$fdisplay3自动检查仿真结果(1)数据库比较法。(数据库存储期望结果)(2)波形比较法。(存储标准波形,仿真结果与其比较)(3)动态自
18、检法。编写行为级与DUT功能一致代码,同时读入激励,比较输出结果,举例:加法器,Page 22,4.2.1 验证程序(TestBench)的组成,Book Page141 例:一个编码器的验证。,Page 23,4.2.2 实用构造Testbench技术,1、使用行为级代码描述验证模型,设计工程师编写的电路模型代码,要从实现的角度出发,从物理实现上考虑verilog代码的写法,写出的代码必须是可综合的。验证工程师编写的用于验证的代码不必考虑到内部的实现问题,只要按规范描述出一个设计的功能就可以了,也就是说只要建立一个设计“逻辑模型”。行为模型代码的描述往往比RTL代码的描述简单的多,容易正确描
19、述电路功能。,Page 24,4.2.2 实用构造Testbench技术,2、使用抽象数据类型,行为级代码可以不受可综合要求的约束,可以在更高的层次上实现数据的抽象,使得验证程序编写时更方便。,实数数据类型-数字滤波器的仿真例子(P148;例4.4)。记录数据类型-记录是一种抽象的数据结构,可以由不同类型信息组成,可以方便的表示在具有一定结构的数据。Verilog语言本身并不支持记录结构,通过一些方法可以模拟记录的实现。,Page 25,记录的用法,记录的用途,在仿真中主要用于描述一定格式的数据块。,创建一个没有参数的module,内部的所有变量都用寄存器类型声明。当模块实例化后,用模块中定义
20、的变量表示记录中的域。对记录可以进行行为级的处理,准备好仿真数据。(备注:行为级数据准备不占用信号时序时间),4.2.2 实用构造Testbench技术,Page 30,4.2.2 实用构造Testbench技术,多维数组数据类型-数组类型是记录类型的特例(域等长,二维数组在设计中也用于对RAM 等数据结构的建模)。测试激励需要构造有固定格式的数据帧时,使用二维数组是一种较好的方法。(例如 SDH 数据帧信元的构成等),Page 31,4.2.2 实用构造Testbench技术,3、编写结构化的仿真代码,行为代码通常按功能和需求划分结构,复杂的仿真功能,可以按功能划分若干个子功能,然后编写行为
21、代码实现这些子功能。在Verilog中,可以用module,function 和 task 实现仿真代码结构化。封装是实现结构化仿真编码的主要手段,封装的主要思想是将实现的细节隐藏起来,将功能和它的实现完全分离开,只要封装的接口不变,实现的修改和优化不影响用户的使用。,Page 32,4.2.2 实用构造Testbench技术,实现封装的几种方法,变量局部化,方法一:变量声明时局部化,尽可能地将变量的声明局部化,避免变量在其它模块间相互作用,产生不正确地结果。,方法二:用 task 和 function 使变量局部化,在verilog语言中,用 task 和 function 也可以使说明局部
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- FPGA 设计 基础 验证
链接地址:https://www.31ppt.com/p-5431438.html