本发明涉及eda,特别是涉及一种行覆盖率中毛刺的过滤方法、电子设备及存储介质。
背景技术:
1、验证覆盖率是衡量验证活动有效性和充分性的关键工具,它能够帮助工程师系统化地完善测试策略,最大限度地减少设计中的潜在缺陷,从而确保最终芯片产品的质量和可靠性。覆盖率包括多种类型的覆盖指标,如状态机覆盖率、行覆盖率、条件覆盖率和断言覆盖率等。其中,行覆盖率是用于衡量测试用例执行过程中源代码的每一行都被执行过。目前行覆盖率的获取是通过在编译阶段动态插入探针,这些探针能够在运行阶段记录程序执行时每行代码是否被实际执行。当测试用例运行时,每个探针会在相应代码行执行时产生一个标记或计数,表示该代码行已被执行,测试用例执行完后收集执行信息计算覆盖率。
2、一般情况下,由于用户在撰写测试用例时并未考虑周全,在测试用例中出现了并发等情况,因而导致毛刺的产生。目前面对毛刺是需要用户手动修改测试用例来过滤。在根据测试用例获取覆盖率数据的过程中,会将毛刺产生的执行信息也一起被统计起来计算覆盖率,因此毛刺的存在会导致覆盖率数据虚高。例如,当在同一个时钟周期内连续两次触发同一个过程描述块的执行例化同一个源代码,后一次的例化会将前一次例化的结果覆盖,也即用户的真实意图为在后一次执行后例化,但是在统计覆盖率时,会将先后两次过程描述块的执行结果都统计在内,因此导致覆盖率数据虚高。在实际生产应用中,覆盖率数据的统计一般在后处理阶段,大多情况下是无法通过修改源文件和测试用例来消除毛刺。因此,亟需一种在不改变源代码的基础上过滤毛刺的方法。
技术实现思路
1、针对上述技术问题,本发明采用的技术方案为:一种行覆盖率中毛刺的过滤方法,所述方法包括如下步骤:
2、s100,在编译阶段,获取语法树中用于表示源代码的过程描述块中可执行的代码行的所有行节点。
3、s300,在每个行节点的相邻位置插入缓存节点;且在第一个行节点之前插入缓存节点的初始化单元,初始化单元的执行顺序在先,第一节点的相邻位置插入的缓存节点的执行顺序在后;其中,在第i个行节点的相邻位置插入的第i个缓存节点用于收集第i个行节点对应的代码行的覆盖数据。
4、s500,在最后一个行节点之后的相邻位置插入第一过滤节点;所述第一过滤节点用于计算累计覆盖数据stmt和当前执行过程描述块时所有缓存节点收集的覆盖数据glitch之间的按位或,得到新的累计覆盖数据;并在下一个时钟周期,将stmt更新为新的累计覆盖数据。
5、此外,本发明还提供了一种非瞬时性计算机可读存储介质,所述存储介质中存储有至少一条指令或至少一段程序,所述至少一条指令或所述至少一段程序由处理器加载并执行以实现上述方法。
6、此外,本发明还提供了一种电子设备,包括处理器和上述非瞬时性计算机可读存储介质。
7、本发明至少具有以下有益效果:
8、本发明提供了一种行覆盖率中毛刺的过滤方法、电子设备及存储介质,其通过在编译阶段中,在每个可执行的代码行的相邻行插入用于收集覆盖数据的缓存节点;在最后一个行节点之前插入过滤单元,过滤单元计算累计覆盖数据stmt和当前执行过程描述块时所有缓存节点收集的覆盖数据之间的按位或,得到新的累计覆盖数据;并在下一个时钟周期,将stmt更新为新的累计覆盖数据。通过该方法在不改变原始文件的基础上达到消除毛刺的目的,解决行覆盖数据虚高的问题,提高了行覆盖率数据的准确性。
1.一种行覆盖率中毛刺的过滤方法,其特征在于,所述方法包括如下步骤:
2.根据权利要求1所述的方法,其特征在于,s500中所述第一过滤节点还包括入口启动开关,当入口启动开关有效时,启动所述第一过滤节点收集覆盖数据。
3.根据权利要求1所述的方法,其特征在于,s500还包括:经过毛刺占用的时间跨度t的时间延迟后,将stmt的值更新为新的累计覆盖数据。
4.根据权利要求1所述的方法,其特征在于,所述s500还包括:
5.根据权利要求4所述的方法,其特征在于,所述s510中还包括入口启动开关,当入口启动开关有效时,启动第二过滤节点收集覆盖数据。
6.根据权利要求1所述的方法,其特征在于,第i个缓存节点通过将覆盖数据配置为覆盖值并将覆盖值缓存到相应缓存单元中来收集覆盖数据。
7.根据权利要求6所述的方法,其特征在于,所述缓存节点为数组变量中的数组元素。
8.根据权利要求7所述的方法,其特征在于,所述数组变量的数据长度为代码行的总数量。
9.一种非瞬时性计算机可读存储介质,所述存储介质中存储有至少一条指令或至少一段程序,其特征在于,所述至少一条指令或所述至少一段程序由处理器加载并执行以实现如权利要求1-8中任意一项的所述方法。
10.一种电子设备,其特征在于,包括处理器和权利要求9中所述的非瞬时性计算机可读存储介质。