HDLBits刷题合集—16 Finite State Machines-2 Lemmings

HDLBITS笔记34:Lemmings1、Lemmings2、Lemmings3、Lemmings4 题目1:Lemmings1 游戏Lemmings涉及具有相当简单大脑的小动物。如此简单,以至于我们将使用有限状态机对其进行建模。 在Lemmings的2D世界中,Lemmings可以处于以下两种状态之一:向左行走或向右行走。如果它碰到障碍物,它会改变方向。特别是,如果一只旅鼠在左边被撞到,它会向右走。如果它在右边被撞到,它将向左走。如果它同时在两侧碰撞,它仍然会改变方向。 实现具有两个状态、两个输入和一个输出的摩尔状态机,用于模拟此行为。 模块声明 module top_module( 阅读详情

HDLBits刷题合集—16 Finite State Machines-2 Lemmings

HDLBits-129 Lemmings1

Problem Statement
Lemmings游戏涉及具有简单大脑的生物。 如此简单以至于我们将使用有限状态机对其进行建模。

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

用两个状态,两个输入和一个输出对此行为进行建模,以实现Moore型状态机。

在这里插入图片描述
hint里给出了状态转换图,如下所示:

在这里插入图片描述
代码如下:

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[1:0] state, next_state;

    always @(*) begin
        // State transition logic
        case (state)
            LEFT: next_state <= bump_left ? RIGHT : LEFT;
            RIGHT: next_state <= bump_right ? 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

HDLBits-130 Lemmings2

Problem Statement
另请参阅:Lemmings1。
除了左右走动之外,如果地面在它们下面消失,它们将掉落(可能会喊“aaah!”)。

除了在碰撞时左右走动和改变方向外,当ground= 0时,旅鼠也会掉下来并说“ aaah!”。 当地面重新出现时(ground= 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 ); 
    
	parameter LEFT = 0, RIGHT = 1, FALL_L = 2, FALL_R = 3;
    reg [2:0] state, state_next;
    
    always @(*) begin
        case (state)
            LEFT : begin
                if (ground)
                    state_next <= bump_left ? RIGHT : LEFT;
                else
                    state_next <= FALL_L;
            end
           RIGHT : begin
                if (ground)
                    state_next <= bump_right ? LEFT : RIGHT;
                else
                    state_next <= FALL_R;
            end
           FALL_L : begin
                if (ground) 
                    state_next <= LEFT;
                else 
                    state_next <= FALL_L;            
            end
           FALL_R : begin
                if (ground) 
                    state_next <= RIGHT;
                else 
                    state_next <= FALL_R;
                end
        endcase
    end
    
    always @(posedge clk, posedge areset) begin
        if (areset)
            state <= LEFT;
        else
            state <= state_next;
    end
    
    assign walk_left  = (state == LEFT);
    assign walk_right = (state == RIGHT);
    assign aaah       = (state == FALL_R) | (state == FALL_L);
    
endmodule

HDLBits-131 Lemmings3

Problem Statement
另请参阅:Lemmings1和Lemmings2。

除了走路和摔倒之外,有时还可以要求Lemmings做一些有用的事情,例如挖掘(当dig = 1时就开始挖掘)。 如果一只Lemming目前正在地面上行走(ground= 1且没有掉落),它可以进行挖掘,并将继续挖掘直到到达另一侧(ground= 0)。 此时,由于没有地面,它将坠落(aaah!),然后一旦再次撞击地面,便继续沿其原始方向行走。 与掉落一样,在挖掘过程中发生碰撞无效,而在掉落或没有地面时被告知挖掘则被忽略。

(换句话说,行走的旅鼠会掉落,挖掘或切换方向。如果满足以上条件之一,则下降优先级高于挖掘,下降优先级高于切换方向。)

扩展上面的有限状态机以对这种行为进行建模。

在这里插入图片描述
状态转换图如下所示:在这里插入图片描述

代码如下:

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, left_ground =2, right_ground=3, left_dig=4, right_dig=5;
    reg [2:0] state, state_next;
    
    always @(*) begin
        case (state)
           left : begin
               if (ground) begin
                   if (dig)
                       state_next <= left_dig;
                   else
                       state_next <= bump_left ? right : left;
               end
               else
                  state_next <= left_ground;
           end
            right : begin
                if (ground) begin
                   if (dig)
                       state_next <= right_dig;
                   else
                       state_next <= bump_right ? left : right;
               end
               else
                  state_next <= right_ground;
           end
           left_ground : begin
               if (ground) 
                   state_next <= left;
               else
                   state_next <= left_ground;
           end
            right_ground : begin
               if (ground) 
                   state_next <= right;
               else
                   state_next <= right_ground;
           end
            left_dig : begin
                if (ground) 
                   state_next <= left_dig;
               else
                   state_next <= left_ground;
           end
            right_dig : begin
                if (ground) 
                   state_next <= right_dig;
               else
                   state_next <= right_ground;
           end
        endcase
    end
    
    always @(posedge clk, posedge areset) begin
        if (areset)
            state <= left;
        else
            state <= state_next;
    end
    
    assign  walk_left  = (state == left);
    assign  walk_right = (state == right);  
    assign  aaah       = (state == left_ground) | (state == right_ground);
    assign  digging    = (state == left_dig) | (state == right_dig);
              
endmodule

HDLBits-132 Lemmings4

Problem Statement
另请参阅:Lemmings1,Lemmings2和Lemmings3。

尽管Lemmings可以行走,掉落和挖土,但Lemmings并不是无敌的。 如果Lemmings掉落的时间过长,然后撞到地面,它可能会飞溅。 特别是,如果Lemming掉落超过20个时钟周期然后撞到地面,它将永久飞溅(并且直到4个输出变为0)(或直到FSM复位),然后停止行走,掉落或挖掘(全部4个输出变为0)。 旅鼠在撞上地面之前可以跌落的距离没有上限。 只在撞到地面时会飞溅; 他们不会在空中飞溅。

扩展之前的有限状态机以对这种行为进行建模。

下降20个周期是可以生存的:

在这里插入图片描述
下降21个周期会导致飞溅:

在这里插入图片描述
状态转换图如下所示:
在这里插入图片描述

代码如下:

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=3'd0, right=3'd1, falll=3'd2, fallr=3'd3, digl=3'd4, digr=3'd5, splat=3'd6;
    reg [2:0] state, next_state;
    reg [31:0] count;

    always@(posedge clk or posedge areset) begin
        if(areset)
            state <= left;
        else if(state == falll || state == fallr) begin
            state <= next_state;
            count <= count + 1;
        end
        else begin
            state <= next_state;
            count <= 0;
        end
    end

    always@(*) begin
        case(state)
            left: begin
                if(~ground)         next_state = falll;
                else if(dig)        next_state = digl;
                else if(bump_left)  next_state = right;
                else                next_state = left;
            end
            right: begin
                if(~ground)         next_state = fallr;
                else if(dig)        next_state = digr;
                else if(bump_right) next_state = left;
                else                next_state = right;
            end
            falll: begin
                if(ground) begin
                    if(count>19)    next_state = splat;
                    else            next_state = left;
                end
                else                next_state = falll;
            end
            fallr: begin
                if(ground) begin
                    if(count>19)    next_state = splat;
                    else            next_state = right;
                end
                else                next_state = fallr;
            end
            digl: begin
                if(ground)  next_state = digl;
                else        next_state = falll;
            end
            digr: begin
                if(ground)  next_state = digr;
                else        next_state = fallr;
            end
            splat: begin
                next_state = splat;
            end
        endcase
    end

    assign  walk_left = (state == left);
    assign  walk_right = (state == right);
    assign  aaah = (state == falll || state == fallr);
    assign  digging = (state == digl || state == digr);

endmodule

Note
新手一枚,主要分享博客,记录学习过程,后期参考大佬代码或思想会一一列出。欢迎大家批评指正!

(1)D触发器verilog描述 2.1 D触发器verilog描述 2.1.1 本节目录 第一,本节目录; 第二,本节引言; 第三,FPGA简介; 第四,verilog简介; 第五,D触发器verilog描述实例; 第六,结束语。 2.1.2 本节引言 给FPGA一个支点,它可以撬动整个数字逻辑。““给我一根杠杆我就能撬动地球”是古希腊数学家、物理学家阿基米德说的,这句话是阿基米德的经典语录,这句话还被翻译为“给我一个支点,我就能撬起整个地球”,用了夸张的方式来说明杠杆原理。” 2.1.3 FPGA简介 FPGA(F 阅读详情

相关推荐

西安交通大学SQ轴承数据集(文末附数据)

西安交通大学SQ轴承数据集

qq_43271683的博客 1万+

HDLBits(【FSM】-水库及旅鼠 日常记录方便回看)

FSM练习

j1499的博客 625

STA 静态时序分析 第三章——标准单元库中的高级功耗建模与优化策略

本文深入探讨了STA静态时序分析中标准单元库的高级功耗建模与优化策略。详细解析了动态功耗和漏电功耗的精细建模技术,包括基于波形敏感的CCS模型和温度敏感的漏电模型,并介绍了多工艺角功耗建模及低功耗设计优化策略,为纳米级芯片设计提供关键能效解决方案。

weixin_29290863的博客 224

Verilog:HDLBITS Lemmings2 仿真成功代码+自己另外写的测试代码

设计上采用时序逻辑电路,先对 ground 进行赋值,再进行判断,这里面的 if 中一定要采用 ~ground,因为这里判断的是上一个时钟的 ground 值,也就是还没有取非的 ground 的值,所以上一个时钟 ground 要是0,那么下一个时刻就会是1,delay 就多取一些。特别是,如果旅鼠在左边被撞了,它会向右走。先判断 ground 是否为0,然后再去判断 bump_left 和 bump_right,对于其他情况保持原状态 left,对于状态 right,同理,这里不再赘述。

wbf_123的博客 595

网络安全 | 企业网络安全的十大挑战及解决方案

网络安全 | 企业网络安全的十大挑战及解决方案,随着信息技术的飞速发展,企业数字化转型进程不断加速,网络安全问题日益成为企业运营与发展面临的关键挑战。本文深入剖析企业网络安全的十大挑战,包括网络攻击日益复杂、数据泄露风险、内部威胁、物联网安全、云安全、合规性要求、移动办公安全、供应链安全、人才短缺以及安全预算有限等,并针对每个挑战详细阐述相应的解决方案,旨在为企业构建全面、有效的网络安全体系提供指导与参考,助力企业在复杂多变的网络环境中保障自身信息资产安全,实现可持续发展。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 4万+

基于 MFC 和 C++ 的语音识别客户端实现方案

语音 SDK:[Microsoft Speech SDK](https://learn.microsoft.com/zh-cn/azure/cognitive-services/speech-service/speech-sdk)(建议使用最新版)1. **Azure 语音服务密钥**:需要在 [Azure 门户](https://portal.azure.com/) 中创建语音资源,获取密钥和区域(如 `eastasia`),替换代码中的占位符。

寒寒豆豆软件公司的博客 152

【无标题】旅鼠游戏涉及大脑相当简单的小动物。如此简单,以至于我们将使用有限状态机对其进行建模。在旅鼠的 2D 世界中,旅鼠可以处于两种状态之一:向左行走或向右行走。如果它撞到障碍物,它会改变方向。

求大神解答,这个代码报错,但是我把left和right换成大写的LEFT,RIGHT就又对了,为什么呀!

2301_77660925的博客 442

【人工智能时代】-什么是MCP?本地如何开发MCP Server

MCP(Model Context Protocol)全称模型上下文协议,是由 Anthropic 推出的一种开放标准,旨在统一大型语言模型(LLM)与外部数据源和工具之间的通信协议。掌握更多的信息控制更多的工具在没有联网搜索之前,大模型的数据来源只有训练数据的时候以及推理我们告诉他的东西。所以后来的rag、知识库都是让AI掌握更多的信息,而MCP的出现是为了让大模型控制更多的工具,赋予更多能力。在本篇文章中,基于 Python 完成了一个简单的 MCP Server 的开发。

xiaoli8748的专栏 1984

Verilog:HDLBITS Lemmings1 仿真成功代码+自己另外写的测试代码

旅鼠》这款游戏涉及大脑相当简单的动物。简单到我们要用有限状态机来建模。在《旅鼠》的2D世界中,旅鼠可以有两种状态:向左走或向右走。如果碰到障碍物,它会改变方向。特别是,如果旅鼠在左边被撞了,它会向右走。如果它在右边被撞了一下,它就会向左走。如果两边同时碰撞,它仍然会改变方向。实现具有两个状态、两个输入和一个输出的Moore状态机,以模拟此行为。整个代码采用三段式结构,易于修改和阅读。

wbf_123的博客 393

YOLO26改进 - SPPF模块 | 发论文神器!LSKA注意力改进SPPF,增强多尺度特征提取能力,高效涨点!!!

本文介绍了Large Separable Kernel Attention (LSKA)模块及其在YOLO26中的结合应用。LSKA旨在解决Visual Attention Networks (VAN)使用大内核卷积时的计算效率问题,通过将2D深度卷积层的卷积核分解为级联的水平和垂直1-D卷积核,降低了计算复杂度和内存占用,且使VAN更关注物体形状。我们将集成LSKA的SPPF_LSKA模块引入YOLO26,大量实验表明,改进后的模型在对象识别、检测、分割和稳健性测试上表现出色。

魔改工程师的博客 252

Vue3 - 详解实现网站接入钉钉扫码登录功能,钉钉授权生成登录二维码用户用手机扫描二维码登陆,支持弹框式、浏览器单独新开页显示,钉钉扫描二维码登录详细流程及示例代码,最新vue集成钉钉扫码授权登录!

vue3,nuxt3,钉钉,扫码登录,vue3钉钉扫码登陆,钉钉授权第三方WEB网站扫码登录功能,钉钉扫码登录第三方网站,单点登录,二维码不显示,报错,扫了没反应,出错,vue3钉钉扫码登录,内嵌,获取个人信息,pc网页钉钉登录,钉钉扫码登录怎么新开一页,跳页显示二维码,内嵌登录二维码,iframe新页面弹出,弹出一个小窗口显示登录二维码,登录报错,扫码没反应,解决手机点登录报错没反应,官方文档,手机扫描钉钉二维码登录网站,页面弹出一个小窗口而不是打开一个页面,vue3中使用iframe实现另开小窗口扫码登

🏆 前端领域优质创作者 3694

HDLBits 系列(8)——Sequential Logic(Finite State Machines(一))

目录 3.2 Sequential Logic 3.2.5 Finite State Machines 1.Simple FSM 1 (asynchronous reset) 2.Simple FSM 1 (synchronous reset) 3.Simple FSM 2 (asynchronous reset) 4.Simple FSM 2 (synchronous reset) 5.Simple state transitions 3 6.Simple one-hot st...

Bronceyang的博客 1894

【RT-DETR涨点改进】全网独家创新,卷积细节涨点改进篇 | TCSVT 2025 | 引入DGBM差分专家引导双向调制模块,利用双向仿射调制实现特征分布对齐,含多种创新改进,助力小目标检测高效涨点

本文提出DGBM差分专家引导双向调制模块,用于改进RT-DETR目标检测网络。该模块通过差分建模突出不同层级特征的独特信息,利用双向调制实现特征分布对齐,增强局部细节与全局语义的协同表达。DGBM包含差分专家机制、物理反演建模和双向仿射调制三个关键部分,能有效解决CNN与Transformer特征融合冲突问题。实验表明,该方法可提升复杂场景下的检测精度,降低误检漏检率,且模块具有可插拔、易集成的特点。文章详细介绍了模块结构、原理、优势及具体实现代码,并提供了四种RT-DETR改进方案的yaml配置文件。

Ai缝合怪、助力小伙伴高效发论文 441

HDLBits-Circuits学习小结(八)有限状态机进阶(Lemmings、Onehot FSM、PS/2 packet parser)

目录1 旅鼠游戏1.1 Lemmings11.2 Lemmings21.3 Lemmings31.4 Lemmings42 onehot FSM 1 旅鼠游戏 Lemmings游戏涉及具有简单大脑的生物。 如此简单以至于我们将使用有限状态机对其进行建模。 在Lemmings的2D世界中,Lemmings可以处于以下两种状态之一:向左行走或向右行走。 如果碰到障碍物,它将切换方向。特别是,如果Lemmings在左侧发生碰撞,它将向右行走。 如果它撞到右边,它将向左走。 如果同时在两侧碰撞,它将仍然会切换方向。

Ryzen3的博客 1345

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

HDLBits第十四章练习及答案2

有限状态机10、旅鼠111、旅鼠212、旅鼠313、旅鼠414、One-hot FSM 10、旅鼠1 在旅鼠的 2D 世界中,旅鼠可以处于两种状态之一:向左走或向右走。如果碰到障碍物,它会改变方向。特别是,如果旅鼠在左边被撞到,它会向右走。如果它在右边被撞到,它会向左走。如果它同时在两侧碰撞,它仍然会转换方向。 实现一个具有两个状态、两个输入和一个输出的摩尔状态机来模拟这种行为。 提示: 代码实现: module top_module( input clk, input areset,

Alice的博客 1494

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Lemmings_HDLbits(旅鼠游戏——基于Verilog描述的有限状态机简单小游戏)

旅鼠游戏中的动物行为很简单 ,我们将使用有限状态机FSM对其进行建模。

NJUzzf98的博客 5095

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

[吾题有解] HDLBits : Lemmings2

最开始是使用case语句对输入集合{bump_left, bump_right, ground}的8种情况(从3’b000~3’b111)逐个确定输出,写了两个状态之后才发现可以精简为上述代码,逻辑也变得更加清晰。

shushisheng的博客 518

HDLBits--Lemmings2

题目: 解析: 在Lemmings1中增加了一个ground信号,ground为0时,小人会掉下去,ground为1时,小人会恢复到掉下去之前的向左向右状态。所以想到把掉下去分成,从向左掉下去和从向右掉下去。 代码如下:module top_module( input clk, input areset, // Freshly brainwashed Lemmings walk left. input bump_left, input bump_right, ...

bbbman7的博客 393

Lemmings2 HDLbits

题目: 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, RI

weixin_42799603的博客 295

HDLBits练习——Lemmings2

HDLBits练习

tanxinxin512的博客 444

【HDLBITS刷题】Lemmings2

HDLBits刷题

weixin_61092302的博客 437

HDLBits之Lemmings2

See also:Lemmings1. In addition to walking left and right, Lemmings will fall (and presumably go "aaah!") if the ground disappears underneath them. In addition to walking left and right and changing direction when bumped, whenground=0, the Lemming will..

rosemaryandthyme的博客 410

HDLBits-Lemmings2

题目: 状态机: 注意: 如果像左图那样设计状态机的话,到了S2之后,需要回到S0或者S1,但是这样就没有进行判断的依据了,所以直接设计成右图所示的状态机比较方便。

qq_40996256的博客 318

HDLBits刷题_Lemmings2

See also:Lemmings1. In addition to walking left and right, Lemmings will fall (and presumably go "aaah!") if the ground disappears underneath them. In addition to walking left and right and changing direction when bumped, whenground=0, the Lemming will..

m0_65438107的博客 443

verilog使用Moore电路实现交通灯

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34259559的博客 544

Moore's voting algorithm

最近在刷LeetCode的题的时候,发现一个特别巧妙的算法:Moore’s voting algorithm。 这个算法是解决这样一个问题:从一个数组中找出出现半数以上的元素。 Moore的主页上有这个算法的介绍:A Linear Time Majority Vote Algorithm和这个算法的一个简单示例演示:演示链接。 算法的基本思想 每次都找出一对不同的元素,

chfe910的专栏 1万+
上一篇: HDLBits刷题合集—14 More Circuits
下一篇: HDLBits刷题合集—17 Finite State Machines-3
GitHDL
博客等级 码龄8年 144粉丝 4原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值