当前课程知识点:IC设计与方法 > 2、数字集成电路设计方法 > d)时序逻辑电路(2) > 2-3时序逻辑电路的设计方法 (二)
这个新的设计方法是什么呢
我们首先要来看一下元器件
在刚才的这种传统的设计方法里面
我们在实现状态转移图的时候
我们说可以用D触发器
也可以用JK触发器
也可以用T触发器来实现
这三类触发器
或者这些触发器各自的功能都有一些差异
我们在新的这种同步电路
我们叫做基于全同步电路的设计方法里面
用硬件描述语言来做设计
我们的设计模型是采用D触发器
为什么呢
因为D触发器的功能非常的简洁
采用D触发器以后
电路的状态方程就变得非常的简单
因为D触发器的功能是什么
是在时钟的上升沿
把当前的输入直接打到输出端
这样
它的功能传递相当于是
没有值的变化的一个直接传递的过程
这样就可以简化电路设计
所以
在讲具体的设计方法之前
我们先来回顾一下D触发器的功能
一个标准的D触发器
有这么几个信号端
时钟端
数据输入端 复位端
输出有同相输出Q
和反相输出/Q端
从逻辑功能角度来说
其实有3个信号就足够了
时钟
输入数据D和输出信号Q
就能够描述这个D触发器的功能
对于描述D触发器的功能
我们可以用三句话来描述
一个是复位信号
通常来说
D触发器的
或者说触发器的复位信号的优先级最高
所以我们第一句话就是描述说
当复位信号有效
有可能是高电平有效
也有可能是低电平有效
只要复位信号有效
触发器的输出端就会被强制设置成一个电平
也可能是1也可能是0
要取决于到底是什么类型的D触发器
这是第一句话
描述复位信号的功能
第二句话是时钟信号
D触发器动作的时候
只在时钟的有效沿工作
所以第二句话就是说
当时钟信号的有效沿到来的时候
把输入数据D的值
打到输出端Q去
这是第二句话
第三句话
在其他时候
什么是其他时候
就是说
复位信号是无效的
时钟的有效沿也没有到来的时候
D触发器的输出端
保持它的值不变
这是我们描述D触发器功能的三句话
我想大家上完一门课以后
可能什么东西都可能忘掉
但是这个一定要记下来
直接说这三句话
直接死记这三句话
可能稍微有点不够直观
我们再来看一下D触发器的时序图
是这样一个时序图
在这张时序图上就比较明显
当D触发器的复位信号
也就是低电平信号到来的时候
触发器的输出端被强制的置为一个固定电平
比如说是一个低电平的复位信号
输出端被置为低电平有效的复位信号
输出端的Q端被制为0
第二个就是说
当复位信号无效的时候
如果时钟的有效沿来到的时候
把输入的D的值传递到输出的Q端
第三句话
在其他任何时刻
只要没有时钟的有效沿
只要没有复位信号到来的时候
不管输入的数据信号怎么变化
输入的Q端都保持不变
这张波形图完美的表示了D触发器的三个功能
利用这样一个D触发器
去构造我们的时序逻辑电路的时候
我们可以看出
我们的电路可以用这样一张图给它表示出来
这张图
类似于前面的幻灯片
我们说时序逻辑电路
是在组合逻辑电路的基础上
增加了一个记忆元器件去实现
在前面的一页幻灯片
或者前面的图上
只有两个模块
在这里面
我们把前面
电路里面的组合逻辑电路分成了两部分
按照功能来说
分成了两部分
所以
在这个电路里面
一共有两个组合逻辑电路
和一个D触发器或者说一组D触发器
在这里面
D触发器是用来记住电路的当前的状态的
组合逻辑电路1
按照它的功能
可以把它称之为状态计算逻辑
它是根据电路的当前状态以及电路的当前输入
计算出电路的下一个状态是什么
这是组合逻辑电路1
组合逻辑电路里面
我们把组合逻辑电路的另一部分功能分解出来
然后用组合逻辑电路2来表示
组合逻辑电路2的功能是什么呢
它是根据电路的当前状态以及电路的当前输入
计算出电路的输出
我们称之为叫输出计算逻辑电路
可以起这么个名字
这里面我们可以看到
从当前输入到组合逻辑电路2是一条虚线
为什么是条虚线呢
大家想一下
这就要跟我们时序逻辑电路的类型有关了
我们说时序逻辑电路有可能是Moore状态机
也有可能是Mealy状态机
如果是摩尔状态机
我们说它的输出只跟电路的当前状态有关
在一个状态内
电路的输出是保持不变的
所以这条虚线就不存在了
输出计算逻辑
也就是组合逻辑电路2
输出计算逻辑这块电路
它只跟电路的当前状态有关系
而跟输入信号是没有关系的
就没有这条虚线
这样也就带来了一个好处
我们的输出信号在一个状态周期内
一个时钟周期内是始终保持固定不变的
如果是Mealy状态机
根据定义
或者说根据Mealy状态机功能的描述
Mealy状态机的输出
不但跟当前的状态有关系
还跟当前的输入有关系
所以
Mealy状态机的上面这条虚线就变成了实线
如果是Mealy状态机
也就是说
这个输出计算逻辑
不但要根据电路的当前状态
还要根据电路的当前输入
才能够计算出电路的输出
如果是画成实线以后
我们可以看到
即使电路的当前状态不变
处在当前状态这个时钟周期内
只要输入信号上有变化
哪怕是一个毛刺
我们电路的输出也可能会有一个毛刺输出
所以
我们这里面就又可以
从这张结构图又可以看出来
如果你设计一个电路
希望电路的输出是一个非常干净的信号
那就意味着你在设计电路的时候
不能够采用或者说要慎重采用Mealy状态机
还是要尽可能采用Moore状态机去实现
这里我们可能还要再插一句话
既然Mealy状态机有这样的缺点
我们为什么还用Mealy状态机呢
我们应该在所有的电路里面
都采用Moore状态机
原因是对于同样的功能需求
在实现电路的时候
通常Moore状态机所需要的状态数
会比Mealy状态机多一个
这是一方面
第二方面
同样的电路如果用Moore状态机的时候
动作响应的速度
比Mealy状态机会稍微慢一点
有时候
会慢一个时钟周期
所以
在某些对电路性能要求非常高
对电路的实现规模要求也非常高的情况下
我们会优先考虑Mealy状态机
下面我们再仔细看一下这张电路图
在这里面
我们对信号都起了一些名字
特别是电路的内部信号
我们关注一下两个内部信号
一个是current state当前状态
一个是next state下一状态
我们的组合逻辑电路1的作用
是用来根据当前的状态计算出(下一个状态)
以及当前的输入X
计算出下一个状态next state
然后D触发器在时钟有效沿到来的时候
把next state打入到D触发器
变成新的current state
这是两个功能
输出计算逻辑是根据current state
也就是根据当前状态
计算出当前的输出
所以这是我们
在用这种结构实现时序逻辑电路的时候
内部的信号
它所代表的意义
大家要详细的去理解这个意义
如果有必要
可以自己去画一张时序图
去看出这些next state
current state以及这些输入信号
和输出信号之间的时序上的关系
为什么呢
因为在我们设计电路的时候
哪怕是像我
设计很多电路以后
有时候脑子一糊涂
会把当前状态和下一状态在时钟上就搞混了
或者会错开一个时钟周期
导致电路的功能上出错
我们来看一下这张图,应该说是需要我们
还是有点像我这个前面说的一句口头禅
我们学完一门科以后
1年后 2年后 3年后甚至10年后
你可以把所有东西都忘的干干净净
但是
D触发器 这张电路的结构图永远不要忘掉
这张图是我们学完这门课以后一定要记下来的图
为什么呢
因为这张图是我们后面所有设计的基础
我们所有设计的工作都是基于这张图来完成的
我们可以看到
在这张图里面有两个组合逻辑电路
有一个D触发器
如果它分开以后
变成不管是什么类型的时序逻辑电路
它一定是有两个组合逻辑电路
加上一个或者是一堆D触发器来完成的
所以换句话说
我们的时序逻辑电路设计
就变成是你要设计两个组合逻辑电路
以及设计一个D触发器
然后把它们连接起来就可以了
D触发器不需要我们再去设计了
D触发器原来是什么样子就是什么样子
所以
时序逻辑电路设计
就转换成了设计一个组合逻辑电路
然后
把它用这张图给连接起来
就完成了时序逻辑的电路设计
说的有一点点绕口
所以就是说
我们的这种新的方法学
如果是基于这张图或者是这种架构
我们的时序逻辑电路
实际上就是一个组合逻辑电路的设计
我们要把时序逻辑电路设计的需求
转变成这样两个组合逻辑电路
然后把电路描述出来就可以了
我们来看一下
最终时序逻辑电路设计变成一个什么设计流程
前面的① ②还是跟最初的是一样的
确定好输入输出信号
确定好什么是状态
几个状态以及它们之间怎么转移
这都是我们设计人员要做的工作
这些事情做好了以后
第三步我们说是画出电路示意图
这个示意图就是刚才所说的这张图
不管是什么类型的时序逻辑电路
我们画的都是这张图
然后
我们所描述的
这张图里边的组合逻辑电路1
或者叫状态计算逻辑以及组合逻辑电路2
或者叫输出计算逻辑
把它们俩的内容用代码描述出来
这两部分跟我们前面
所说的组合逻辑电路设计是完全一样的
对应到的时序电路的代码就是下面这段代码
在描述的时候
根据不同人的设计风格
可能实际上会有多种描述方式
我们后面在讲
真正的电路设计的时候会详细的去说
这里面
我们可以看到红色部分的代码
红色圆圈里面的代码描述的是D触发器
大家也可以看到
D触发器的描述好像非常的简单
这段代码非常的直观
在时钟的上升沿的时候
把next state送给current state
这样就描述了D触发器
然后
另外一个框里面描述的组合逻辑电路
这里面和前面组合逻辑电路
设计描述的手段是完全一样的
最后我们再看一下按照新的设计方法学以后
我们的设计方法变成了什么呢
时序逻辑电路设计方法
第一步
确定输入输出信号
第二步确定状态机
简单的说就是确定状态机
这就是我们的设计思路或者设计构思
然后
第三步 第四步是画电路结构图
根据刚才所说的大家已经知道了
将来不管你的电路是什么样子
你的电路结构图都是两个组合逻辑电路
加上D触发器这张图
所以
我经常会让我学生画上几十遍 几百遍
做一次电路就画一遍
我的想法就是
当你学完这门课之后
刚才这张图你会画上几十遍 上百遍
所以
即使一年后 十年后
我想这张图你也不会忘掉的
最后是写代码
这也是一个机械的工作
所以
作为我们设计人员而言
我们的工作量
从原来的(工作量)
大家回想一下
传统设计方法的工作量
现在就缩减到了
只要去完成前面的状态转移图的设计
我们的思路全部放在这个地方
从设计的角度来说
有些同学在选我这门课之前
可能自己或多或少都接触过硬件描述语言
大家回想一下
按照我们的方法回想一下
我在这里面
虽然我们后面会去讲怎么用硬件描述语言
去实现第三步和第四步
但是
我在这里面又要贬低硬件描述语言
真正的设计工程师
你的工作是体现在第一步和第二步
只有刚刚入行的工程师
才会去做第三步和第四步
将来你到公司里边成为一个项目经理
或者成为一个公司的主要技术负责人
你干的工作永远是第一步 第二步
甚至在第一步第二步之前的
第零步产品的需求定义
这是一个高层次设计人员所做的事情
只有公司的蓝领工作人员
甚至刚刚入行的新手才会去做
第三步和第四步
所以
有时候我拿到一个工程师或者一个学生简历
说我能够熟练使用硬件描述语言
或者说我熟悉硬件描述语言
等你懂了真正设计方法以后
你会发现这句话你都不好意思写上去
当然
真正做事情之前
我们不但要抬头看天
我们还得低头看路,要埋头做事
我们这些基础的东西还是必须学会的
除了前面的一 二 三 四这四步之后
我们还要做一件事情
还差最后的真正的一件事情
前面是我们设计人员所干的事
计算机还没开始干活呢
所以
我们最后还要把我们所写完的代码送给EDA软件
EDA软件会自动的帮我们
把最终电路产生出来
产生出类似的电路
对于复杂电路来说
我们看具体电路图已经没有任何意义了
因为这张图上可能什么都看不出来
所以一般来说
看这张图只是有一个工程上的意义
觉得你看到电路了
实际上没有什么太大意义
最后小结一下我们在这一节里面所讲的内容
我们一开始先回顾了
数字系统实现的时候都有哪三种手段
另外
总结了数字电路的两种分类
组合逻辑电路和时序逻辑电路
以及针对这两种电路
我们都应该采用
什么样的流程去完成它们的设计
-软件下载说明
-a) 集成电路的应用及市场
-a) 集成电路的应用及市场--作业
-b)集成电路的制造过程
-b)集成电路的制造过程--作业
-c)从CPU的发展看IC的进展
-c)从CPU的发展看IC的进展--作业
-d)从行业的发展看IC的进展
--Video
-d)从行业的发展看IC的进展--作业
-e)从ISSCC看IC的发展方向
--讲课视频
-e)从ISSCC看IC的发展方向--作业
-a)数字系统的实现方法 (ASSP/FPGA/ASIC的对比)
--讲课视频
-a)数字系统的实现方法 (ASSP/FPGA/ASIC的对比)
-b)组合逻辑电路
--Video
-2、数字集成电路设计方法--b)组合逻辑电路
-c)时序逻辑电路(1)
-d)时序逻辑电路(2)
-2、数字集成电路设计方法--d)时序逻辑电路(2)
-a)Verilog的历史和学习要点
--讲课视频
-b)端口、信号及数据类型
--讲课视频
-b)端口、信号及数据类型--作业
-c)逻辑电平及数据操作
--讲课视频
-3、Verilog语法--c)逻辑电平及数据操作
-d)Assign 语句
-e)Assign 举例
-f)Always
-f)Always--作业
-g)阻塞与非阻塞赋值
--Video
-3、Verilog语法--g)阻塞与非阻塞赋值
-h)D触发器的描述
--Video
-i)时序电路的设计
--Video
-i)时序电路的设计--作业
-j) 面向测试的Verilog语法(1)
-k) 面向测试的Verilog语法(2)
-k) 面向测试的Verilog语法(2)--作业
-a)电路设计实例1
--Video
-b)电路设计实例2
--讲课视频
-b)电路设计实例2--作业
-c)电路设计实例3
--讲课视频
-Modelsim仿真
-a)综合及相关基本概念
--Video
-a)综合及相关基本概念--作业
-b)综合及优化
--Video
-c)门级仿真
--门级仿真
-d)Quartus综合及分析(1)
--讲课视频
-e)Quartus综合及分析(2)
--讲课视频
-e)Quartus综合及分析(2)--作业
-f)Quartus综合及分析(3)
--Video
-g)Quartus综合及分析(4)
--Video
-g)Quartus综合及分析(4)--作业