定义
状态机能够控制信号按照设定好的状态进行转移,同时完成特定输出。
FPGA是并行运行的,而状态机是用来完成那些需要顺序执行的动作。通俗地说,就是把全部的情况分成几个场景,这些场景的工作方式不同。
结构
基于明德扬的状态机架构,结构清晰,易于修改。
三段式状态机,即三个always块描述状态机.
状态机结构图:(这里图有误,是两段式的)
- 时序逻辑always块,当前状态的复位,次态赋值给现态。
always@(posedge clk or negedge rst_n)begin
if(!rst_n)begin
state_c <= HEAD;
end
else begin
state_c <= state_n;
end
end
- 组合逻辑always块,描述次态转移的方向。转移条件用信号xx2xx_start命名**,写出转移方向,不用写出具体的转移条件。**状态不变不要写成 state_n = state_n,会产生锁存器。
always@(*)begin
case(state_c)
HEAD:begin
if(hea2typ_start)begin
state_n = TYPE;
end
else begin
state_n = state_c;
end
end
TYPE:begin
if(typ2len_start)begin
state_n = LEN;
end
else if(typ2dat_start)begin
state_n = DATA;
end
else begin