7、通信有限状态机(CFSMs)相关技术详解

通信有限状态机(CFSMs)相关技术详解

1. 状态图(StateCharts)基础

状态图是一种用于描述系统状态和状态转换的工具,在嵌入式系统的建模中具有重要作用。

1.1 状态类型

状态图中的状态主要分为三种:AND - 超级状态、OR - 超级状态和基本状态。AND - 超级状态是描述并发的关键机制,其每个子状态都可看作一个独立的状态机,这些状态机相互通信,形成通信有限状态机(CFSMs)。

1.2 定时器

由于嵌入式系统需要对时间进行建模,状态图提供了定时器功能。定时器用特定符号表示,当系统处于包含定时器的状态达到指定时间后,会发生超时事件,系统将离开该指定状态,并且定时器可以进行分层使用。

以答录机的 Lproc 状态为例,定时器可用于描述该状态的行为。不过,由于调用者挂断电话时的异常转换,当调用者挂断电话时,Lproc 状态会终止。而对于被调用者挂断电话的情况,Lproc 状态的设计存在不便之处:若被调用者先挂断电话,电话会一直处于“死机”(安静)状态,直到调用者也挂断电话。

1.3 边标签和 StateMate 语义

扩展有限状态机(FSM)的输出可以通过边标签来指定,边标签的一般形式为“事件 [条件]/反应”,三个部分都是可选的。反应部分描述 FSM 对状态转换的反应,如生成事件和变量赋值;条件部分用于测试变量值或系统当前状态;事件部分用于测试当前事件,事件可分为内部事件和外部事件。

以下是一些边标签的示例:
- on - key/on:=1(事件测试和变量赋值)
- [on = 1](变量值的条件测试)
- off - key [not in Lproc]/on:=0(事件测试、状态的条件测试和变量赋值,当事件发生且条件为真时执行赋值操作)

StateMate 是状态图的商业实现,它基于步骤执行描述。每次事件或变量发生变化时,会执行相应步骤。所有变量值、生成的事件集(以及当前时间)共同定义为 StateMate 模型的状态。每个步骤包含三个阶段:
1. 第一阶段 :评估外部变化对条件和事件的影响,包括评估依赖外部事件的函数,但不包含任何状态变化。在简单示例中,此阶段可能并非必需。
2. 第二阶段 :计算当前步骤应进行的转换集,评估变量赋值,但新值仅赋给临时变量。
3. 第三阶段 :状态转换生效,变量获得新值。

这种分阶段执行的方式保证了 StateMate 模型的可重复性。例如,对于相互依赖的变量赋值,如果不进行阶段划分,可能会导致两个变量被赋予相同的值,结果将依赖于赋值的执行顺序。而通过分阶段执行,如在第二阶段将新值存储在临时变量中,在第三阶段再将临时变量的值赋给用户定义的变量,就可以实现变量值的正确交换,类似于两个交叉耦合的寄存器在同一时钟控制下的操作。

2. 状态图的评估与扩展

状态图和 StateMate 隐式假设了变量更新的广播机制,因此它们适合基于共享内存的平台,但对于消息传递和分布式系统不太适用。因为在分布式系统中,很难在两个步骤之间更新所有变量。

状态图的主要应用领域是本地、控制主导的系统,其优势在于可以在任意级别嵌套层次结构,自由选择 AND - 超级状态和 OR - 超级状态,并且 StateMate 的语义有详细的定义。此外,有许多基于状态图的商业工具,如 StateMate 和 StateFlow,它们能够将状态图转换为等效的 C 或 VHDL 描述,从而实现从规格说明到硬件或软件的完整开发路径。

然而,状态图也存在一些局限性。例如,自动翻译的效率有时会成为问题,它不是面向对象的,缺乏描述复杂计算的程序结构,也无法描述硬件结构或非功能行为。不过,商业实现通常会提供一些机制来克服这些限制,如使用 C 代码表示程序结构,使用 StateMate 的模块图表示硬件结构。

UML 包含了状态图的一种变体,在 UML 1 版本中称为状态图,从 2.0 版本开始称为状态机图。但 UML 中状态机图的语义与 StateMate 不同,不包含三个模拟阶段。

3. 同步语言
3.1 动机

用状态机图描述复杂系统(SUDs)存在困难,因为它无法表达复杂的计算。而标准编程语言虽然可以表达复杂计算,但多线程执行的顺序可能不可预测,在多线程环境中,不同计算的交织方式众多,理解并发系统的所有可能行为变得困难。这种非确定性的行为会带来一些负面后果,如验证设计时的问题。对于非分布式系统,我们可以尝试避免不必要的非确定性语义。

