简介
虽然组合逻辑电路能够很好地处理像加、减等这样的操作,但是要单独使用组合逻辑电路,使操作按照一定的顺序执行,需要串联起许多组合逻辑电路,而要通过硬件实现这种电路代价是很大的,并且灵活性也很差。为了实现一种有效而且灵活的操作序列,我们需要构造一种能够存储各种操作之间的信息的电路,我们称这种电路为时序电路。
组合电路和存储元件互联后组成了时序电路。存储元件是能够存储二进制信息的电路。存储元件在某一时刻存储的二进制信息定义为该时刻存储元件的状态。时序电路通过其输入端从周围接受二进制信息。时序电路的输入以及存储元件的当前状态共同决定了时序电路输出的二进制数据,同时它们也确定了存储元件的下一个状态。时序电路的输出不仅仅是输入的函数,而且也是存储元件的当前状态的函数。存储元件的下一个状态也是输入以及当前状态的函数。因此,时序电路可以由输入、内部状态和输出构成的时间序列完全确定。
逻辑设计领域主要有两种类型的时序电路,它们分类的标准取决于我们观察到的输入信息的时机和内部状态改变的时机。同步时序电路1(synchronous sequential circuit)的行为可以根据其在离散的时间点上的信号信息来定义。而2异步时序电路(asynchronous sequential circuit)的行为则取决于任意时刻的输入信号以及输入信号在连续的时间内变化的顺序。
时序电路的特点是:输出不仅取决于当时的输入值,而且还与电路过去的状态有关。它类似于含储能元件的电感或电容的电路,如触发器、锁存器、计数器、移位寄存器、存储器等电路都是时序电路的典型器件,时序逻辑电路的状态是由存储电路来记忆和表示的。
分析时序电路的行为是由输入、输出和电路当前状态决定的。输出和下一状态是输入和当前状态的函数。通过对时序电路进行分析,可以得到关于输入、输出和状态三者的时序的一个合理描述。
如果一个电路包含这样的触发器,该触发器的时钟输入是直接驱动或者有一个时钟信号间接驱动的,同时这个电路在正常执行时不需加载直接置位和间接置位,那么我们就称这个电路为同步时序电路。触发器可以是任何类型的,逻辑图可以包括也可以不包括组合逻辑。
输入方程时序电路的逻辑图通常包括触发器和组合门。我们所使用地触发器类型和组合电路的一系列布尔函数为我们提供了绘制时序电路逻辑图所需要的全部信息。在组合逻辑电路中,触发器输入信号的产生,可以用一系列的布尔函数描述,我们称这些布尔函数为触发器的输入方程(flip-flop input equation)。在这里,我们同样将采用传统的表示方法,使用触发器的输入符号作为触发器输入方程中的变量,使用触发器的输出符号作为变量下标。在组合电路中,触发器的输入方程是一系列3布尔表达式,下表变量是组合电路的输出符号。因为在电路中触发器的输出端始终与输入端相连,所以命名为“触发器的输入方程”。
触发器输入方程为指定时序电路的逻辑图提供了一种间接的代数表达方法。这些方程的字母符号隐含了所用的触发器的类型,同时完全确定了驱动触发器的组合逻辑电路。时间变量在触发器输入方程中没有指明,但是已经暗含在触发器C输入端的时钟之中。
状态表时序电路的输入、输出和触发器的状态之间的函数关系可以用状态表(state table)列举出来。状态表包括四个部分,分别标记为当前状态(present state)、输入(input)、下一状态(next state)和输出(output)。当前状态表示触发器A和B在任意给定时刻t的状态。输入部分表示在每个可能的当前状态下的输入X值。注意,对于每种可能的输入组合,每个当前状态都不断重复出现。下一状态表示触发器在一个时钟周期后的状态,即t+1时刻的状态。输出部分表示t时刻在给定的当前状态和输入组合下输出Y值。
由此推导出的状态表包括了所有可能的当前状态和输入信号的二进制组合。
状态图状态表中的有用信息可以通过状态图以图形化的方式表现出来。在状态图中,状态用圆圈表示,状态之间的转换用连接这些圆圈的有向线段表示。状态图是通过状态表直接得到的,与状态表提供了相同的信息。每个圆圈内的二进制数值定义了触发器的一个状态。在米粒型电路中,状态转换的有向线段上都标记了两个二进制数值,它们之间用斜线隔开,斜线前面的数值表示当前状态的输入,斜线后面的数值表示当前状态和给定述如下的输出。一个连接到自身圆圈的有向线段意味着没有发生状态转换。穆尔型电路在状态转换的有向线段上没有斜线,取而代之的是,输出是在圆圈中状态值下的斜线下表示出来的。在状态图中,每个状态的转换有两个输入条件,用都点分开。当有两个输入变量时,每个状态可能要有四个有向线段从响应的状态图中发出,这要依赖于状态的数量和每个输入组合的下一个状态。
除了表示方式不同,状态表和状态图是没有区别的。状态表易于从给定的逻辑图和输入方程中得出,而状态图可以直接从状态表中得出。状态图给出了状态的图形化表示,更便于我们理解电路的操作过程。
时序电路的设计钟控时序逻辑电路的设计从一组规格说明书开始,继而得到逻辑图或一系列布尔函数,再从中生成逻辑图。时序电路和组合电路的不同之处在于,组合电路定义完全由真值表定义,而时序逻辑电路需要用状态表定义。所以,时序电路设计的第一步就是得到状态,或和状态具有相同信息表达能力的其它逻辑表示形式,如状态图等。
同步时序电路是由触发器和组合门组成的。电路设计包括选择触发器和设计组合逻辑结构,保证这个组合逻辑结构和触发器组成的电路可以实现状态规格说明书中的预期目标。所需触发器的最小个数是由电路状态的个数决定的;n个触发器可以表示2^n个二进制状态。组合电路是通过计算触发器的输入方程和输出方程从状态表中得到的。实际上,一旦触发器的类型和数量确定或,设计步骤就由对一个时序电路的设计转换为一个组合电路的设计。用这种方法,就可以使用组合电路设计技术。
设计步骤下面提到的时序电路的设计步骤与组合电路类似,但还需要一些额外的步骤。
1.规格说明书:如果没有,先写出电路的规格说明书。
2.系统描述:从问题的陈述中得出状态图或状态表。
3.状态赋值:如果通过步骤1中只能得到状态图,则在从状态图中得到状态表。并未状态表中的每个状态赋二进制代码。
4.得到触发器的输入方程:选择一种或多种类型的触发器,通过已经编码的状态表中的下一状态得到触发器的状态方程。
5.得到输出方程:通过状态表中的输出信号栏得到输出方程。
6.优化:优化触发器的输入方程和输出方程。
7.工艺映射:画出电路由触发器、与门、或门和反向器所组成的逻辑图。将这个逻辑图转换为由有效的触发器和门工艺组成的新的逻辑图。
8.验证:验证最终设计的正确性。
为了方便起见,我们一般都省略步骤7即工艺映射,而在示意图中仅使用触发器、与门、或门和反向器。