0

我是一名学习使用 MATLAB 的学生。对于作业,我必须创建一个简单的状态机并收集一些结果。我习惯使用 Verilog/Modelsim,我只想在状态机的输出发生变化时收集数据,这不一定是每次/采样周期。

现在我有一个看起来像这样的模型:

RequestChart ----> ResponseChart ----> Unit Delay Block --> (Back to RequestChart)
               |                  |
               ------------------------> Mux --> "To Workspace" Sink Block

我尝试将接收器块设置为另存为“数组”格式,但它只保存 51 个值。我尝试将其设置为“Timeseries”,但它保存了大量的零值。

有人可以给我一些建议吗?就像我说的,MATLAB 对我来说是新的,如果我需要澄清我的问题或提供更多信息,请告诉我。

编辑:这是我的模型的屏幕截图: 在此处输入图像描述

4

2 回答 2

2

通常 Simulink 会在每个积分步骤输出一个样本。如果您只想在特定事件发生时输出数据——在这种情况下,只有当某些数据发生变化时——然后执行以下操作,

  • 将状态机的输出运行到 Detect Change 模块中(来自 Logic and Bit Operations 库)
  • 将该信号运行到触发子系统的触发端口。
  • 将状态机的输出运行到触发子系统的数据端口。
  • 在触发子系统内,将数据信号运行到 To Workspace 模块中。

数据只会在触发发生的时间点保存,即当您的数据发生变化时。

于 2015-03-11T02:50:20.830 回答
1

在您的 Simulink 窗口中,确保相对公差很小,以便您可以在开始时间和结束时间之间生成更多点。单击窗口顶部 的Simulation选项,然后单击 Model Configuration Parameters。

在此处输入图像描述

从那里,将相对公差更改为一些小的东西......比如1e-10。之后,再次尝试运行模拟。您现在可以在输出数组中保存更多点。

在此处输入图像描述

于 2015-03-10T21:57:56.770 回答