3.2 同步语言的特点

同步语言将有限状态机和编程语言融合为一个模型,它可以表达复杂的计算,但其底层执行模型是有限自动机,描述的是并发运行的自动机。通过“当自动机并行组合时,乘积的转换由所有自动机的‘同时’转换组成”这一关键特性,实现了确定性的行为。这意味着我们可以假设存在一个全局时钟,在每个时钟周期内,考虑所有输入,计算新的输出和状态,然后进行转换。

3.3 同步语言示例
  • Esterel :是一种反应式语言,当接收到输入事件时,Esterel 模型会产生输出事件作为反应。它是同步语言,所有反应都假设在零时间内完成,只需在离散时刻分析行为。它具有并行运算符 ||,通信基于广播机制,且通信是即时的(在同一时钟周期内)。
  • Lustre :看起来更像数据流语言,与 Esterel 使用不同的语法技术来表示 CFSMs。
  • SCADE :是一种商业图形语言,结合了 Esterel、Lustre 和 Quartz 的元素,其 SCADE 套件用于许多安全关键的软件组件。

由于 StateMate 具有三个模拟阶段,它具备同步语言的关键属性,如果冲突得到解决,它也是确定性的。

4. 消息传递:以 SDL 为例
4.1 SDL 语言特点

状态图不适合对分布式通信有限状态机进行建模,对于分布式系统,消息传递是更好的通信范式。SDL(规格说明和描述语言)就是一个采用异步消息传递的通信有限状态机的例子。

SDL 专为分布式应用而设计,起源于 20 世纪 70 年代,20 世纪 80 年代就有了形式语义,并由国际电信联盟(ITU)进行了标准化。它提供了文本和图形两种格式,满足不同用户的需求。

SDL 的基本元素是进程,进程表示建模为扩展有限状态机的组件。SDL 进程可以对数据进行操作,变量可以在进程本地声明,其类型可以是预定义的,也可以在 SDL 描述中自行定义,并且支持抽象数据类型(ADTs)。此外,SDL 还包含编程语言元素,如过程,过程调用也可以用图形表示。从 SDL - 1992 版本开始引入了面向对象的特性,并在 SDL - 2000 版本中得到了扩展。

4.2 进程间通信

SDL 描述通常由一组相互交互的进程(FSMs)组成,进程之间通过异步消息传递进行通信,概念上通过与进程关联的先进先出(FIFO)队列实现。每个进程有一个输入队列,发送给特定进程的信号会被放入相应的 FIFO 队列中。

进程从 FIFO 队列中取出下一个可用条目,检查其是否与当前状态描述的输入匹配。如果匹配,则发生相应的状态转换并生成输出;如果不匹配,则忽略该条目(除非使用了 SAVE 机制)。FIFO 队列在语义描述中被认为是无限长的,但在实际系统中必须是有限长的,因此在从规格说明推导实现时,需要证明 FIFO 队列长度的安全上限。

4.3 信号接收指示方式

有三种方式可以指示信号的接收方:
1. 通过进程标识符 :在图形输出符号中使用接收进程的标识符。
2. 显式指定 :指明通道名称。
3. 隐式指定 :如果信号名称暗示了通道名称,则使用该通道。

4.4 层次结构

SDL 中的进程不能嵌套,但可以分层分组为块,最高层次的块称为系统。如果将环境也建模为块,系统边界将没有通道。进程交互图是块图的特殊情况,位于层次描述中叶子节点的上一层。

4.5 定时器

SDL 包含定时器,可在进程本地声明。使用 SET 原语设置定时器,该原语有两个参数:绝对时间和定时器名称。当定时器超时后,会在输入队列中存储一个信号,该信号通常会导致 FSM 发生特定的转换,但可能会被输入队列中的其他条目延迟处理。因此,SDL 的定时器概念适用于电信中常见的软定时约束,不适用于硬定时约束。可以使用 expirytime 内置函数来避免 now 函数的一些限制。使用 RESET 原语可以重置定时器,在执行 SET 原语的开始会隐式执行 RESET 操作。

例如,在一个状态转换图中,从状态 D 到 E 的转换过程中,定时器 Z 被设置为当前时间 now 加上 T;从 E 到 A 的转换有 T 个时间单位的超时。如果在信号 f 到达之前这些时间单位已经过去,将在不生成输出信号 v 的情况下转换到状态 A。但由于输入队列中其他条目的可能延迟,很难实现严格的周期为 T 的处理。

通信有限状态机(CFSMs)相关技术详解

5. 技术对比与总结

