什么是状态机
我个人认为状态机就是为了解决FPGA顺序执行任务这个问题而产生的,每一步设置成一个状态,满足条件就进行下一步。
一般状态机写成三段比较好理解,所以这里我就不讨论一段式和二段式了,只讨论三段式。
第一段状态机
用来描述状态跳转到下一步
(-----------------------------同步时序电路-----------------------------)
always @(posedge clk or negedge rst_n) begin
if(!rst_n) begin
current_state <= IDLE; //复位进入空闲态
end
else begin
current_state <= next_state;//正常情况下时钟打一拍进入下一种状态
end
end
第二段状态机
用来描述什么条件下触发,我下一步要跳转的地点是什么
always @(*) begin
case(current_state)
IDLE: if(xxxx)
next_state <= s0;
else
next_state <= IDLE;
s0: if(xxxx)
next_state <= s1;
else
next_state <= s0;
...
...
default: next_state <= IDLE;
endcase
end
第三段状态机
其实就是每个状态的输出
always @(posedge clk or negedge rst_n) begin
if(!rst_n) begin
"复位状态机中使到的变量(寄存器)";
end
else begin
case(next_state) //这里如果用current_state输出会慢一个时钟节拍
"状态1": begin
"要干的事";
......
end
"状态2": begin
"要干的事";
......
end
......
......
......
default: begin
"默认情况下要干的事";
end
endcase
end
end