首页 第11章 FPGA设计验证

第11章 FPGA设计验证

举报
开通vip

第11章 FPGA设计验证第11章设计验证设计验证随着IC集成度的不断提高,系统的规模日益庞大且复杂。验证成为了整个ASIC/FPGA设计流程中的一个瓶颈问题。(目前一个SOC设计中,验证工程师的人数是设计工程师的2倍左右,验证工作占到整个设计的60~70%,而验证代码,则占到了全部代码70~80%左右)验证工作量远大于系统设计工作量。验证和测试是ASIC设计流程中两个不同的环节。验证的目的则是为了确认设计符合设计规范,目前验证一般通过仿真实现。在本课程中验证和仿真不加区分。测试的目的是为了确认生产后的设计产品是否合格、正确,一般由加工厂家...

第11章 FPGA设计验证
第11章 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 验证设计验证随着IC集成度的不断提高,系统的规模日益庞大且复杂。验证成为了整个ASIC/FPGA设计流程中的一个瓶颈问题。(目前一个SOC设计中,验证工程师的人数是设计工程师的2倍左右,验证工作占到整个设计的60~70%,而验证代码,则占到了全部代码70~80%左右)验证工作量远大于系统设计工作量。验证和测试是ASIC设计流程中两个不同的环节。验证的目的则是为了确认设计符合设计规范,目前验证一般通过仿真实现。在本课程中验证和仿真不加区分。测试的目的是为了确认生产后的设计产品是否合格、正确,一般由加工厂家或封装测试厂家完成。验证和测试(VerificationvsTest)验证过程是证明设计正确的过程,验证的目的是为了保证设计实现与设计规范是一致的,保证从设计规范开始,经过一系列变换后得到的网表与最初的规范是一致的,整个变换的过程是正确的。验证的概念从自然语言表述的系统规范变换成完整的、可验证和无二义性的系统规范。从系统规范变换成可实现的模块设计规范。从模块设计规范变换成RTL级代码描述。从RTL代码通过综合工具变换成门级网表。从门级网表通过后端布局布线工具变换成具有延时信息的网表。FPGA设计可能包含的几个变换:如设计规范是否正确,有无矛盾之处?设计人员是否正确理解了设计规范,模块设计是否正确地反映了其功能?模块之间的接口是否正确?包含有延时信息的网表的时序是否满足要求?验证过程需要解决的问题验证是一个多次重复的过程,是一个不断向期望结果靠近的过程。从规范到网表之间的变换包含了许多问题传统的电子线路设计验证方法目前的电子线路设计验证方法逻辑设计、画电路图、搭建电路、测试验证随着HDL语言的广泛使用和EDA工具的快速发展。为了设计和验证更复杂的系统,硬件设计工程师在硬件设计中借助于软件工程的经验和研究方法形成了适合高层RTL级描述的硬件系统的设计和验证方法。验证方法Top-Down/Bottom-Up验证方法Top-Down验证法系统级验证:根据系统规范对系统进行建模,并对建立的模型进行验证。功能验证:验证设计的RTL代码应符合系统规范。主要方法--功能仿真(形式化验证为辅)。门级网表验证:通过门级仿真或形式化工具检验RTL代码和综合后的网表是否相等。时序验证:验证综合和布线后含有延时信息的网表时序是否满足要求。对于同步设计一般通过静态时序分析工具完成验证。Top-Down/Bottom-Up验证方法Bottom-Up验证法模块级验证----验证模块的各种工作情况,保证每个单元的设计质量。子系统验证、系统级验证----分层次组装模块进行子系统验证直至完成系统级验证。备注:系统级验证,目标是验证整个设计的功能。验证主要集中在设计和外环境之间能否协调工作。目前主流的两类“验证技术”:验证技术基于形式化的验证-----通过数学的方法,证明设计的功能是否与规范一致。基于TestBench的验证(目前主要的验证方式)----Testbench“利用HDL语言编写的用于验证设计的输入激励序列代码,也就是验证程序”,它实际上就相当于一个测试平台。基于TestBench的验证TB结构模型黑盒验证法设计被当成一个黑盒子,对设计人员而言不知道内部设计细节,根据设计规范,验证设计是否符合规范。黑盒验证可以发现下面类型的错误:初始化和中止错误;接口错误;性能错误;未实现的或实现不正确的功能。由于缺乏可观测性和可控性,黑盒验证很难发现隐藏在设计内部的错误。TB结构模型2、白盒验证法:根据设计的内部细节进行验证,这种方法为设计提供了很好的可控性和可观测性,这种方法有时可称为结构验证法。由于知道设计的内部细节,因此,很容易产生特殊情况的激励,易于检测内部设计的错误,验证环境的建立相对明确、简单,具有较强的针对性,结果检查相对来说也简单一些。白盒测试法的缺点就是验证人员要知道设计内部的细节。3、灰盒验证法:灰盒验证是介于白盒和黑盒验证法之间的一种验证方法。验证人员在既关心规范需求的同时又关心电路的详细设计 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 ,需要依据两者制定验证方案。如同黑盒验证方法,灰盒验证方法通过顶层接口控制和观察整个设计,但是又需要验证一些重要的特定的设计细节。在一个设计中,通常是这三种方法结合起来一起使用。验证工具1、仿真器仿真器是验证中最常用的工具。仿真器试图创建一个能够模拟真实设计的工作环境,使验证工程师和设计进行交互,在设计生产之前发现设计错误,以减少损失。之所以称为仿真器,是因为它们是真实状态的一种近似。验证人员在仿真器中,通过testbench为设计提供输入激励(为电路建立模拟工作环境),仿真器通过一定方式与验证人员交互,将电路的输出状态随环境变化的信息反映给验证人员。业界常用的仿真器有:Cadence的NC-Verilog,Synopsys的VCS和Mentor的ModelSim验证工具是最常见的和仿真器一起使用的验证工具。通过波形观察器的图形界面,设计人员可以直观地观察随时间变化的信号以及信号之间的相互关系,定位设计错误或测试文件的错误。2、波形观察器工具当一个设计的所有测试程序仿真都正确,设计中是否还存在某些功能或功能组没有得到验证呢?哪些设计没有被验证到?覆盖分析工具可以回答这个问题。几个主要覆盖分析方面:3、代码覆盖分析工具使用代码覆盖技术必须非常了解设计细节,通过代码覆盖分析工具了解哪些语句、路径已经被执行,那些表达式已经被执行,那些过程没有被触发等等,然后修改测试程序,提高代码覆盖率。语句覆盖路径覆盖表达式覆盖触发覆盖自动机覆盖验证 计划 项目进度计划表范例计划下载计划下载计划下载课程教学计划下载 和流程随着设计规模的加大,验证工作量越来越大,制定验证计划(《验证方案》)是验证过程的一个重要环节,验证计划可以提高验证效率,减少验证的盲目性。验证工程师应与总体设计师以及设计人员一起讨论整个设计功能、模块划分、接口方式等,在此基础上制定《验证方案》验证计划的内容:确定设计需要验证的特性(验证内容);确定验证策略---系统级/模块级,黑/白/灰盒式验证,激励产生策略,验证响应方式(观察法、记录法、自检查法)。确定验证方法---具体验证的步骤和方法,如自顶向下/自下向上。确定验证的质量标准:如功能覆盖率、代码覆盖率等。确定验证资源和其它的相关问题:包括人力资源、机器资源和软件资源等,也包括验证过程的质量跟踪等方面的问题验证流程典型的验证流程所谓的“验证程序”----是对待测电路的输入序列和输出响应的代码集合。验证程序(TestBench)的组成一个典型的验证程序模型验证程序(TestBench)的组成一个典型的Testbench的六个组成部分:DUV---DeviceUnderVerification,可能是RTL设计,也可以是网表。输入激励---产生DUV需要的各种输入信号。时序控制模块---产生TB和DUV所需的时钟信号。参考模块---产生预期信号(行为级编码模块/以验证过正确的设计)。诊断记录---相关信号变化情况的记录。断言检查器---对特定的信号形式检测。基于断言的验证基于断言的验证是一种有效的白盒验证方法,它在RTL设计的源程序监视系统的关键行为,特别是在某些特殊情况下的行为。通过断言的方法,可以增加观测点,在仿真过程中及时发现设计错误。断言:断言是设计中希望特定性质为真的描述语句,断言的目的是捕获不希望在设计中出现的行为。断言是用于监控或检查施加在设计上的一些 规则 编码规则下载淘宝规则下载天猫规则下载麻将竞赛规则pdf麻将竞赛规则pdf 和假设的一种机制。断言的实现断言可以有多种实现方法,其中最常用也最简单的方法是所谓的叙述性的实现方法,即在设计结构中描述断言,断言和设计中的其他结构一起并发地计算。叙述性断言实际上是一些代码,这些代码中一般需要包含三部分:一是断言的条件,二是报告信息,三是错误的严重程度以及相关的处理。例如:不变性断言:assert_always[#(severity_level,options,msg)]inst_name(clk,reset_n,test_expr),其中assert_always:断言的名称。inst_name:断言的实例化名称;test_expr:断言的条件,断言在每个时钟的上升沿检查表达式test_expr,如果test_expr为假,也就是在设计中检测到错误,则激活断言。[#(severity_level,options,msg)]:断言的参数,severity_level表示错误的严重等级,根据不同的错误等级,进行相应的处理。另外一个是消息msg,用于表示某个性质不成立时候要显示的信息。如果在模拟的过程中,违背了设定的性质,那么就会触发监视器。另外一个是可选的信息options。下面是Assert_always断言的代码:moduleassert_always(ck,reset_n,test_expr);inputck,reset_n,test_expr;parameterseverity_level=0;parametermsg="ASSERTALWAYSVIOLATION";‘ifdefASSERT_ONintegererror_count;initialerror_count=0;always@(posedgeck)begin‘ifdefASSERT_GLOBAL_RESETif(‘ASSERT_GLOBAL_RESET!=1’b0)begin‘elseif(reset_n!=1’b0)begin‘endifif(test_expr!=1’b1)beginerror_count=error_count+1;‘ifdefASSERT_MAX_REPORT_ERRORif(error_count<=‘ASSERT_MAX_REPORT_ERROR)‘endif$display("%s:severity%0d:time%0t:%m",msg,severity_level,$time);if(severity_level==0)$finish;endendend//always‘endifendmodule//assert_always上述的断言是用于检测某个表达式是否永远为真,如果test_expr表达式不为真,那么错误计数器计算不为真的次数,如果错误计算器的值小于用户定义的错误次数,那么显示错误信息。如果定义错误等级为0,则退出仿真。从上面的实现,我们可以看到,一个断言实际上就是一段Verilog代码,用模块的形式将其封装起来。因此,叙述性断言的用法非常简单,直接采用实例化的形式把断言嵌入在设计中就可以了,当测试条件不成立的时候,触发该断言。使用always断言。modulecounter_0_to_9(reset_n,clk);inputreset_n,clk;reg[3:0]count;always@(posedgeclk)beginif(reset_n==0||count>=9)count=1’b0;elsecount=count+1;endassert_always#(0,0,"error:countnotwithin0and9")//always断言;valid_count(clk,reset_n,(count>=4’b0000)&&(count<=4’b1001));endmodule实用构造Testbench技术1、使用行为级代码描述验证模型设计工程师编写的电路模型代码,要从实现的角度出发,从物理实现上考虑verilog代码的写法,写出的代码必须是可综合的。验证工程师编写的用于验证的代码不必考虑到内部的实现问题,只要按规范描述出一个设计的功能就可以了,也就是说只要建立一个设计“逻辑模型”。行为模型代码的描述往往比RTL代码的描述简单的多,容易正确描述电路功能。实用构造Testbench技术行为级代码可以不受可综合要求的约束,可以在更高的层次上实现数据的抽象,使得验证程序编写时更方便。记录数据类型、多维数组Verilog语言本身并不支持这些结构,通过一些方法可以模拟实现。实用构造Testbench技术2、编写有结构的仿真代码为了有效的维护和重用,行为代码通常按功能和需求划分结构,复杂的仿真功能,可以按功能划分若干个子功能,然后编写行为代码实现这些子功能。封装是实现结构化仿真编码的主要手段,封装的主要思想是将实现的细节隐藏起来,将功能接口和它的实现完全分离开,只要封装的接口不变,实现的修改和优化不影响用户的使用。实用构造Testbench技术实现封装的几种方法变量局部化方法一:变量声明时局部化尽可能地将变量的声明局部化,避免变量在其它模块间相互作用,产生不正确地结果。方法二:用task和function使变量局部化在verilog语言中,用task和function也可以使说明局部化。实用构造Testbench技术integerI;//全局Ialwaysbeginfor(I=0;I<=32,I=I+1)begin…end alwaysbeginfor(I=5;I>0,I=I-1)begin…endalwaysbegin:block_1integerI;//局部Ifor(I=0;I<=32,I=I+1)begin…end alwaysbegin:block_2integerI;//局部Ifor(I=5;I>0,I=I-1)begin…end实用构造Testbench技术总线功能模型BFM(BusFunctionModule)总线功能模型BFM,也称为事务处理程序(transactions)描述模块。所谓BFM就是DUV和TB之间的一种抽象,它是任务的集合,集合中的每个任务完成一个特定的事务,事务可以是非常简单的操作,如内存的一次读、写,也可以是非常复杂的操作,如通信中有结构的数据包。BFM被直接链接到DUV上,TB通过函数/功能调用实现DUV的操作。实用构造Testbench技术TB-BFM-DUV模型下面我们通过一个cpu接口的例子说明BFM的概念。在CPU接口应用中,我们通常需要对某个寄存器的特定位进行设置。为了完成这个任务,首先是根据地址读出寄存器的值,然后将改写位(设置位)的值和不改写位的值一起再回写到该寄存器中。我们可以将CPU接口抽象成上图形式,根据预定义的 协议 离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载 ,由CPUBFM产生CPU接口所需要的实际物理信号,如图右侧所示,而又左侧接口用特定的数据初始化一个事务,根据不同的事务,CPUBFM产生不同物理信号。引入BFM的优点在于:有利于验证重用:测试程序可以直接应用到功能相同,但不具有相同接口的设计中,而事务处理程序则可以重用在具有相同接口的不同设计中。由于事务处理程序封装了接口的实现细节,因此可以极大地提高测试程序的开发效率。提高了仿真代码的可阅读性。实用构造Testbench技术3、编写具有自检查功能的仿真程序检查设计响应是否正确的方法:1、观测输出波形;2、查看诊断日志文件或记录;3、自检查方式;4、编写可重用的验证代码时序验证时序验证的目的是为了确认物理实现的电路时序是否满足时序规范要求。时序规范用于约束一个电路的接口信号和周围环境之间的时序关系或约束电路内部的延时。时序验证分静态时序验证和动态时序验证两种。静态时序分析:通过分析设计中所有可能的信号路径以确定时序约束是否满足时序规范。优点:静态时序分析根据一定的模型从网表中创建无向图,计算所有路径延迟,如果所有的路径都满足时序约束和规范,那么认为电路设计满足时序约束规范。静态时序分析的方法不依赖于激励,且可以穷尽所有路径,运行速度很快,占用内存很少。适合大规模的电路设计验证。对于同步设计电路,可以借助于静态时序分析工具完成时序验证的任务。动态时序分析:即根据电路中提取的延时参数,通过仿真软件动态地仿真电路的行为以验证时序是否满足要求。动态时序分析的时序确认通过仿真实现,分析的结果,完全依赖于验证工程师所提供的激励。不同激励分析的路径不同,也许有些路径(比如关键路径)不能覆盖到,当设计规模很大时,动态分析所需要的时间、占用的资源也变得越来越大。时序分析中的基本概念一条路径的最长延时是由该路径的组合电路、存储元件、路径上门的扇出负载、信号之间的互连线负载、时钟的歪斜率、时钟抖动和信号的压摆率等所决定的。1.扇入和扇出(a)扇出(b)扇入2、压摆率(slewrate):电压变化的速度,工程上一般把压摆率定义为:压摆率越大,延时越小,压摆率越小,延时越大为输出电平为逻辑0时的最小输出电压为输出电平为逻辑1时的最大输出电压Tr输出电压从0.1Vcc上升到0.9Vcc所需要的时间Tf输出电压从0.9Vcc下降到0.1Vcc所需要的时间;3、时钟歪斜(clockskew)时钟在经过时钟路径后,到达存储元件的时间存在差别,这种时间差,称为时钟歪斜。Page454、最大时钟频率最大时钟频率是指在不违背内部要求的建立和保持时间前提下,电路工作的最快速度。最大的时钟频率计算如下图所示:频率=1/最小的时钟周期;最小的时钟周期=时钟到输出的时间+数据延时+建立时间-时钟的歪斜=tco+B+tsu–(E-C)Page46
本文档为【第11章 FPGA设计验证】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: ¥20.0 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
正方体
暂无简介~
格式:ppt
大小:388KB
软件:PowerPoint
页数:50
分类:
上传时间:2022-05-10
浏览量:5