// 1. state 去哪里(时序逻辑) always @(posedge clk) begin if(!rst_n) begin state <= IDLE; // 复位后状态机处于空闲态 end elsebegin state <= next_state; // 更新状态 end end
// 2. next_state 怎么去(组合逻辑) always @(*) begin if("进入状态的条件") begin next_state = "想要进入的状态"; end elseif("进入状态的条件") begin next_state = "想要进入的状态"; end // ... end
// 3. 去做什么(时序逻辑) always @(posedge clk) begin if(!rst_n) begin "复位状态机中使到的变量(寄存器)"; endelsebegin case(state) "状态1": begin "要做的事"; // ... end "状态2": begin "要做的事"; // ... end // ... default: begin "默认情况下要做的事"; end endcase end end
讨论
评论