1、功能验证(寄存器传输级RTL的功能验证)
针对芯片设计对象的行为功能进行验证,以保证设计能够按照设计规范实现其应有的功能。功能验证包括定义测试用例,创建测试环境,运行测试用例,保证所有要求的用例被覆盖到。
2、验证平台
需要提供更多的自动化机制来提高每一个测试用例(test case)的功能覆盖率和减少创建测试用例的时间。
验证平台的主要功能:①产生激励;②把激励应用到被测设计中;③检查结果和验证测试是否通过,确保被测设计的输出与期望一致。
3、激励
直接测试:激励由用户提供的确定输入;随机测试:激励是种子随机生成的。
直接测试,是通过驱动每个信号的数值来实现;事务级的验证,通过对激励和验证架构进行分层和高层抽象建模,比如task封装好的任务;约束随机激励产生,激励可以根据用户指定的约束,完全通过验证平台自己产生。
4、验证的结果检查
①通过视图检查,适用于简单设计,可能出现人为误差;
②通过自动化的后处理,记录测试过程中log,采用其他语言来处理,只能在测试完成后来实现,浪费仿真周期,而且有些必要的标志无法保存,不利于调试;
③实时的监察器及时自动检查,调试过程中,设置错误标志或打印信息提醒客户,在发生错误的时刻,通过停止仿真缩短仿真周期,有利于定位bug。
5、功能验证流程
功能验证三个主要阶段:制定验证策略和验证计划;创建验证平台,运行和调试;覆盖率分析和回归测试。
5.1、制定验证策略和验证计划
①主要功能点和测试用例,将功能点的测试空间缩小到一个可以管理的范围,或者一个有实际意义的集合并且没有损害其期望的功能。根据功能点,拟定验证策略和验证计划;
②验证平台的抽象层次决定了该平台主要的处理对象:比特、包或更高层次的数据类型。
③激励生成和结果检查原则,定义输入到验证平台的激励如何产生,结果如何检查以及结果判断。
5.2、验证平台搭建
验证平台的搭建,书写测试用例和调试阶段,以可重用为基本原则,不断添加测试用例。
5.3、回归测试和覆盖率收敛
回归测试要求能够周期的批处理运行,激励必须能够容易得到重视,并且能自动检查;覆盖率显示出设计被测试的程度,是验证收敛的重要标准。
模块级的验证平台功能是帮助调试各个模块中的实现,使集成到芯片中更加容易;芯片级的验证平台功能是测试各个模块之间的交互功能。
6、三种验证手段-白盒、黑盒、灰盒
黑盒验证,只通过其边界信号来验证一个模块或设计的功能,要求一个精确的参考模型。
白盒验证,在设计内部或外部输出信号放置监控器和断言来保证设计操作的正确性。
灰盒验证,在设计内部或外部输出信号放置监控器和断言来减少对模型参考的精确要求,发现bug及时停止减少调试的压力。
7、三种验证技术-形式验证、仿真验证、硬件辅助加速验证
7.1、形式验证
形式验证,采用逻辑和数学公式的方式而不是测试向量来确定硬件的属性。
形式验证优点:①形式验证技术可以是设计实现特性的完备声明,即全部可能输入流;②形式验证技术不需要测试向量输入。
形式验证技术:等价性检查和属性检查。
等价性检查,在所有可能的输入组合和序列下,两个硬件实现的功能是等价的。
属性检查,①属性能够在设计流程的任何阶段被描述出来,包括在系统设计阶段属性的定义、把属性指定到微观结构的设计模块中;②属性描述可在设计规范和开发进行的过程中,不断的搜集和添加;③属性描述可以在设计的开始阶段,当验证环境没有搭建好的时候,为形式属性检查工具提供测试激励;④属性间接地定义了覆盖率统计点,可以用作检查验证过程的完备性。
7.2、仿真验证
仿真验证,通过验证平台应用激励数据到设计中,计算设计下一个状态的值,检查下一个状态是否符合设计期望。
7.3、硬件辅助加速验证
硬件辅助加速验证,把设计映射到可配置平台,如FPGA或者通用单元,以便数字设计部分可以在接近最终产品的时钟速度下运行。硬件加速仿真,使用可配置平台来仿真被测设计,在硬件加速中,验证程序在主机中运行。硬件模拟仿真,激励到设计的数据可以通过实际的接口获取,整个验证环境是真实的,可以通过软件和硬件的检测机制对验证过程进行监测和调试。
8、功能验证的特性
①验证完备性,最大限度地验证被测设计的行为,采用覆盖率驱动的验证方法学,制定一个可以数量化衡量完备性,可追踪,有组织的验证计划。
②验证可重复性,优化验证环境的架构,确保在不同场合重用。重用的常用方式:模块化验证组件,采用标准接口,将激励产生机制和验证架构分离等。
③验证可靠性,尽可能减少验证过程中的手工操作。约束随机验证,通过搭建一个自动化的系统来产生激励和自动比较,提高验证的可靠性。
④验证效率,在给定的时间内使验证工作投入的产出最大化。提高验证效率,可以通过提高验证平台的抽象层次和采用重用的方式。
⑤验证性能,最大化验证程序的效率,在设计和搭建验证环境中,充分考虑验证程序性能这一因素,同时在运行回归测试时,迭代周期主要由验证平台运作的有效性来决定。
9、验证方法学-断言验证ABV、约束随机激励测试CR TB、覆盖率驱动验证CDV
9.1、断言验证(Assertion Based Verification ABV)
断言验证,保证设计和设计期望之间是一致的。
断言,即监控器或者检测器。
例子1:a b信号互斥的断言
`ifdef assertion
If(a & b)
$display(“Error:Mutually asserted check failed,\n”);
`endif
断言描述时序相关的设计属性
例子2:当信号req当前时钟为高,下面1-3个时钟周期内,ack变为高电平(fork……join 并行执行语句)
always(@posedge req)
begin
repeat(1)@(posedge clk);
fork:pos_pos
beign
@(posedge ack)
$display("Assertion Success",$time);
disable pos_pos;
end
begin
repeat(3)@(posedge clk);
$display("Assertion Failure",$time);
disable pos_pos;
end
join
end
9.2、覆盖率驱动验证(Coverage Driven Verification ,CDV)
覆盖率驱动验证的特点是基于随机激励产生,涉及事务级验证、约束随机激励产生、自动化结果比较、覆盖率统计分析和直接测试。事务级验证允许一个更高的抽象层次来创建验证场景。约束随机激励产生可以获取更高的效率,为生成验证环境和自动化结果比较提供充分的保证,设计能够在各种随机的情况下被验证。覆盖率统计,可以清楚定位哪些场景被随机生成过。直接测试,对随机生成的场景进行补充。
9.2.1、事务级验证
在事务级验证中,低层次的信号活动被抽象成一个事务操作,通过高层次事务操作来描述各种验证场景。事务处理器把验证环境中的抽象层次的活动转换成低层次的信号活动,以便DUT被测设计接收。
9.2.2、约束随机激励生成(Constrained Random Generation)
随机激励生成是利用随机生成技术来产生一个事务交易中所有的数据内容,同样产生一系列事务交易来形成一个特定的验证场景。随机数据生成,只要求数据值被随机生成;随机场景的生成,要求验证计划需要的场景能被随机生成,包括检查和覆盖率统计。随机验证环境,各种随机组合交叉,使得在验证计划中没有指定的场景也可能会被生成,同时,随机验证环境不可以完全随机的,生成的数据和参数必须保持在一个合法的数值集合中。
一个随机激励生成应用的例子,验证有限状态机,包括:随机激励生成、自动比较、覆盖率统计和分析
①随机激励生成,初始化,把有限状态机初始化至一个随机合法的状态,生成随机输入;
②自动化比较,检查下一个仿真状态是否和预期的一致,检查仿真输出是否和预期的一致;
③覆盖率统计,统计所有覆盖的状态,统计状态的变迁,统计每个状态上的输入;
④分析,检查所有有限的状态是否被覆盖,检查所有的跳转是否被覆盖。
10、覆盖率驱动验证项目的开发周期
一个覆盖率驱动验证项目的开发周期包括:开发验证计划、搭建验证环境、测试运行环境、运行随机测试用例、针对边界情况创建直接测试。
11、System Verilog的优点
①单一,同时支持设计和验证的标准语言;
②支持约束随机的产生;
③支持覆盖率统计分析;
④支持断言验证;
⑤面向对象的编程结构,有助于采用事务级的验证和提高验证的重用性。