1、这个题刚看到时确实没啥思路,主要是对状态机这个思想的运用还不熟练,不知道怎么发现多个状态
2、设置状态机时,如果有多个状态记得设置状态机的位宽。
3、要学会用状态机的思想来解决问题。
这个题的状态机示意图
完整代码如下:
module top_module(
input clk,
input [7:0] in,
input reset, // Synchronous reset
output done); //
parameter A=0,B=1,C=2,D=3;
reg [2:0]state,next_state;
always@(*)begin
case(state)
A:next_state=in[3]?B:A;
B:next_state=C;
C:next_state=D;
D:next_state=in[3]?B:A;
default:next_state=A;
endcase
end
// State transition logic (combinational)
always@(posedge clk)begin
if(reset)begin
state<=A;
end
else begin
state<=next_state;
end
end
// State flip-flops (sequential)
assign done=(state==D);
// Output logic
endmodule