本文主要介绍的是中国大学mooc上“计算机硬件系统设计”课程中的一个实验。首先,我对本课程的课程组深表感谢,开发了这么好的学习资源供学生在线学习。

下面介绍的是这个实验的设计过程。感兴趣的朋友可以前往https://www.icourse163.org/course/HUST-1205809816 亲自尝试!

在学习了数字电路后,大概有了时序电路设计的印象,但只能在纸上画画状态图,解解题,不能很好地运用起来,因此借这次机会好好总结一下。

文章目录

一、功能要求

二、功能部件

三、控制接口定义

四、数据流电路连接

五、控制单元建立★★★

1.状态机

2.状态转换逻辑电路

3.输出函数逻辑电路

六、作品展示

七、其它

1. Moore型和Mealey型电路对比

2.寄存器的功能

一、功能要求

这是本次实验“运动码表”的功能要求,输入由四个功能按键构成,输出是数码管。有了功能要求之后,就可以开始该数字系统的设计了。(备注:Store键要求记录当前码表值,若已有记录,则和当前待记录的值作对比,然后显示相对较小的值)

二、功能部件

首先对功能进行拆解,得到所需的电路部件,如下表

功能

部件

Start 计时

计数器

Store 记录

16位寄存器

Store 记录值比较

数据比较器、数据选择器MUX

数码管显示

数码管驱动

三、控制接口定义

这里包括输入输出接口和内部控制接口的定义。

输入为Start、Stop、Store、Reset四个接口

输出为控制4个数码管的32个接口

内部控制接口有 ”计数器使能“、“计数器复位”、“16位寄存器使能”、“数据选择器选择端”等

四、数据流电路连接

数字系统设计中需要重点关注的是“数据流”和“控制流”两部分,即解决“数据是如何进行传递的”和“如何控制数据在合适的条件下进行传递”两大问题。

这是,首先关注”数据流“,可以画表来梳理数据的流向,然后逐步进行电路部件的连接。

部件

输入来源

备注

16位寄存器

计数器计数值 or 系统复位后的值“9999”

需另加数据选择器

比较器

计数器计数值 和 寄存器中存储的值

数码管驱动

计数器计数值 or 寄存器中存储的值

需另加数据选择器

有了数据流向的认识后,进行部件连线就不会无从下手了。

将部件连接起来后,最后接上各个控制接口即可。

五、控制单元建立★★★

控制单元,用于对“系统输入控制”、“系统内部控制”和“系统输出控制”进行封装。清楚了电路的数据流向后,便可以建立控制单元来控制各个部件在“什么条件下”进行传递了。

这里便用到了数电中“时序电路设计”的知识,时序电路中的组合逻辑部分,可拆分为“状态转换电路”和“输出转换电路”两部分。

在数字电路中,数据传递便是“0”和“1”的传递。与C语言编程不同,C语言可以定义不同变量并对它们赋值,然后后续对这些变量进行操作,而对应在数字电路设计中,我们便需要把这些一个个变量(电路状态)和控制信号,转换成二进制编码,然后利用“组合逻辑”来对这些编码进行操作、转化。

1.状态机

对该系统允许的状态进行编码,如下表

状态

编码

复位状态(清零+更新存储)

000

计数状态

001

停止状态

010

存储状态(更新寄存器存储并显示)

011

停止状态(不更新寄存器存储,直接显示旧的存储值)

100

清零状态(为了实现“按计数键重新从0计数”功能而引人的中间态)

101

有了状态编码后,就到画状态图FSM了,想想状态在不同情况下会发生怎样的改变?

状态图FSM中 ↓ 第一幅图有误,按start键后 为000–>001而非000–>110

2.状态转换逻辑电路

以上分别对应000到100五种状态随按键输入的变化,依照这个FSM,就可以写真值表,得到逻辑表达式,构建“状态转换电路”来实现状态的转换了。

下图为状态转换逻辑电路的局部

3.输出函数逻辑电路

如果说“状态转换电路”将“按键输入”与“系统状态”联系在一起的话,那么“输出函数电路”就是从“系统状态”到“内/外部控制输出”的过程(Moore型电路)。因此,我们需要找出“系统各个状态”与“内/外部控制输出”的关系,从而实现各部件的控制。

如下表

状态

编码

控制信号产生

复位状态(清零+更新存储)

000

计数器复位(TM-Reset=1,SD-SEL=0)

计数状态

001

计数器使能(…)

停止状态

010

计数器失能(…)、打开数据选择器

存储状态(更新寄存器存储并显示)

011

停止状态(不更新寄存器存储,直接显示旧的存储值)

100

偷懒了hh,表格没有写全,关键核心在于清楚不同状态下,控制器要控制什么,从而产生对应的控制信号(0或1),填写真值表得到逻辑表达式,然后自动生成对应电路,如下图。

六、作品展示

七、其它

1. Moore型和Mealey型电路对比

相信大家都知道Moore型和Mealey型电路的定义,前者的输出仅与现态有关,而后者的输出与现态、输入都有关系,但是真正在设计数字系统时,它们的区别又是什么呢?

笔者认为Moore型电路相对来说,抗干扰性更高,因为在一个时钟周期内的任意时刻都可能发生变化,而Moore型电路则能很好地避免输入噪声对输出的影响。

同时,在进行设计时,Moore型电路的设计思路相对清晰,能分别进行“状态转换”和“输出函数”的逻辑电路设计。

