Mealy和Moore之间的区别

前端之家收集整理的这篇文章主要介绍了Mealy和Moore之间的区别前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在C实现方面,Mealy和Moore状态机之间的区别是否有任何实际意义?这种差异通常是什么?

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

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

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

我确实在这里看到另一个Mealy / Moore帖子:Mealy v/s. Moore

但这并不是我所寻求的解释水平.

解决方法

你有一个将一种形式转化为另一种形式的机械程序,因此两者之间没有结构差异.

说到实现上的差异,这两种形式只在输出函数上有所不同,它告诉你应该输出什么符号.特别:

>在Moore机器中,输出仅取决于当前状态
>在Mealy机器中,输出取决于当前状态和当前输入.

Moore机器可能更容易实现,因为在生成输出时您需要跟踪的信息较少,但差异非常小.

以下是一个简单的摩尔机器在C中的样子:

int state = INITIAL;
while (!isTerminal(state)) {
    char input = nextInputSymbol();
    fprintf(output,"%c",nextOutputSymbol(state));
    state = nextState(state,input);
}

这是Mealy机器:

int state = INITIAL;
while (!isTerminal(state)) {
    char input = nextInputSymbol();
    fprintf(output,nextOutputSymbol(input,state));
    state = nextState(state,input);
}

如你所见,唯一的区别在于nextOutputSymbol()的定义.对于一种或另一种形式主义来说,所述功能的实现是否更容易,它实际上取决于具体的应用.

nextInputSymbol只是获取新符号的例程(可能是scanf等),nextState将取决于特定的机器,但它的复杂性在Mealy和等效的Moore之间不会有太大变化.

特别是,nextOutputSymbol和nextState都归结为表查找或切换或if / else链,没有真正的实现难度.他们真的很无聊.

注意:我省略了代码片段中的错误检查,以使我们专注于讨论的要点.真实世界代码将执行一些额外的检查,例如在nextInputSymbol上处理EOF或打破错误状态.

猜你在找的C&C++相关文章