引言
- 如果由n个触发器构成memory device,就有2的n次方个状态,这章开始就开始关注电路有多少种状态,有限状态机是一个主要的描述。方程体现在一个状态到另一个状态的跳变。
- 时序电路和组合电路的本质区别:引入了触发器,可以对电路的状态有所存储,所以能处理的问题就会复杂很多
- 对应第四章,将分析方法,设计方法,借鉴经典设计
概述
特点
- 功能上:任意时刻的输入不仅取决于该时刻的输入,还与电路原来的状态有关
例:串行加法器,两个多位数从低位到高位逐位相加 除了之前说的问题,对于有效工作时间来说,S0的有效工作时间是第一个传输延迟,S1是第二个,以此类推,这没有物尽其用,而且每一次运算的功能都一样
对模型进行修改: 这个模型可以用作n位全加。 优点:简答,而且可以做n位全加 缺点:慢,每个周期一定长于传输延迟加上这个时间;刚刚的组合电路的输入输出都是并行数据,而现在是串行的(要求有一堆锁存器,把每次的结果依位存放好)
- 电路结构上:
(1)包含存储电路和组合电路 (2)存储器状态和输入变量共同决定输出
时序电路的一般结构形式与功能描述方法
可以用三个方程组来描述: 其中(6.1.1)为输出方程 Y = F(X,Q),(6.1.2)为驱动方程 Y = F(X,Q),(6.1.3)为状态方程 Q* = H(Z,Q)
- 组合电路完成两件事:驱动方程和输出方程
- 算完输出之后回给到存储电路当中,把结果代入存储电路触发器的方程得到状态方程
时序电路分类
-
同步时序电路与异步时序电路 (1)同步:存储电路中所有触发器的时钟使用统一的clk,状态变化发生在同一时刻(目前设计的主流,特别是小规模) (2)异步:没有统一的clk,触发器状态的变化有先有后 (3)!同步电路的好处:分析简单,运算规律好,变化发生在同一时刻 (4)!!!同步电路的坏处:如果电路的所有变化都发生在同一时刻,而CMOS的主要功耗都在变化的时刻,这时就会发生一个现象。这个电路本身静态功耗很低,但是由于采用了大同步,所有芯片内部的管子都是同一时刻翻转,那么尖峰电流就会特别大,对电源的动态供给有要求,对散热也有要求(工作频率高了之后),如果采用异步电路,尖峰就会下来。 (5)!!!因此,当我们现在超大规模系统设计的时候,不会采用唯一的时钟信号,会使小的局部是同步的,大的协调会错开工作频率。也就是引用同一个模块采用同步,模块之间协调采用异步。 -
Mealy型和Moore型(从功能分类) (1)Mealy型:Y = F(X,Q) 与X,Q有关(与输入也有关) (2)Moore型:Y = F(Q) 仅取决于电路状态 (3)在区分这两种类型时,关注的是时序电路的输出 (4)区别在于输出是否和时钟同步,而不是整个电路是否有输入
时序电路的分析方法
同步时序电路的分析方法
例:
- K1这个地方是高电平,1.4V,由于被钳位了,具体可以去看第三章。
状态转换表
- 有了状态方程和输出方程,如果需要画状态转换图,这时候和驱动方程就没关系了
- 驱动方程和特性方式结合在一起得到状态方程后就不再使用了
- Q1,Q2,Q3是输入,Q1,Q2,Q*3和Y是输出
- 直接代入两个发生就等得到结果
- 如果初态是000,时钟脉冲到了之后,电路一定发生翻转,当翻到001时,这个001就作为下一个初态了,以此类推
- 有一个问题:当现态时110时,代入出来的次态时000,又重新返回第一行了,这就造成了表的值不全,我们需要把8种排列组合都写入表中,因为电路上电之后状态不定(除非用异步置位),如果一开始就是111,那么我上电之后,又到了000(代入状态表中计算得到),就又回到那7个的循环里了,这样的设计是好的
- 但是如果上电是111,下一个翻转完还是111,那么电路就锁死了
- 在设计的时候输入所有可能的状态的2的n次方,但是你用到的一定是小于等于这个值,当小于的时候,一定要都考虑一下,因为剩余的状态有可能是你这个系统的陷阱,可能会造成上电之后系统不工作,或者意外进入这些状态就死机了,不能进入有效循环
我们将状态表简化:
状态转换图
把上面的表用状态图的形式表达一下
-
在图的旁边一定要标出中间的顺序(Q3Q2Q1) -
状态转换之间表达的是变换的条件,这个条件会是因为输入的取值和时钟脉冲的到达 -
如果是Moore电路,我们建议把输出放在状态里面 -
好处:明确了电路现态决定输出,知道要代入哪个值;Mealy电路是因为两个共同作用 -
!主循环圈:时序电路的设计一定是转圈的,如果不转一定死在哪个状态,一定是考虑了现实物理背景之间有限状态的转换 -
!无效态:如果把有用的状态称为主循环圈,那没有用到的状态就称为无效态 -
!自启动:如果在电路上电后,在时钟触发和输入的配合下,可以从无效进入到有效循环,就叫这个电路是可以自启动的电路 -
在设计的时候尽量让无效态回到初态
(回顾)在现在的场景下看触发器的动态特性(四个时间)
- !!时序电路的起点都在clk的触发沿,也就是说无论是传输延迟时间还是建立保持时间,时间的起点,在电路中变量的变化,在电路中都以这个沿为准。
- !!对于边沿触发,主从或者电平也存在一个沿他要锁存
- !!Tcd和Tpd仍然和组合电路一样,Tpd仍然描述的是有效到有效,Tcd仍然描述的是无效到无效。需要注意,Tpd是触发沿到达之后Q要经过多长时间到达一个新的值,而变成一个新的什么值要取决于数据端,在时间参数上衡量的是触发边沿和Q之间的关系,依据什么特点来变就是依据的方程。Tcd代表的是即便触发沿到达了,Q*还会保留原来的值保留多长时间。
- !!在时序电路当中信号分为两部分,一部分是信号流过电路之后留下的痕迹(时间上),还有一部分是如果你希望你的电路能稳定地按照状态方程进行变化的话,那就要求你的数据和你的触发信号之间还存在一个时间关系。
- !!也就是Tsetup和Thold是,它实际上是触发器这一类型电路对数据和触发信号之间提出的要求,提出的要求是一个配合,数据信号和触发信号存在一个早来晚走的关系。数据信号要早于触发信号到,晚于触发信号撤。换句话讲,应该在一个稳定的数据信号中间进行触发。
- !!这四个时间到底长短是多少其实是由生产之后的实验测量值决定。我们关注的是当你在用这类器件的时候,它存在这么一个延迟(Tcd和Tpd),我们还应该关注当我们用这些器件的时候,数据和触发端应该存在这样的配合(Tsetup和Thold)。如果满足不了,我们只能用电路本身具有的Tcd和Tpd,人为的延长某些时间
(举例)分析下面的逻辑电路
-
首先,这是一个同步电路 -
这是一个Mealy型的电路 -
写出触发方程(D触发器) -
输出方程 -
状态方程
- 状态表(根据输出方程和状态方程)
- 状态方程和输出方程只有3个变量:A,Q1,Q2
- Q1,Q2,Y作为我最后的输出
- 类似于三张卡诺图叠在一起(一个卡诺图是一个方程,这里是三个方程)
- 状态转换图
- 能自启动(所有状态都用全了,都没有无效态,所以肯定能自启动)
- 这个电路是一个两位的二进制的可逆计数器
异步时序电路的分析方法
举例分析(触发器和门电路都是TTL电路)
- 各个触发器的时钟都不一样
- 因为是TTL电路,J,K悬空就是恒等于1,所以FF0可以看成是一个T触发器,只要是来时钟,电平就在翻,新生成了一个时钟给到FF1,所以FF1的翻转频率一定是FF0的两倍;FF1的K恒等于1,J等于Q’3
- 写驱动方程
- 写状态方程
- JK触发器:Q* = JQ’ + K’Q,因为K都是1,所以后面那项就没了
- 乘clk是指只有在各个clk到达的时候才会有对应的状态方程发生
- 但是这也产生了一个问题,乘clk会使变量取值方式发生变化。逻辑代数所有的都只有变量,变量是一个电平值,如果clk取1,描述的是一个瞬间,是一个下降沿
- 所以最好还是一步一步往下推,没有简单的办法
- 在实际中,最后是通过测试来得到
|