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 );
reg [1:0] state ,next_state;
parameter left = 2'b00, right = 2'b01 ,fall = 2'b10, dah = 2'b11; //建立四个状态
reg flag; //建立一个识别左右的flag信号
always @ (posedge clk or posedge areset)begin
if(areset)
state <= left;
else
state <= next_state;
end
//flag信号与左右方向的关系
always @ (*)begin
if(state == left)
flag <= 1'b0;
else begin
if(state ==right)
flag <= 1'b1;
else
flag <= flag;
end
end
//四个状态之间的变换
always @ (*)begin
case(state)
left : begin
if(!ground)
next_state <= fall; //左方向下没有地面的时候进入下落(fall)状态
else begin
if(dig)
next_state <= dah; //左方向下有地面并且有挖掘信号时进入挖地状态(dah)
else begin
if(bump_left)
next_state <= right; //下面的类似
else
next_state <= left;
end
end
end
right : begin
if(!ground)
next_state <= fall;
else begin
if(dig)
next_state <= dah;
else begin
if(bump_right)
next_state <= left;
else
next_state <= right;
end
end
end
fall : begin
if(!ground)
next_state <= fall;
else begin
if(flag)
next_state <= right;
else
next_state <= left;
end
end
dah : begin
if(!ground)
next_state <= fall;
else begin
next_state <= dah;
end
end
default : next_state <= state;
endcase
end
//每个状态所对应的动作
assign walk_left = (state == left);
assign walk_right = (state == right);
assign aaah = (state == fall);
assign digging = (state == dah);
endmodule
lemmings3答案
最新推荐文章于 2023-09-29 18:51:58 发布