一、状态机的编写分为3种
-
一段式:将状态转移、状态转移条件、输出全都放置在一个always模块中。
-
两段式:一个模块用时序逻辑描述状态转移,另一个模块利用组合逻辑描述状态转移条件及输出。
-
三段式:第一个模块利用时序逻辑编写状态转移(always、非阻塞原语)。
第二个模块利用组合逻辑编写状态转移条件(always、阻塞原语)。
第三个模块可以利用时序或组合逻辑来编写输出,但利用组合逻辑编写输出时,一般可能会产生毛刺。
二、Verilog HDL 数字设计与建模 ——Joseph Cavanagh
P285 例8.28 设计一个Mealy同步时序状态机,当检测到输入x端口出现了1001的序列时,输出z将被拉高。重叠的1001也要求被检测出来。
module mealy_ssm (x, clk, rst_n, state, z)
input x, clk, rst_n;
output state, z;
wire z;
reg [1:0] state, next_state;
parameter state_a