📜  Moore 和 Mealy 机器产生“A”、“B”、“C”取决于以“10”或“11”结尾的输入,其他(1)

📅  最后修改于: 2023-12-03 15:17:43.196000             🧑  作者: Mango

Moore 和 Mealy 机器介绍

在电子工程中,Moore 和 Mealy 机器是以它们的状态转换方式而出名的状态机模型。它们被用于设计和实现数字电路,尤其是在计算机硬件、电子通信和控制系统等领域。

Moore 机器

Moore 机器是一种基于状态转换表现的状态机模型。该模型使用当前状态和输入的组合来确定下一个状态。Moore 机器的输出仅依赖于当前状态。

在这里,Moore 和 Mealy 机器是用于产生“A”、“B”、“C”取决于以“10”或“11”结尾的输入。让我们看看如何使用 Moore 机器来实现它。

// Moore 机器
#include <stdio.h>

typedef enum {
    STATE_A,
    STATE_B,
    STATE_C
} states;

typedef struct {
    states state;
} moore_machine;

int main(void) {
    int inputs[] = {1, 0, 1, 1}; // inputs: 10 11
    moore_machine machine = { .state = STATE_A };

    for (size_t i = 0; i < sizeof(inputs)/sizeof(inputs[0]); ++i) {
        switch (machine.state) {
            case STATE_A:
                if (inputs[i] == 1) {
                    machine.state = STATE_B;
                }
                break;
            case STATE_B:
                if (inputs[i] == 0) {
                    machine.state = STATE_A;
                } else if (inputs[i] == 1) {
                    machine.state = STATE_C;
                }
                break;
            case STATE_C:
                // Do nothing, it's the final state.
                break;
        }
    }

    // The Moore output is simply the current state.
    switch (machine.state) {
        case STATE_A:
            printf("Output: A\n");
            break;
        case STATE_B:
            printf("Output: B\n");
            break;
        case STATE_C:
            printf("Output: C\n");
            break;
    }

    return 0;
}
Mealy 机器

Mealy 机器也是一种基于状态转换表现的状态机模型。该模型使用当前状态和输入的组合来确定下一个状态,同时也将输出作为函数来决定。

在这里,我们同样可以使用 Mealy 机器来实现产生“A”、“B”、“C”取决于以“10”或“11”结尾的输入。

// Mealy 机器
#include <stdio.h>

typedef enum {
    STATE_A,
    STATE_B,
    STATE_C
} states;

typedef enum {
    OUTPUT_A,
    OUTPUT_B,
    OUTPUT_C,
    OUTPUT_NONE
} outputs;

typedef struct {
    states state;
} mealy_machine;

outputs get_output(states state, int input) {
    outputs output = OUTPUT_NONE;
    switch (state) {
        case STATE_A:
            if (input == 1) {
                output = OUTPUT_NONE;
            }
            break;
        case STATE_B:
            if (input == 0) {
                output = OUTPUT_A;
            } else if (input == 1) {
                output = OUTPUT_C;
            }
            break;
        case STATE_C:
            output = OUTPUT_B;
            break;
    }
    return output;
}

int main(void) {
    int inputs[] = {1, 0, 1, 1}; // inputs: 10 11
    mealy_machine machine = { .state = STATE_A };

    for (size_t i = 0; i < sizeof(inputs)/sizeof(inputs[0]); ++i) {
        outputs output = get_output(machine.state, inputs[i]);
        switch (machine.state) {
            case STATE_A:
                if (inputs[i] == 1) {
                    machine.state = STATE_B;
                }
                break;
            case STATE_B:
                if (inputs[i] == 0) {
                    machine.state = STATE_A;
                } else if (inputs[i] == 1) {
                    machine.state = STATE_C;
                }
                break;
            case STATE_C:
                // Do nothing, it's the final state.
                break;
        }
        if (output != OUTPUT_NONE) {
            switch (output) {
                case OUTPUT_A:
                    printf("Output: A\n");
                    break;
                case OUTPUT_B:
                    printf("Output: B\n");
                    break;
                case OUTPUT_C:
                    printf("Output: C\n");
                    break;
            }
        }
    }

    return 0;
}

以上是 Moore 和 Mealy 机器的介绍及示例代码,希望对你有所帮助!