感觉有意思的旅鼠问题---HDLbits---Circuits---Sequential Logic---Finite State Machines第二部分

这篇具有很好参考价值的文章主要介绍了感觉有意思的旅鼠问题---HDLbits---Circuits---Sequential Logic---Finite State Machines第二部分。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.Lemmings1

module top_module(
    input clk,
    input areset,    // Freshly brainwashed Lemmings walk left.
    input bump_left,
    input bump_right,
    output walk_left,
    output walk_right); //  
    reg state , next_state;
parameter  left=0,right=1;
    always@(posedge clk or posedge areset) begin
        if(areset)
            state<=left;
        else
            state<=next_state;
    end
    always@(*) begin
        case(state)
            left:begin
                if(bump_left)
                    next_state<=right;
                else
                    next_state<=left;
            end
            right:begin
                if(bump_right)
                    next_state<=left;
                else
                    next_state<=right;
            end
        endcase
    end
    assign walk_left=(state==left);
    assign walk_right=(state==right);
  
endmodule

2.lemmings2

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 ); 
    reg[1:0] state, next_state;
    parameter left=2'b0,right=2'b1,ground_left=2'b10,ground_right=2'b11;
    always@(posedge clk or posedge areset) begin
        if(areset)
            state<=left;
        else
            state<=next_state;
    end
    always@(*) begin
        case(state) 
            left:begin
                if(ground==0)
                next_state<=ground_left;
               else
                    if(bump_left)
                    next_state<=right;
                    else 
                        next_state<=left;
                  end
            right:begin
                if(ground==0)
                next_state<=ground_right;
               else
                   if(bump_right)
                    next_state<=left;
                    else 
                        next_state<=right;
                  end
            ground_left:begin
                if(ground==0)
                next_state<=ground_left;
               else
                    next_state<=left;
            end
            ground_right:begin
                if(ground==0)
                next_state<=ground_right;
               else
                    next_state<=right;
            end
        endcase
    end
    assign walk_left=(state==left);
    assign walk_right=(state==right);
    assign aaah=((state==ground_left)||(state==ground_right));
              
            
                    
endmodule

3.Lemmings3

module top_module(
    input clk,
    input areset,    
    input bump_left,
    input bump_right,
    input ground,
    input dig,
    output walk_left,
    output walk_right,
    output aaah,
    output digging ); 
    parameter LEFT=3'b000,RIGHT=3'b001,DIG_L=3'b010,DIG_R=3'b011,FALL_L=3'b100,FALL_R=3'b101;
    reg [2:0] state,next_state;
    always @(*)
        begin
            case(state)
                LEFT:begin
                    if(!ground)
                        next_state = FALL_L;
                    else if(dig)
                        next_state = DIG_L;
                    else if(bump_left)
                        next_state = RIGHT;
                    else
                        next_state = LEFT;
                end
                RIGHT:begin
                    if(!ground)
                        next_state = FALL_R;
                    else if(dig)
                        next_state = DIG_R;
                    else if(bump_right)
                        next_state = LEFT;
                    else
                        next_state = RIGHT;
                end
                DIG_L:begin
                    if(!ground)
                        next_state = FALL_L;
                    else
                        next_state = DIG_L;
                end
                DIG_R:begin
                    if(!ground)
                        next_state = FALL_R;
                    else
                        next_state = DIG_R;
                end
                FALL_L:begin
                    if(!ground)
                        next_state = FALL_L;
                    else
                        next_state = LEFT;
                end
                FALL_R:begin
                    if(!ground)
                        next_state = FALL_R;
                    else
                        next_state = RIGHT;
                end
            endcase
        end
    always @(posedge clk,posedge areset)
        begin
            if(areset)
                state <= LEFT;
            else
                state <= next_state;
        end
    assign walk_left = (state == LEFT);
    assign walk_right = (state == RIGHT);
    assign aaah = ((state == FALL_L)||(state == FALL_R));
    assign digging = ((state == DIG_L)||(state == DIG_R));
endmodule

