1、这个题还是挺简单的,左边被撞到了就会往右边走,右边被撞到了就往左走,两边都被撞到了就忘反方向走。这次的状态考虑到了default的情况,算是一个进步。
2、注意不要在多个always语句块里面对同一内容进行赋值。
完整代码如下:
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 left=0,right=1;
always @(*) begin
// State transition logic
case({bump_left,bump_right})
2'd0:next_state=state;
2'd1:next_state=left;
2'd2:next_state=right;
2'd3:next_state=!state;
default:next_state=left;
endcase
end
always @(posedge clk, posedge areset) begin
if(areset)begin
state<=left;
end
else begin
state<= next_state;
end
// State flip-flops with asynchronous reset
end
// Output logic
assign walk_left = (state == left)?1:0;
assign walk_right = (state == right)?1:0;
endmodule