简而言之,bugs 可以从简单的拼写错误到复杂的逻辑场景(scenarios)。此外,bugs 的严重程度可以从无伤大雅到导致项目灾难性地失败。
以下是对功能验证过程中发现的BUG尝试性地进行一些分类:
1、RTL/逻辑bugs 与 DV bugs :bugs 既可以存在于RTL中也可以存在于DV(验证代码)中。 在验证的早期阶段,DV 代码相比RTL代码更容易存在bugs 。随机验证环境的稳定并生成良好的激励,将发现更多的 RTL bugs 。
2、简单的bugs :简单的bugs 可能是代码中粗心的拼写错误或导致基本功能问题的简单逻辑错误。这些bugs 一般在验证的初始阶段就可以发现。
3、边界场景bugs :边界场景bugs是当设计(或测试平台)中的各种逻辑同时发生或者以某种时序关系活动导致的bugs。 这些bugs是整个验证过程中最具价值的成果。很多时候,只有进行高质量的测试计划、测试点分解,代码审查、质量活动才能有这些重要的发现。
4、挂起、死锁、活锁bugs :这些bugs 就是前文提到的灾难性的bugs 。 验证工程师需要彻底地了解微架构,并与设计架构师共同进行头脑风暴,确定要测试的所有潜在场景,以避免这些情况。
5、性能bugs :这些问题可能不会导致功能问题,但可能会导致设计无法满足某些性能目标。例如更长的延迟、流水线气泡、不必要的replay逻辑等。