【学习笔记】5、锁存器和触发器

  • 组合逻辑电路 = 逻辑运算电路 + 算术运算电路
  • 时序逻辑电路 = 组合逻辑电路 + 存储电路
    本章重点是学习“存储电路

5.1 双稳态存储单元电路

5.1.1 双稳态的概念

  • 两种稳态,稳态0和稳态1
  • 改变状态,需要施加足够的能量,才可以从一个稳态切换到另一个稳态。

5.1.2 双稳态存储单元电路

1. 电路结构

  • 最基础的双稳态电路:两个“非门”,交叉耦合。
    在这里插入图片描述

2. 逻辑状态分析

  • 对上述进行变形,更有助于理解。
  • 电路只存在这两种可以长期保存的稳定状态。
  • 定义:Q=0,为电路的0状态,Q=1,为电路的1状态。
  • 电源刚接通后,无控制信号输入,随机进入一种状态,并长期保持不变。
    在这里插入图片描述
  • 电路具有存储记忆1位二进制数据的功能。

3. 模拟特性分析

  • 两个非门的传输特性
  • 电路运行的细节。
  • 第3平衡点,介稳态。在0和1之间,满足两个非门的特性。但实际会有噪声的存在,介稳态难以维持。

5.2 锁存器 “latch”

  • 存储单元电路:锁存器、触发器。
  • 锁存器和触发器的共同特点:具有0和1两种稳定状态,可长期保持。
  • 锁存器:对 脉冲电平敏感 的存储单元电路。
  • 触发器:不同的锁存器构成。对 脉冲边沿敏感 的存储电路。

5.2.1 SR锁存器

1. 基本SR锁存器

  • 基本SR锁存器,使用或非门代替非门。
    在这里插入图片描述

Q = R + Q ‾ ‾ Q = \overline{R+\overline{Q}} Q=R+Q
Q ‾ = S + Q ‾ \overline{Q}=\overline{S+Q} Q=S+Q

S (set)R(reset) Q Q Q Q ‾ \overline{Q} Q锁存器状态
00不变不变保持(之前的稳态)
01010-reset
10101-set
1100锁存器本身处于不确定状态,如果回到S=0,R=0,无法预知锁存器回到状态(0或者1)。
  • 正常工作时,输入信号S和R,应遵守 S R = 0 SR=0 SR=0 的约束条件。
  • 基本SR锁存器:(1)保持(2)置0(3)置1。这些是一个存储单元应具备的最基础的功能。
(1)门级建模
  • 添加 -debugdb ,可以看到原理图。
    在这里插入图片描述
    在这里插入图片描述
module SR_Latch(S,R,Q,Qnot);
    input S,R;
    output Q,Qnot;
    nor(Q   ,R,Qnot);
    nor(Qnot,S,Q   );
endmodule

module SR_Latch_TB;
    reg S,R;
    wire Q,Qnot;
    SR_Latch fun(S,R,Q,Qnot);
    initial
        begin
            S=0;R=0;
        #50 S=1;R=0;
        #50 S=0;R=0;

        #50 S=0;R=1;
        #50 S=0;R=0;
        
        #50 S=1;R=0;
        #50 S=0;R=0;
        
        #50 $stop;  
        end
endmodule

在这里插入图片描述

(2)开关级建模
  • 使用nmos管的或非门,搭建SR锁存器。

  • 更简单的结构
    在这里插入图片描述

  • 根据《【学习笔记】3、逻辑门电路》3.1.9中,NMOS或非门的verilog实现,我们知道,仿真时,需要将负载管替换为上拉电阻,使用tri1定义线网Q和 Q ‾ \overline{Q} Q的类型。否则在或非门输出应输出高电平时,实际输出的是高阻,会导致逻辑错误。

  • 如下所示,错误时。
    在这里插入图片描述

  • 使用三态线网tri1,定义 Q 、 Q ‾ Q、\overline{Q} QQ,取代nmos负载管。
    在这里插入图片描述

  • verilog建模

module CMOS_SR_Latch(S,R,Q,Qnot);
    input S,R;
    output Q,Qnot;
    supply1 VDD;
    supply0 GND;

    tri1 Q,Qnot;
  //  wire Q,Qnot;
    //T1 T4
//    nmos(VDD,Q   ,VDD);
//    nmos(VDD,Qnot,VDD);
    
    //T2 T5
    nmos(Q,GND,Qnot);
    nmos(Qnot,GND,Q);
    //T3 T6
    nmos(Q,GND,R);
    nmos(Qnot,GND,S);
endmodule
  • 激励信号

module CMOS_SR_Latch_TB;

    reg S,R;
    wire Q,Qnot;

    CMOS_SR_Latch fun(S,R,Q,Qnot);

    initial
        begin
            S=0;R=0;
        #50 S=1;R=0;
        #50 S=0;R=0;

        #50 S=0;R=1;
        #50 S=0;R=0;

        #50 S=1;R=0;
        #50 S=0;R=0;
        
        #50 $stop;  
        end

