时序逻辑电路的工作特点是任意时刻的输出状态不仅与当前的输入信号有关而且与此前电路的状态的电路。即具有记忆功能
锁存器和触发器是构成时序逻辑电路的基本逻辑单元
电路内部存在且只存在两种可以长期保持的稳定状态,称这种电路为「双稳态电路」。双稳态电路在外部作用下,可从一个稳态变化到另一稳态。显然,双稳态电路具有记忆 1 位二进制数据的功能。
如图所示电路由两个非门组成,只存在两种稳态,且可以互相转换,这就是最简单的双稳态电路。
对于双稳态电路组成的电路,我们称当前的稳态为「现态」,用
在当前状态基础上,外界信号输入之后的状态称为「次态」,用
时序逻辑电路的次态不仅取决于输入信号,也取决于现态。因此可以用方程式来表示次态,如
类似真值表,可以用表格描述次态与现态和输入信号的关系,如下表为 RS 锁存器的功能表
0 | 1 | 0 | 0 |
1 | 1 | 0 | 0 |
根据双稳态电路的原理,可以设计出专门用于存储信号的电路单元,即锁存器和触发器。根据改变稳态的输入类型,可以分为锁存器和触发器。
对脉冲电平敏感的存储单元电路称为「锁存器」(Latch),它可以在特定输入脉冲电平作用下改变状态
常用的锁存器有 SR 锁存器和 D 锁存器
在实际的数字系统中往往包含大量的存储单元,而且经常要求他们在同一时刻同步动作,为达到这个目的,在每个存储单元电路上引入一个时钟脉冲(CLK)作为控制信号,只有当CLK到来时电路才被“触发”而动作,并根据输入信号改变输出状态。
在时钟信号触发时才能动作的存储单元电路称为「触发器」
SR 锁存器是最基本的锁存器之一,由两个或非门组成,如图
SR 锁存器有两个互补的输出端
SR 锁存器的次态方程式可以表示为
当
0 | 0 | 0 | 0 |
1 | 0 | 0 | 1 |
此时输入为无效信号,状态保持。
当
0 | 1 | 0 | 0 |
1 | 1 | 0 | 0 |
此时
当
0 | 0 | 1 | 1 |
1 | 0 | 1 | 1 |
此时
当
0 | 0 | 1 | ? |
1 | 0 | 1 | ? |
RS 锁存器的功能表还可以表示为
0 | 0 | Q |
1 | 0 | 0 |
0 | 1 | 1 |
1 | 1 | ? |
实际的输入输出信号不是瞬间完成变化的,而是存在一段时间来上升和下降。将各输入输出信号的电平以时间轴画出的图叫做「定时图」,描述了各输入信号与输出响应信号之间的时间关系。SR 锁存器的定时器如下图。
当刚开始
输入信号的脉冲宽度必须要达到某一个值
机械开关闭合时,
利用 SR 锁存器的性质,设计如下电路
当开关由 A 到 B,
若发生振动,即没有牢牢贴在 B 端,此时两输入端均接高电平,
上面的基本
实际应用中,要求锁存器按照一定的时间节拍动作,输入信号收到使能信号
此时使能信号
对上一张提到的 SR 锁存器稍作修改,另
由于
D 锁存器的逻辑符号表示为
其中
0 | 0 | Q |
0 | 1 | Q |
1 | 0 | 0 |
1 | 1 | 1 |
74HC/HCT373 八 D 锁存器
核心电路是 8 个 D 锁存器。74HC373 的内部逻辑图可以表示为
向下的小三角形表示还省略了数个类似的模块。其中
0 | 1 | 1 | 1 |
0 | 1 | 0 | 0 |
0 | 0 | X | |
1 | X | X | Z |
类似于 SR 锁存器,实际的输入输出信号不是瞬间完成变化的,而是存在一段时间来上升和下降。D 锁存器的动态特性图可以表示为
建立时间
保持时间
脉冲宽度
传输延迟时间
若时序不满足要求,在实际电路中的电路状态可能陷入不确定
共同点: 具有 0 和 1 的两个稳定状态,一个锁存器或触发器能保存一位码
不同点:
触发器与锁存器不同的是,触发器有一个输入端用于接受时钟信号
触发器有三种典型结构:主从触发器、维持阻塞触发器和利用传输延迟触发器。课内只要求掌握主从结构触发器
主从触发器由两个锁存器组成,分别称为主锁存器和从锁存器,如下图
主从锁存器有一个输入端
D 触发器特性方程可以表示为:
状态变化发生在时钟有效沿到来之后,次态取决于时钟有效沿之前的激励信号
先介绍一个概念「异步信号」。异步信号表示跟时钟脉冲不同步的信号。在有时钟控制的数字电路中,异步信号独立于时钟脉冲,对电路发挥某种功能。一般情况下,异步信号的优先级大于时钟信号。
74HC74 为双 D 触发器,包含两个相互的 D 触发器,
类似于锁存器,实际的输入输出信号不是瞬间完成变化的,而是存在一段时间来上升和下降。D 触发器的动态特性图可以表示为
描述触发器的现态与现态、输入信号之间的逻辑关系叫做「逻辑功能」。触发器的次态不仅与输入信号有关,而且与状态有关。
触发器逻辑功能可以通过表述方式:
等方式来进行描述
按照触发器逻辑功能,通常分为
逻辑符号为
功能 | ||
---|---|---|
0 | 0 | 置0 |
1 | 1 | 置1 |
Q | D | |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 0 |
1 | 1 | 1 |
功能 | ||
---|---|---|
0 | Q | 保持 |
1 | 翻转 |
Q | T | |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
不允许
设
S | R | 功能 | |
---|---|---|---|
0 | 0 | Q | 保持 |
0 | 1 | 0 | 置零 |
1 | 0 | 1 | 置1 |
1 | 1 | d | 不定 |
Q | S | R | |
---|---|---|---|
0 | 0 | 0 | 0 |
0 | 0 | 1 | 0 |
0 | 1 | 0 | 1 |
0 | 1 | 1 | d |
0 | 0 | 0 | 1 |
0 | 0 | 1 | 0 |
0 | 1 | 0 | 1 |
0 | 1 | 1 | d |
其中约束方程为
J和K同时有效时,状态翻转
设
J | K | 功能 | |
---|---|---|---|
0 | 0 | Q | 保持 |
0 | 1 | 0 | 置零 |
1 | 0 | 1 | 置1 |
1 | 1 | 翻转 |
Q | J | K | |
---|---|---|---|
0 | 0 | 0 | 0 |
0 | 0 | 1 | 0 |
0 | 1 | 0 | 1 |
0 | 1 | 1 | q |
0 | 0 | 0 | 1 |
0 | 0 | 1 | 0 |
0 | 1 | 0 | 1 |
0 | 1 | 1 | 0 |
已有 D 触发器(原触发器),实现 T(新触发器)功能
采用特性方程联立法
比较得
因此可以用同或门或异或门来实现
已有 D 触发器(原触发器),实现 T'(新触发器)功能
采用特性方程联立法
比较得
只需要将反相输出端作为输入端即可
always @(敏感事件表)
begin
定义过程快内的局部变量
过程赋值语句
end
always @(EN,_CR)
EN 或 _CR 电平变化事件发生时,电路一贯的行为过程
always @(posedge CP,negedge _CR)
CP 的上升沿或 _CR 的下降沿到来事件发生时,电路一贯的行为过程
有序赋值时,必须按照顺序从上而下赋值,
不同的赋值方式得到不同的电路,如使用阻塞赋值时
always @(posedge clk)
begin
x = d;
y = ~x; // 实际语义为 x = d; y = ~d;
end
得到的电路为
而若采用非阻塞赋值
always @(posedge clk)
begin
x <= d;
y <= ~x;
end
得到的电路为
module D_latch(output reg Q, input D, E); // D 锁存器
always @(E or D)
if (E) Q <= D;
end module
module DFF(output reg Q, input D, CP) // D 触发器
always @(posedge CP);
Q <= D;
endmodule