芯片流片前的开发流程
用户需求:设计结构和产品描述。
系统设计:模块化的功能详述。
硬件设计:HDL文件
功能验证:验证文件(前仿真部分)
后端综合:门级网表,SDF文件(后仿真部分:零延时映射,单位延时映射,SDF仿真)
验证要求
完备性:各种覆盖率、跨时钟域等的检查需要完备。
复用性:标准化验证环境、测试规范、UVM:小粒度的功能组件、快速拔插式的环境集成。
高效性:随机约束于基本范围进行基本功能验证,放开随机约束并限定护理情形进行完备功能验证,理解设计本身和约束缩窄范围或定向测试以完成剩余20%的功能验证。遵守先易后难,先基本后高级,以及基本缺陷禁止出现的规定。
高产出:单位时间能效率更高。按进度完成验证节点,保持质量并避免在硅后、客户测试、甚至上市后出现问题。
代码性能:同复用性,代码规范。
验证的检查点
验证计划回顾:整个验证周期内进行修改完善
验证代码检查:可能遗漏的测试激励,不恰当的随机约束,代码结构缺陷等。
完备性检查:根据检查清单判定模块、子系统、芯片是否达到验证目标,并在流片前确认。
硅后系统测试:判定是否有设计缺陷,以及缺陷是否可以用软件修复,硬件变通。
逃逸分析:总结失败或者某个点没有检查到的原因,以及如何克服,后续如何处理完善。
验证文档
芯片功能
接口信息:是否为标准接口,接口的名称和说明。
结构信息:模块划分为功能组件,各个组件之间如何交互与联系的逻辑关系。
交互信息:握手信号,电平信号,持续周期等说明。
验证计划
验证方法:动态仿真、形式验证、硬件加速。透明度(白盒,灰盒,黑盒)。测试方法(定向,随机约束)
验证工具:VCS等
完备标准:衡量验证任务的完备性指标说明,覆盖率要求
验证资源:人力、时间、硬件、软件等的预算
进度安排:人力和时间,评估芯片结构的不稳定性,工具选择的风险,人力精力与模块交付进度的风险。
功能点:
- 基本功能:时钟,复位,寄存器访问等。
- 互动功能:模块之间,子系统,芯片级的互动验证。
- 次要功能:性能,效能等。
- 测试用例:激励与结果。
- 其中的激励需要在序列颗粒度和可控性之间考虑,并有独立性和组合*度(中心式,分布式)。
断言
TLM模型与ESL
TLM事务级模型:用于模拟硬件行为,侧重功能描述,用于验证中的(设计)模块交互,同时前期作为也可在准确的情况下作为参考模型。
ESL电子系统级:多流程分支并行开发提高效率。
ESL通过TLM模型,使得开发过程中各小组实现并行开发。
验证的层次
模块级:测试:状态机、数据存储、数据打包编解码、指令执行、寄存器配置等。
子系统级:交付:设计包,验证包,回归测试表,覆盖率收集脚本和数据,完整的文档(设计验证集成后端)
芯片系统级:测试:输入输出,寄存器检查,数据检查,定向测试。
硅后系统级:定向激励测试。
验证方法
动态仿真:原始的激励前仿真。
形式验证:形式验证是为了验证RTL代码与门级网表之间的逻辑等价性。https://www.cnblogs.com/nevel/p/13600170.html
硬件加速:专用模拟器(主流)或者FPGA上加速。
验证的收敛
快速的项目周期做出合适的回归流程,将RTL1,RTL2,RTL3的串行节点适当并行化。保证质量的同时,提高回归效率。