AMEsim信号处理之有限状态机内部变量的声明

电子说

1.3w人已加入

描述

1

内部变量的声明

状态图环境内部的变量使用init关键字声明:

有限状态机

在这个例子中,我们引入了一个名为 var 的变量,类型为 int,初始值为 0。每次状态图执行遍历转换时,变量将递增 2。同一作用域中每个变量只能有一个init。

变量初始化的语法为:
varname:=expr0 init expr1
此表达式引入了一个名为 varname 的变量,其初始值在第二个表达式中给出(在 init关键字之后)。

从上述表达可以看出关键字 init 是用在过渡状态线上。

2

内部变量声明的简化写法

如果赋值中使用的表达式与用于初始化的表达式相同,则可以使用简化的语法:

有限状态机

我们在这里介绍两个变量 x 和 y,它们在传递初始转换时将被分配为零(整数或实数)。
变量的类型取决于用于初始化它的值。例如,在这里,使用文字整数 0 和浮点文字 0.0 分别导致实际类型 int 和 real:类型确定自动执行并最终在整个状态图中传播(任何后续使用 x 和 y 都会传播所涉及的表达式中的 int 和实数类型约束)。

注意:禁止将 int 变量与实变量混合和匹配。必须使用 to_real 和 to_int 函数进行转换。Int 常量可以在任何地方用作实常数,但在从初始状态过渡时。(看到没 to_real 和 to_int 又是两个关键字)

3

变量的作用范围

内部变量的作用范围也即是内部变量的作用域。它们仅在状态图的某些部分可见。

变量在其复合状态下可见,在下面的所有子复合(或并行)状态下可见。

有限状态机

此示例中有三个不同的声明变量,一个“y”变量仅在第一个复合状态下可见,因为用于声明它的 init 关键字位于此状态内的转换中。还声明了两个同名变量:“x”。一个在顶层和 Composite1 可见;另一个在 Composite2 中声明,并隐藏先前声明的变量。由于这种隐藏,Composite2 无法访问在顶级声明的变量 x。Composite 1 不会重新定义名为 x 的变量,因此可以访问在顶级声明的变量。

注意:状态图环境编译器将在存在变量隐藏的情况下生成警告消息。(警告只是警告,但不是错误)

为了简化不同变量的范围,下表综合了不同变量的范围:

有限状态机

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分