endmodule

(3) S ‾ ⋅ R ‾ 锁存器 \overline{S}·\overline{R}锁存器 SR锁存器
  • 对与非门,做简单变形。暂不定X、Y哪个是置位,哪个是复位。
    在这里插入图片描述

  • 列出真值表

S ‾ \overline{S} S (set) R ‾ \overline{R} R(reset) Q Q Q Q ‾ \overline{Q} Q锁存器状态
11不变不变保持(之前的稳态)
10010-reset
01101-set
0011锁存器本身处于不确定状态,如果回到S=1,R=1,无法预知锁存器回到状态(0或者1)。
  • 约束: S ‾ + R ‾ = 1 ,同样 S ⋅ R = 0 。 \overline{S}+\overline{R}=1,同样 S·R=0。 S+R=1,同样SR=0
(4) S ‾ ⋅ R ‾ 锁存器 \overline{S}·\overline{R}锁存器 SR锁存器应用于去抖电路
  • 利用抖动的时候, S ‾ = 1 , R ‾ = 1 , Q 和 Q ‾ 不变 \overline{S}=1,\overline{R}=1,Q和\overline{Q}不变 S=1,R=1QQ不变,实现去抖动的目标。
    在这里插入图片描述

2. 逻辑门控 SR锁存器

  • 对SR锁存器的置位S和复位R控制信号,再加一级逻辑电路。
  • 许多集成锁存器和触发器,都是由逻辑门控SR锁存器构成。
  • 是一个重要的基本逻辑单元电路。
  • SR锁存器和逻辑门控SR锁存器,都有一个缺点,S=1,R=1,锁存器的不确定状态。
    在这里插入图片描述
  • C1表示,控制所有前缀为1的输入信号。
  • 1R表示,前缀为1的reset复位输入信号。
  • 1S表示,前缀为0的set置位输入信号。

5.2.2 D锁存器

1. 逻辑门控D锁存器

  • 消除 逻辑门控SR锁存器 的不确定状态。
  • 使得SR只会出现(0,0)、(0,1)、(1,0)的组合。D锁存器永远不会出现S=1,R=1。

在这里插入图片描述

  • C1表示,控制所有前缀为1的输入信号。
  • 1D表示,前缀为1的数据data。
    在这里插入图片描述

在这里插入图片描述

  • verilog建模,使用连续赋值assign。
module Logic_D_Latch(D,E,Q,Qnot);
    input D,E;
    output Q,Qnot;
    wire S,R,Q4,Q3;
    assign S = D;
    assign R = !S;
    assign Q3 = S&&E;
    assign Q4 = R&&E;
    SR_Latch fun(.S(Q3),.R(Q4),.Q(Q),.Qnot(Qnot));
endmodule
  • 激励信号
module Logic_D_Latch_TB;
    reg E,D;
    wire Q,Qnot;
    Logic_D_Latch fun(D,E,Q,Qnot);
    always #23 D=~D; 
    initial
        begin
            D=0;
            E=0;
        #50 E=1;
        #60 E=0;
        #70 E=1;
        #80 E=0;
        #50 E=1;
        #60 E=0;
        #70 E=1;
        #80 $stop;  
        end
endmodule

2. 传输门控D锁存器

  • 这是一种其他形式的D锁存器。
  • 不建立在 或非门 组成的 SR锁存器 基础上。
  • 而是建立在 非门 组成的 双稳态存储单元电路 的基础上上。

在这里插入图片描述

  • 在 非门 组成的 双稳态存储单元电路 的基础上,增加传输门。 Q 和 Q ‾ Q和\overline{Q} QQ交换了位置。
  • 传输门参考《【学习笔记】3、逻辑门电路》3.7.2 小节。

在这里插入图片描述

  • 当E=1时,使能数据D的写入。此时 Q = D , Q ‾ = D ‾ Q=D,\overline{Q}=\overline{D} Q=D,Q=D
    在这里插入图片描述
  • 当E=0时,电路回到 “双稳态存储单元电路”, Q 和 Q ‾ Q和\overline{Q} QQ保持不变。
  • 在verilog中,cmos和rcmos都是传输门。
    • cmos c1(输出信号,输入信号,Tn管控制信号,Tp管控制信号);
    • cmos(输出信号,输入信号,Tn管控制信号,Tp管控制信号);

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • verilog建模,传输门控D锁存器
module Trans_D_Latch(D,E,Q,Qnot);
    input D,E;
    output Q,Qnot;
    wire Cnot,C,D1;
    assign Cnot=!E;//非门  not n1(Cnot,E);
    assign C=!Cnot;   //非门
    cmos(D1,D,C,Cnot);//传输门
    cmos(D1,Q,Cnot,C);//传输门
    assign Qnot=!D1;//非门
    assign Q=!Qnot;//非门
