题解 | #状态机与时钟分频#(标准三段式状态机)
状态机与时钟分频
https://www.nowcoder.com/practice/25d694a351b748d9808065beb6120025
`timescale 1ns/1ns module huawei7( input wire clk , input wire rst , output reg clk_out ); //*************code***********// parameter S0 = 4'b0001 ; parameter S1 = 4'b0010 ; parameter S2 = 4'b0100 ; parameter S3 = 4'b1000 ; reg [3:0] cur_state ; reg [3:0] nex_state ; //三段式状态机--第一段 时序逻辑描述状态转移关系 always@(posedge clk or negedge rst)begin if(!rst) cur_state <= S0 ; else cur_state <= nex_state ; end //三段式状态机--第二段 组合逻辑描述状态转移逻辑 always@(*)begin case(cur_state) S0: nex_state = S1 ; S1: nex_state = S2 ; S2: nex_state = S3 ; S3: nex_state = S0 ; default : nex_state = S0 ; endcase end //三段式状态机--第三段 时序逻辑描述输出 always@(posedge clk or negedge rst)begin if(!rst) clk_out <= 1'b0 ; else begin case(nex_state) S1: clk_out <= 1'b1 ; default: clk_out <= 1'b0 ; endcase end end //*************code***********// endmodule
三段式状态机优点
- 将组合逻辑与时序逻辑分开,所写代码层次清晰,方便理解和后续的维护
- 相较两段式状态机,解决了输出毛刺的影响。