这是测试成功的代码,一开始计数值判断写20,验证失败,写19就成功了
module top_module(
input clk,
input areset, // Freshly brainwashed Lemmings walk left.
input bump_left,
input bump_right,
input ground,
input dig,
output walk_left,
output walk_right,
output aaah,
output digging );
parameter LEFT = 7'b0000001;
parameter RIGHT = 7'b0000010;
parameter FALL_L = 7'b0000100;
parameter FALL_R = 7'b0001000;
parameter DIG_L = 7'b0010000;
parameter DIG_R = 7'b0100000;
parameter SPLAT = 7'b1000000;
reg [6:0] state, next;
integer cnt;
always @ (posedge clk) begin
if((state == FALL_L) || (state == FALL_R))
cnt = cnt+1;
else
cnt = 0;
end
always @ (posedge clk, posedge areset) begin
if(areset != 0)
state = LEFT;
else
state = next;
end
always @ (*) begin
//next = LEFT;
case(state)
LEFT: begin
if(ground == 0)
next = FALL_L;
else begin
if(dig == 1)
next = DIG_L;
else begin
if( bump_left != 0)
next = RIGHT;
else
next = LEFT;
end
end
end
RIGHT: begin
if(ground == 0)
next = FALL_R;
else begin
if(dig == 1)
next = DIG_R;
else begin
if( bump_right != 0)
next = LEFT;
else
next = RIGHT;
end
end
end
FALL_L: begin
if(ground == 0)begin
next = FALL_L;
end
else begin
if(cnt > 19)
next = SPLAT;
else
next = LEFT;
end
end
FALL_R: begin
if(ground == 0)begin
next = FALL_R;
end
else begin
if(cnt > 19)
next = SPLAT;
else
next = RIGHT;
end
end
DIG_L: begin
if(ground == 0)
next = FALL_L;
else
next = DIG_L;
end
DIG_R: begin
if(ground == 0)
next = FALL_R;
else
next = DIG_R;
end
SPLAT: begin
next = SPLAT;
end
default: next = LEFT;
endcase
end
always @(*) begin
case(state)
LEFT: begin
walk_left = 1;
walk_right = 0;
aaah = 0;
digging = 0;
end
RIGHT: begin
walk_left = 0;
walk_right = 1;
aaah = 0;
digging = 0;
end
FALL_L: begin
walk_left = 0;
walk_right = 0;
aaah = 1;
digging = 0;
end
FALL_R: begin
walk_left = 0;
walk_right = 0;
aaah = 1;
digging = 0;
end
DIG_L: begin
walk_left = 0;
walk_right = 0;
aaah = 0;
digging = 1;
end
DIG_R: begin
walk_left = 0;
walk_right = 0;
aaah = 0;
digging = 1;
end
SPLAT: begin
walk_left = 0;
walk_right = 0;
aaah = 0;
digging = 0;
end
default: begin
walk_left = 1;
walk_right = 0;
aaah = 0;
digging = 0;
end
endcase
end
endmodule