type
status
date
slug
summary
tags
category
icon
password

5.1 触发器概述

5.1.1 触发器的定义

能够存储一位二进制信息的基本单元电路称触发器(Flip-Flop)。

5.1.2 触发器的特点

  • 具有两个能自行保持的稳定状态,用来表示逻辑状态的“0”或“1”,或表示二进制数的0或1。
  • 具有一对互补输出( Q、~Q )
    • 💡
      当 Q=1时称触发器存储了“1”;当 Q=0时称触发器存储了“0”。
  • 有一组控制(激励、驱动)输入。
    • 💡
      也就是触发器存储的值是能够改变的
  • 或许有定时(时钟)端CP(Clock Pulse)。
  • 在输入信号消失后,电路能将获得的新状态保存下来。
  • 触发器接收输入信号之前的状态叫做现态,用Qn表示。触发器接收输入信号之后的状态叫做次态,用Qn+1表示。现态和次态是两个相邻离散时间里触发器输出端的状态。

5.2 基本RS触发器

5.2.1 与非门构成的R-S触发器

  • 电路结构
    • 💡
      电路结构一般不会考,因此这一章中的电路结构除了基本RS触发器,其他的应该都只要扫一眼就好了。
      notion image
      💡
      需要注意的是,在触发器的电路符号中,~Q引脚处有一个圈圈
  • 真值表(状态转换表)
    • notion image
      💡
      只需要知道“S”和“R”分别表示“set”和“reset”,因此SR输入10时为置1;SR输入为01时置0;SR输入00时表示既不置位也不清除,即为保持;SR输入11时表示既要置位又要清除,因此是禁用状态。
      另外一个注意点是,在禁用状态下,Q和~Q的取值都是1
  • 特征方程(次态方程)以及约束条件
    • 💡
      通过真值表可以得到次态对应的卡诺图。而通过卡诺图化简之后,就可以得到次态方程了。而约束条件可以直接根据功能得出(就SR不能同时为1)
  • 时序图
    • notion image
      💡
      由于基本RS触发器没有时钟控制,因此不会存在说什么时候将值存储到触发器中,故基本RS触发器应该是一直都在将输入转化为状态的。或者说,在画基本RS触发器的波形图时,每当输入变化时,都需要重新判断Q的情况

5.2.2 或非门构成的R-S触发器

  • 电路结构
    • notion image
  • 真值表(状态转换表)
    • notion image
      💡
      与使用与非门构成的基本RS触发器相似,也是S表示set,R表示reset。只不过这里当出现禁用的情况时,Q和~Q都会被设置为0。
  • 特征方程
    • 💡
      这里会发现状态方程和约束条件跟与非门好像没什么区别,只不过约束条件做了一个恒等变换。这里做变换的原因是:或非门基本RS触发器的输入就是R和S,因此最好状态方程和约束条件中都使用R和S进行描述。
  • 时序图
    • notion image

5.2.3 基本RS触发器的缺点

  • 存在约束条件的限制
  • 没有时钟信号,无法与其他部件同步工作

5.3 钟控触发器

5.3.1 钟控RS触发器

  • 电路结构
    • notion image
      💡
      同样的触发器内部的门电路结构是不用背的,但是电路符号需要背下来,特别是钟控信号(以及钟控信号的尖尖)。另外需要注意的是,这里的输入信号已经变成了S和R。从门电路中也能看出来,当CP=0时,触发器的状态将被保持。
  • 工作状态:CP=0时,保持状态不变;CP=1时,接收输入信号。
  • 特征方程(状态方程)
    • 在CP=1时:
      💡
      这个状态方程和约束条件跟上面的基本RS触发器(或非门实现)是相同的
  • 钟控RS触发器的状态图
    • notion image
      💡
      这个直接根据RS引脚的情况就能写出来。同样的SR分别表示
  • 钟控RS触发器的波形图
    • notion image
      💡
      这里就出现了空翻现象:在将状态“1”打入触发器的过程中,触发器的状态在某个时间段内被设置为了“0”。
  • 钟控RS触发器的优缺点
    • 优点:加入了时钟信号,使同步工作成为可能。
    • 缺点
      • 仍然存在约束条件。
      • 在CP=1期间,只要R、S稍有变化,那么Q端也随之变化,存在“空翻”问题。
        • 💡
          在一个时钟周期内触发器状态多次翻转的现象被称为“空翻”。也就是存在无效的翻转信号。“空翻”会造成节拍混乱,使系统工作不可靠(比如说在一个寄存器中,如果出现了空翻现象,就会存在某一个时刻寄存器中的值是不正确的),因此在实际的数字电路中是不允许出现的。

