大概意思:有两个方向可以走:往左走和往右走;如果碰到障碍物就需要切换方向。同时碰到障碍物也要切换方向。
思路:主要是下个状态的判断,按照题目描述:在LEFT状态下,如果遇到左边有障碍物或者两边都有障碍物,则状态切换到RIGHT。另一个状态下同理。换句话说,碰到左侧往右走,碰到右侧往左走,都碰到对当前状态取反,其他状态不变。
module top_module(
input clk,
input areset, // Freshly brainwashed Lemmings walk left.
input bump_left,
input bump_right,
output walk_left,
output walk_right); //
// parameter LEFT=0, RIGHT=1, ...
reg state, next_state;
parameter L=0,R=1;
always @(*) begin
// State transition logic
case({bump_left,bump_right})
2'b10:next_state = R;
2'b01:next_state = L;
2'b11:next_state = ~state;
default:next_state = state;
endcase
end
always @(posedge clk, posedge areset) begin
// State flip-flops with asynchronous reset
if(areset)
state <= L;
else
state <= next_state;
end
// Output logic
// assign walk_left = (state == ...);
// assign walk_right = (state == ...);
assign
walk_left = (state==L);
assign walk_right = (state==R);
endmodule