FPGA状态机思想实现流水灯及HDLBits学习

第一章 在DE2-115上用状态机思想实现LED流水灯

1.1 状态机设计思路

  1. 状态定义:定义多个状态,每个状态对应一个LED亮起。
  2. 状态转移:按顺序从一个状态转移到下一个状态。
  3. 计数器:用于控制每个状态的持续时间。

1.2 Verilog代码实现

  1. 环境配置
    在这里插入图片描述
  2. 代码
module led_fsm(
    input wire clk,          // 时钟信号
    input wire reset,        // 复位信号
    output reg [7:0] leds    // 8个LED输出
);

// 定义状态
parameter STATE0 = 3'b000;
parameter STATE1 = 3'b001;
parameter STATE2 = 3'b010;
parameter STATE3 = 3'b011;
parameter STATE4 = 3'b100;
parameter STATE5 = 3'b101;
parameter STATE6 = 3'b110;
parameter STATE7 = 3'b111;

reg [2:0] current_state, next_state;

// 计数器,用于控制每个状态的持续时间
reg [25:0] cnt;

always @(posedge clk or posedge reset) begin
    if (reset) begin
        current_state <= STATE0;
        cnt <= 0;
    end else begin
        if (cnt == 25'd10000000) begin  // 每个状态持续约1秒(假设时钟为50MHz)
            cnt <= 0;
            current_state <= next_state;
        end else begin
            cnt <= cnt + 1</