路科验证的个人空间 https://blog.eetop.cn/1561828 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

[DVCon论文系列]利用机器学习算法优化随机测试约束

已有 1113 次阅读| 2019-4-12 19:40 |个人分类:验证系统思想| 机器学习, 随机测试

​最近,随着DVCon2019 China论文摘要提交的白热化,越来越多工程师跃跃欲试,呼吁路桑推出往届论文的呼声也越来越高,所以,路桑决定将往届DVCon的优秀论文带给大家,启发更多的工程师加入DVCon2019China。我们将往届优秀论文的观点加以提炼,展现给大家,希望可以给大家提供IC领域的前沿讯息,成为大家了解IC行业的窗口。

摘要

现代验证的主要内容是随机约束仿真,主要挑战之一是找到正确的约束组合。在验证的过程中,非常多的回归在数万次测试中产生数十亿个模拟周期,工程师不可能处理所有可用数据。因此,验证工程师通过各种覆盖率来深入了解回归结果。然而,机器学习和数据挖掘正是通过在庞大的数据库中找到模版,并推断出最佳方向指导我们,可用于解决这些问题。本文介绍了一种方法,其中覆盖结果和机器学习算法用于生成最有可能在设计中发现新错误的测试

一、导言

现代设计非常复杂。手动提出验证设计所需的所有激励是不可能的。为了解决这个问题,验证工程师严重依赖约束随机模拟。然而,随机测试也是非常低效的,往往需要运行数百万甚至数十亿的随机模拟周期,以找到角落里的错误。

在本文的分析中,可以看到,最常见的覆盖点往往比罕见的覆盖点更频繁地达到数量级。图1显示了最近一次运行功能覆盖的数据,10%的覆盖点收集了超过99%的总覆盖区域命中,而其他的90%很少受到攻击,隐藏在其中的错误将需要数十亿的模拟周期才能达到。

1.大部分回归中,10%覆盖点击中大多数覆盖率。

在本文中,提出了两个想法,使随机模拟更有效地找到这些难以发现的错误。第一部分提供了一种新的覆盖类型,旨在提供有关可能暴露错误的事件类型的反馈。第二部分描述了机器学习算法的应用,该算法使用覆盖反馈来选择和调整随机测试,目的是增加稀有状态的覆盖范围。

二、翻转对覆盖率

一些错误需要事件和状态变化组合在非常接近的时间内发生。大多数错误并不是特别深,并不需要数千个周期来模拟,但通常需要的几个事件不会一起发生。

如果触发器翻转被视为设计事件,那么两个触发器彼此接近(在时间上)切换将代表排列在一起的几个事件。通过监视所有触发器翻转并提取所有翻转对,已经创建一种新的覆盖范围,称为“翻转对覆盖”

“翻转对覆盖”有几个很好的属性。首先,翻转对覆盖bin的总数是n2,其中n是设计中的触发器的数量。这比代码覆盖范围大得多,但仍然非常易于管理。另外,翻转对覆盖是与代码覆盖一样客观的新覆盖,不同于主观的功能覆盖。翻转对覆盖可以引导我们找到漏掉的Bug。

有几种方法可以解释覆盖率结果。

首先,可以计算有多少不同的翻转对覆盖bins被命中,并将其定义为覆盖范围广度。特定测试所遇到的独特bin越多,测试的覆盖范围就越广,这在直观上看起来是件好事。

查看命中总量也很重要。我们定义命中的翻转对bins的总数,包括同一bin的多次命中,作为测试体积

当然,最有效的测试会在广度和体积方面产生很高的翻转对覆盖率——他们会做很多不同的事情,他们经常这样做。然而,许多这些测试将反复击中相同的翻转对bin。这是一种低效的使用,目标是减少甚至消除这种浪费。

我们需要将广度和体积指标折叠为一个数字,即每个测试的分数。试验发现以下函数产生最佳结果,主要是测试点与原点的距离,可选择放大宽度轴,以及选择使用功率因数拉伸好坏测试之间的值:

 

稀有因子越高,得分越多,有利于测试击打到许多不同的稀有bin。功率因数越高,得分就越分散,高得分测试优于低得分测试。这个以后可以用作选择算法中的学习速率参数。

改变参数设置允许对结果进行不同的解释,并且许多组合产生有趣的结果。没有一种最好的方法来确定这些参数,因为它们严重依赖于测试平台的细节和被测设计。需要在这些元参数上进行实验,甚至运行机器学习算法,以确定特定设置的最佳值。现在,这是一种查找哪些测试最常在设计中执行罕见事件组合的方法。

 

