同步有限状态机

同步有限状态机(Finit State Machine, FSM)用于FPGA处理具有时间上先后顺序的事件。同步指的是所有状态转移都在时钟作用下进行,有限指的是状态有限。

分类

  • Mealy型状态机:输出取决于当前状态与输入;

  • Moore型状态机:输出取决于当前状态,与输入无关;

写法

  • 一段式状态机:一个always模块中既描述状态转移,又描述输入和输出;不推荐
  • 二段式状态机:两个always模块,一个用同步时序逻辑描述状态转移,另一个用组合逻辑判断转移条件和输出。定义两个状态(现态和次态);组合逻辑容易产生毛刺,不利于约束,不推荐
  • 三段式状态机:三个always模块,一个用同步时序逻辑描述状态转移,一个用组合逻辑判断转移条件,一个用时序逻辑描述状态输出;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
// 1. state 去哪里(时序逻辑)
always @(posedge clk) begin
if(!rst_n) begin
state <= IDLE; // 复位后状态机处于空闲态
end
else begin
state <= next_state; // 更新状态
end
end

// 2. next_state 怎么去(组合逻辑)
always @(*) begin
if("进入状态的条件") begin
next_state = "想要进入的状态";
end
else if("进入状态的条件") begin
next_state = "想要进入的状态";
end
// ...
end

// 3. 去做什么(时序逻辑)
always @(posedge clk) begin
if(!rst_n) begin
"复位状态机中使到的变量(寄存器)";
end else begin
case(state)
"状态1": begin
"要做的事";
// ...
end
"状态2": begin
"要做的事";
// ...
end
// ...
default: begin
"默认情况下要做的事";
end
endcase
end
end

参考资料

【FPGA/IC】状态机FSM的各种写法(一段式、二段式、三段式、摩尔型Moore、米勒型Mealy)

状态机,从细节出发(一段式、两段式、三段式,moore型、mealy型)