4.Lemmings4

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 ); 
    reg[2:0] state,next_state;
    wire[4:0] count;
    parameter left=0,
    right=1,
    dig_left=2,
    dig_right=3,
    fall_left=4,
    fall_right=5,
   dying=6,
    die=7;
    always@(posedge clk or posedge areset) begin
        if(areset)
            state<=left;
        else
            state<=next_state;
    end
    
     always@(posedge clk or posedge areset) begin
        if(areset)
            count<=1;
         else if((next_state==fall_left)||(next_state==fall_right))
            count<=count+1;
        else
            count<=1;
    end
    
    always@(*) begin
        case(state)
            left: 
                begin
                if(ground==0)
                    next_state<=fall_left;
                else 
                    if(dig)
                        next_state<=dig_left;
                     else
                         if(bump_left)
                             next_state<=right;
                          else
                              next_state<=left;
            end
            right: 
                begin
                if(ground==0)
                    next_state<=fall_right;
                else 
                    if(dig)
                        next_state<=dig_right;
                     else
                         if(bump_right)
                             next_state<=left;
                          else
                              next_state<=right;
            end
            dig_left:
                begin
                    if(ground==0)
                        next_state<=fall_left;
                    else
                        next_state<=dig_left;
                end
            dig_right:
                begin
                    if(ground==0)
                        next_state<=fall_right;
                    else
                        next_state<=dig_right;
                end
            fall_left:
                begin
                   if((!ground)&&(count<=5'd20))
                        next_state = fall_left;
                    else if((!ground)&&(count>5'd20))
                        next_state = dying;
                    else
                        next_state = left;
                end
            fall_right:
                begin
                   if((!ground)&&(count<=5'd20))
                        next_state = fall_right;
                    else if((!ground)&&(count>5'd20))
                        next_state = dying;
                    else
                        next_state = right;
                end
            dying:
                begin
                    if(ground==0)
                        next_state<=dying;
                    else
                        next_state<=die;
                end
            die:
                begin
                    next_state<=die;
                end
        endcase
    end  
   
    assign walk_left=(state==left);
    assign walk_right=(state==right);
    assign digging=((state==dig_left)||(state==dig_right));
    assign aaah=((state==fall_left)||(state==fall_right)||(state==dying));
                
endmodule

文章来源地址https://www.toymoban.com/news/detail-553092.html

到了这里,关于感觉有意思的旅鼠问题---HDLbits---Circuits---Sequential Logic---Finite State Machines第二部分的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 记录-有意思的气泡 Loading 效果

    今日,群友提问,如何实现这么一个 Loading 效果: 这个确实有点意思,但是这是 CSS 能够完成的? 没错,这个效果中的核心气泡效果,其实借助 CSS 中的滤镜,能够比较轻松的实现,就是所需的元素可能多点。参考我们之前的: 使用纯 CSS 实现超酷炫的粘性气泡效果 巧用 C

    2024年02月01日
    浏览(43)
  • 分享一组有意思的按钮设计

    先上效果图: 一共16个,每个都有自己不同的样式和效果,可以用在自己的项目中,提升客户体验~ 再上代码:

    2024年02月04日
    浏览(39)
  • 涨姿势了,有意思的气泡 Loading 效果

    今日,群友提问,如何实现这么一个 Loading 效果: 这个确实有点意思,但是这是 CSS 能够完成的? 没错,这个效果中的核心气泡效果,其实借助 CSS 中的滤镜,能够比较轻松的实现,就是所需的元素可能多点。参考我们之前的: 使用纯 CSS 实现超酷炫的粘性气泡效果 巧用 C

    2023年04月13日
    浏览(44)
  • 【动画进阶】有意思的网格下落渐次加载效果

    最近,群友贴了一个非常有意思的动画效果,整体动画效果如下: 点击某个按钮后,触发一个动画效果,原本的网格内容,将按顺序(又带点随机的效果)从高处下落进行加载填充动画。 当然,我个人认为这个动画有点华而不实,主要体现在这个动画一次需要耗费较长时间

    2024年02月16日
    浏览(47)
  • 【动画进阶】有意思的 Emoji 3D 表情切换效果

    最近,群里面的同学发了这么一个非常有意思是动画效果: 原效果地址 -- CodePen Demo -- Letter Hop 当然,原效果,主要使用了 GSAP 动画库以及一个 3D 文字 JavaScript 库: 但是,这个效果,其实本身并不复杂。 本文,我们将不借助任何动画库,尝试用最简单的 CSS 和 JavaScript 代码还

    2024年02月14日
    浏览(36)
  • 第五期:字符串的一些有意思的操作

    PS:每道题解题方法不唯一,欢迎讨论!每道题后都有解析帮助你分析做题,答案在最下面,关注博主每天持续更新。 1. 替换空格 题目描述 请实现一个函数,把字符串 s 中的每个空格替换成\\\"%20\\\"。 示例1: 输入:s = “We are happy.” 输出:“We%20are%20happy.” 示例2: 输入:s =

    2024年02月08日
    浏览(52)
  • 分享一个有意思的文字飞入动画(模仿水滴融合)

    先上效果图: 代码如下:

    2024年02月01日
    浏览(42)
  • 有意思!一个关于 Spring 历史的在线小游戏

    发现 Spring One 的官网上有个好玩的彩蛋,分享给大家! 进到Spring One的官网,可以看到右下角有个类似马里奥游戏中的金币图标。 点击该金币之后,会打开一个新的页面,进入下面这样一个名为:The History Of Spring 的在线小游戏 你可以使用上下左右的方向键来控制Spring的Logo一

    2024年04月27日
    浏览(39)
  • kill 进程时遇到的一件有意思的事情

    一般来讲,我们在 kill 掉一个进程的时候通常有两个选择: 找到进程的 pid 号,然后执行 kill 命令 找到进程的名字,然后执行 pkill 命令 pkill 和 kill 命令都是向指定的进程发送信号,从而完成终结进程的操作,主要区别在于 pkill 命令与 pgrep 配套使用,能够踢出指定终端用户

    2023年04月10日
    浏览(44)
  • vue有意思的图片动画插件direction-reveal

    功能:操作简单好上头,动画特效很丝滑,有很多种供选择 导入到需要使用动画的单页面 使用样式 导入css,如果用到了scss就导入scss,用的css就导入.css文件 https://github.com/NigelOToole/direction-reveal 文章到此结束,希望对你有所帮助~

    2024年02月12日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包