endmodule
  • 激励信号
module Trans_D_Latch_TB;

    reg E,D;
    wire Q,Qnot;

    Trans_D_Latch fun(D,E,Q,Qnot);

    always #23 D=~D; 

    initial
        begin
            D=0;
            E=0;
        #50 E=1;
        #60 E=0;
        #70 E=1;
        #80 E=0;
        #50 E=1;
        #60 E=0;
        #70 E=1;
        #80 $stop;  
        end
endmodule

3. D锁存器的动态特性

  • D锁存器的定时图。
    • 建立时间
    • 保持时间
    • 脉冲宽度

4. 典型集成电路

  • 74HC/HCT373:中规模、CMOS、8、D锁存器
  • 核心是8个传输门控D锁存器。

在这里插入图片描述

5.3 触发器 “flip-flop”

  • 锁存器:电平敏感。在使能信号E使能期间(高电平),数据会跟随输入信号变化。这在一些场合下,不适用。这段期间,很多时序逻辑功能不能实现。
  • 触发器:边沿敏感。在脉冲边沿作用下,刷新状态。其他时刻,保持不变。
  • 上升沿触发信号 C l o c k P u l s e Clock Pulse ClockPulse,简写 C P CP CP
  • 下升沿触发信号 C l o c k P u l s e ‾ \overline{Clock Pulse} ClockPulse,简写 C P ‾ \overline{CP} CP
  • 目前触发器主要有3种电路结构:主从触发器、维持阻塞触发器、传输延迟触发器。

5.3.1 主从触发器

  • 在CP脉冲的上升沿到来后,瞬间转换输出状态。

1. 工作原理

  • 使用2个传输门控的D锁存器,实现主从触发器。
    在这里插入图片描述

  • CMOS(传输门)主从D触发器。其中用到了施密特非门(用来脉冲整形、消除波形中的噪声等等)。下面主传输门控D锁存器,简称为主D,从传输门控D锁存器,简称为从D

    • CP时钟信号=0时,主D 不断更新数据状态。从D 保持不变。整个D触发器 的值保持不变。
    • CP时钟信号从0向1变化,施密特非门达到"+Vt"阈值瞬间,主D 不再变化,主D 保持最后一个状态的值。从D 开始更新数据状态。整个D触发器 得到一个新值
    • CP时钟信号=1时,主D保持不变。从D更新状态。整个D触发器 的值保持不变。
    • CP时钟信号从1向0变化,施密特非门达到"-Vt"阈值瞬间,从D 不再变化,主D 开始不断更新数据状态。整个D触发器 的值保持不变。
    • 循环往复,可以发现,整个D触发器,每次更新值,只发生在上升沿0->1的瞬间。
      在这里插入图片描述
  • 特性方程: Q n + 1 = D Q^{n+1} = D Qn+1=D,其中 Q n + 1 Q^{n+1} Qn+1表示上升沿到达后触发器的状态。D表示 上升沿到达前一瞬间输入信号

2. 集成电路

  • 在上述主从D触发器的逻辑框图的基础上,做了一些改变,非门 变成了 或非门,增加了异步复位R和置位S。

  • 传输门控D锁存器增加了 S ‾ 和 R ‾ \overline{S}和\overline{R} SR输入信号。
    在这里插入图片描述

  • 主从D触发器,相应的变化。数据输入端,加了两个非门作为缓冲,输出端增加了1个非门。

    • 置位:当 S ‾ = 0 , R ‾ = 1 \overline{S}=0,\overline{R}=1 S=0R=1时。
      • 如果主D锁存处于保持状态,主D会被置位, Q ‾ 主 = 0 \overline{Q}_主=0 Q=0。从D锁存处于更新状态,可知 Q 从 = 1 D 从 = Q ‾ 主 = 0 Q_从=1D_{从}=\overline{Q}_主=0 Q=1D=Q=0。可知 Q = Q 从 ‾ = 1 Q=\overline{Q_从}=1 Q=Q=1
      • 如果从D锁存处于保持状态,从D会被复位, Q 从 = 0 Q_从=0 Q=0。可知 Q = Q 从 ‾ = 1 Q=\overline{Q_从}=1 Q=Q=1
    • 复位:当 S ‾ = 1 , R ‾ = 0 \overline{S}=1,\overline{R}=0 S=1R=0时。
      • 如果主D锁存处于保持状态,主D会被复位, Q ‾ 主 = 1 \overline{Q}_主=1 Q=1。从D锁存处于更新状态,可知 Q 从 = 1 D 从 = Q ‾ 主 = 1 Q_从=1D_{从}=\overline{Q}_主=1 Q=1D=Q=1。可知 Q = Q 从 ‾ = 0 Q=\overline{Q_从}=0 Q=Q=0
      • 如果从D锁存处于保持状态,从D会被置位, Q 从 = 1 Q_从=1 Q=1。可知 Q = Q 从 ‾ = 0 Q=\overline{Q_从}=0 Q=Q=0
    • 正常工作:当 S ‾ = 1 , R ‾ = 1 \overline{S}=1,\overline{R}=1 S=1R=1时。
      • 此时触发器才可以被CP上升沿触发。
    • 不确定状态: 当 S ‾ = 0 , R ‾ = 0 \overline{S}=0,\overline{R}=0 S=0R=0时。
      • 和前文的SR锁存器的不确定状态一致,不知道后续正常工作时,触发器的状态值。
    • 约束 R D ‾ ⋅ S D ‾ = 0 \overline{R_D}·\overline{S_D}=0 RDSD=0
      在这里插入图片描述

