System Verilog与功能验证(一)

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的优点
①单一,同时支持设计和验证的标准语言;
②支持约束随机的产生;
③支持覆盖率统计分析;
④支持断言验证;
⑤面向对象的编程结构,有助于采用事务级的验证和提高验证的重用性。

SystemVerilog的听课学习笔记,包括讲义截取、知识点记录、注意事项等细节的标注。 目录如下: 第一章 SV环境构建常识 1 1.1 数据类型 1 四、二值逻辑 4 定宽数组 9 foreach 13 动态数组 16 队列 19 关联数组 21 枚举类型 23 字符串 25 1.2 过程块和方法 27 initial和always 30 function逻辑电路 33 task时序电路 35 动态 静态变量 39 1.3 设计例化和连接 45 第二章 验证的方法 393 动态仿真 395 静态检查 397 虚拟模型 403 硬件加速 405 效能验证 408 性能验证 410 第三章 SV组件实现 99 3.1 接口 100 什么是interface 101 接口的优势 108 3.2 采样和数据驱动 112 竞争问题 113 接口中的时序块clocking 123 利于clocking的驱动 133 3.3 测试的开始和结束 136 仿真开始 139 program隐式结束 143 program显式结束 145 软件域program 147 3.4 调试方法 150 第四章 验证的计划 166 4.1 计划概述 166 4.2 计划的内容 173 4.3 计划的实现 185 4.4 计划的进程评估 194 第五章 验证的管理 277 6.1 验证的周期检查 277 6.2 管理三要素 291 6.3 验证的收敛 303 6.4 问题追踪 314 6.5 团队建设 321 6.6 验证的专业化 330 第六章 验证平台的结构 48 2.1 测试平台 49 2.2 硬件设计描述 55 MCDF接口描述 58 MCDF接口时序 62 MCDF寄存器描述 65 2.3 激励发生器 67 channel initiator 72 register initiator 73 2.4 监测器 74 2.5 比较器 81 2.6 验证结构 95 第七章 激励发生封装:类 209 5.1 概述 209 5.2 类的成员 233 5.3 类的继承 245 三种类型权限 protected/local/public 247 this super 253 成员覆盖 257 5.4 句柄的使用 263 5.5 包的使用 269 第八章 激励发生的随机化 340 7.1 随机约束和分布 340 权重分布 353 条件约束 355 7.2 约束块控制 358 7.3 随机函数 366 7.4 数组约束 373 7.5 随机控制 388 第九章 线程与通信 432 9.1 线程的使用 432 9.2 线程的控制 441 三个fork...join 443 等待衍生线程 451 停止线程disable 451 9.3 线程的通信 458 第十章 进程评估:覆盖率 495 10.1 覆盖率类型 495 10.2 功能覆盖策略 510 10.3 覆盖组 516 10.4 数据采样 524 10.5 覆盖选项 544 10.6 数据分析 550 第十一章 SV语言核心进阶 552 11.1 类型转换 552 11.2 虚方法 564 11.3 对象拷贝 575 11.4 回调函数 584 11.5 参数化的类 590 第十二章 UVM简介 392 8.2 UVM简介 414 8.3 UVM组件 420 8.4 UVM环境 425
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小灰灰的FPGA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值