1、这一大串本来想不看那个提示自己写出来的,结果害还是有点错,不够细心啊。思路是是对的但是状态转换的时候写错了。就1101那里,还有shift_ena那里多算了一个周期。
2、还是要细心啊。以及提高英语。
完整代码如下:
module top_module (
input clk,
input reset, // Synchronous reset
input data,
output shift_ena,
output counting,
input done_counting,
output done,
input ack );
parameter A=0,B=1,C=2,D=3,E=4,F1=5,F2=6,F3=7,G=8,done1=9;
reg [3:0]state,next_state;
always@(*)begin
case(state)
A:next_state=data?B:A;
B:next_state=data?C:A;
C:next_state=data?C:D;
D:next_state=data?E:A;
E:next_state=F1;
F1:next_state=F2;
F2:next_state=F3;
F3:next_state=G;
G:next_state=done_counting?done1:G;
done1:next_state=ack?A:done1;
default:next_state=A;
endcase
end
always@(posedge clk)begin
if(reset)begin
state<=A;
end
else begin
state<=next_state;
end
end
assign shift_ena=state==E||state==F1||state==F2||state==F3;
assign counting=state==G;
assign done=state==done1;
endmodule