返回

FPGA 的有限状态机:将数字电路中的数学模型付诸实践

后端

有限状态机的概念

有限状态机是一种数学模型,它表示多个状态以及状态之间的跳转关系。在数字电路中,FSM 用来数字系统的行为,该系统可以在有限数量的状态中切换。每个状态都对应于系统的一个特定配置或操作模式。

米里和摩尔状态机的区别

有两种主要的 FSM:米里状态机和摩尔状态机。

  • 米里状态机: 在米里状态机中,输出仅取决于当前状态和输入。当状态或输入发生变化时,输出会立即发生变化。
  • 摩尔状态机: 在摩尔状态机中,输出取决于当前状态和输入,但它只在状态发生变化时才会改变。这意味着输出在稳定状态下保持不变。

在 FPGA 中实现 FSM

使用 FPGA 实现 FSM 的步骤如下:

  1. 定义状态: 确定系统将拥有的所有不同状态。
  2. 创建状态图: 绘制一个状态图,显示状态之间的转换以及输入和输出条件。
  3. 选择状态编码: 为每个状态分配一个唯一的编码,通常使用二进制表示。
  4. 设计逻辑: 使用 FPGA 的可编程逻辑块实现状态转换和输出逻辑。
  5. 验证实现: 使用仿真或其他验证技术来确保 FSM 按预期工作。

示例:交通信号灯 FSM

让我们考虑一个交通信号灯的示例。交通信号灯有三个状态:红灯、绿灯和黄灯。该 FSM 的状态图如下:

[图片:交通信号灯 FSM 状态图]

根据状态图,我们可以创建以下逻辑:

// 输入:clk(时钟)、reset(复位)、sensor(车辆检测器)
// 输出:red_light(红灯)、green_light(绿灯)、yellow_light(黄灯)

module TrafficLightFSM (
    input clk,
    input reset,
    input sensor,
    output reg red_light,
    output reg green_light,
    output reg yellow_light
);

// 状态编码
parameter STATE_RED = 0;
parameter STATE_GREEN = 1;
parameter STATE_YELLOW = 2;

// 当前状态
reg [1:0] current_state;

// 下一个状态
reg [1:0] next_state;

// 状态转换逻辑
always @(posedge clk or posedge reset) begin
    if (reset) begin
        current_state <= STATE_RED;
    end else begin
        case (current_state)
            STATE_RED: begin
                if (sensor) begin
                    next_state <= STATE_YELLOW;
                end else begin
                    next_state <= STATE_RED;
                end
            end
            STATE_GREEN: begin
                if (sensor) begin
                    next_state <= STATE_YELLOW;
                end else begin
                    next_state <= STATE_GREEN;
                end
            end
            STATE_YELLOW: begin
                next_state <= STATE_RED;
            end
        endcase
    end
end

// 输出逻辑
always @(posedge clk) begin
    case (current_state)
        STATE_RED: begin
            red_light <= 1'b1;
            green_light <= 1'b0;
            yellow_light <= 1'b0;
        end
        STATE_GREEN: begin
            red_light <= 1'b0;
            green_light <= 1'b1;
            yellow_light <= 1'b0;
        end
        STATE_YELLOW: begin
            red_light <= 1'b0;
            green_light <= 1'b0;
            yellow_light <= 1'b1;
        end
    endcase
end

// 更新当前状态
always @(posedge clk) begin
    current_state <= next_state;
end

endmodule

结论

有限状态机在数字电路设计中发挥着至关重要的作用。它们提供了一种表示和实现系统行为的数学模型。通过理解 FSM 的概念以及在 FPGA 中实现它们的过程,工程师可以构建复杂且高效的数字系统。