为了更清晰地了解上述各种技术的特点,我们可以通过一个表格进行对比:
| 技术名称 | 适用场景 | 通信机制 | 确定性 | 表达能力 | 局限性 |
| — | — | — | — | — | — |
| 状态图(StateCharts) | 本地、控制主导系统 | 广播机制(共享内存) | 需解决冲突才确定 | 可嵌套层次结构,但难表达复杂计算 | 不适合分布式系统,自动翻译效率低,非面向对象 |
| 同步语言(如 Esterel、Lustre、SCADE) | 复杂计算且需确定性的系统 | 广播机制(同步) | 具备确定性 | 可表达复杂计算 | 对硬件结构和非功能行为描述能力弱 |
| SDL | 分布式系统 | 异步消息传递(FIFO 队列) | 受 FIFO 队列影响 | 可操作数据,有面向对象特性 | 定时器适用于软定时约束,FIFO 队列长度需证明上限 |

从这个表格中可以看出,不同的技术在适用场景、通信机制、确定性和表达能力等方面各有优劣。在实际应用中,需要根据具体的需求来选择合适的技术。

6. 实际应用中的考虑因素

在实际应用上述技术进行系统建模和开发时,还需要考虑以下几个方面:
1. 性能需求 :如果系统对性能要求较高,需要评估技术的执行效率。例如,状态图的自动翻译效率可能会影响系统性能,而同步语言的确定性可以避免不确定执行顺序带来的性能问题。
2. 系统架构 :根据系统的架构特点选择合适的通信机制。对于分布式系统,SDL 的异步消息传递更合适;而对于基于共享内存的系统,状态图和同步语言的广播机制更能发挥优势。
3. 开发团队技能 :开发团队的技能水平也是一个重要因素。如果团队熟悉面向对象编程,SDL 的面向对象特性可能更容易被接受;如果团队擅长处理同步系统,同步语言可能是更好的选择。
4. 时间约束 :如果系统有严格的时间约束,需要考虑技术对时间的处理能力。例如,SDL 的定时器适用于软定时约束,对于硬定时约束可能需要额外的处理。

7. 未来发展趋势

随着科技的不断发展,这些技术也在不断演进。以下是一些可能的未来发展趋势:
1. 融合发展 :不同技术之间可能会相互融合,取长补短。例如,状态图可能会引入更多同步语言的特性,以提高其表达复杂计算的能力;SDL 可能会借鉴同步语言的确定性机制,提高系统的可靠性。
2. 对分布式系统的优化 :随着分布式系统的广泛应用,各种技术可能会针对分布式系统进行优化。例如,状态图和同步语言可能会改进其通信机制,以更好地适应分布式环境;SDL 可能会进一步优化 FIFO 队列的管理,提高系统的性能。
3. 与新兴技术的结合 :这些技术可能会与人工智能、物联网等新兴技术相结合,创造出更智能、更高效的系统。例如,在物联网系统中,状态图可以用于描述设备的状态变化,同步语言可以用于处理复杂的数据分析。

8. 总结

本文详细介绍了通信有限状态机(CFSMs)相关的几种技术,包括状态图(StateCharts)、同步语言和 SDL。状态图适用于本地、控制主导的系统,具有可嵌套层次结构的优势,但在分布式系统和复杂计算表达方面存在不足;同步语言将有限状态机和编程语言融合,实现了确定性的行为,适合表达复杂计算,但对硬件结构和非功能行为描述能力较弱;SDL 专为分布式系统设计,采用异步消息传递机制,具备操作数据和面向对象的特性,但定时器适用于软定时约束,FIFO 队列长度需要证明上限。

在实际应用中,需要根据系统的性能需求、架构特点、开发团队技能和时间约束等因素选择合适的技术。同时,随着科技的发展,这些技术也将不断演进,未来可能会出现融合发展、对分布式系统优化以及与新兴技术结合等趋势。通过对这些技术的深入了解和合理应用,可以更好地进行系统建模和开发,提高系统的可靠性和效率。

以下是一个 mermaid 格式的流程图,展示了在选择技术时的决策过程:

graph LR
    A[系统类型] --> B{是否为分布式系统}
    B -- 是 --> C[考虑 SDL]
    B -- 否 --> D{是否需要复杂计算}
    D -- 是 --> E[考虑同步语言]
    D -- 否 --> F[考虑状态图]
    C --> G[评估性能和时间约束]
    E --> G
    F --> G
    G --> H[根据团队技能和其他因素确定最终技术]

