2.4 锁存器
组合逻辑不能直接作为存储器件来保存处理器中的寄存器等数字功能所需要的数据。通过将数据从一个门的输出反馈到其输入,可以使用逻辑门构建数据存储器件。
锁存器是由逻辑门构成的一位存储器件,图2.10显示了一种名为置位-复位(Set-Reset,SR)锁存器的简单锁存器,在该电路中,提供存储器的功能是从与门的输出到或门的输入的反馈。
根据输入S和R,电路可以将输出Q置位为高或复位为低,也可以使输出Q保持之前的值。在保持状态下,S和R均为低,并且保持输出Q的状态。S的高脉冲(从低到高,然后再回到低)会导致输出Q变高并保持在该电平。R的高脉冲会导致输出Q变低并保持在该电平。如果S和R都被置位为高,则R输入将覆盖S输入,并强制Q为低。
图2.10 SR锁存器电路
SR锁存器的真值表如表2.6所示。输出Qprev表示在当前S和R输入信号之前的最新Q值。
表2.6 SR锁存器的真值表
需要注意的是,该锁存器电路及一般的易失性存储器件在上电时Q输出的初始状态没有被很好地定义。电路启动行为和Q的结果值取决于各个门的特性和启动时的时序。上电后,在此电路开始工作之前,需要使用S或R脉冲将Q设置为某种已知状态。
门控D锁存器(D代表数据)在数字电路中有许多用途。术语门控是指使用一个额外的输入来启用或禁止数据通过电路。图2.11显示了门控D锁存器的实现,其真值表如表2.7所示。
图2.11 门控D锁存器电路
当E使能输入为高电平时,输入D的值通过Q输出。当E为低电平时,无论D输入的状态如何,Q输出都保持先前的值。Q输出始终保持Q输出的反相(Q上的水平线表示非)。
表2.7 门控D锁存器的真值表
有必要通过逻辑流来理解该电路的运行情况。图2.11的左半部分由输入D、非门和最左边的两个与非门组成,是一个组合逻辑电路,这意味着其输出始终是输入的直接函数。
首先,考虑输入E为低电平的情况,此时,左侧两个与非门各有一个输入为低电平,这会强制两个门的输出均为1(参见表2.2的与门真值表,注意,与非门相当于与门后跟一个非门)。在这种状态下,输入D的值无关紧要,并且Q和Q必有一个高电平和一个低电平,其原因是反馈到门输入的两个最右边与门的输出是交叉连接的。只要E为低,这种状态就会一直保持。
当E为高时,根据D的状态,最左边的两个与非门中,其中一个的输出将是低电平,而另一个的输出将是高电平。输出低电平的与非门将把与其连接的最右边的与非门的输出驱动为高电平。该输出被反馈到另一个右侧与非门的输入,并且在两个输入均为高的情况下将产生低电平输出。其结果是,将输入D传播到输出Q,并且D的反相传播到输出Q处。
Q和Q不能同时为高或低,否则将表示最右边两个与非门的输出和输入之间存在冲突。如果这些条件中的一个碰巧短暂出现,例如,在上电期间,电路将自动调整到稳定的状态,其中Q和Q依然保持相反的状态。与SR锁存器一样,该自动调整的结果不可预测,因此在使用门控D锁存器进行任何操作之前,将其初始化为已知状态非常重要。初始化的过程是将E设置为高电平,将D设置为Q所需的初始输出值,然后将E设置为低电平。
前面描述的门控D锁存器是电平敏感器件,这意味着只要输入E保持高电平,输出Q就会随着输入D的改变而改变。在更复杂的数字电路中,让串联的多个电路元件实现同步,而无须考虑各个器件各自的传播延迟很重要。使用时钟信号作为多个元件的输入能够实现这种类型的同步。在共享的时钟配置中,组件根据时钟信号边沿(边沿是指从低到高或从高到低的转变时刻)更新其输出,而不是直接根据输入信号的电平值来确定。
因为时钟信号的跳变时刻非常精确,且此时器件的输入信号必须是稳定的,所以边沿触发非常有用。时钟边沿过后,器件的输入可以自由变化,为下一个有效时钟边沿做准备,在此期间其输出不会改变。下面要讨论的触发器电路在时钟边沿工作,该特性适用于复杂的数字设计。