跳至正文

触发器

半导体存储电路

  • 通常将只能存储一位数据的电路叫做存储单元,将用于存储一组数据的存储电路叫做寄存器,将用于存储大量数据的存储电路叫做存储器

  • 寄存器由一组触发器组成,每个触发器的输入和输出都有引出端,可以直接和周围电路连接,便于快速进行数据交换。

  • 由n个触发器组成的寄存器可以存储一组n位的二值数据

SR锁存器

SR锁存器(Set-Reset Latch)是最基本、也是电路结构最简单的一种。通常由两个或非门或者与非门组成。

最基本的门电路(与或非门等)虽然都有两种不同的输出状态(高、低电平),但是都不能自行保持。也即若输入信号消失,则输出信号状态也消失,不具备记忆功能。

而使用两个或非或与非门时,即使原本加在输入端上的信号消失了,输出端的状态也能保持下去。

或非门的SR锁存器 与非门的SR锁存器

SR锁存器原理

次态:锁存器新的状态

初态:锁存器原来的状态

SR锁存器所具有数据保持、置0和置1的功能,是一个可实际应用的存储单元最基本的逻辑功能。

或非门SR锁存器真值表
与非门SR锁存器真值表

SR锁存器存在非定义状态,输入信号有SR=0的约束条件。而D锁存器在工作中则不存在非定义状态

为了适应单端输入信号的需要,有以下电平触发的D触发器(D锁存器)

D锁存器
D锁存器真值表

因为在ENA的有效电平期间输出状态始终跟随输入状态的变化,输出与输入的状态保持相同,所以又将该电路称为“透明的D型锁存器”

触发器

触发器不同于锁存器,除了置1、置0输入端以外,还增加一个触发信号输入端。

只有当触发信号到来时,触发器才能按照输入的置1、置0信号置成相应的状态,并保持下去。

按照触发信号的工作方式可以分为电平触发、边沿触发和脉冲触发三种。

按照逻辑功能的不同特点,通常可将时钟控制的触发器分为SR触发器、JK触发器、T触发器和D触发器等几种。

电平触发的触发器

门控SR锁存器

电平触发SR触发器真值表

上图是电平触发的SR触发器(门控SR锁存器),其中Q*为次态,Q为初态。由两个与非门组成的SR锁存器电路(双稳态电路)和两个与非门组成的输入控制电路两部分组成

电平触发方式的动作特点

  • 只有当ENA变为有效电平时,触发器才能接受输入信号,并按照输入信号将触发器的输出置成相应的状态
  • 在ENA为有效电平的全部时间里,S和R的任何状态变化都可能会引起输出状态的改变。当ENA回到非有效电平以后,触发器保存的是ENA回到非有效电平以前瞬间的状态(触发器输出状态可能随S和R状态的变化而发生多次翻转)

可想而知,此类触发器的抗干扰能力较差

边沿触发的触发器

为了提高触发器的可靠性,增强抗干扰能力,希望触发器的次态仅仅取决于ENA信号下降沿(或上升沿)到达时刻输入信号的状态。也即边沿触发的触发器。

边沿触发D触发器

上图是用两个电平触发D触发器组成的边沿触发的D触发器

边沿触发方式的动作特点

  • 触发器的次态仅取决于使能信号的边沿到达时输入的逻辑状态,而在这之前或之后的输入信号变化对触发器的输出状态没有影响
脉冲触发的触发器

脉冲触发SR触发器

上图是脉冲触发的SR触发器,也被称为主从SR触发器,其中FF~1~和FF~2~分别称为主触发器和从触发器。

在脉冲触发SR触发器中,由于主触发器的输出状态不可能始终与输入状态保持一致,因此不能像边沿触发器那样,仅仅根据ENA下降沿到来时刻输入端S和R状态来确定输出端Q的状态,而必须考察全部ENA有效电平期间,主触发器状态的变化情况。

脉冲触发SR触发器真值表

表中CLK一列里的符号表示脉冲触发方式,而且是正脉冲触发。

  • 正脉冲信号,指信号电平在一段时间内从低电平跳变到高电平再回到低电平的信号。正脉冲信号的特点是:开始时电平为低,然后突然升高,维持一段时间后再突然降低回到初始的低电平状态。

    此外,正脉冲触发下,ENA以高电平为有效电平,输出端状态的变化发生在ENA的下降沿。

  • 负脉冲信号同理

脉冲触发和边沿触发的区别

  • 边沿触发:边沿触发器在输入信号电平的跳变边沿(上升沿或下降沿)瞬间响应,改变输出状态。正边沿触发的触发器在信号电平由低到高的跳变瞬间响应,而负边沿触发的触发器在信号电平由高到低的跳变瞬间响应。

  • 脉冲触发:脉冲触发器则是在整个输入脉冲的持续时间内响应,改变输出状态。正脉冲触发的触发器在接收到正脉冲信号时响应,而负脉冲触发的触发器在接收到负脉冲信号时响应。

    脉冲触发方式中,因为需要等到ENA的有效电平消失以后(回到低电平),输出状态才发生改变,所以也称为延迟触发。

脉冲触发方式的动作特点

  • 触发器的翻转分为两步动作,以正脉冲为例。

    第一步,当ENA在有效电平期间时,主触发器接收输入端(S、R)的信号,被置成相应的状态,而从触发器不动。

    第二步,当ENA下降沿到来时,从触发器按照主触发器的状态翻转,也即输出端状态的改变发生在ENA的下降沿。

  • 因为主触发器本身是一个电平触发的SR触发器,所以在有效电平全部时间里,输入信号都将对主触发器起控制作用。

    因此不能仅考虑边沿时刻输入信号的状态,还必须考虑整个有效电平期间输入信号的变化过程才能确定触发器的次态。