这个流程图清晰地展示了在选择技术时,首先根据系统类型判断是否为分布式系统,然后根据是否需要复杂计算进一步筛选,最后综合考虑性能、时间约束和团队技能等因素确定最终的技术。

7、嵌入式系统设计中的建模与通信机制 本文深入探讨了嵌入式系统设计中的建模与通信机制,涵盖了共享内存与消息传递两种通信模型、组件内的计算组织方式以及多种组合模型。文章详细分析了不同模型和语言的特点、技术实现及适用场景,并介绍了早期设计阶段的工具应用与需求管理方法。通过对比各模型的优劣势,为设计者提供了选择合适建模与通信机制的指导,并展望了未来嵌入式系统设计的发展趋势。 阅读详情

相关推荐

8、通信协议与数据流建模技术解析

本文深入解析了通信协议与数据流建模的关键技术,包括通信有限状态机(CFSMs)和SDL语言,以及Kahn过程网络(KPN)、同步数据流(SDF)和Simulink等数据流建模工具和方法。文章详细探讨了这些技术在不同应用场景下的优劣势和适用性,并结合视频点播系统和控制工程的实际案例,展示了它们的具体应用。最后,文章分析了这些技术的发展趋势,并提供了技术选择的建议,以帮助开发者更高效地进行系统建模与设计。

jjj34的博客 60

探索死锁的守护者:Dingo-Hunter

探索死锁的守护者:Dingo-Hunter 随着并发编程在现代软件开发中的重要性日益增长,识别并解决死锁问题成为了一个关键挑战。对于Go语言开发者而言,这一挑战有了一个新的解决方案 —— Dingo-Hunter。一个静态分析工具,旨在从Go源代码中挖掘潜在的死锁风险,通过先进的模型构建和分析技术,为并发程序的健壮性提供强有力的支持。 项目介绍 Dingo-Hunter是一个面向Go语言的静态分析...

gitblog_00782的博客 1023

8、通信协议与数据流建模解析

本文详细解析了通信协议与数据流建模的关键技术,涵盖通信有限状态机(SDL)、Kahn进程网络(KPN)、同步数据流(SDF)以及Simulink在控制工程中的应用。对比分析了各类建模方法在确定性、调度难度、适用场景和缓冲区管理等方面的优劣,并结合实际案例(如视频点播系统和多媒体处理系统)展示了它们的具体应用。文章还探讨了数据流建模的未来发展趋势,包括集成化、智能化、实时性增强及跨平台分布式计算支持等方向。旨在帮助读者深入理解通信协议和数据流建模技术,并在实际系统设计中灵活运用。

tree8的博客 80

2、嵌入式系统设计中的规范语言与计算模型

本文详细探讨了嵌入式系统设计中规范语言和计算模型的选择与应用。涵盖了系统需求、状态导向行为、并发性、同步与通信等核心概念,并深入分析了多种计算模型如通信有限状态机、离散事件模型、同步与异步消息传递等的适用场景。同时,文章还比较了不同语言特性,包括同步与异步语言、进程概念、共享内存与消息传递机制,并介绍了UML、SDL、VHDL、SystemC等常见建模与编程语言。最终目标是帮助开发者选择合适的规范语言和计算模型,以确保嵌入式系统的高效性、可靠性和可维护性。

xgboost6farmer的博客 137

5、系统规格、建模与早期设计阶段解析

本文深入解析了系统规格、建模与早期设计阶段的关键内容。重点探讨了死锁问题及其避免方法,介绍了非冯·诺依曼计算模型的优势与应用。详细分类和比较了不同计算模型,包括通信模型和组件内计算的组织方式。同时,文章涵盖了早期设计阶段的需求捕获、用例分析、序列图和时间距离图的使用,并讨论了模型驱动设计的概念与实践。通过综合设计流程,展示了如何从需求到代码生成的全过程。

jjj34的博客 67

2、嵌入式与网络物理系统:概念、应用与发展

本文详细探讨了嵌入式系统与网络物理系统(CPS)的概念、应用及未来发展趋势。随着信息与通信技术(ICT)向普适计算、泛在计算和环境智能方向发展,嵌入式系统已成为后PC时代的核心技术之一。文章从定义、特点、设计流程、计算模型、硬件与系统软件、应用映射、优化策略到测试与验证,全面解析了嵌入式与CPS系统的各个方面,并提供了学习建议与适用人群,为学生、工程师和研究人员提供了系统化的学习路径和技术参考。

tree8的博客 66
上一篇: 4、程序员如何高效学习数学
下一篇: 10、如何创建 Twitter 应用并进行身份验证
terraform7cloud
博客等级 码龄1天 0粉丝 1179原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值