当前位置: 首页 > news >正文

实验-有限状态机2(数字逻辑)

目录

一、实验内容

1.1 介绍

1.2 内容

二、实验步骤

2.1 电路原理图

2.2 步骤

2.3 状态图

4.4 状态转换表和输出表

2.5 具体应用场景

三、调试

四、实验使用环境

五、实验小结与思考

5.1  遇到的问题及解决方法

5.2  实验收获


一、实验内容

1.1 介绍

在解决更复杂的问题时,常常需要使用有限状态机(Finite State M achine或F S M)的设计方法。使用FSM方法设计出来的系统,可以针对外界事件做出不同的响应。比如生活中常见的家用台灯,你可以仅用一个输入按键实现多种输入指令,从而大大增强了系统使用者的体验,并且在某些场景下简化了系统的设计。

1.2 内容

单按钮台灯:长按和短按能够出发不同的语音播报信息;

在这个任务中,你需要根据自己对生活的观察或体验,寻找一个合适的应用场景中的问题,并采用有限状态机的方法加以解决。当你完成设计之后,你还需要在Logisim或其它平台中完成相应的实现和测试。

二、实验步骤

2.1 电路原理图

2.2 步骤

(1)首先我们需要对长按和短按进行检测,所以我们先设计一个long_or_short的器件,如下图所示:

我们运用了移位寄存器,当检测到010时,为短按;当检测到111时为长按。

(2)我们使用一个比较器,在检测到长按的情况下,我们运用一个与门将长按的计时器和蜂鸣器的声音打开,通过ROM和蜂鸣器,进行“小星星”的播报。

(3)由于检测到短按时,我们需要打开短按的计数器和蜂鸣器的声音,此时我们需要一直输入1来确保他们可以一直打开,而不是通过一直按按钮来实现,所以我们设计了一个如下的SR锁存器来实现,以确保当检测到短按时,可以保证计时器和蜂鸣器的声音一直打开。

(4)我们使用一个比较器,在检测到短按的情况下,利用一个复用器来输出1到SR锁存器的set位,此时输出的Q一直为1,这样就可以打开短按的计时器和蜂鸣器的开关,利用ROM和蜂鸣器器件来实现“祝你生日快乐”的语音播报。

2.3 状态图

4.4 状态转换表和输出表

表 1状态转换表

表 2输出表

2.5 具体应用场景

例如在一个小孩子的玩具里,小孩可以进行长按、短按来进行切换歌曲。

三、调试

(1)长按条件下,蜂鸣器开始运行

如下图:

(2)短按条件下,蜂鸣器开始运行

如下图:

四、实验使用环境

本实验采用Logisim电路仿真平台。在本实验中,你可以自由地使用Logisim提供的所有封装模块。

五、实验小结与思考

5.1  遇到的问题及解决方法

(1)长按与短按的准确检测

  • 问题:初始设计仅依靠简单计数器,导致短按和长按的区分不够精确,容易误判。

  • 解决:改用移位寄存器(检测010为短按,111为长按),提高识别准确性。

(2)短按后信号维持问题

  • 问题:短按后蜂鸣器需持续工作,但直接输入信号会导致需要持续按压按钮,不符合实际需求。

  • 解决:引入SR锁存器,在检测到短按时锁定输出信号,确保蜂鸣器持续工作而不依赖按钮保持按压。

(3)蜂鸣器与ROM的同步控制

  • 问题:蜂鸣器播放音乐时出现断续或延迟,影响体验。

  • 解决:优化比较器阈值,调整时钟频率,确保ROM数据稳定输出,使音乐播放流畅。

5.2  实验收获

  • 通过状态转换表、状态图和逻辑表达式,深入理解有限状态机在交互系统中的应用,如按键检测、模式切换等。

  • 将功能分解为长/短按检测、状态锁存、音乐播放等模块,提高电路可维护性和可扩展性。

  • 学会使用Logisim仿真工具进行逻辑验证,发现并解决时序问题,如寄存器位数不足导致的误判。

http://www.xdnf.cn/news/358831.html

相关文章:

  • 【数据结构】算法的复杂度
  • Web前端VSCode如何解决打开html页面中文乱码的问题(方法2)
  • UE5.3 C++ 房屋管理系统(一)
  • 《计算机三级(网络技术)备考攻略》
  • ubuntu 24.04 error: cannot uninstall blinker 1.7.0, record file not found. hint
  • Kaggle图像分类竞赛实战总结详细代码解读
  • MySQL如何优雅的执行DDL
  • 关于大数据的基础知识(二)——国内大数据产业链分布结构
  • K8S扩缩容及滚动更新和回滚
  • EasyPoi相关文档与使用工具类
  • MySQL 8.0 OCP 英文题库解析(二)
  • JAVA包装类
  • YOLOv8目标检测性能优化:损失函数改进的深度剖析
  • SPDK NVMe of RDMA 部署
  • DNS DDoS攻击:网络世界中的“洪水猛兽”
  • Spring框架(1)
  • 双端口ram与真双端口ram的区别
  • COASWT区域海-气-浪耦合模式
  • SEMI E94-0200 PROVISIONAL SPECIFICATION FOR CONTROL JOB MANAGEMENT(控制作业管理暂行规范)
  • 从零打造企业级Android木马:数据窃取与远程控制实战
  • 从概念表达到安全验证:智能驾驶功能迎来系统性规范
  • golang -- 如何获取变量类型
  • uniapp-商城-47-后台 分类数据的生成(通过数据)
  • Eclipse SWT 1 等比缩放
  • 菜鸟之路Day30一一MySQL之DMLDQL
  • 常见降维算法分析
  • C++进阶--红黑树的实现
  • .NET高频技术点(持续更新中)
  • 适老化洗浴辅具产业:在技术迭代与需求升级中重塑银发经济新生态
  • Vue——Axios