验证空间是无限大的,用有限的计划时间去完成全部空间验证是不现实的,至少目前是的。那么,就需要在计划的时间内,尽可能更有效率地找出更多芯片设计问题,而且优先把严重问题排除掉。
在memory验证中,可以从6个方面去思考、琢磨是否有芯片设计问题。
验证模块的输入和输出接口:这个是芯片验证最基本的要求。对于输入,要保证激励不要过约束,而且设计激励前要多去理解芯片架构和微架构,来产生更有意义的激励。对于输出,每一根信号都要检查是否符合项目需求。
命令和数据传输的完整性:这一块花的精力会多些,特别是检查器(reference model + scoreboard)。确保所有master口和slave口之间的命令和数据传输是完整的。
Order:也就是保序,常见的比如AXI同ID保序,或者Device nGnRnE的强保序,或者load acquire/store release保序,或者memory barrier保序等。保序通常跟命令的语义有关系,必须准确的理解好命令语义,才能做好保序检查。
Hazard:常见的有RAW、WAR、WAW、和RAR。有些RAW可以forward数据,但有些RAW就不能forward的数据。这个有些是跟引起Hazard的命令语义有关系,有些是跟微架构自己设计有关系,需要具体问题具体分析。
仲裁:仲裁处理不当会引起饿死、死锁或活锁的产生。仲裁的验证其实还是很依赖于激励的质量。单级仲裁用formal来验证是最有效果的,直接遍历完所有场景。但多级仲裁再叠加上很多逻辑电路时,深度太深了,用formal可能也验证不完,大多数情况下,只能多正向分析,然后有针对性的压力测试。
性能:memory的性能还是很关键的,常见的衡量方式有benchmark、bandwidth、latency,也有可能跑真实场景来分析。
有事没事,多从这六个方面去思考memory验证,一定会有新的发现。
144