芯片开发流程
- 从市场人员与客户沟通开始。
- 系统设计人员按照功能划分为各个子系统。
- 子系统被进一步划分为功能模块,并由设计团队实现。
- 验证人员对设计功能展开验证,发现设计缺陷,交由设计人员修正。
- 验证没有出现漏洞后,交由后端人员进行综合、布局、布线。
- 后端人员将核心数据交由FAB(Fabrication)进行流片。
验证分类
从验证工具的分类:仿真验证、形式验证。
从复杂度出发:黑盒、白盒、灰盒验证。
动态仿真
该方式通过测试序列和激励生成器给入待验设计适当的激励,伴随着仿真时间,进而判断输出是否符合预期。
按照激励生成方式和检查方式,动态仿真分为:
- 定向测试
- 随机测试
- 参考模型检查
- 断言检查
静态检查
与动态仿真相对,本身不需要仿真、波形激励,它通过工具辅助,可以发现设计中存在的问题。
- 语法检查
- 语义检查
- 跨时钟域检查
- 形式验证
- 等价检查:用于保证两个电路的行为是等价的,检查不同抽象级电路是否一致,例如RTL级和网表级。
- 属性检查:模型检查。
验证周期
P24
- 创建验证计划:验证周期的起点,参照系统工程师给出的功能详述文档。
- 开发验证环境:邀请设计人员和系统人员回顾验证计划,确保无遗漏,这是第一个检查点。
- 调试环境:提供激励,比对设计输出结果,定位硬件HDL文件缺陷位置。
第二个检查点:验证代码检查。 - 回归测试:将已有的所有测试用例都执行一次。
第三个检查点:流片前验证完备性检查。 - 硅后系统测试:完成对接。
- 展开逃逸分析:硅后发现的缺陷展开逃逸分析。
第四个检查点:吸取教训。
验证计划
- 在验证初期,应该只发送一些基本的测试数据,因此约束范围应该尽可能窄。
- 在验证中期,由于设计已经基本稳定,所以可以扩大约束范围,以此更有效地完成测试。
- 在验证后期,有一些状态空间由于需要特定的测试序列,因此收窄约束范围有利于测试。
计划模板
P81
- 设计功能简述
- 硬件实现框图
- 待验证的功能点
- 验证环境搭建
- 测试用例构成
- 编译脚本和回归测试
- 覆盖率分析
代码覆盖率
p87
- 语句覆盖率:程序每一行代码是否被执行过。
- 条件覆盖率:每个条件中的逻辑操作数被覆盖的情况。
- 分支覆盖率:在if,case,while,repeat, forever,for,loop语句中各个分支执行情况。
- 事件覆盖率:记录某一个事件被触发的次数。
- 翻转覆盖率:记录某个设计边界信号数据位的0/1翻转情况,如从0到1,或从1到0。
- 状态机覆盖率:仿真器的覆盖率功能可以识别设计中的状态机部分,记录各种状态被进入的次数,以及状态之间的跳转情况。
————摘自路科芯院