IC验证零基础学习-System Verilog-(一)验证导论
1、验证流程:
1)不同层次上的测试:最容易检测的是在代码块(Block)层次上,代码块是由每个设计者在模块(module)内创建。代码块边界也是寻找漏洞的地方。
2)验证计划
2、验证方法学-目前主流的是UVM(Universal Verification Methodology)
3、基本测试平台的功能
主要步骤:①产生激励;②把激励施加到DUT上;③捕捉响应;④检验正确性;④对照整个验证目标测算进展情况。
4、定向测试-
5、验证方法学基础
基本原则:①受约束的随机激励;②功能覆盖率;③使用事务处理器的分层测试平台;④对所有测试通用的测试平台;⑤独立于测试平台之外的个性化测试代码。
6、受约束的随机激励-P7
7、你的随机化对象是什么
能都使用随机数据找到的漏洞类型基本上都是在数据路径上的,很可能还都是比特级的错误。还要找到逻辑上的错误:①设备配置;②环境配置;③输入数据;④协议异常;⑤错误和违例;⑥时延。
1)设备和环境配置:在对RTL设计进行测试的过程中,察觉不到漏洞的最常见的原因是什么?是因为没有尝试足够多的不同的配置。
2)输入数据:事先估计好所有的分层协议和错误注入,以及计分板的内容和功能覆盖率。
3)协议异常,错误和违例:使用打印消息或断言来定位错误点。
4)时延和同步:使用受约束的随机时延有助于捕捉协议漏洞。
5)并行的随机测试:使用多个种子运行同一测试可以加大覆盖率,同时也能减少你的工作量。
8、功能覆盖率
主要步骤:①在测试平台中接入代码,用于监控进入设备中的激励,以及设备对激励的反应,并据此确定哪些功能以及被验证过;②运行几次仿真,每次使用不同的种子。③把这些仿真的结果合并到一个报告中;④对结果进行分析,最后决定如何采用新的激励来达到那些尚未被测试到的条件和逻辑。
1)从功能覆盖率到激励的反馈
更有效的测试策略是使用随机总线事务和终止判断;在受约束的随机激励中很少采用动态反馈。相反地,需要手工分析覆盖率报告,随机调整约束;
9、分层的测试平台
1)信号和命令层
底部信号层,包含有待测设计和把待测设计连接到测试平台的信号。
命令层:①执行总线读/写命令的驱动器驱动了待测设计的输入。②待测设计的输出与监视器相连,监视器负责检测信号的变化,并把这些变化按照命令分组。③断言也穿过命令层和信号层,它们负责监视独立的信号以寻找穿越整个命令的信号变化。
2)功能层
功能层向下面对的是命令层,代理接受来自上层的事务。这些命令也被送往用于预测事务结果的计分板。检验器则负责比较来自监视器和计分板的命令。
3)场景层
场景层就是负责组织协调各种步骤可能出现的情况。可以通过在代码中留下“钩子”来做到这一点,这样即使这些块的行为需要在测试时改变,也不必重新写代码。
4)测试层和功能覆盖率
顶层测试,包含用于创建激励的约束。
功能覆盖率可以衡量所有测试在满足验证计划要求方面的进展。由于代码经常被修改,所以它不作为测试环境的组成部分。
可以在受约束的的随机环境中创建定向测试,只需要在随机序列中间插入定向测试的代码,或者把两部分代码并列。
10、仿真环境阶段
建立阶段:
1)生成配置:把待测试设计的配置和周围的环境随机化。
2)建立环境:基于配置来分配和连接测试平台构件。
3)对待测设计进行复位。
4)配置待测设计:基于第一步中生成的配置,载入待测设计的命令寄存器。
运行阶段:
1)启动环境:运行测试平台构件、
2)运行测试:启动测试然后等待测试完成。
收尾阶段:
1)清空:在最下层完成以后,你需要等待待测试设计清空最后的事务。
2)报告:一旦待测设计空闲下来,你就可以清空遗留在测试平台中的数据了。
11、最大限度代码重用
12、测试平台的性能
创建受约束的随机测试需要几个步骤:
1)最重要的一步,建立分层的测试平台,包括自检部分。
2)按照验证计划中列举的目标创建激励。使用随机约束,注入错误或协议违例等。
3)功能覆盖率。
13、验证常用的手段:白盒验证;黑盒验证,灰盒验证
1)白盒验证:可以不需要参考模型,可以通过在设计内部或外部输出信号放置监控器和断言来保证设计操作的正确性。
2)黑盒验证:只通过其边界信号来验证一个模块或设计的功能。
3)灰盒验证:在设计的内部添加监控器和断言来减少对参考模型的要求,在错误发现的时候也减少调试压力。
14、主要的验证技术:形式验证;放置验证;硬件加速验证。
1)形式验证:采用逻辑和数学公式的方法来证明或者否定硬件的特性。包括等价性检查和属性检查。
2)仿真验证:在给定当前状态和输入的情况下,通过计算下一个状态设计信号的值,同时考虑到信号延迟,把未来值赋给设计中的信号。
3)硬件加速验证:把设计映射到可配置平台。
15、验证方法学:随机激励生成;覆盖率驱动验证;断言验证
1)随机激励生成
2)覆盖率驱动验证
3)断言验证:
断言,又被称为监控器或检验器,是一种在验证流程中使用多年的调试技术。
参考书籍《SystemVerilog验证测试平台编写指南》《SystemVerilog与功能验证》