5.3.2 维持阻塞触发器

  • 在CP脉冲的上升沿到来后,瞬间转换输出状态。

1. 工作原理

  • 使用3个SR锁存器组成一个维持阻塞式触发器。

    • 本小节使用的SR锁存器由与非门构成。见前文5.2.1.3 S ‾ ⋅ R ‾ 锁存器 \overline{S}·\overline{R}锁存器 SR锁存器
      在这里插入图片描述
    • 维持阻塞式触发器的逻辑框图
      在这里插入图片描述
  • 逻辑原理如下,(已知, S ‾ ⋅ R ‾ 锁存器 \overline{S}·\overline{R}锁存器 SR锁存器不确定状态时, Q = 1 , Q ‾ = 1 Q=1,\overline{Q}=1 Q=1Q=1

  • (1) CP时钟信号=0时:

    • 锁存器1:复位或者不确定状态,必有 Q 2 = 1 Q_2=1 Q2=1
    • 锁存器2:置位或者不确定状态,必有 Q 3 = 1 Q_3=1 Q3=1
    • Q 2 = 1 , Q 3 = 1 Q_2=1,Q_3=1 Q2=1,Q3=1,所以锁存器3处于保持状态不变。
    • 整个触发器处于保持状态,输出不变。
    • 另外, Q 1 = D Q_1=D Q1=D
      在这里插入图片描述
  • (2) CP时钟信号从0向1变化,CP=1 瞬间 C P = 1 , Q 2 ′ = 1 , Q 3 ′ = 1 CP=1,Q_2'=1,Q_3'=1 CP=1Q2=1Q3=1。红色线阻塞,在这一瞬间可以理解为断路。

    • 锁存器1的 Q 1 = S ‾ + Q 2 ′ ‾ = Q 4 ‾ + Q 2 ′ ‾ = Q 4 ‾ Q_1=\overline{S}+\overline{Q_2'}=\overline{Q_4}+\overline{Q_2'}=\overline{Q_4} Q1=S+Q2=Q4+Q2=Q4。这里因为锁存器1内部维持线的存在,瞬间取的是 Q 2 ′ Q_2' Q2的值(维持在之前的1)。
    • 锁存器1的 Q 2 = R ‾ + Q 1 ‾ = C P ‾ + Q 1 ‾ = Q 1 ‾ = Q 4 Q_2=\overline{R}+\overline{Q_1}=\overline{CP}+\overline{Q_1}=\overline{Q_1}=Q_4 Q2=R+Q1=CP+Q1=Q1=Q4
    • 锁存器2的 Q 3 = S ‾ + Q 4 ‾ = C P ⋅ Q 2 ′ ‾ + Q 4 ‾ = Q 4 ‾ Q_3=\overline{S}+\overline{Q_4}=\overline{CP·Q_2'}+\overline{Q_4}=\overline{Q_4} Q3=S+Q4=CPQ2+Q4=Q4。这里因为锁存器之间阻塞线的存在,瞬间取的是 Q 2 ′ Q_2' Q2的值(阻塞新值的到来,维持之前的1)。
    • 锁存器2的 Q 4 = R ‾ + Q 3 ′ ‾ = D ‾ Q_4=\overline{R}+\overline{Q_3'}=\overline{D} Q4=R+Q3=D。这里因为锁存器2内部维持线的存在,瞬间取的是 Q 3 ′ Q_3' Q3的值(维持在之前的1)。
    • 所以可以得到, Q 2 = Q 4 = D ‾ , Q 3 = Q 4 ‾ = D Q_2=Q_4=\overline{D},Q_3=\overline{Q_4}=D Q2=Q4=DQ3=Q4=D
    • 所以可以得到,触发器 Q = Q 2 ‾ = D , Q ‾ = Q 3 ‾ = D ‾ Q=\overline{Q_2}=D,\overline{Q}=\overline{Q_3}=\overline{D} Q=Q2=DQ=Q3=D
    • Q n + 1 = D Q^{n+1}=D Qn+1=D
      在这里插入图片描述
  • (3)CP时钟信号=1时:

    • 如果上升沿时D=0。则有 Q 2 = 1 , Q 3 = 0 Q_2=1,Q_3=0 Q2=1Q3=0

      • 可以推出, Q 4 = D ‾ + Q 3 ‾ = 1 Q_4=\overline{D}+\overline{Q_3}=1 Q4=D+Q3=1
      • 可以推出, Q 1 = Q 4 ‾ + Q 2 ‾ = 0 Q_1=\overline{Q_4}+\overline{Q_2}=0 Q1=Q4+Q2=0
      • 反推, Q 2 = 1 ‾ + Q 1 ‾ = 1 , Q 3 = Q 2 ‾ + Q 4 ‾ = 0 Q_2=\overline{1}+\overline{Q1}=1,Q_3=\overline{Q_2}+\overline{Q_4}=0 Q2=1+Q1=1Q3=Q2+Q4=0
    • 如果上升沿时,D=1。则有 Q 2 = 0 , Q 3 = 1 Q_2=0,Q_3=1 Q2=0Q3=1

      • 可以推出, Q 4 = D ‾ + Q 3 ‾ = 0 Q_4=\overline{D}+\overline{Q_3}=0 Q4=D+Q3=0
      • 可以推出, Q 1 = Q 4 ‾ + Q 2 ‾ = 1 Q_1=\overline{Q_4}+\overline{Q_2}=1 Q1=Q4+Q2=1
      • 反推, Q 2 = 1 ‾ + Q 1 ‾ = 0 , Q 3 = Q 2 ‾ + Q 4 ‾ = 1 Q_2=\overline{1}+\overline{Q1}=0,Q_3=\overline{Q_2}+\overline{Q_4}=1 Q2=1+Q1=0Q3=Q2+Q4=1
    • 可知,CP时钟信号=1时,锁存器1和锁存器2锁存了 Q 2 , Q 3 Q_2,Q_3 Q2,Q3的状态。

    • 锁存器3处于复位或者置位状态。

    • 整个触发器输出不变。
      在这里插入图片描述

2. 集成电路

  • TTL型:74LS74、74F74 集成芯片,内部都有两个独立的 “维持阻塞D触发器”。
  • CMOS型:74HC、74HCT74集成芯片。
  • 集成芯片会在 “维持阻塞D触发器”逻辑图的基础上,增加置位和复位的引脚。逻辑分析参照上文。
    在这里插入图片描述

5.3.3 利用传输延迟的触发器

  • 在CP脉冲的 下降沿 到来后,瞬间转换输出状态。
  • JK触发器。
  • J=K=0时,JK触发器保持不变,J=K=1时,触发器状态翻转。

1. 工作原理

  • “与或非门” 构成SR锁存器。

  • 增加两个“与非门”G3 G4,传输延迟时间大于 SR锁存器的翻转时间。
    在这里插入图片描述

  • C P ‾ = 0 \overline{CP}=0 CP=0时:

    • J和K的值对G3和G4没有影响。G3和G4的输出都是1。
    • 2组与或非门构成的SR锁存器,处于保持状态。
      在这里插入图片描述
  • C P ‾ \overline{CP} CP从0变到1瞬间:

    • 瞬间 G13和G23的输出还是 Q ‾ 和 Q \overline{Q}和Q QQ,随后会慢慢变成0。
    • 最终的输出 Q ‾ 和 Q \overline{Q}和Q QQ 不变。
      在这里插入图片描述
  • C P ‾ = 1 \overline{CP}=1 CP=1时:状态不变,仍然处于保持状态。
    在这里插入图片描述

  • C P ‾ \overline{CP} CP从1变到0瞬间:

    • G12和G22不再起作用, Q 和 Q ‾ Q和\overline{Q} QQ只与G13和G23有关,G13和G23短时间内还保持着状态,
    • S ‾ = J ⋅ Q n ‾ ‾ \overline{S}=\overline{J·\overline{Q^n}} S=JQn
    • R ‾ = K ⋅ Q n ‾ \overline{R}=\overline{K·Q^n} R=KQn
    • Q n + 1 = 0 + S ‾ ⋅ Q n ‾ ‾ = ( S ‾ ) ⋅ ( R ‾ ⋅ Q n ) ‾ ‾ Q^{n+1} = \overline{0+\overline{S}·\overline{Q^n}}=\overline{(\overline{S})·\overline{(\overline{R}·Q^n)}} Qn+1=0+SQn=(S)(RQn)
    • Q n + 1 = ( J ⋅ Q n ‾ ‾ ) ⋅ ( K ⋅ Q n ‾ ⋅ Q n ) ‾ ‾ = J ⋅ Q n ‾ + K ⋅ Q n ‾ ⋅ Q n = J ⋅ Q n ‾ + ( K ‾ + Q n ‾ ) ⋅ Q n Q^{n+1}=\overline{(\overline{J·\overline{Q^n}})·\overline{(\overline{K·Q^n}·Q^n)}}=J·\overline{Q^n}+\overline{K·Q^n}·Q^n=J·\overline{Q^n}+(\overline{K}+\overline{Q^n})·Q^n Qn+1=(JQn)(KQnQn)=JQn+KQnQn=JQn+(K+Qn)Qn
    • Q n + 1 = J ⋅ Q n ‾ + K ‾ ⋅ Q n Q^{n+1}=J·\overline{Q^n}+\overline{K}·Q^n Qn+1=JQn+KQn,这是JK触发器的特性方程
  • J=K=0时,JK触发器保持不变

  • J=K=1时,触发器状态翻转。

在这里插入图片描述

2. 集成电路

  • 74F112芯片,在上述JK触发器逻辑框图的基础上,增加了置位S和复位R。此处略,详见书籍。
    在这里插入图片描述

  • 74F112芯片,内部含有2个独立的JK触发器。

  • C P ‾ \overline{CP} CP下降沿时,更新数据Q。

  • Q n + 1 = J ⋅ Q n ‾ + K ‾ ⋅ Q n Q^{n+1}=J·\overline{Q^n}+\overline{K}·Q^n Qn+1=JQn+KQn
    在这里插入图片描述

5.3.4 触发器的动作特性

以“D触发器”为例,讨论动态特性。

  • 建立时间
    在CP上升沿到来之前,输入信号D变化到某一状态,并保持不变稳定。建立时间:即信号D的电路建立稳定状态的最小时间值。
  • 保持时间
    在CP上升沿到来之后,信号D需要保持的最小时间。保证D状态可靠的传输到 Q 和 Q ‾ Q和\overline{Q} QQ端。
  • 传输延迟时间
  • 触发脉冲宽度
  • 最高触发频率

5.4 触发器的逻辑功能

  • 现态 Q n Q^n Qn
  • 次态 Q n + 1 Q^{n+1} Qn+1
  • 输入信号之间的逻辑关系
  • 特性表、特性方程、状态图。

5.4.1 D触发器

  • 变量:现态 Q n Q^n Qn、输入信号D。
  • 函数:次态 Q n + 1 Q^{n+1} Qn+1

1. 特性表

时钟上升沿CP现态 Q n Q^n Qn输入信号 D次态 Q n + 1 Q^{n+1} Qn+1
000
011
100
111

2. 特性方程

  • 由上表,可以观察到 次态 Q n + 1 Q^{n+1} Qn+1与现态 Q n Q^n Qn无关,只与输入信号D有关。
  • 特性方程: Q n + 1 = D Q_{n+1}=D Qn+1=D

3. 状态图

  • 方向线的起点是现态 Q n Q^n Qn
  • 方向线的终点是次态 Q n + 1 Q^{n+1} Qn+1
    在这里插入图片描述

5.4.2 JK触发器

  • 变量:现态 Q n Q^n Qn、输入信号J和K。
  • 函数:次态 Q n + 1 Q^{n+1} Qn+1

1. 特性表

时钟下降沿 C P ‾ \overline{CP} CP现态 Q n Q^n Qn输入信号 J输入信号 K次态 Q n + 1 Q^{n+1} Qn+1
0000
0010
0101
0111
1001
1010
1101
1110

2. 特性方程

  • 如果无法直接根据特性表,写出特性方程(逻辑表达式),可以借助卡诺图
    在这里插入图片描述
  • 特性方程: Q n + 1 = J ⋅ Q n ‾ + K ‾ ⋅ Q n Q^{n+1}=J·\overline{Q^n}+\overline{K}·Q^n Qn+1=JQn+KQn

3. 状态图

  • X表示无关,可以取0,也可以取1。
  • J可以理解为 置位,仅当现态为0时有效。
  • K可以理解为 复位,仅当现态为1时有效。
  • J=K=0时,触发器状态保持不变。
  • J=K=1时,触发器一定发生翻转。
    在这里插入图片描述

4. 波形图

  • 如下图所示:
  • J=K=0时,触发器状态保持不变。
  • 当现态为0时,J=1, Q置位1
  • 当现态为1时,K=1,Q复位0
  • J=K=1时,触发器一定发生翻转。利用该特性,可以用JK触发器(J=1,K=1),做2分频
  • 两个触发器级联,可以构成4分频
    在这里插入图片描述

5.4.3 T触发器

  • 定义一个翻转触发器,T表示Toggle。

    • 每当来一个上升沿(或者下降沿)脉冲,触发器状态Q发生一次翻转。
    • 并不是上升沿和下降沿同时触发。
      在这里插入图片描述
  • 在JK触发器的基础上,将J和K都换成T。构成一个下降沿触发的T触发器。

    • T=1时,J=K=1,Q在下降沿会发生翻转。
    • T=0时,J=K=0,Q始终不变。
      在这里插入图片描述
  • 变量:现态 Q n Q^n Qn、输入信号T。

  • 函数:次态 Q n + 1 Q^{n+1} Qn+1

1. 特性表

  • 使用JK触发器构成的 T触发器。
时钟下降沿 C P ‾ \overline{CP} CP现态 Q n Q^n Qn输入信号 T次态 Q n + 1 Q^{n+1} Qn+1
000
01 (翻转使能)1
101
11 (翻转使能)0

2. 特性方程

  • 特性方程: Q n + 1 = T ⋅ Q n ‾ + T ‾ ⋅ Q n Q^{n+1}=T·\overline{Q^n}+\overline{T}·Q^n Qn+1=TQn+TQn

3. 状态图

在这里插入图片描述

4. T ’ 触发器

  • T恒等于1时,T触发器变成了 T’ 触发器。
    在这里插入图片描述
  • 特性方程: Q n + 1 = Q n ‾ Q^{n+1}=\overline{Q^n} Qn+1=Qn
    在这里插入图片描述

5.4.4 SR触发器

  • 与SR锁存器不同的是,状态的改变仅发生在时钟的上升沿(或者下降沿)。
    在这里插入图片描述

1. 特性表

  • 可能是上升沿触发,也可以是下降沿触发,二选一,与电路实现有关。
时钟边沿现态 Q n Q^n Qn置位S复位R次态 Q n + 1 Q^{n+1} Qn+1
-0000
-0010
-0101
-011不确定状态
-1001
-1010
-1101
-111不确定状态

2. 特性方程

  • Q n + 1 = S + R ‾ ⋅ Q n Q^{n+1}=S+\overline{R}·Q^n Qn+1=S+RQn
  • S·R=0(约束条件)

3. 状态图

  • 现实少有SR触发器,可以由JK触发器构成
  • J=S置位
  • K=R复位
    在这里插入图片描述

5.4.5 触发器功能的转换

  • D触发器和JK触发器 有很多 独立的中小规模产品。
  • T触发器和SR触发器 常出现在 集成电路的内部。少有独立的产品。
  • 可以将D触发器或者JK触发器转换成 T触发器或者SR触发器。

1. JK触发器构成T触发器

  • 见5.4.2中的描述。

2. JK触发器构成SR触发器

  • 见5.4.3中的描述。

3. D触发器构成JK触发器

  • D = J ⋅ Q ‾ + K ‾ ⋅ Q D=J·\overline{Q}+\overline{K}·Q D=JQ+KQ
    在这里插入图片描述

4. D触发器构成T触发器

  • D = T ⋅ Q ‾ + T ‾ ⋅ Q = T ⊕ Q D=T·\overline{Q}+\overline{T}·Q=T⊕Q D=TQ+TQ=TQ
    在这里插入图片描述

  • D = T ⋅ Q ‾ + T ‾ ⋅ Q = T ⊙ Q ‾ D=T·\overline{Q}+\overline{T}·Q=T⊙\overline{Q} D=TQ+TQ=TQ
    在这里插入图片描述

5. D触发器构成T ’ 触发器

  • D = Q ‾ D=\overline{Q} D=Q
    在这里插入图片描述

5.5 用VerilogHDL描述锁存器和触发器

  • 时序电路的基础部件:锁存器和触发器

5.5.1 时序电路建模基础

  • 在时序电路的设计中,建议使用 “非阻塞型赋值 B<=A”。
  • 在过程块 过程语句中的变量,应使用“reg”类型。
    在这里插入图片描述

5.5.2 锁存器和触发器的Verilog建模

1. D锁存器

  • 当E=1时,使能数据D的写入。此时 Q = D , Q ‾ = D ‾ Q=D,\overline{Q}=\overline{D} Q=D,Q=D
    在这里插入图片描述
module D_latch(Q,D,E);
    output Q;
    input D,E;
    reg Q;//过程块中赋值,必须定义为reg类型

    always @(E or D)
       if(E) Q<=D;//E==1,当D发生变化时,会传送给Q
endmodule

  • 激励信号

module D_Latch_TB;

    reg E,D;
    wire Q;

    D_latch fun(Q,D,E);

    always #23 D=~D; 

    initial
        begin
            D=0;
            E=0;
        #50 E=1;
        #60 E=0;
        #70 E=1;
        #80 E=0;
        #50 E=1;
        #60 E=0;
        #70 E=1;
        #80 $stop;  
        end

endmodule

在这里插入图片描述

2. D触发器

  • 触发器 “flip-flop”
  • 当CP上升沿时,更新Q值
  • 次态 Q n + 1 = D Q^{n+1} = D Qn+1=D
(1)基本主从D触发器
  • 输入信号D和CP
//Elementary D flip-flop 基本的D触发器
module DFF(Q,D,CP);
   output Q;
   input D,CP;
   reg Q;
   always @(posedge CP) //CP上升沿 触发
       Q<=D;//更新Q值
endmodule
  • 激励信号
module DFF_TB;
    reg D,CP;
    wire Q;

    DFF fun(Q,D,CP);
    always #10 CP=~CP;//阻塞赋值,产生时钟信号
    initial
        begin
            CP<=0;
            D<=0;
        #33  D=1;
        #22  D=0; 
        #17  D=1;
        #40  D=0;
        #10 $stop;  
        end
endmodule

在这里插入图片描述

(2)异步置0置1功能的D触发器
  • 随时可以置0和置1,不受时钟信号限制
  • 代码中敏感信号虽然是Sd和Rd的下降沿,但是if语句是优先检测的低电平信号,实际还是 低电平置位或者复位。
//asynchronous set and reset
//D flip-flop
module async_set_rst_DFF(Q,QN,D,CP,Sd,Rd);
    output Q,QN;
    input D,CP,Sd,Rd;
    reg Q,QN;

    always @(posedge CP or negedge Sd or negedge Rd)//这里的复位置位下降沿 只是起到 进入一次的作用
        if(~Sd||~Rd)//低电平有效,发生了异步置位或者异步复位
	        if(~Sd)begin //置位
	               Q<=1'b1;
	               QN<=1'b0;
	               end
	        else   begin//复位
	               Q<=1'b0;
	               QN<=1'b1;
	               end
        else begin //非Sd和Rd的低电平,只能是CP上升沿
                   Q<=D;
	               QN<=~D;
              end
endmodule
  • 激励信号
module async_set_rst_DFF_TB;
    reg D,CP,Sd,Rd;
    wire Q,QN;
    
    async_set_rst_DFF fun(Q,QN,D,CP,Sd,Rd);
    always #10 CP=~CP;//阻塞赋值,产生时钟信号
    initial
        begin
            Sd<=1;
            Rd<=1;
            CP<=0;
            D<=0;
        #5   Sd=0;
        #2   Sd=1;
        #5   Rd=0;
        #2   Sd=1;
        #33  D<=1;
        #22  D<=0; 
        #17  D<=1;
        #40  D<=0;
        #10 $stop;  
        end

endmodule

在这里插入图片描述

(3)同步置0的D触发器
  • 复位信号Rd 需要在CP的上升沿作用下才起作用。
//synchronous reset
//D flip-flop
module sync_rst_DFF(Q,D,CP,Rd);
  output Q;
  input D,CP,Rd;
  reg Q;
  always @(posedge CP) //少了Rd的下降沿触发条件,变成了同步
      if(~Rd)
          Q<=1'b0;
      else
          Q<=D;
endmodule
  • 激励信号

module sync_rst_DFF_TB;
    reg D,CP,Rd;
    wire Q;
    
    sync_rst_DFF fun(Q,D,CP,Rd);
    always #10 CP=~CP;//阻塞赋值,产生时钟信号
    initial
        begin
            Rd<=1;
            CP<=0;
            D<=1;
        #21  Rd=0;
        #12  Rd=1;
        #22  D<=0; 
        #17  D<=1;
        #40  D<=0;
         #10 $stop;  
        end

endmodule

在这里插入图片描述

(4)JK触发器
  • JK触发器模块
  • 使用多路分支case语句进行描述。
  • 将J和K拼在一起,作为一个2位的二进制变量{J,K},可取的值是00、01、10、11
//JK flip-flop
module JK_FF(Q,Qnot,J,K,CP);
    output Q,Qnot;
    input J,K,CP;
    reg Q;
    assign Qnot=~Q;//连续赋值
    
    always @(negedge CP)//CP脉冲下降沿
        case({J,K})
          2'b00: Q<=Q; //保持不变
          2'b01: Q<=1'b0;//K=1,复位0
          2'b10: Q<=1'b1;//J=1,置位1
          2'b11: Q<=~Q;  //K=1,J=1,翻转
         endcase
endmodule
  • 激励信号
module JK_FF_TB;
    reg J,K,CP;
    wire Q,Qnot;
    
    JK_FF fun(Q,Qnot,J,K,CP);
    always #10 CP=~CP;//阻塞赋值,产生时钟信号
    initial
        begin
             CP<=0;
             J<=1;K<=0;
        #155 J<=1;K<=1;
        #112 J<=0;K<=0;
        #123 J<=0;K<=1;
         #30 $stop;  
        end

endmodule

在这里插入图片描述

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值