问题标签 [fsm]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
7885 浏览

functional-programming - 如何在 Ocaml 中表示一个简单的有限状态机?

我用 C++ 和 Java 写过一些状态机,但从来没有用像 Ocaml 这样的函数式语言

问题是我不知道我是否可以从对象语言版本中调整代码,因为在 Ocaml 中,记录和变体比类更强大;

所以,我需要一个事件驱动的有限状态机(类似于 UML 中的分层),易于配置

有经验的人可以发布一个简单的示例吗?只是为了避免最常见的陷阱

谢谢 :)

编辑16/03:是否可以在没有可变状态的情况下做到这一点?而且我想以“FSM”的名称正确封装它,我应该选择一个模块还是一个类?

0 投票
2 回答
2506 浏览

verilog - Verilog,FPGA,使用单元化寄存器

我有一个关于我正在研究的 AGC/SPI 控制器的奇怪行为的问题。它在 Verilog 中完成,针对 Xilinx Spartan 3e FPGA。控制器是一个依赖外部输入启动的 FSM。FSM 的状态存储在未显式初始化的state_reg中,因为我认为未初始化的寄存器默认为零。当我实现控制器时,FSM 不会运行。监控 SPI 总线我没有观察到任何活动。为了监控 FSM,我将state_reg路由到了一个输出总线,该总线连接到一个 LED 组。这就是行assign data_out = state_reg是在做。我发现,当我这样做时,FSM 的 AGC/SPI 控制器运行正常,正如在 SPI 总线上观察到的那样。似乎正在发生的事情是state_reg在初始化时处于未确定状态,因此 FSM 永远不会处于任何状态,因此它不会运行。但是通过将state_reg分配给一个输出,它初始化为00000000,正如我从一开始就期望它做的那样。所以我的问题是,未初始化的寄存器是否应该假定值为 0?通过将未初始化的寄存器分配给输出,这是否会迫使它像看起来那样假设为零?或者这里发生了什么我不明白的事情?下面是我的代码。我已经评论了将 *state_reg** 分配给输出线 [7:0] data_out的相关部分. 我知道这是一个很长的问题,但我真的很想了解我应该期待什么样的行为。谢谢。

0 投票
1 回答
260 浏览

java - 为此应用理念推荐一个 Java 图形 API

我想制作一个用于创建FSM控制电路仿真的工具。注意!不是 ALU 部分。

任何人都可以推荐一个具有尽可能多功能的好的 Java API 吗?它基本上类似于图形建模语言编辑器。

用户应该能够制作和运行这样的东西:在此处输入图像描述

0 投票
1 回答
994 浏览

computer-architecture - 在 FSM 中,一个状态是否持续一个时钟周期或更多?

需要为学校设计一个简单的。更具体地说,是摩尔 FSM。我不确定状态转换是如何发生的,是每个时钟的下一个状态吗?我需要知道,因为我想知道我是否可以移动一个寄存器并向它添加一个值,所有这些都处于相同的状态......可以使用波边吗?

编辑

我必须设计带有寄存器的ALU部分作为门级的示意图,所以没有目标CPU

我制作了算法图,然后根据Moore FSM规则将状态放入功能块。每个操作块都有一个状态。

例如在状态S1,我有以下操作:y0 = shift Reg1 left; y1 = Reg1 = Reg1 + Reg2所以Moore FSM的控制部分输出的微指令为0000011 (yn...y1,y0)。这个微命令应该是我需要设计的 ALU 部分的输入。现在我意识到y1,y0会相互冲突,因为两者都使用Reg1。

它有问题,因为我实际上没有控制部分,我必须想象核心 FSM 并只设计带有寄存器的 ALU。这就是为什么我想知道我是否得到了多个时钟周期,所以我可以对y0,y1进行排序,还是我必须在一个时钟内完成整个操作?

我打算做并行进并行出非移位寄存器,显然我不能同时做微命令的两个操作。那我该怎么办:

我必须再次注意,控制部分是完全抽象的,我不知道在实践中是如何处理的。

0 投票
0 回答
545 浏览

concurrency - FSM 是我基于 Akka Actor 的异步计算引擎的正确解决方案吗

我正在编写一个计算引擎(实现为 Akka Actors),它将使用一些异步和并发的 Actor 来执行一些数据检索以及计算的某些部分。

当主要参与者收到开始计算的消息时,它必须在执行计算之前从数据库中检索三个不同的数据。为了进行数据检索,我启动了 3 个演员,每个演员用于数据检索。

