基础组合逻辑电路之边沿触发的D触发器

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

背景

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

逻辑图结构

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

维持阻塞D触发器

RS触发器真值表

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

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

  • 2.当CP由0变1时,门打开,它们的输出的状态由的输出状态决定。,.由基本RS触发器的逻辑功能知,。(注:这边CP是由0变1,所以很多管脚的默认电平/初试电平也就是CP为0时候的电平)

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

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

维持阻塞D触发器的逻辑功能表
D 说明
0 0 0 输出状态与D端相同
0 1 0 输出状态与D端相同
1 0 1 输出状态与D端相同
1 1 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 亮,输出

输出0;拨到OFF 时LED1 亮,LED2 灭,即输出0,输出1

工程文件下载