一、工作原理
该电路主要是由两个部分组成,第一个部分是由 G1、G2 两个 与非门组成的 RS 锁存器,第二个部分是由 G3、G4 两个与非门组成的控制电路。C 为控制信号,用来控 制 G3 和 G4 的激励输入。
当控制信号 C=0 时,根据与非门的逻辑定律,无论 D 输入 什么信号,RD 和 SD 信号同时为 1。根据由与非门组成的 RS 锁存器的逻辑定律,RD 和 SD 都同时等于 1的话,锁存器的输出端 Q 将维持原状态不变。
当控制端 C=1 时,如果此时 D=0,SD 就等于 1,RD就等于 0,根据 RS 锁存器的逻辑规律,电路的结果就为 0 状态;如果 D =1,那么 RD 就等于 1,SD 也就 等于 0,锁存器的结果就为 1 状态。
二、Verilog代码
module D_latch(
input c,
input d,
output reg q
);
always@(*)
begin
if(c==1'b1)
q=d;
end
endmodule
三、tb代码
`timescale 1ns / 1ps
module tb_dlatch();
reg c;
reg d;
wire q;
initial
begin
c=1;d=0;
#100
c=1;d=1;
#100
c=0;d=0;
#100
c=0;d=0;
#100
c=1;d=0;
end
D_latch dlatch(
.c(c),
.d(d),
.q(q)
);
endmodule
四、仿真结果
五、RTL原理图
注意:在绝大多数设计中我们要避免产生锁存器。它会让你设计的时序出问题,并且它的隐蔽性很强,很难查出问题。锁存器最大的危害在于对电平信号敏感,容易产生毛刺和影响工具进行时序分析,这对于 下一级电路是极其危险的。所以,只要能用触发器的地方,就不用锁存器。