2015年2月6日 航空航天和国防

模拟的三位一体:计算机、系统和世界

由雅各布Engblom

jakob-engblom-intro-picture

西米奇是模拟包含处理器和执行代码的计算机系统的伟大产品。然而,我们都知道,仅仅一台计算机很少是一个真实系统的整体。大多数系统还涉及计算机控制的物理系统,如飞机、卫星、火箭、物联网传感器节点或控制盒,以及与系统交互的外部世界。一个真正的系统模拟器需要模拟所有这些部分——控制计算机,它所在的系统,以及外部世界。模拟的三位一体。为了实现这一点,我们需要添加更多的模拟器。《模拟人生》本身是很棒的,但《模拟人生》与一个或多个其他模拟器对话就更好了。

moresims-1

上图展示了分解为计算机板、系统和环境的过程。运行控制软件的计算机的simics动力仿真,与系统及其环境的软件模拟器接口并集成。有时,系统和环境包含在同一个模型中(例如工厂模型在PIL测试中),但它们往往是由不同团队甚至公司提供的独立模拟器。同样常见的是,每个逻辑部分都由多个独立子系统的独立模拟器组成。

SIMICS为模拟设置带来的关键值是它从真实目标运行未经修改的二进制文件 - 许多现有的模拟设置依赖于各种形式的SHIM层或API模拟以使软件运行。使用SIMICS,软件是编译,链接,集成的,就像在真实系统上一样运行。如上所述,输入和输出值从模拟系统转移到模拟输入和SIMICS中的输出设备。然后,该值通过设备驱动程序到达目标软件,就像它在构建后就像在真实系统中一样。通过这种方式,可以在几乎真实的环境中测试整个集成软件堆栈,使得可以执行自动测试持续集成甚至对于那些深深嵌入并与环境相连的系统。

要明白环境的重要性,只要记住1996年阿丽亚娜5号失败该软件已经在旧的阿丽亚娜4号火箭上进行了测试,但阿丽亚娜5号的发射轨迹不同,导致软件崩溃,然后导致火箭坠落。教训是,无论一个软件有多好,它都必须在将要使用的环境中进行测试。要做这样的测试既便宜又快速,模拟是最好的工具。

在仿真软件体系结构方面,其他模拟器可以独立于Simics,或者有时在Simics内部运行。或者,我们可以让Simics在另一个模拟器中运行。这些模拟器可能分布在多台机器上,或者运行在同一台机器上。有些解决方案是点对点的,尽管主从设置更常见,因为它们更容易针对现有的模拟器进行改造。Simics具有帮助构建所有类型集成解决方案所需的钩子和功能,多年来我们已经看到它与许多不同的模拟器集成。

moresims-2

我想说的是,最常见的解决方案是让Simics和其他模拟器并排运行,通过网络套接字或共享内存进行通信,其中一个模拟器作为主机,要求其他模拟器运行指定的时间。在实践中,现有的模拟器往往被编写为作为独立的程序运行,有时甚至需要它们自己特定的主机来运行。修改这样的代码以在Simics内部运行是非常痛苦的,因此最常见的解决方案是简单地构建一个模拟器集成模块,将Simics与其他模拟器连接起来,并将它们一起运行。对于一些展示这个概念的现场视频,我参考了一个我之前的一篇博客文章也描述了NASA的Go-Sim设置

moresims-3

为了方便模拟设置的最终用户,通常需要构建某种形式的模拟前端来启动模拟器。如上图所示,前端将启动集成的模拟器,并建立它们之间的连接。一旦模拟器启动并运行,Simics的界面就可以暴露给用户,或者保持隐藏。前端可以像为单个配置启动所有模拟器的批处理文件一样简单,也可以是一个完整的自定义图形应用程序,用于管理模拟运行、收集结果并让用户配置系统。

当集成多个模拟器时,使用它很有意义西米奇记录检查点捕获Simics上软件的执行,然后只使用Simics进行调试,而不运行其他模拟器。这提供了Simics的全部调试能力,而无需复杂化模拟器集成和其他模拟器,支持反向执行、检查点或精确停止时间的能力。如下所示,关键在于在Simics中回放执行时,我们只是回放来自外部世界的输入。

moresims-4

更多信息,书中有一章专门讨论集成模拟器的主题使用虚拟平台进行软件和系统开发我去年和Daniel Aarno一起出版的。

以前的用物联网做出更好的决定
下一个白名单是嵌入式设备安全之战的关键武器