1、这个题很简单,但是状态机三段式跟一段式的区别还是值得仔细思考一下的。
2、三段式简单除了那个赋值那里用时序逻辑其他用组合逻辑就可以。但是切换成一段式之后该怎么想这个问题呢,。都用阻塞赋值是可以的。但是always语句块是时序逻辑的开头。有点想不明白这里回去看看书。
module top_module(
input clk,
input in,
input areset,
output out); //
parameter A=0,B=1,C=2,D=3;
reg [1:0] state,next_state;
always@(*)begin
case(state)
A:next_state=(in)?B:A;
B:next_state=(in)?B:C;
C:next_state=(in)?D:A;
D:next_state=(in)?B:C;
endcase
end
// State transition logic
always@(posedge clk or posedge areset)begin
if(areset)
state<=A;
else
state<=next_state;
case(state)
A:out<=0;
B:out<=0;
C:out<=0;
D:out<=1;
endcase
end
// State flip-flops with asynchronous reset
//assign out=(state==3)?1:0;//将上面的case删除掉,就可以用这个来代替输出了
// Output logic
endmodule