时钟控制的触发器类型

凡在时钟信号作用下逻辑功能符合某个特性方程的,无论触发方式如何,均被归为某一类触发器。

SR触发器

SR触发器特性表

$$
\left{\begin{matrix} Q^{\ast } = S+R^{'} Q\SR=0 \space (约束条件)\end{matrix}\right.
$$
满足上式的,可称为SR触发器

SR=0的约束条件存在原因:当ENA的有效电平消失以后,或者S、R端的高电平同时回到低电平时,不能确定触发器的次态。

JK触发器

JK触发器特性表

$$
Q^{\ast }=JQ^{'}+K^{'}Q
$$
满足上式的,可称为JK触发器

对于SR触发器,因为是由SR锁存器引申而来,所以在有效的触发信号全部时间内,不应当施加S=R=1的输入信号,即仍遵守SR=0的约束条件。

为了解除这一约束,可进行规定当输入为S=R=1时,触发器的次态为初态的反状态。

那么,在SR触发器的基础上,将S=R=1时的 Q 和 Q^'^ 接回到输入端,用 Q^'^代替S端的输入信号,用Q代替R端的输入信号,即可完成上述要求,也即JK触发器。

正脉冲触发JK触发器

上图为正脉冲触发的JK触发器。

T触发器

T触发器功能描述,当控制信号T=1时,每来一个时钟信号,状态翻转一次。当T=0时,时钟信号到达后,状态保持不变。

T触发器特性表

$$
Q^{\ast }=TQ^{'}+T^{'}Q
$$
满足上式的,可称为T触发器

实际上,只要将JK触发器的两输入端连在一起作为T端,即是T触发器。

此外,当T恒等于1时,有Q^*^ = Q^'^,也即每次ENA信号作用后,触发器必然翻转为与初态相反的状态。

D触发器

D触发器特性表

$$
Q^{\ast }=D
$$
满足上式的,可称为D触发器


不难看出,JK触发器的逻辑功能最强,包含了SR触发器和T触发器的全部逻辑功能。

逻辑功能和触发方式是触发器最重要的两个特性。

  • 逻辑功能是指稳态下触发器的次态和初态与输入之间的逻辑关系
  • 触发方式是指触发器在工作中,动态翻转过程中的动作特点

由于一个触发器能够储存一位二值代码,所以用N个触发器组成的寄存器能够储存一组N位的二值代码

触发器的动态特性

为了确保触发器在时钟信号到来时能可靠地翻转,需要找出对输入信号、时钟信号以及两者相互配合关系的要求。

建立时间(Setup time)t~su~

建立时间是指输入信号应当先于时钟信号(触发信号)动作沿到达的时间

保持时间(Hold time)t~h~

保持时间是指时钟信号动作沿到达后,输入信号仍然需要保持不变的时间

传输延迟时间(Propagation delay time)t~pd~

传输延迟时间是指时钟信号动作沿到达开始,直到触发器输出的新状态稳定建立所需要的时间

最高时钟频率(Maximum clock frequency)f~max~

最高时钟频率是指触发器在连续、重复翻转的情况下,时钟信号可以达到的最高重复频率


// 电平敏感的1位锁存器
module latch(
    input clk,
    input d,
    output q
);

    assign q = clk ? d:q;  //时钟高电平时,将输入端数据锁存
endmodule
// (基本)边沿触发的D触发器
module DFF(
    input clk,
    input D,
    output reg Q
);

    always @(posedge clk) begin
        Q < = D;
    end 
endmodule        
// 带异步清零、异步置1的D触发器
module DFF(
    input clk,
    input set,
    input reset,
    input D,
    output reg Q,
    output reg QN
);

    always @(posedge clk or negedge reset or negedge set) begin
        if (!reset) begin
            Q < = 0;
            QN < = 1;
        end 
        else if (!set) begin
            Q < = 1;
            QN < = 0;
        end 
        else begin
            Q < = D;
            QN < = ~D;
        end 
    end 
endmodule          
// 带异步清零,异步置1的RS触发器
module RS_FF(
    input clk,
    input set,
    input reset,
    input R,
    input S,
    output reg Q
);

    always@(posedge clk or negedge reset or negedge set) begin 
        if (!reset) Q < = 1'b0;
        else if (!set) Q < = 1'b1;
        else case({S,R})
            2'b00: Q < = Q;
            2'b01: Q < = 1'b0;
            2'b10: Q < = 1'b1;
            2'b11: Q < = 1'bx;
            default: Q < = Q; // 存疑
        endcase
    end
endmodule
// 带异步清零,异步置1的JK触发器
module JK_FF(
    input clk,
    input set,
    input reset,
    input J,
    input K,
    output reg Q
);

    always@(posedge clk or negedge reset or negedge set) begin 
        if (!reset) Q < = 1'b0;
        else if (!set) Q < = 1'b1;
        else case({J,K})
            2'b00: Q < = Q;
            2'b01: Q < = 1'b0;
            2'b10: Q < = 1'b1;
            2'b11: Q < = ~Q;
            default: Q < = Q;  //存疑
        endcase
    end
endmodule
// 基本T触发器
module TFF(
    input clk,
    input T
    output reg Q
);

    always @(posedge clk) begin 
        if (T) Q < = ~Q;
        else Q < = Q;
    end
endmodule