Simulink Design Verifier实例说明

首先请你帮检查下下图中的模型是否有问题?

我猜想有不少人跟我第一次见到这个模型一样,没看出有什么问题,这正是我们在模型评审过程中容易被错过的问题。

开发过程中基本上都会有评审环节,面对这样的模型,评审的时候可能会念叨:输入信号In1首先和In2做或运算,然后再把或运算的结果和In1做与运算,并输出与运算的结果给Out1。

不管是设计错误,还是画模型手误,做出上述逻辑都不奇怪,而一旦出现这样的逻辑,后续的评审或者测试(如果测试用例不够多)中很可能就发现不了问题。

如果我们把这个模型交给Simulink Design Verifier(以下简称SLDV),又会是什么样的结果呢?下图是使用SLDV的“检查设计错误”功能运行后的结果,AND_Logic模块被高亮出来,如果查看检查报告,会有如下详细信息,

SLDV提示我们这里有死逻辑,AND_Logic模块的第二个输入只能是true。

几周前,客户拿着这样的错误提示找到我,言之凿凿的告诉我AND_Logic模块的第二个输入,也就是OR_Logic模块的输出,明明可以有false的时候,为什么会报这样的错误?

而我呢,面对这样的模型,几经思索,基本上认定这应该是SLDV的软件bug,因为AND_Logic模块的第二个输入确实有可能为true,也有可能为false。就在我准备向开发部门反馈这一“bug”时,客户发来微信告诉我:这个检查结果没问题!

好,我们来看,对于上面的两次逻辑运算, 1) 如果In1为false,那么无论OR_Logic的输出如何,AND_Logic的输出都是false;2)如果In1为true,那么OR_Logic的输出一定为true,两个true做与运算的结果还是true。

看出问题来没有?有没有发现最终的输出结果跟In2没有关系

问题来了,如果最终的输出跟In2没有关系,你是否真有必要将In2引入运算?这样的问题,如果我们不通过SLDV,很可能就被通过了,而使用了SLDV,很轻松的就把这个问题发现出来。

可能有人觉得错误提示说的不是这回事,错误描述中给出了AND_Logic模块的第二个输入只能为true而不能为false的提示。

我们不妨再仔细看看:

先看第一种情形,AND_Logic的第一个输入为false,不管第二个输入是true或者false,都不会影响最终结果,也就是说,我们In1的false已经决定了AND_Logic输出肯定为false,不再有必要去判断AND_Logic的第二个输入为true或者false;

再看第二种情形,In1如果为true,那么AND_Logic模块的输出只受AND_Logic模块的第二个输入影响,而这个时候,我们发现,第二个输入为OR_Logic模块的输出,因为In1为true,OR_Logic模块的输入只能为true,不能为false,这就是为什么SLDV给出了如下错误提示:Logic:input port 2 can only be true

有没有觉得有时候软件比人更可靠?确实,并非人工分析不出来模型中的问题,而只是,在软件开发中,在我们“走流程”的过程里,我们很可能就是分析不出来这个问题。

上述功能利用了SLDV设计错误检查里面的死逻辑检查,除此之外,SLDV还可以很容易检查出模型中的溢出类错误,其中包括除零、整数溢出,以及超出数据指定范围的溢出等等。

有没有发现,这些设计错误都是在开发中很难被测试或者检查出来的?

是的,不管是溢出还是死逻辑,都是一旦引入就很难发现,一旦发生,就常会带来失效的错误,如果有一款工具可以很方便的帮我们检查这类错误,能说这款工具不强大吗?

除了设计错误检查之外,SLDV还提供了属性证明(Property Proving)功能,可以证明模型是否实现了某种功能,在一些必须做到万无一失的设计上可以通过证明功能去证明某些需求已经得已实现。

看到这里,也许有用过SLDV的用户会吐槽:设计错误检查的时间过长,甚至有时候检查进展不下去。这个时候,我依然想说,看一下你的模型规模是否合适,模型是否可验证。

  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

电力电子空间

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值