Engee 文档

信号边缘跟踪运算符

除了运营商和指标从文章 时间逻辑运算符变化指标,上 过渡 stateflow library transition 可以指定信号边缘跟踪运算符。

*信号边缘跟踪运算符*是函数"上升"、"下降"和"交叉",它们在信号以某种方式变化时返回布尔值"真"。 这允许状态机准确地确定切换的时刻:不是通过信号的当前值,而是通过其随时间的变化。

信号变化和前面是什么

在数字系统中,信号通常由逻辑值表示-逻辑0(假)*和*逻辑1(真)。 这种情况下的变化是这两种状态之间的转换。

在连续系统中(例如,使用模拟信号),值可以是任何数字,并且信号*越过某个阈值*的时刻被认为是重要的—特别是值零。

信号变化称为*边缘*。 主要有两种类型:

  • 上升沿-通过`0`从较低值到较高值的信号转换(例如,从`-1`到'0.5'`;

  • 下降沿-信号通过`0`从较高值到较低值(例如,从`1`到`-0.2`)的转换。

运算符操作的逻辑

每个运算符("上升`,"下降","交叉")都是一个表达式,仅当信号以某种方式变化时才返回值"true"。 其余的时间是’假'。

让我们考虑每个操作员的操作条件。

"上升(x)"运算符

当信号"x"从下到上(上升)越过零时,"上升(x)"运算符返回"真"。

这种情况发生在两种情况下:

  1. `X’的先前值为负,而当前值已变为零或正。;

  2. `X’的前一个值为零,当前值已变为正。

因此,'上升(x)'是正方向过渡的检测器。

例如,让变量’x`从'-0’改变。2` → 0.1. 在这种情况下,"上升(x)"运算符将返回"真",因为从下到上有一个零交叉。 如果’x`从`0.1`变为'-0.1',那么*运算符将不起作用*。

类似地,'rising(x-0.5)`跟踪`x'*从下到上穿过值0.5*的时刻。 例如:

state machines tracking signal operators 3

  • 'x’是'0.4',变成'0'。6`→'上升(x-0.5)'将返回’真`;

  • 'x’为'0.6`,变为`0.4`→'rising(x-0.5)`返回’false'。

"下降(x)"运算符

当信号`x`从上到下穿过零时,`falling(x)`运算符返回`true'。 它被触发时:

  1. `X’的前一个正值,如果当前值为零或负;

  2. `X’的前一个零值,如果当前值已变为负值。

因此,'下降(x)'对负方向的转变做出反应。

+ 例子::

  • 'x`为'0.2',变为'-0.1'→'falling(x)'返回’true`;

  • 'x’是'-0.1`,变成`0.2'→不会工作。

对于’falling(x-0.5)`是相同的:当`x`从上到下穿过`0.5’时,操作符将被触发。 例如:

state machines tracking signal operators 2

  • 'x`从`0.6`变为`0.4'→触发;

  • 'X`从'0.4’变为'0'。6'→不起作用。

'交叉(x)`运算符

'Crossing(x)运算符是一个通用运算符,它在任何信号通过零(或另一个指定阈值)时返回`true,而不管方向如何。 它是在以下条件之一下触发的:

  1. 前值为正,当前值为零或负。;

  2. 前值为零,当前值为非零。;

  3. 前值为负,当前值为零或正。

因此,'crossing(x)`运算符捕获*通过零*的任何过渡—向上(上升)和向下(下降)。 例如:

state machines tracking signal operators 1

  • 'x`从'0.6’变为'0.4'→'crossing(x-0.5)'将返回’true`;

  • 'X`从'0.4’变为'0'。6'→也’真`;

  • 'X’保持低于`0.5`或高于`0.5`,不越过阈值→`false'。


应特别注意如何处理*等于零*。 与简单条件`x>0’不同,这些运算符不会忽略零,而是将其视为在转换逻辑中起重要作用的边界状态。

例如:

-如果信号为零并变为正→这被认为是上升沿; -如果它是零,变成负→这是一个下降的前沿; -如果它是零,并成为非零(无论)→这是一个`交叉`触发器。

有用的连结