SIL 和 PIL模拟

什么是SIL和PIL模拟?

使用Embedded Coder,您可以运行模型的软件在环(SIL)和处理器在环(PIL)仿真。这些模拟为顶部模型或模型的一部分生成源代码。SIL模拟在您的开发计算机上编译并运行生成的代码。PIL模拟在您的开发计算机上交叉编译源代码,然后在目标处理器或等效的指令集模拟器上下载并运行目标代码。

通过SIL和PIL模拟,你可以:
测试你的模型和生成的代码在数值上是否相等。
注意代码覆盖率。
执行代码执行分析。

为什么使用SIL和PIL

通过SIL和PIL,你可以尽早测试和修复缺陷。例如,你可以在正常模式下对系统组件进行建模和测试。然后,您可以在运行编译生成代码的SIL或PIL模拟中重用你的测试套件。为了检查数值等效性,你需要比较正常模拟结果和SIL或PIL模拟结果。因此,你可以避免离开Simulink®环境,在单独的基础设施上测试生成的代码。
此表描述了可以使用SIL和PIL的情况。

情况使用
测试模型和生成代码之间的数值等价性。SIL 和PIL
重用为正常模式模拟开发的测试向量,以验证生成(或遗留)代码的数值输出。例如: 1.重用Simulink Design Verifier生成的测试用例。2. 使用Simulink Test进行等效性测试。SIL 和PIL
收集生成代码的指标: 代码覆盖率。执行分析。SIL 和PIL
获得IEC 61508、IEC 62304、ISO 26262或DO-178认证。SIL 和PIL
没有目标硬件,就可以获得PIL的方便替代品。SIL
对于目标硬件,例如评估板或指令集模拟器: 验证目标特定代码的行为,例如代码替换优化和遗留代码。 优化代码的执行速度和内存占用。 调查编译器设置和优化的影响,例如与ANSI C溢出行为的偏差。 常规仿真技术不考虑硬件施加的限制和要求,例如有限的内存资源或特定于目标的优化代码的行为。PIL

SIL和PIL模拟如何工作

在SIL或PIL仿真中,为顶部模型或模型的一部分生成代码。使用SIL,此代码将在您的开发计算机上编译和执行。使用PIL,代码针对目标硬件进行交叉编译,并在目标处理器上运行。
通过通信通道,Simulink在模拟的每个采样间隔向计算机或目标处理器上的代码发送刺激信号。
对于顶层模型,Simulink使用来自基础或模型工作区的刺激信号。
如果您仅指定模型的一部分在SIL或PIL模式下进行模拟,则模型的一个部分将保留在Simulink中,并且不会为模型的这一部分生成代码。通常,您配置模型的这一部分,为在硬件上执行的软件提供测试向量。模型的这一部分可以表示算法的其他部分或算法运行的环境。
当您的计算机或目标处理器从Simulink接收信号时,处理器会执行一个采样步骤的SIL或PIL算法。SIL或PIL算法通过通信信道将此步骤中计算的输出信号返回给Simulink。模拟的一个采样周期完成,Simulink继续进行下一个采样间隔。该过程不断重复,模拟也在进行。SIL和PIL模拟不是实时运行的。在每个采样周期内,Simulink和目标代码交换I/O数据。

SIL和PIL模拟的比较

SIL或PIL模拟类型SIL仿真中会发生什么PIL模拟中会发生什么
通过以下方式指定:1 顶层模型模拟模式 2 模型块Simulation mode参数在开发计算机上测试生成的源代码的行为。模拟不会测试为目标硬件编译的代码,因为代码是为开发计算机编译的(与目标不同的编译器和处理器架构)。 生成的生产代码在开发计算机上作为单独的过程编译和执行,独立于MATLAB过程。 执行是主机/主机和非实时测试你打算在生产环境中部署在真实目标硬件或指令集模拟器上的目标代码。 在开发计算机上,为目标生成交叉编译的生产代码。目标代码在目标处理器或指令集模拟器上下载并执行。 执行是主机/目标和非实时的。
使用由子系统创建的SIL或PIL块。仿真通过S函数运行编译的目标代码。S函数与在开发计算机上作为独立应用程序执行的目标代码进行通信。SIL块执行独立于MATLAB过程。 执行是主机/主机和非实时。仿真在开发计算机上通过S函数运行交叉编译的目标代码。S函数与作为独立应用程序在目标处理器或指令集模拟器上执行的目标代码进行通信。 执行是主机/目标和非实时的。

SIL和PIL的代码接口

例如,当您为单个可部署组件执行顶部模型或右键单击子系统构建时,您将生成独立代码。您可以将独立代码编译并链接到独立的可执行文件中,或将其与其他代码集成。
当您为引用的模型层次结构生成代码时,软件会为顶部模型生成独立的可执行代码,并为每个引用的模型生成一个称为模型引用目标的库模块。当代码执行时,独立可执行文件调用适用的模型引用目标来计算引用的模型输出。
要将生成的代码与遗留代码集成,请使用独立代码,因为独立代码接口是有文档记录的。

SIL和PIL模拟不直接支持自定义代码接口。您可以将这些接口作为S函数合并到Simulink中,例如,使用传统代码工具、S函数生成器或手写代码。然后,您可以使用SIL和PIL模拟来验证自定义代码。

此表提供了SIL和PIL模拟生成的接口。

SIL/PIL 模拟代码接口
顶层模块SIL/PIL仿真生成独立代码接口。如果代码存在,模拟将调用模型的独立代码。如果代码不存在,模拟将生成独立代码。
模块如果将Code接口块参数设置为Top model,SIL/PIL模拟将生成独立的代码接口。模拟会调用模型的独立代码(如果存在)。否则,模拟将使用slbuild(‘model’)命令生成独立代码。 如果将代码接口块参数设置为模型参考,SIL/PIL仿真将生成模型参考代码接口。模拟会调用模型块的模型参考目标(如果存在)。否则,仿真将使用slbuild(‘model’,‘ModelReferenceRTWTargetOnly’)命令生成模型参考目标。
SIL或 PIL块块使用独立代码接口。

调度考虑

项目信息
代数环在SIL和PIL模拟中会出现代数循环,但在正常模式模拟中不会出现: 代码生成优化中的单个输出/更新函数可能会引入代数循环,因为该选项通过组合的输出和更新函数引入了直接馈通。 单输出/更新功能与最小化代数循环出现不兼容(在Configuration Parameters > Model Referencing窗格中)。最小化代数循环的出现允许代码生成通过在输出和更新函数之间划分生成的代码来消除代数循环,以避免直接馈通。 如果为虚拟子系统生成代码,则代码生成将子系统视为原子,并相应地生成代码。生成的代码可能会改变模型的执行行为,例如,通过应用代数循环,并给模拟行为带来不一致。 为了使模型的模拟和执行行为保持一致,请将虚拟子系统声明为原子子系统。
反馈回路中的导出函数如果您的模型具有函数调用子系统,并且您导出了一个具有上下文相关输入(例如反馈信号)的子系统,则使用生成的代码进行SIL/PIL模拟的结果与模型的正常模式模拟的结果可能不同。使SIL/PIL和正常模式模拟产生相同结果的一种方法是在模型中使用函数调用反馈锁存块。您可以使依赖上下文的输入变得独立于上下文。如果将 Configuration Parameters > Diagnostics > Connectivity > Context-dependent inputs 设置为以下之一,嵌入式编码器会生成一个警告,标识导出函数调用子系统的上下文相关输入:1Enable all as warnings 2 Use local settings 3 Disable all
  • 13
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值