在继续下一步之前,我需要所有三个数据集。但是,因为它们是异步和同时检索的,所以我无法知道哪个会首先返回。

我的第一直觉是在我的主要参与者中为每个进程维护一个标志(布尔值)。当每个子actor发回数据集时,我的主要actor中的相应标志设置为true,并且检查其他两个标志以查看是否准备好继续前进。

随着我对 FSM 的了解越来越多,我相信这可能适合我正在做的事情。然而,我的一些“状态”可能同时存在。例如,状态“WaitingForData1”、“WaitingForData2”和“WaitingForData3”可以/将全部共存。在 FSM 中,这似乎不是正确的做法。另一种方法是为其他状态的每个渗透创建一个状态。例如:

  • 状态 1:等待数据 1、数据 2 和数据 3
  • 状态 2:数据 1 就绪,等待数据 2 和数据 3
  • 状态 3:数据 2 就绪,等待数据 1 和数据 3
  • 状态 4:数据 3 就绪,等待数据 1 和数据 2
  • 状态 5:数据 1 和数据 2 就绪,等待数据 3
    ...
  • 状态 N:数据 1、数据 2 和数据 3 就绪

对于我正在做的事情来说,这似乎有点矫枉过正,但实际上可能是实现使用异步和并发进程的 FSM 的最佳方式。

非常感谢您 FSM 专家的任何建议。

0 投票
2 回答
1181 浏览

sql - SQL 是否有任何有限状态机定义?

有谁知道是否有 SQL 的有限状态机定义,例如 PL/SQL、SQL92 或 SQL99..

不知道有没有sql的语法定义。。

0 投票
0 回答
819 浏览

java - 哪个 Java 状态机框架有功能性的可视化 eclipse-3.7 编辑器?

似乎有一些带有 Unimod 和 Apache SCXML 等编辑器的 Java FSM 框架,但前者在 eclipse-3.7 上存在问题,而后者甚至没有发布。作为第二种可能性,我会使用独立的可视化编辑器——但这个问题是关于如果你是 eclipse-3.7 用户,是否有这样一个带有合适的编辑器插件的框架。它将应用于桌面 GUI 应用程序设置。

那么,哪个 Java 状态机框架有功能性的可视化 eclipse-3.7 编辑器呢?

0 投票
1 回答
2357 浏览

java - 如何在 Java 中创建有限状态机

如何编写一个程序来读取 FSM 的状态集。输入数据将来自格式为(状态输入下一个状态)的文本文件,最后一行是最终状态。例如 :

程序输出将是:

a) FSM 生成的字符串列表。

b) 程序可以判断FSM是DFA还是NDFA并打印结果

0 投票
2 回答
9504 浏览

c - 米利和摩尔之间的区别

当涉及到 C 实现时,Mealy 和 Moore 状态机之间的区别是否有任何实际意义?这种差异通常是什么?

很久以前,当谈到 RTL 时,我更容易理解 Mealy/Moore 的优势/劣势。取决于当前状态的整个输出/取决于当前状态+当前输入差异的输出是有意义的,在某些情况下,Mealy 可以少 1 个状态这一事实也是有意义的。将时序图与每个 FSM 实现相关联也使它们之间的区别更加清晰。

假设我正在用 C 语言制作状态机。在一种情况下,LUT 取决于状态/当前输入(Mealy),而在 Moore 中,LUT 只是查找当前状态并返回下一个状态。在任一输出中都发生在从 LUT 返回之后(我认为,尽管我可能是错的)。我还没有想到一个明确的方式来说明 Mealy 在用 C 编码时具有优势。诸如代码可读性、速度、代码密度、设计易用性等主题可能都是相关主题——从我的角度来看,这两个模型看起来几乎相同。

也许这种差异只是学术界的一个话题——在 C 实现的实践中,这种差异可以忽略不计。如果您知道 Mealy 和 Moore 之间 C 状态机实现不同的关键方式,并且是否有真正的优势(这也很重要),我很想知道。我想强调一下——我不是在问 RTL 的实现。

我确实在这里看到了另一篇 Mealy/Moore 帖子:Mealy v/s。摩尔

但这并不是我正在寻找的解释水平。

0 投票
1 回答
592 浏览

scala - 在系统关闭时保证 Akka 中的日志输出刷新?

我将Akka FSM与 Scala 一起使用,并使用trait的log成员进行日志记录,即.FSMakka.event.Logging

当应用程序想要正常终止时调用context.system.shutdown()关闭actor系统时,似乎最新的日志消息有时会丢失(并且根本没有打印出来)。

有没有办法保证在系统关闭之前始终打印出所有日志消息?