目前芯片一次投片成功率只有35左右,造成芯片重复投片的主要原因就是验证不够充分。SoC设计的验证需要投入的资源已占整个设计资源的60~80。1999年当VSIA[1]举行验证专题会时,许多世界级验证专家得出结论:验证是件困难的事(hard),几周后更把结论更正为"Verification is not hard,it is veryhard"。现在愈来愈达成共识:单一的设计工具难以解决验证问题,而需要一系列复杂的工具和技术,来减少设计错误数,使之qvod 邻家特工 英文达到可接受的程度。
任何SoC设计均由一系列模块组成。模块可能是自己开发,也可能是重用第三方的IP核。不论哪种情况,在系统集成前做IP核验证工作是必需的。模块/IP核级验证流程如图3所示,软性检查(Link Checking)主要检查代码语法、可综合性、变量未初始化、结构化可支持性和端口失配性等;规范模型检查(Formal Model Checking)主要做设计特征遗漏性检查,以在早期发现错误状况,尤其对控制流设计效果明显,通过设计文档非正式说明、与设计者非正式沟通等途径抽取特征疑问,逐一验证,消除缺陷;功能验证(Functional Verification)主要利用基准测试向量基于事件或基于时钟进行功能验证,如黑盒测试、白盒测试和灰盒测试(gray-box)等;协议检查(Protocol Checking)主要验证是否违犯总线协议或模块互连约定,按照协议逐一检查并比较结果;直接随机测试(Directed Random Testing)通过随机产生数据、地址、控制等信号检查功能正确性,减少模拟仿真工作量;代码覆盖率分析(Code Coverage )主要根据模拟仿真时统计代码被执行数,可以按陈述句、信号拴(Toggle)、状态机、可达状态、可触态、条件分支、通路和信号等进行统计分析,以提高设计可信度。