2.寄存器的功能

一直知道寄存器有存储的功能,却不知道为什么在时序电路中需要用寄存器来作存储(大雾),现在终于明白了,有了时钟节拍,结合寄存器暂存数据,就能使数据在时钟的驱动下,逐步向前流动。另外,用作反馈时就能使次态重新作为下一刻的现态输入到组合逻辑中啦!

logisim数据选择器_利用Logisim构建小型数字系统(运动码表)相关推荐

  1. 小型数字系统---运动码表

    小型数字系统-运动码表 运动码表设计 小型数字系统---运动码表 一,实验目的 二,实验内容 三,实验步骤 四,测试结果 一,实验目的 熟悉数字系统基本特征及设计方法,熟练掌握数字系统设计基本流程,利 ...

  2. 小型数字系统---运动码表设计

    运动码表设计中码表控制器是最难的,所以主要介绍如何设计码表控制器. 我们先给这个时序电路设计状态以及编码 先设计状态转换函数 首先画出状态图: (其中我们让其一到000状态就立马变为001状态,110 ...

  3. 密码学实验题_03.3_AES实验_利用Sage构建AES的S盒和逆S盒(基于阅读Sage数学库的Python代码)

    密码学实验题_03.3_AES实验_利用Sage构建AES的S盒和逆S盒(基于阅读Sage数学库的Python代码) 3.    AES实验 3)    (思考题)利用Sage构建AES的S盒和逆S盒 ...

  4. 基于python的系统构建_利用python构建一个简单的推荐系统

    摘要: 快利用python构建一个属于你自己的推荐系统吧,手把手教学,够简单够酷炫. 本文将利用python构建一个简单的推荐系统,在此之前读者需要对pandas和numpy等数据分析包有所了解. 什 ...

  5. python推荐_利用Python构建一个简单的推荐系统

    原标题:利用Python构建一个简单的推荐系统 摘要:快利用python构建一个属于你自己的推荐系统吧,手把手教学,够简单够酷炫.在此之前读者需要对pandas和numpy等数据分析包有所了解. 什么 ...

  6. 利用Mesos构建多任务调度系统

    女主宣言 我们发现公司的服务器cpu, memory等资源利用并不充分:如果能够充分利用这些机器上的空闲资源同时又能保证业务服务的正常运行,将会节省不少的机器资源:所以我们研究了Mesos来构建多任务 ...

  7. ae制作小球轨迹运动_利用Ae制作出自由落地运动小球的详细步骤

    各位知道在Ae中如何制作出自由落地运动小球呢?不太会操作的用户可以去下文学习下利用Ae制作出自由落地运动小球的详细步骤. 我们先准备好小球图片素材,背景颜色为黑色.导入素材,新建合成.将素材拖拽的合成 ...

  8. python携程怎么做数据同步_利用python yielding创建协程将异步编程同步化

    转自:http://www.jackyshen.com/2015/05/21/async-operations-in-form-of-sync-programming-with-python-yiel ...

  9. python写炒股软件_利用 Python 构建自己的股票投资系统

    前言 自从上世纪 70 年代废除金本位,完全进入法定货币时代,我们可以明确的感知到,现金是这个时代少有的 100% 确定亏损的资产.国内的物价,相比 10 年前,大致涨了 5 倍左右,相比 30 年前 ...

最新文章

  1. css超过两行显示为..._使用这些不太常用的CSS属性,布局效率上又提高了一个层次...
  2. 【2010福建】收稻子 (校BSOJ1114)
  3. 面向对象知识点之statickeyword的使用
  4. 2015总结及2016计划
  5. python迭代法求平方根_1021: 迭代法求平方根
  6. 运算均值方差_Python数据分析之NumPy(运算篇)
  7. 三菱880彩铅和uni的区别_冷灰素描纸与彩铅、色粉笔结合,一种复古味道
  8. C#开源文件实时监控工具TailTailUI
  9. ChaiNext:市场热情仍在,也需留意高位风险
  10. java 初始化和清楚_浅谈Java中的初始化和清理
  11. Android Studio(五):修改Android Studio项目包名
  12. android自动化测试--appium运行的坑问题及解决方法
  13. 樊登高效休息法心得400字_超级干货!让你快速恢复精力的高效休息法!!
  14. iOS获取当前app的名称和版本号
  15. qt实现简易时钟(Qpaintevent),可以当作桌面摆件
  16. 根据mac地址查询厂商
  17. 如何配置EditPlus放大、缩小字体的快捷键
  18. 微信小程序仿打卡小程序
  19. Pandas数据处理_分组聚合_透视表交叉表
  20. fedora17下nvidia双显卡闭源驱动的安装

热门文章

  1. node.js压缩版安装教程
  2. C++ 制作 高效的游戏机 ,只剩《2000》行了 ,代码奉上
  3. mysql select 导出数据 加分隔符
  4. 教学:3DMAX如何快速建模游戏模型,附带百G基础教程
  5. 电子信息工程保研去北邮,天大,中科院哪个好一点?
  6. 技巧笔记:Algin属性设置顺序问题
  7. Glusterfs的常用命令
  8. 什么是网络安全?为什么要学网络安全?如何学习网络安全?
  9. net472无法建立到信任_出轨后的感情,复合后怎么重建信任?
  10. 人在回路的机器学习:前言