新手如何入门数字IC验证?需要学哪些知识?
发布时间:2023-12-04来源:芯学长
a.系统设计时,采用仿真进行性能分析和协议分析。
b.电路/逻辑设计时,采用软硬协同验证:FPGA验证;静态时序分析工具验证时序;用形式验证检查综合过程及ECO是否正确。
c.物理设计时,采用物理验证(LVS,DRC):用静态时序工具验证最终时序;用形式验证检查布局布线过程及ECO。
验证理论知识
验证流程
1)编写验证计划
验证计划要解决的是what的问题,即要验证的内容。
2)确定验证策略
验证策略要解决的是how的问题,即针对验证内容如何搭验证框架,功能点如何验证等。
验证解决的问题
1)穷尽所有的可能的情况给设计产生激励(一般会给出随机约束激励)。
2)在各种激励情况下判断处不符合硬件描述的行为并报告出来。
回归测试
在某个缺陷修复或功能修改后,按照以前所有的测试用例(testcase)和可能添加的新的测试用例进行测试。
测试要求
1)确保本次改动修复以前的漏洞,没有引入新的缺陷,实现了新功能。
2)递交不同的随机种子(random seed)进行随机测试,确保每次测试都能提高功能覆盖率。
验证层次
为了便于拆解功能模块,方便分工协同,通常会把进行分层次验证,以手机通信芯片为例:
1)芯片系统级(手机通信芯片)
系统级验证主要确认芯片体系结构满足所赋予的功能/性能要求。系统级设计阶段将用户需求转换成功能/性能要求,并实现行为/功能设计,然后映射到相应的体系结构上(设计输入、硬IP核、软IP核、软/硬件划分、性能分析、总体优化、性价比评估等反复叠代),最后进行系统级验证。也就是说系统级验证侧重于验证芯片的输入输出;从寄存器检查和数据检查入手,实现定向测试子系统间的交互协作。
在系统级验证中,往往要构建虚拟目标系统,如中科SoC芯片在实施验证时,将其所有对外接口挂接许多虚拟 IP核,同时编制了BIOS、RTOS及应用测试程序(包括驱动程序)。首先做功能验证,验证是否满足要求; 其次做软硬件性能验证; 第三做系统级基准测试(自顶向下验证策略),抽取特定功能,编制测试向量/程序,定义对错条件,覆盖所有功能,形成基准测试程序(反复迭代),用于模拟仿真。
功能仿真: 主要关注模块-模块(IP核-IP核)间互连验证、系统总线协调性验证和标准规范兼容性验证等,由于复杂度高,可通过事件驱动和加速技术,如硬件加速器、模拟发生器和快速建模试验等来加速和简化仿真工作。
对于一款裸机CPU来说,系统级验证的激励输入是一段段C代码程序或者汇编程序,而针对目标CPU所采用的指令集,需要相应的该指令级工具链将 .c 或 .asm转换成 .bin文件,并输入到CPU的指令存储器中;同时,转换时还需要考虑到该款CPU的寄存器初始化,整个系统初始化等,需要将boot初始化代码、syscall代码、crt代码一同链接到bin文件中,使CPU在从系统、寄存器初始化等指令处开始执行。
对于内含操作系统的CPU来说,初始化和系统调用则更加复杂。
2)子系统级(数据接口 I/O)
需完成设计包;验证包;回归测试表;覆盖率收集脚本和数据;完整的文档(设计,验证,集成,后端)
3)模块级(USB3.0 PCIe I2C )
考虑的因素:内部功能(状态机等);内部数据存储;数据打包,编解码;指令执行;寄存器配置;与其他模块,子系统,芯片系统以及电源开关的互动情况
3)硅后系统级
功能验证,与硅前随机测试互补
验证透明度
1)黑盒测试
应用场合:对设计细节缺乏认识。
该部分测试只需要将激励给入设计的外部接口,检查设计输出,建立参考模型,无需关心设计本身。但是该测试透明度较低,导致无法深层次地定位问题,从而解决一些较深的缺陷。
2)白盒测试
应用场合:了解内部工作逻辑、层次,信号等。
无需参考模型,只需要植入监视器和断言来检查各个内部逻辑,从而对底层的设计细节进行测试。但是该测试专注于设计内部逻辑检查而忽视整体功能测试,且一旦设计更新,验证文件的可复用性很差。
3)灰盒测试
实际应用场合中通常将黑百盒两种测试方法结合。其特点是前两种测试折中。
动态仿真
通过测试序列和激励生成器给入待测设计适当的激励,跟随仿真进程的推进,判断输出是否符合预期。
1)定向测试
激励内容在仿真前确定下来,测试用例给出的激励序列不会在下一次提交任务时改变。一般应用在模块测试早期或这系统级芯片测试场景中,它适合于测试设计的基本功能。
2)随机序列测试
通过预先定义的约束,每次随机产生合理的数值,通过激励产生器给出测试序列。使用随机激励时,需要用功能覆盖率来评估验证的进展情况。随机序列数要尽可能多一些,否则很有可能error检测不出来。
3)参考模型测试
4)断言检查
针对某特定的逻辑或时序进行预设,一旦设计的实际行为不符合断言的描述,则给出检查报告。
静态检查
本身不需要仿真、波形激励,可通过工具的辅助发现设计中存在的问题。在设计早期发现功能实现意外的设计问题,完善设计代码。
检查方法包括:
1)语法检查
2)语义检查
在语法检查的基础上做深入检查,检查范围包括设计错误,影响覆盖率收敛的问题,可能会产生X值以及受其影响的设计部分。
3)跨时钟域检查(CDC)
跨时钟通信要考虑同步问题,由此导致的随机性可能会导致建立时间和保持时间无法满足,导致功能失败。
4)形式验证
形式验证可以通过数学方法遍历状态空间,进而证明设计行为符合属性描述。
等价检查:用来保证两个电路的行为是等价的,检查不同抽象级的电路是否一致。
属性检查:电路的行为通过验证语言来描述其属性,随后通过静态方式证明在所有状态空间都满足该条件,否则举出反例。
覆盖率
1)代码覆盖率
语句覆盖率:程序的每一行代码是否被执行过;
条件覆盖率:每个条件中的逻辑操作数被覆盖情况;
决策覆盖率:指在if, case, while, repeat, forever, for, loop语句中各个分支执行的情况;
事件覆盖率:记录某一个事件被触发的次数;
跳转覆盖率:记录某个边界信号数据位的0/1跳转情况;
状态机覆盖率:记录状态被进入的次数,以及状态间的跳转情况。
2)断言覆盖率
记录断言的先决条件是否被触发,以及判断语句成功或失败。基本可分为基于动态仿真或者硬件加速的断言覆盖率和形式验证的静态断言覆盖率。
3)功能覆盖率
主要关注设计的输入,输出和内部状态,衡量是否实现设计的各项功能,且是否按预想的行为执行。
测试平台(testbench)
整个验证系统的总称,包括验证结构中的各组件,组件间的连接关系,测试平台的配置和控制,编译仿真流程,结果分析报告和覆盖率检查。
平台包括时钟/重置,激励发生器,DUT,比较器,监测器五个组件。
→了解数字IC验证项目或数字IC流片项目,可以点击留言。
相关推荐:
【免责声明】:本站部分文章为转载或网友发布,目的在于传递和分享信息,并不代表本网赞同其观点和对其真实性负责;文章版权归原作者及原出处所有,如涉及作品内容、版权和其它问题,我们将根据著作权人的要求,第一时间更正或删除。