ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

HDLbits day10

2022-05-20 20:03:16  阅读:181  来源: 互联网

标签:HDLbits 旅鼠 state day10 行走 output input ground


5.10Lemmings1

在旅鼠的 2D 世界中,旅鼠可以处于以下两种状态之一:向左行走或向右行走。如果遇到障碍物,它会切换方向。特别是,如果 Lemming 撞到左边,它会向右走。如果它撞到右边,它会向左走。如果它同时在两侧碰撞,它仍然会切换方向。

实现一个具有两个状态、两个输入和一个输出的摩尔状态机来模拟这种行为。

module top_module(
    input clk,
    input areset,    // 刚洗脑的袋鼠向左走.
    input bump_left,
    input bump_right,
    output walk_left,
    output walk_right); 
    
    reg state, next_state;
    parameter LEFT=0,RIGHT=1;

    always @(*) begin
        // State transition logic
        case(state)
            LEFT:next_state<=(bump_left==1)?RIGHT:LEFT;
            RIGHT:next_state<=(bump_right==1)?LEFT:RIGHT;
        endcase
    end

    always @(posedge clk, posedge areset) begin
        // State flip-flops with asynchronous reset
        if(areset)
            state<=LEFT;
        else
            state<=next_state;
    end

    // Output logic
    assign walk_left = (state == LEFT);
    assign walk_right = (state == RIGHT);
    

endmodule

5.11、Lemmings2

除了左右走动和碰撞时改变方向外,当ground=0时,旅鼠会摔倒并说“啊啊!”。当地面重新出现 ( ground=1 ) 时,旅鼠将继续沿与坠落前相同的方向行走。跌倒时被撞不影响行走方向,与地面消失(但尚未跌倒)同一个周期被撞,或仍在跌倒时再次出现地面时,也不影响行走方向。

构建一个模拟这种行为的有限状态机。

1)在1的基础上多了坠落状态,且在掉落时方向与碰撞无关;

2)因为要记录掉落前的方向所以分为fl,fr(向左掉落,向右掉落)两个状态。

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 ); 
    
    parameter LEFT=0,RIGHT=1,FALL_L=2,FALL_R=3;
    reg [1:0] state,next_state;
    
    always@(*)
        begin
            case(state)
            LEFT:begin
                if(ground==0)
                    next_state<=FALL_L;
                else if(bump_left)
                    next_state<=RIGHT;
                else
                    next_state<=LEFT;
            end
            RIGHT:begin
                if(ground==0)
                    next_state<=FALL_R;
                else if(bump_right)
                    next_state<=LEFT;
                else
                    next_state<=RIGHT;
            end
            FALL_L:next_state<=(ground==0)?FALL_L:LEFT;
            FALL_R:next_state<=(ground==0)?FALL_R:RIGHT;
            endcase
        end
    
    always@(posedge clk or posedge areset)
        begin
            if(areset)
                state<=LEFT;
            else
                state<=next_state;
        end
    
    assign walk_left=(state==LEFT);
    assign walk_right=(state==RIGHT);
    //assign aaah=(ground==0);错误
    assign aaah=(state==FALL_L|state==FALL_R);

endmodule

5.12、Lemmings3

除了走路和摔倒之外,旅鼠有时会被告知做一些有用的事情,比如挖掘(当dig=1时它开始挖掘)。如果旅鼠当前在地面上行走(ground=1并且没有下落),它可以挖掘,并且会继续挖掘直到它到达另一边(ground=0)。到那时,由于没有地面,它会掉下来(啊啊!),然后一旦再次撞到地面,就继续沿原来的方向行走。与坠落一样,挖掘时被撞到没有效果,并且在坠落或没有地面时被告知要挖掘被忽略。

(换句话说,行走的旅鼠可以跌倒、挖掘或切换方向。如果满足这些条件中的一个以上,则跌倒的优先级高于 dig,而 dig 的优先级高于切换方向。)

扩展您的有限状态机来模拟这种行为。

 

标签:HDLbits,旅鼠,state,day10,行走,output,input,ground
来源: https://www.cnblogs.com/blog-address/p/16293409.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有