基本D触发器
原理:
代码:
module lab(
input d,clk,
output reg q,qb
);
always @(posedge clk)
begin
q<=d;
qb<=~d;
end
endmodule
仿真:
module Test();
//input
reg d,clk;
//output
wire q,qb;
initial
begin
clk=0;
d=0;
end
always #20 clk=~clk;
always #50 d=~d;
lab test(
.clk(clk),
.d(d),
.q(q),
.qb(qb)
);
endmodule
波形图:
RTL:
同步复位的 D 触发器
只有在时钟信号的上升沿到来并且复位控制端口的信号有效时,D 触发器才进行复位操作,即将输出端口 Q 的值置为逻辑 0,而把输出端口 Q 的值置为逻辑 1
代码:
module lab(
input d,clk,rst,
output reg q,qb
);
always @(posedge clk)
begin
if(~rst)
begin
q<=0;
qb<=1;
end
else
begin
q<=d;
qb<=~d;
end
end
endmodule
仿真:
module Test();
//input
reg d,clk,rst;
//output
wire q,qb;
initial
begin
clk=0;
d=0;
rst=0;
#100
rst=1;
#270
rst=0;
end
always #20 clk=~clk;
always #50 d=~d;
lab test(
.clk(clk),
.d(d),
.q(q),
.qb(qb)
);
endmodule
异步复位的 D 触发器
只要复位控制端口的信号有效,D 触发器就会立即进行复位操作。这时的复位操作是与时钟信号无关的
代码:
module lab(
input d,clk,rst,
output reg q,qb
);
always @(posedge clk or negedge rst)
begin
if(~rst)
begin
q<=0;
qb<=1;
end
else
begin
q<=d;
qb<=~d;
end
end
endmodule
RTL:
同步置位/复位的 D 触发器
原理:
只有在时钟信号的上升沿到来并且同步置位/复位端口的信号有效时,D 触发器才可以进行置位或者复位操作。
代码与之前大同小异,此处略去,若有需要可留言。