热门标签 | HotTags
当前位置:  开发笔记 > 开放平台 > 正文

基于proteus的状态机设计

基于proteus的状态机设计状态机原理环形与扭环计数器状态机示例——“交通灯”参考资料状态机原理 理论上说,任何一个需要周而复始的执行一系列任务(例如CPU中按顺序从存储

基于proteus的状态机设计

    • 状态机原理
    • 环形与扭环计数器
    • 状态机示例——“交通灯”
  • 参考资料


状态机原理

理论上说,任何一个需要周而复始的执行一系列任务(例如CPU中按顺序从存储器取出指令、再执行指令)的时序系统都可以用状态机(state machine)模型来描述。时序系统的运行周期可以描述为一个预定顺序的时间周期序列,每个周期都对应状态机中一个指定的状态。状态机在每个周期中产生特定的操作,完成相应的任务;同时,状态机由时钟驱动,按照外部输入信号和当前状态的反馈,在下一个周期到来之际进行预定的状态转移。
根据状态数目是否有限,状态机可以分为有限状态机和无限状态机;根据是否有一个公共的时钟控制,状态机可以分为同步状态机和异步状态机。其中,最常用的同步有限状态机又可以分为以下两种类型:Moore状态机Mealy状态机

图1. 同步有限状态机示意图
同步有限状态机示意图
Moore状态机的特征是其输出z(t)与输入x(t)无关,只与当前状态s(t)有关。状态寄存器的当前状态s(t)为现态,当前输入x(t)和现态s(t)共同输入组合逻辑C1后,使状态机进入的下一个状态s(t+1)称为次态。在时钟clk的驱动下,状态机不断进行s(t)→s(t+1)的状态转移。与Moore状态机相比, Meanly状态机主要差异是:其当前输出z(t)不仅与当前输入x(t)有关,而且还与现态s(t)有关。上述状态机的核心是状态转移电路,其主要有以下两种类型:环形计数器和扭环计数器。

环形与扭环计数器

环形计数器是由D触发器构成的移位寄存器加上反馈电路闭环构成,四位环形计数器的电路如下图2所示:移位寄存器的低位触发器输出端接入相邻高位触发器输入端,而反馈电路从最高位触发器的串行输出端接入,其输出则连到最低位触发器的串行输入端。

图2. 环形计数器的时序逻辑电路
环形计数器的时序逻辑电路
环形计数器不能自启动,在开始运行前必须使能信号#START=0,使得环形计数器的四位触发器输出[D3, D2, D1, D0]的状态初始化为0001;然后,在时钟CLK驱动下,四位环形计数输出[D3, D2, D1, D0]按照以下顺序循环转换:0001→0010→0100→1000→0001→…如下图3(左)所示。环形计数器的特征是:n位环形计数器的状态数目N=n,而且其输出[D3, D2, D1, D0]是单热点(one hot)编码,即任何状态下只有一个Dx=1。所以,环形计数器的输出Dx即是状态的节拍信号,标志相应的状态。

图3. 环形计数器和 扭环计数器的状态图
环形和扭环计数器的状态图
扭环计数器的结构同环形计数器基本类似(2位扭环计数器的电路如下图4所示),只是其反馈电路略有差别:扭环计数器的反馈电路是从最高位触发器的串行输出端接入,经过反向后再连到最低位触发器的串行输入端。2位扭环计数器的状态图则如上图(右)所示:扭环计数器的初始状态00,在CLK时钟驱动下,其输出[DB, DA]按照以下顺序转换:00→01→11→10→00→…扭环计数器的优点是具有自启动特性,无须初始化;而且n位扭环计数器的状态数目N=2n,比n位环形计数器的容量高一倍,效率较高。但是扭环计数器的输出不是单热点(one hot)编码,所以其2位触发器输出端须通过2-4译码器74LS139才能转换成状态的节拍信号:S0→S1→S2→S3→S0→…

图4. 扭环计数器的时序逻辑电路
扭环计数器的时序逻辑电路
在上述扭环计数器构成的状态转移电路中,状态机的下一个状态(次态)仅由当前状态(现态)决定。在一些更复杂的时序系统中,状态机的次态不仅与现态有关,而且还与当前输入有关,例如下图5(右)所示的状态图中,当前状态S0时,若输入条件C0=0,状态机保持在状态S0;若输入条件C0=1,则在时钟clk的驱动下,状态机如常进行状态转移:S0→S1。该状态图对应的扭环计数器电路如下图5(左)所示,在反馈电路上增加了基于条件C0的判断逻辑。值得注意的是,条件C0只在状态S0有效,其它状态不起作用。

图5. 条件判断的扭环计数器
条件判断的扭环计数器

状态机示例——“交通灯”

图6所示是一个交通灯系统,展示如何运用状态机原理来设计时序系统。交通灯的状态机总共有T1、T2和T3三个状态,每个状态都有不同的亮灯模式和亮灯持续的时间(以倒计时的形式显示),如下图6(左)所示。该状态机没有输入,其状态转移仅仅取决于当前的状态。在时钟clk(φ)驱动下,状态机按照以下顺序循环转移:T1→T2→T3→T1→…,状态转移时序图如下图6(右)所示。

图6. 交通灯的状态图和状态转移的时序图
在这里插入图片描述
交通灯系统的电路如下图7所示:环形的路口上有南北向的两组红黄绿LED灯和一对数码管(显示倒计时),路口左边是整个系统的核心:时序发生器电路;路口下方是一个由BUS总线连接的计数器电路。在上图6(左)中,状态机在每个状态【Tx】中完成两个操作:LED灯亮和显示倒计时。时序发生器产生节拍{#T1, #T2, #T3},直接控制红黄绿交通灯;而计数器电路负责数码管的倒计时显示。

图7. 交通灯系统电路图
交通灯系统电路图
时序发生器电路如下图8(左)所示:右边的状态转移电路是由两个D触发器组成的2位扭环计数器,其反馈电路增加了限制:若扭环计数器当前状态输出端为01,则下一个状态输出端被强制修改为10,即跳过状态11。因此,扭环计数器输出经过2-4译码器后产生以下节拍序列{#T1, #T2, #T3}:{0,1,1}→{1,0,1}→{1,1,0}→{0,1,1}→…状态图则如下图8(右)所示。状态转移电路左边是一个基于寄存器74LS175的状态寄存器电路。当加载信号#LOAD=0时刻,其下降沿将把节拍序列{#T1, #T2, #T3}锁存,输出信号{R,Y,G}控制红黄绿交通灯:节拍 #T1和#T3分别反向生成信号G(绿灯亮)和R(红灯亮),节拍#T2则反向后和时钟信号CLOCK逻辑生成信号Y(黄灯闪烁亮)。

图8. 交通灯时序发生器电路及其状态图
在这里插入图片描述
值得注意的是,状态转移电路输出的节拍序列{#T1, #T2, #T3}实际上是红黄绿交通灯当前状态【Tx】的次态【Tx+1】(即下一个状态 ),当加载信号#LOAD=0的下降沿时刻,节拍序列{#T1, #T2, #T3}加载到状态寄存器,生成交通灯新状态【Tx+1】。然后,信号#LOAD=1加载完成之际,其上升沿触发右边状态转移电路,刷新节拍序列{#T1, #T2, #T3}为交通灯当前状态【Tx+1】的次态【Tx+2】,等待下一次加载时刻(#LOAD=0)到来。

参考资料

本文的内容节选自作者编撰的教材专著《基于Proteus的计算机系统实验教程——逻辑、组成原理、体系结构、微机接口》(机械工业出版社),更详细的内容可以直接在书中查阅。
读者如有兴趣,可以在 当当网图书, 京东图书,亚马逊上搜索作者姓名赖晓铮即可找到这本著作。
在这里插入图片描述
本书详细描述了在proteus虚拟仿真环境中,从逻辑电路开始,一步一步构造运算器、存储器、控制器,最终用三种CPU体系架构(微程序、硬布线、流水线)实现了一个8位的CPU。并且,这个CPU不仅可以做逻辑、算术运算,拥有循环、分支、堆栈等程序结构,还可以完整实现对8086所有外设的控制,即替代8086完整实现了传统《微机原理》里讲到的所有外设实验。
本书的全部proteus工程文件,PPT,实验视频以及配套的两种形式课程设计(纯汇编、硬件改动)的资料都放在 百度网盘,提取密码:34ad
广州风标为本书配套了实验箱(如下图所示),可以让学生在电脑的proteus虚拟仿真环境中设计CPU或选择已有的8086、8051、ARM等CPU模型,然后通过虚拟总线映射到实验箱的物理总线,控制实验箱面板上的真实外设。有兴趣的读者可以自行联系 广州风标教育技术股份有限公司。
在这里插入图片描述


推荐阅读
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • 360SRC安全应急响应:从漏洞提交到修复的全过程
    本文详细介绍了360SRC平台处理一起关键安全事件的过程,涵盖从漏洞提交、验证、排查到最终修复的各个环节。通过这一案例,展示了360在安全应急响应方面的专业能力和严谨态度。 ... [详细]
  • 本文详细介绍了macOS系统的核心组件,包括如何管理其安全特性——系统完整性保护(SIP),并探讨了不同版本的更新亮点。对于使用macOS系统的用户来说,了解这些信息有助于更好地管理和优化系统性能。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • 非公版RTX 3080显卡的革新与亮点
    本文深入探讨了图形显卡的进化历程,重点介绍了非公版RTX 3080显卡的技术特点和创新设计。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 本文深入探讨了一家企业的制度体系重构与升级过程,通过具体案例展示了如何在战略意图和管理理念指导下,系统性地提升企业管理制度的有效性和可操作性。 ... [详细]
  • 本章将深入探讨移动 UI 设计的核心原则,帮助开发者构建简洁、高效且用户友好的界面。通过学习设计规则和用户体验优化技巧,您将能够创建出既美观又实用的移动应用。 ... [详细]
  • 如何在PHPCMS V9中实现多站点功能并配置独立域名与动态URL
    本文介绍如何在PHPCMS V9中创建和管理多个站点,包括配置独立域名、设置动态URL,并确保各子站能够正常运行。我们将详细讲解从新建站点到最终配置路由的每一步骤。 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 离线环境下的Python及其第三方库安装指南
    在项目开发中,有时会遇到电脑只能连接内网或完全无法联网的情况。本文将详细介绍如何在这种环境下安装Python及其所需的第三方库,确保开发工作的顺利进行。 ... [详细]
  • 掌握远程执行Linux脚本和命令的技巧
    本文将详细介绍如何利用Python的Paramiko库实现远程执行Linux脚本和命令,帮助读者快速掌握这一实用技能。通过具体的示例和详尽的解释,让初学者也能轻松上手。 ... [详细]
  • 该平台旨在为大型企业提供一个高效、灵活且可扩展的分布式微服务架构解决方案。它采用模块化、微服务化和热部署的设计理念,结合当前最先进且无商业限制的主流开源技术,如Spring Cloud、Spring Boot2、MyBatis、OAuth2和Element UI,实现前后端分离的系统管理平台。 ... [详细]
author-avatar
夜的泪2502877077
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有