对维持阻塞D触发器的理解

背景

主从JK触发器是在CP脉冲高电平期间接收信号,如果在CP高电平期间输入端出现干扰信号,那么就有可能使触发器产生与逻辑功能表不符合的错误状态。边沿触发器的电路结构可使触发器在CP脉冲有效触发沿到来前一瞬间接收信号,在有效触发沿到来后产生状态转换,这种电路结构的触发器大大提高了抗干扰能力和电路工作的可靠性。下面以维持阻塞D触发器为例介绍边沿触发器的工作原理。

逻辑图结构

维持阻塞式边沿D触发器的逻辑图。该触发器由六个与非门组成,其中G1G_1G2G_2构成基本RS触发器,G3G_3G4G_4组成时钟控制电路,G5G_5G6G_6组成数据输入电路。RD\overline{R_D}SD\overline{S}_D分别是直接置0和直接置1端,有效电平为低电平。分析工作原理时,设RD\overline{R}_DSD\overline{S}_D均为高电平。

维持阻塞D触发器

RS触发器真值表

(注:这个如何分析出来的参见基础组合逻辑电路之RS触发器

输入A\overline{A}(Set置位) 输入B\overline{B}(Reset复位) 状态Q 输出Y(Q\overline{Q})
0 1 1 0 复位
1 0 0 1 置位
1 1 保持 保持
0 0 禁止 禁止
逻辑电路分析过程
  • 1.CP=0时,与非门G3G_3G4G_4封锁,其输出为1,触发器的状态不变。同时,由于Q3Q_3G5G_5Q4Q4G6G_6的反馈信号将这两个门G5G_5G6G_6打开,因此可接收输入信号D,使Q4Q_4G6G_6的反馈信号将这两个门G5G_5G6G_6打开,因此可接收输入信号D,使Q6=DQ_6=\overline{D}Q5=Q6=DQ_5=\overline{Q}_6=D

  • 2.当CP由0变1时,门G3G_3G4G_4打开,它们的输出Q3Q_3Q4Q_4的状态由G5G_5G6G_6的输出状态决定。Q3=Q5=DQ_3=\overline{Q}_5=\overline{D},Q4=Q6=DQ_4=\overline{Q}_6=D.由基本RS触发器的逻辑功能知,Q=DQ=D。(注:这边CP是由0变1,所以很多管脚的默认电平/初试电平也就是CP为0时候的电平)

  • 触发器翻转后,在CP=1时输入信号被封锁(这是结论,后面就是对这个说法的解释,为啥输入信号被封锁了)。G3G_3G4G_4打开后,它们的输出Q3Q_3Q4Q_4的状态是互补的,即必定有一个是0,若Q4Q_4为0,则经G4G_4输出至G6G_6输入的反馈线将G6G_6封锁,即封锁了D通往基本RS触发器的路径;该反馈线起到了使触发器维持在0状态和阻止触发器变为1状态的作用,故该反馈线称为置0维持线,置1阻塞线;Q3Q_3为0时,将G4G_4G5G_5封锁,D端通往基本RS触发器的路径也被封锁,G3G_3输出端至G5G_5反馈线起到使触发器维持在1状态的作用,称作置1维持线。G3G_3输出端至G4G_4输入的反馈线起到阻止触发器置0的作用,称为置0阻塞线。因此,该触发器称为维持阻塞触发器。(注:至于究竟是Q3Q_3还是Q4Q_4为0,由上述2中可以看出,取决于上升沿前D端的状态)

总结:由上述分析可知,维持阻塞D触发器在CP脉冲的上升沿产生状态变化,触发器的次态取决于CP脉冲上升沿前D端的信号,而在上升沿后,输入D端的信号变化对触发器的输出状态没有影响。如在CP脉冲上升沿到来前D=0D=0,则在CP脉冲的上升沿到来后,触发器置0;如在CP脉冲上升沿到来前D=1D=1,则在CP脉冲的上升沿到来后触发器置1.

维持阻塞D触发器的逻辑功能表
D QnQ^n Qn+1Q^{n+1} 说明
0 0 0 输出状态与D端相同
0 1 0 输出状态与D端相同
1 0 1 输出状态与D端相同
1 1 1 输出状态与D端相同
特征方程

Qn+1=DQ^{n+1}=D

理论工作波形图

工作波形图

用Verilog语言描述边沿触发D触发器

实验任务

本实验的任务是描述一个带有边沿触发的同步D 触发器电路,并通过开发板的12MHz 晶振作为触发器时钟信号clk,拨码开关的状态作为触发器输入信号d,触发器的输出信号q 和~q,用来分别驱动开发板上的LED,在clk 上升沿的驱动下,当拨码开关状态变化时LED 状态发生相应变化。

电路结构

电路结构

Verilog HDL建模描述

程序文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
module mydff
( //模块名及参数定义
input clk,rst,d,
output reg q,
output wire qb
);
assign qb = ~q;
always @( posedge clk ) //只有 clk 上升沿时刻触发
if(!rst) //复位信号判断,低有效
q <= 1'b0; //复位有效时清零
else
q <= d; //触发时输出 q 值为输入 d
endmodule

仿真文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
`timescale 1ns/100ps //仿真时间单位/时间精度

module mydff_tb();

reg clk,rst,d; //需要产生的激励信号定义
wire q,qb; //需要观察的输出信号定义

//初始化过程块
initial
begin
clk = 0;
rst = 0;
d = 0;
#50
rst = 1;

end
always #10 clk = ~clk; //产生输入 clk,频率 50MHz
always #15 d = ~d;

//module 调用例化格式
mydff u1 ( //dff 表示所要例化的 module 名称,u1 是我们定义的例化名称
.clk(clk), //输入输出信号连接。
.rst(rst),
.d(d),
.q(q), //输出信号连接
.qb(qb)
);
endmodule
管脚分配

管脚分配图
管脚分配图

时序仿真

时序仿真图
时序仿真图

实验现象

拨动拨码开关的第1位到ON,给D 触发器输入1,则LED1 灭,LED2 亮,输出Q=1Q=1
Q\overline{Q} 输出0;拨到OFF 时LED1 亮,LED2 灭,即QQ输出0,Q\overline{Q}输出1

工程文件下载