解析:Lemmings系列的最后一题。这题的要求是增加了一个死亡的判断,当向下坠落超过20个时钟周期,便会死亡,此时所有输出为0。需要增加一个计数器,最开始我把计数器和状态时序写在一个always块内,功能不知道为啥无法实现,输出没法置0,后面单独给计数器写个always块后可以实现。
代码:
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 L=0,R=1,GL=2,GR=3,DL=4,DR=5,S=6;
reg[2:0] state,next;
reg[6:0] cnt=6'd0;
always@(*)
begin
case(state)
L:next=ground?(dig?DL:(bump_left?R:L)):GL;
R:next=ground?(dig?DR:(bump_right?L:R)):GR;
DL:next=ground?DL:GL;
DR:next=ground?DR:GR;
GL:next=ground?((cnt>5'd19)?S:L):GL;
GR:next=ground?((cnt>5'd19)?S:R):GR;
S:next=S;
endcase
end
always@(posedge clk or posedge areset)
begin
if(areset)
state<=L;
else state<=next;
end
always@(posedge clk or posedge areset)
begin
if (areset)
cnt<=6'd0;
else if((state==GL)|(state==GR))
cnt<=cnt+1'd1;
else cnt<=6'd0;
end
assign walk_left = (state==L);
assign walk_right = (state==R);
assign aaah = (state==GL)|(state==GR);
assign digging = (state==DL)|(state==DR);
endmodule
结果