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