5.3.2 主从RS触发器

  • 主从RS触发器电路结构及逻辑符号
    • notion image
      💡
      主从RS触发器的思路就是,使用一主一从触发器,当CP=1时,空翻现象会在主触发器中出现,但是不会传递到从触发器中。只有当CP从1变为0时(相当于是时钟下降沿),才会将主触发器的状态传递到从触发器中。这样从触发器中的状态就不存在空翻现象了。
      notion image
      💡
      这里CP信号中除了尖尖外还有一个圈,表示的是下降沿触发
  • 真值表
    • notion image
      💡
      主从RS触发器本质上还是一个与非门构成的RS触发器,因此当出现禁用状态时,Q和~Q的值同样都是“1”。
  • 特征方程(次态方程)与约束条件
    • 主从RS触发器的波形图
      • notion image
    • 主从RS触发器的优缺点
      • 优点
        • 有了时钟信号,可以同步工作
        • 解决了“空翻”问题。
      • 缺点
        • 仍然存在约束条件

    5.3.3 D触发器

    • 电路结构及逻辑符号
      • notion image
        💡
        ppt上没有给出D触发器的逻辑符号
    • 特征方程
      • D触发器的优缺点
        • 优点
          • 有时钟信号,可以同步工作
          • 没有约束条件。
        • 缺点
          • 存在空翻现象
            • 💡
              主从RS触发器解决的是空翻险象,但没有解决约束条件;D触发器解决的是约束条件,但是没有解决空翻现象。
          • 只有一个输入引脚,逻辑功能较为简单
            • 💡
              因此后面会有一个集成D触发器,以提供更丰富的功能

      5.3.4 维持阻塞D触发器

      • 电路结构
        • notion image
          💡
          分析这中电路的时候,就先找到能确定的值,然后再进行传递。比如这里如果CP=0的话,G3一定是1。
          逻辑符号
          notion image
      • 真值表
        • notion image
          💡
          维持阻塞D触发器是上升沿触发的,因此可以解决空翻现象。
      • 特征方程(次态方程)
        • 维持阻塞D触发器的优缺点
          • 优点
            • 有时钟信号,可以同步工作
            • 没有约束条件
            • 解决了“空翻”问题
          • 缺点
            • 只有一个输入端,逻辑简单

        5.3.5 JK触发器

        • 电路结构
          • notion image
            💡
            这里是通过反馈信号封锁一个输入端的与非门,这样就能保证约束条件被满足了
        • 真值表
          • notion image
        • 特征方程(次态方程)
          • JK触发器的优缺点
            • 优点
              • 有时钟信号,可以同步工作;
              • 没有约束条件
              • 有两个输入端
            • 缺点
              • 存在“空翻”问题。
              💡
              JK触发器只是通过信号反馈解决了约束条件的问题,但是没有解决空翻的问题。

          5.3.6 主从JK触发器

          • 电路结构
            • notion image
              电路符号为:
              notion image
          • 真值表为
            • notion image
              💡
              这与普通的JK触发器没什么区别,只不过使用主从模式之后,就可以在下降沿的时候将状态保存到从触发器中,进而解决了空翻问题。
          • 特征方程
            • 波形图
              • notion image
                💡
                这里在第九个时钟周期中就出现了一次变化问题,即本来的输入JK应该是01,输出应该为0,但是在第九个时钟周期的下降沿到来时,从触发器的状态变为了1。
            • 主从JK触发器的优缺点
              • 优点
                • 有时钟信号,可以同步工作;
                • 没有约束条件;
                • 有两个输入端,逻辑功能更为强大
                • 解决了“空翻”问题。
              • 缺点
                • 存在“一次变化”问题。
                  • 💡
                    “一次变化”是:在CP为“1”期间,主触发器仅能翻转一次的现象称一次变化。下面解释一下出现“一次变化”的原因——因为主触发器接收的反馈信号是从触发器的结果,因此在CP=1的过程中,主触发器总有一个门是被封锁的。这里举一个例子:
                    在主从JK触发器中,若Q=1(~Q=0)时,门G7被封锁,J端不起作用。若此时K=1,则可将Q置为0,~Q置为1。此后无论J、K如何变化,主触发器的状态(Q、~Q)也不会改变。(K=0,主触发器保持)。
                    这样就要求在CP=1期间错误信号不能先出现,进而就降低了主从JK触发器的抗干扰能力。
                    为了解决一次变化问题,需要在CP=1期间J、K的状态保持不变(但是实际上可能会因为噪声、干扰信号的存在,导致JK信号并不能真正做到不变)

            5.3.7 边沿JK触发器

            • 电路结构
              • notion image
                💡
                这个工作原理还是比较有意思的:当CP=0的时候,将为保持状态;当CP变为1时,上方的两个与非门将会出现自锁(也就是使SR的值无效);当CP再次变为0的时候,由于电路延迟才会将SR的值向上传递。因此在CP下降沿到来的时候需要看的JK的值是下降沿之前的值
                逻辑符号:
                notion image
            • 特征方程
              • 💡
                状态转换的条件与JK触发器是相同的,也是00保持、01清零、10置一、11翻转
            • 波形图
              • notion image
                💡
                从这里就可以更直观地看出来主从JK触发器的缺点了:一次变化问题将导致输出信号的错误。
            • 边沿JK触发器的优点(没有缺点了喵~)
              • 优点
                • 有时钟信号,可以同步工作;
                • 没有约束条件;
                • 有两个输入端;
                • 解决了“空翻”问题;
                • 解决了“一次变化”问题。
            到这里就介绍完了所有的触发器,下面这张图比较重要,需要背一下
            notion image

            5.4 集成触发器

            5.4.1 集成D触发器

            • 逻辑符号
              • notion image
            • 状态方程
              • 同步工作时(上升沿触发):
                • 💡
                  这里的约束条件跟单纯的RS触发器不同是因为,在同步工作时,只能使用D端进行输入,两个异步输入端一定要设置为1
              • 异步工作时
                • 💡
                  从这里可以看出来,同步信号受到异步信号的约束,而异步信号没有受到同步信号的约束,因此在画波形图的时候需要优先保证异步信号。
              • 波形图
                • notion image
                  💡
                  这里学到一点:所有的边沿触发都是要看边沿到来前的一个时刻的输入的。

              5.4.2 集成JK触发器

              • 逻辑符号
                • notion image
              • 特征方程
                • 同步工作时(下降沿触发):
                  异步工作时:
                  💡
                  与集成D触发器相同,当画波形图的时候,需要优先考虑异步信号
              • 波形图
                • notion image

              5.4.3 T触发器

              • 逻辑符号
                • notion image
                  💡
                  从逻辑符号上能看出来一个T触发器的一个特点——下降沿触发
              • 特征方程
                • 💡
                  由特征方程可知,当T=0时状态保持;当T=1时状态翻转。
              • 波形图
                • notion image
              💡
              T触发器通常由JK触发器(因为都是下降沿触发)实现,在后面的触发器转换中应该会提到。

              5.4.4 T‘触发器

              • T‘触发器的构成:T’触发器有三种实现方式
                • T触发器:将T端置“1”
                • JK触发器:下降沿触发
                • D触发器:上升沿触发
                  • 💡
                    至于如何使用JK触发器或者D触发器实现T‘触发器,在后面会讲到。
              • 特征方程(次态方程)
                • 波形图
                  • notion image

                5.5 各类触发器的相互转换

                感觉这一章主要是做逻辑运算,这里总结一个通用的步骤吧:
                先定义一些名词:原触发器——表示触发器本身的类型;目标触发器——表示需要转变为的触发器类型
                • 首先写出原触发器和目标触发器的特征方程
                • 对目标触发器的特征方程进行变换,以得到类似原触发器特征方程的形式
                • 将该形式与原触发器的特征方程进行比对,得到原触发器输入的逻辑表达式
                这里举一个例子更好理解一点:
                notion image
                在这里就是将目标触发器(D触发器)的特征方程变换为了原触发器(JK触发器)的特征方程形式,然后比对之后就可以得到原触发器(JK触发器)的各个输入端的逻辑表达式了。
                💡
                需要注意的是,当需要将原触发器转换为RS触发器时,可以使用RS触发器的约束条件进行化简。在这里RS触发器的约束条件我们认为是不会出现的,即约束条件一定成立
                5.5剩余的部分就比较简单了,这里就不再赘述了。

                5.6 触发器及简单应用的Verilog实现

                5.6.1 维持阻塞D触发器

                数据流级描述:
                💡
                这里的Verilog实现需要根据维持阻塞D触发器的电路结构实现。由于是数据流级描述,因此这里的q和nq也只能是wire类型的变量(因为要在assign语句中赋值)。这里的#5还是背下来吧。
                行为级描述:
                💡
                敏感事件列表中可以使用边沿信号:posedge表示上升沿, negedge表示下降沿。在敏感事件列表中包括了边沿,并且希望在边沿时就对变量进行赋值的,必须要用非阻塞赋值运算符“<=”。(也就是希望所有语句同时赋值)
                异步清零信号的D触发器行为级描述:
                💡
                这个只能使用行为级描述,因为内部的电路结构不知道
                💡
                在集成触发器部分说了:需要先满足异步信号,因此在always块的异步分支中,我们是先处理了清零信号。此外由于异步信号与时钟信号不同,因此在敏感事件表中还需要加上异步清零信号。
                带同步清零信号的D触发器行为级描述:
                💡
                由于是同步清零信号,因此也是只有当时钟信号到来的时候才会进行清零(同样需要优先满足清零信号),因此always块的敏感事件表中只有时钟信号。
                带异步清零端和异步置位端的D触发器行为级描述:
                💡
                同样的规则,由于是异步的,所以要增加敏感事件表,并且在分支中要优先判断

                5.6.2 二分频器

                💡
                由于D触发器仅在上升沿会被触发(即一个时钟周期内只会被触发一次),因此如果将~Q接到D上,Q端输出的周期就变为输入时钟周期的两倍了。
                二分频器(带高电平有效的异步清零信号)的Verilog行为级描述:
                💡
                从这里可以学到一点:如果能很明显的感觉到是硬连逻辑的话,就直接使用assign语句即可。

                5.6.3 寄存器

                5.6.3.1 一位寄存器

                • 一位寄存器框图如下
                  • notion image
                💡
                从上图中可以看出来,当load=1时,在下一时钟上升沿,将inp0的值存入q中。
                从最终D给出的逻辑表达式来看,这里的load就相当与是一个数据选择器中的选路信号。当load=0时,将选择信号q0;当load=1时,将选择信号inp0。
                有了D触发器的输入逻辑表达式,就可以使用行为级描述来描述寄存器了:
                💡
                这里还是没办法使用数据流级,这是因为这里触发器内部的电路结构是未知的
                当然,还可以直接根据load的含义:
                • 当load = 1时,q = inp0 (时钟上升沿);
                • 当load = 0时,q 保持不变。
                来实现行为级描述:
                💡
                这个就比上面的Verilog更行为级一点了,就是纯纯从算法的角度来描述一位触发器。

                5.6.3.2 四位寄存器与n位寄存器

                无论是多少位触发器,他们的每一位都是一个触发器。只不过位数变多了之后,所有的触发器都需要共用一个时钟信号和load信号(因为这些触发器的值需要同时改变),并且每一个触发器都有一个单独的输入信号。这里以四位寄存器为例,其电路结构为:
                notion image
                其Verilog行为级描述为:
                💡
                这里就是直接从算法的层面上去描述了,而不是把每一个D写出来(当然也可以写),但是电路结构中没有给出D信号,那么就最好不要出现D。
                另外当需要定义n位触发器时,可以使用parameter关键字定义模块内部的常数,这个在后面写米里状态机和摩尔状态机的时候会用到。该关键字的语法为:
                定义之后该参数就可以像C语言中的常量一样使用了(甚至可以用于定义变量的位数)

                5.6.4 移位寄存器

                5.6.4.1 四位右移寄存器

                • 电路结构
                  • notion image
                    💡
                    在同一个时钟上升沿中,所有的数据都是同时移位。不会出现一个时钟上升沿移位多位是因为,在触发器内部也是有执行时间的,因此在一个时钟上升沿时,可能q3需要改变,但是在q3改变之前,q3已经传递到第二个触发器中了。这样就使得后续q3的改变不会再向后传递了。
                • 四位右移寄存器的Verilog代码(行为级描述)
                  • 💡
                    这里同样是由于不知道内部的电路结构,而又要实现上升沿触发(在数据流级描述中无法定义这样的敏感事件),因此需要使用行为级描述。

                5.6.4.2 四位环形寄存器

                • 电路结构
                  • notion image
                • Verilog代码(行为级描述)

                  5.6.4.3 时钟脉冲

                  💡
                  时钟脉冲本质上也是通过移位实现的,利用的就是每次移位的时间差(每次时间差都是一个时钟周期)。
                  另外虽然说是时钟脉冲,但是实际上应该是一个inp对应一个脉冲信号(比如实验中的按键输入),输入的时钟信号仅仅决定了脉冲的宽度。
                  • 电路结构
                    • notion image
                  • Verilog代码(行为级描述)
                    • 💡
                      这里应该也是可以使用数组的写法整合一下的,但是如果想要保险的话还是这样一位一位写吧。。。

                  5.6.5 计数器

                  5.6.5.1 八进制计数器

                  • 状态转换图
                    • notion image
                      状态转换图对应的真值表为:
                      notion image
                  • 八进制计数器Verilog代码(行为级描述)
                    • 💡
                      这里同样可以使用状态机来描述,但是没有必要,这是因为次态和现态之间有代数关系,就可以直接使用非阻塞赋值进行状态转换了。需要注意的是,这个不用管q≥8时的情况,这是因为这里q变量位数为3,能表示的最大值为7。

                  5.6.5.2 五进制计数器

                  • 状态转换图
                    • notion image
                  • Verilog代码(行为级描述)
                    • 💡
                      感觉这样做检查会好一点,当q=4的时候下一个状态设置为1,而不是在q++之后检查q是不是5,这样就不会出现无效状态(5)了。
                  剩余的计数器大同小异,这里就不再赘述了。

                  错题

                  notion image
                  notion image
                   
                   
                   
                  可能需要写一下最后一部分的Verilog代码
                  Paper2PX4
                  Loading...
                  Noah
                  Noah
                  永远年轻,永远热泪盈眶
                  公告
                  ❗❗复习笔记问题❗❗
                  由于兼容性问题
                  导入md文件可能导致了一些格式错误
                  🌹如发现格式错误,请联系我~🌹
                  🌹如博客内容有误也欢迎指出~🌹