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=3'd0;
parameter dig_left=3'd1;
parameter fall_left=3'd2;
parameter right=3'd3;
parameter dig_right=3'd4;
parameter fall_right=3'd5;
reg[2:0] state,next_state;
always@(*) begin
case(state)
left:begin
if(ground==0)
next_state=fall_left;
else begin
if(dig==1)
next_state=dig_left;
else if(bump_left==1||bump_left&bump_right==1)
next_state=right;
else
next_state=left;
end
end
right:begin
if(ground==0)
next_state=fall_right;
else begin
if(dig==1)
next_state=dig_right;
else if(bump_right==1||bump_left&bump_right==1)
next_state=left;
else
next_state=right;
end
end
dig_left:begin
if(ground==1)
next_state=dig_left;
else
next_state=fall_left;
end
fall_left:begin
if(ground==1)
next_state=left;
else
next_state=fall_left;
end
dig_right:begin
if(ground==1)
next_state=dig_right;
else
next_state=fall_right;
end
fall_right:begin
if(ground==1)
next_state=right;
else
next_state=fall_right;
end
endcase
end
always@(posedge clk or posedge areset) begin
if(areset==1)
state<=left;
else
state<=next_state;
end
assign walk_left=(state==left);
assign walk_right=(state==right);
assign digging=((state==dig_left)|(state==dig_right));
assign aaah=((state==fall_left)|(state==fall_right));
endmodule