HDLBits Lemmings4

该模块处理一个下坠伤害场景,考虑了无限下落时间的影响,通过增加计数器位宽避免溢出。状态机根据当前状态决定角色行为,如行走、挖掘、碰撞反应等。在没有地面时,计数器递增,角色下落;遇到地面或达到一定计数后,状态会改变。同时,输出变量控制角色动作和声音反馈。
摘要由CSDN通过智能技术生成

1、这个题多了一个下坠伤害,倒是不难,注意题目中给定下落时间是无限的,如果time位宽太少就会导致如果下落的时间太长就会time变成0的情况。所以要把计数器的位宽定义的长一点(其实这样也不严谨,也会有出问题的概率)。

2、然后其他输出是根据当前状态进行输出。ahhh就不用放在时序逻辑里面了 放在正常的assign里面进行赋值就行。

完整代码如下: 

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 left=0,right=1,fl=2,fr=3,dl=4,dr=5,fs=6;
    reg[2:0] state,next_state;
    reg[6:0] count;//这里题目说下落时间可以是无限的,如果设置的位宽太短就有问题
    always@(posedge clk)begin
        if(ground)begin
            count<=0;
        end
        else begin
           count<=count+1; 
            
        end
    end
    always@(*)begin
        case(state)
            left:next_state=(ground)?((dig)?dl:((bump_left)?right:left)):fl;//首先检查还有没有地面有的话就接着走没有就下落,
            																//然后检查有没有挖掘的信号有就挖没有就接着走,
            																//然后再看左边有没有撞到东西
            																//撞到就往反方向走否则就还按照原来的走
            right:next_state=(ground)?((dig)?dr:((bump_right)?left:right)):fr;
            fl:next_state=(ground)?((count>20)?fs:left):fl;//如果有地面就接着走没有就接着降落
            fr:next_state=(ground)?((count>20)?fs:right):fr;
            dl:next_state=(ground)?dl:fl;//如果由地面就接着挖,直到没有地面。
            dr:next_state=(ground)?dr:fr;
            fs:next_state=fs;
        endcase
    end
    
    always@(posedge clk or posedge areset)begin
        if(areset)begin
            state<=left; 
        end
        else begin
           state<=next_state; 
        end    
    end
    assign walk_left=(state==left);
    assign walk_right=(state==right);
    assign digging=(state==dl)|(state==dr);
    assign aaah=(state==fl)|(state==fr);
 
    

endmodule

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值