第4种风格的Verilog HDL模型来表示同一个有限状态。在这个模型中,我们分别用沿触发的always语句和电平敏感的always语句把状态机的触发器部分和组合逻辑部分分成两部分来描述。
注意:沿触发的always语句中采用并发(非阻塞)赋值的方式;电平敏感的always语句中采用阻塞赋值的方式;
例4.4:有限状态机模型4。
module fsm (Clock, Reset, A, F, G); //模块声明
input Clock, Reset, A;
output F,G;
reg [1:0] state, Nextstate;
parameter //状态声明
Idle = 2’b00, Start = 2’b01,
Stop = 2’b10, Clear = 2’b11;
always @(posedge Clock)
if (!Reset) begin
state <= Idle; //默认状态
end
else
state <= Nextstate; //状态转换
always @( state or A ) begin
F=0;
G=0;
if (state == Idle) begin //处于Idel状态时,对A判断
if (A)
Nextstate = Start; //Start状态
else
Nextstate = Idle; //保持Idel状态
G=1;
end
else if (state == Start) //处于Start状态时,对!A判断
if (!A)
Nextstate = Stop; //Stop状态
else
Nextstate = Start; //保持Start状态
else if (state == Stop) //处于Stop状态时,对A判断
if (A)
Nextstate = Clear; //Clear状态
else
Nextstate = Stop; //保持Stop状态
else if (state == Clear) begin //处于Clear状态时,对!A判断
if (!A)
Nextstate = Idle; //Idel状态
else
Nextstate = Clear; //保持Clear状态
F=1;
end
else
Nextstate= Idle; //默认状态
End
endmodule