lemming games 1!! hdlbits

hdlbits
Lemmings1
旅鼠游戏有四个系列
系列1:
在这里插入图片描述

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;
always @(*) begin
    case(state)
        LEFT: if((bump_left==1)&&(bump_right==0))
                next_state=RIGHT;
        else if((bump_right==1)&&(bump_left==0))
                next_state=LEFT;
        else if((bump_left==1)&&(bump_right==1))
               next_state=RIGHT;
             else
                next_state=LEFT;
        RIGHT: if((bump_left==1)&&(bump_right==0))
                next_state=RIGHT;
        else if((bump_right==1)&&(bump_left==0))
                next_state=LEFT;
        else if((bump_left==1)&&(bump_right==1))
               next_state=LEFT;
           else
               next_state=RIGHT;
    endcase
    // State transition logic
end

always @(posedge clk, posedge areset) begin
    if(areset)
    state<=LEFT;   
    else
     state<=next_state;
    // State flip-flops with asynchronous reset
end
assign walk_left=(state==LEFT)?1:0;
assign walk_right=(state==RIGHT)?1:0;
// Output logic
// assign walk_left = (state == ...);
// assign walk_right = (state == ...);

endmodule
系列2
在系列1的基础上增加了掉落的功能,所以在系列1的基础上增加两个状态,由于掉落之后,一旦出现地,要回到原来的方向,因此需要增加从左侧掉落和从右侧掉落,共四个状态
在这里插入图片描述
module top_module(
input clk,
input areset, // Freshly brainwashed Lemmings walk left.
input bump_left,
input bump_right,
input ground,
output walk_left,
output walk_right,
output aaah );

  localparam left = 0;
localparam right = 1;
localparam fall_l = 2;
localparam fall_r = 3;

reg[1:0] state, next_state;
reg[2:0] out;
always @(posedge clk or posedge areset)
 begin
     if(areset)    
      state<=left;
     else
     state<=next_state;
 end
always @(*)
 begin
   case(state)   
       left: 
            next_state=ground?(bump_left?right:left):fall_l;
        right:
            next_state=ground?(bump_right?left:right):fall_r;
        fall_l:
            next_state=ground?left:fall_l;
        fall_r:
            next_state=ground?right:fall_r;
   endcase
 end
always @(posedge clk or posedge areset)
 begin
     if(areset)
         out<=3'b100;
    else
        case(next_state)
         left: out<=3'b100;
          right: out<=3'b010;
          fall_l: out<=3'b001;
          fall_r: out<=3'b001;
        endcase
 end
assign {walk_left,walk_right,aaah}=out;

endmodule

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值