本节主要谈一谈Verilog的状态机实现模板,并浅析比较。
1 一段式状态机 (单always块结构):
always @(posedge clk or posedge rst) begin
if(rst)
FSM <= S0
else begin
case(FSM)
S0:begin
Out_0; //输出
if(condition1) FSM<= S1;//状态转移
else if (condition2) FSM<= S2;//状态转移
…
end
S1:begin
Out_1; //输出
if(condition3) FSM<= S3;//状态转移
else if (condition4) FSM <=S4;
…
end
……
default: begin
Out_0; //输出
if(condition0) FSM<= S0;//状态转移
end
endcase
end
end
单always块把组合逻辑和时序逻辑放在一个时序always块描述。输出时为寄存器输出,所以无毛刺。但是这种方式会产生多余的触发器(因为把组合逻辑也放在时序逻辑中实现),而且代码难以修改调试。对于那些简单的状态机,一段式方便理解。但是对于复杂状态机,代码难于更改,条件复杂带来电路开销大,工作性能(电路最高频率)亦受限,因此实际中这种结构很少使用。
2 两段式状态机 (双always块结构):
//时序逻辑,这段一般是不变的,描述从现态转移到次态
always @

最低0.47元/天 解锁文章
1856

被折叠的 条评论
为什么被折叠?



