Main Content

本页采用了机器翻译。点击此处可查看英文原文。

检测数据存储访问违规

Simulink® Design Verifier™ 设计错误检测分析可识别在仿真中发生的意外数据存储读写序列。分析检测到这些数据存储访问冲突:

  • 先读后写

  • 读后写

  • 写后写

要检测模型中的数据存储访问冲突:

  1. Design Verifier 选项卡的 模式 部分中,选择 设计错误检测

  2. 点击 Error Detection Settings

  3. 在配置参数对话框的 设计错误检测窗格中,选择 数据存储访问冲突 。点击确定

  4. 点击 检测设计错误

分析完成后,软件会突出显示带有分析结果的模型,并且“结果摘要”窗口会显示分析摘要。

检测模型中的数据存储访问冲突

此示例显示如何检测数据存储访问冲突并查看分析结果。sldvexDataStoreAccessViolations 示例模型由定义 alphabeta 数据存储的 Data Store Memory 模块组成。在示例模型中,Write Subsystem 使用 Data Store Write 模块将数据写入数据存储,而 Read Subsystem 使用 Data Store Read 模块从数据存储中读取数据。

步骤 1:打开模型

在命令提示符下,输入:

open_system('sldvexDataStoreAccessViolations');

步骤 2:配置分析选项以检测数据存储访问冲突

该模型已预先配置 数据存储访问冲突 参数设置为 On

步骤 3:执行设计错误检测分析

Design Verifier选项卡上,点击检测设计错误。Simulink Design Verifier 分析数据存储访问冲突模型。分析完成后,“结果摘要”窗口将显示一个目标被证伪。

步骤 4:查看分析结果

该模型通过分析结果得到重点强调。

(1)打开Read Subsystem并点击红色高亮显示的Data Store Read1模块。结果检查器窗口显示违反数据存储访问顺序的“先读后写”目标。

(2)要查看复现错误的测试用例,点击查看测试用例。打开框架模型和Signal Builder 模块,显示测试用例。

(3)要仿真测试用例,在 Signal Builder 对话框中,点击开始仿真。仿真完成后,诊断查看器窗口将显示以下警告消息:

The block 'sldvexDataStoreAccessViolations_harness/Test Unit (copied from sldvexDataStoreAccessViolations)/Read Subsystem/Data Store Read1' is reading from the data store 'sldvexDataStoreAccessViolations_harness/Test Unit (copied from sldvexDataStoreAccessViolations)/Data Store Memory1' before any blocks have written to this entire region of memory at time 0.0. For performance reasons, occurrences of this diagnostic for this memory at other simulation time steps will be suppressed.

步骤5:修复数据存储访问冲突错误

先读后写目标会导致错误,因为在执行读取操作之前尚未将模块写入 beta 数据存储。

打开Write Subsystem并双击Write "alpha"。在 Write "alpha" 子系统中,只有 alpha 数据存储写入了常量值。因此,“beta”Data Store Read模块发生了先读后写数据存储访问冲突。

要修复该错误,请在 Write "alpha" 子系统中添加一个 Constant模块,并使用 Data Store Write模块将其值写入 beta 数据存储(下图中突出显示)。

Design Verifier选项卡上,点击检测设计错误。分析完成后,软件会报告所有目标均有效。

另请参阅

限制

由初始化逻辑产生的对数据存储的读取和写入不会检查是否存在违规。

例如,在检查数据存储访问冲突时,初始化函数中发生的初始化逻辑会被忽略。

对于初始化外部或内部调用的任何类型的逻辑,都会分析与初始化无关的行为。

相关主题