三、遗传算法

本文的目标是使用第二部分中的评分方法来设计一种算法,以生成一系列测试,这些测试会尽可能频繁地强调设计中很少出现的部分,从而增加了发现新bug的机会。为此,使用了机器学习算法,该算法擅长分析大量数据并识别模式。我们利用遗传算法

在该特定应用中,算法以以下方式工作:

1.初始种群是随机选择的测试,通常是回归中使用的正常测试列表。

2.对于每个测试,收集翻转对覆盖范围,并计算分数。

3.下一代是通过当前一代的原样测试,变异测试和全新的随机生成测试来确定的。在大多数情况下使用的常见分布是超过10%的测试,产生15%的新测试,并改变其余的测试(75%)。

4.重复步骤23

测试的变异是该算法的关键部分。在我们的测试平台中,每个测试都通过一组约150个命令行选项进行控制。通过使用相同或几乎相同的命令行选项集运行测试,并更改随机种子,可以生成符合上述条件的测试。

准确的算法进度评估至关重要。 在这里,我们通过被认为是罕见的总分bin数来确定何时应该停止迭代。通过优化测试打击稀有bin,一些稀有bin将不再被认为是罕见的选定的测试将经常击中它们。如果此曲线是平坦的,或已经停止减少,则迭代可能会结束(图2

2.每次迭代中认为罕见的bin的百分比。

四、聚类

在许多情况下,上述方法本身产生了优异的结果。然而,在一些较大的设计中,可能有几个翻转对覆盖区域,其中存在稀有区域。在实践中,将会有一组独特的测试点击中每个所需的区域,并且某些区域比其他区域更容易被击中。在那些情况下,击中“更容易击中”区域的测试得分将高于击中难击区域的测试,并且将在几次迭代中压倒它们。

一种方法是按照他们主要触及的覆盖区域对测试进行分组,并在每个组内运行单独的优化和选择。

为此,需要另一种机器算法——聚类算法。这是一种无监督学习算法,最常见且非常有效的算法称为k均值聚类算法。

该算法所需的数据点只是翻转对覆盖数据,对其进行归一化,以任何频率击中相同的区间的测试会被认为是相似的。数据可以直接输入k-means,但同样重要的是能够可视化聚类以查看它是否有意义。为了可视化数据,它必须转换为2D3D,为此使用称为多维缩放(MDS)的算法。 MDS将采用点之间的差异矩阵并以2D / 3D绘制它们,使得相似的点彼此靠近,并且不同的点距离很远。图3显示了一个这样的图

3.测试之间翻转对覆盖相似性

建立分组后,可以将每个群集视为完全独立的回归。仅在同一群集内比较测试分数,并且为每个群集分配新的/遗留/突变的测试选择。

五、结果

 优化后的回归一直比非优化回归找到更多失败,并且发现了大量独特的失败。这些结果表明,该方法可以有效地在较少数量的模拟周期中产生较高的故障率。

六、未来的工作

在非学术环境中,通常希望能够尽快显示一些结果。虽然本文提出了一个完整的问题解决方案,但还有许多其他途径需要探索以进一步改进此过程的结果。例如,虽然翻转对覆盖在我们的实验中产生了非常好的结果,但是通过更传统的覆盖数据(例如代码和功能覆盖)运行相同的过程将是非常有趣的。特别的是,有许多机器学习算法可以应用于这个问题,以进一步增强和提高测试选择的效率。

A.神经网络

当前的学习算法依赖于运行每个选定的测试以了解其属性。它无法推断从未运行过的测试会做什么。神经网络可以学习每个测试控件的效果,并预测测试在不运行的情况下执行的操作。

B.元学习

我们的遗传算法有许多参数,除了论文中描述的稀有因子和功率因素外,每次运行还有其他几个参数。通过反复试验,达到了一组很好的参数,但可以通过更正式的分析进一步优化它们。事实上,另一种遗传算法——元学习可用于迭代许多不同的选项并找到最佳组合

点击阅读原文来路科官网看原文!



点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 253

    粉丝
  • 25

    好友
  • 33

    获赞
  • 45

    评论
  • 访问数
关闭

站长推荐 上一条 /2 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-18 23:15 , Processed in 0.016759 second(s), 11 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部