D触发器
1. 一个基本的上升沿D触发器
根据上面的电路符号和功能表不难看出,一个基本的D 触发器的工作原理为:当时钟信号的上升沿到来时,输入端口D 的数据将传递给输出端口Q 和输出端口Q。在此,输出端口Q 和输出端口Q 除了反相之外,其他特性都是相同的。
程序如下:
module D_flip_flop(
input [1:0] d,
input clk,
output reg[1:0] q,
output reg[1:0] qb
);
always @(posedge clk) //时钟上升沿触发D触发器
begin
q<= d ;
qb<= ~d ;
end
endmodule
2. 同步复位的D 触发器
在数字电路中,一种常见的带有同步复位控制端口的上升沿D 触发器的逻辑电路符号如图3.3所示,它的功能表如表3.2 所示。
不难看出,只有在时钟信号的上升沿到来并且复位控制端口的信号有效时,D 触发器才进行复位操作,即将输出端口Q 的值置为逻辑0,而把输出端口Q 的值置为逻辑1。
程序代码如下:
module D_flip_flop_2(
input [1:0] d,
input clk,
input reset,
output reg [1:0] q,
output reg [1:0] qb
);
always @ (posedge clk) //时钟上升沿时触发D触发器
begin
if(!reset) //reset为低电平时,D触发器置0
begin
q<= 2'b00 ;
qb<= 2'b11 ;
end
else //reset为高电平时,q=d, qb = ~d ;
begin
q<= d ;
qb<= ~d ;
end
end
endmodule
3. 异步复位的D 触发器
常见的带有异步复位控制端口的上升沿D 触发器的逻辑电路符号如图3.4所示,它的功能表如表3.3 所示。不难看出,只要复位控制端口的信号有效,D 触发器就会立即进行复位操作。可见,这时的复位操作是与时钟信号无关的。
程序代码如下:
module D_flip_flop_3(
input [1:0] d,
input clk,
input reset,
output reg[1:0] q,
output reg[1:0] qb
);
always @ (posedge clk ornegedge reset) //时钟上升沿或reset下降沿时,触发D触发器
begin
if(!reset) //reset为低电平时,D触发器置0
begin
q<= 2'b00 ;
qb<= 2'b11 ;
end
else //reset为高电平时,D触发器处于工作状态
begin
q<= d ;
qb<= ~d ;
end
end
endmodule
4. 同步置位/复位的D 触发器
带有同步置位/复位端口的上升沿D 触发器的逻辑电路符号如图3.5 所示,它的功能表如表3.4所示。不难看出,只有在时钟信号的上升沿到来并且同步置位/复位端口的信号有效时,D触发器才可以进行置位或者复位操作。
程序代码如下:
module D_flip_flop_4(
input [1:0] d,
input clk,
input reset,
input set,
output reg[1:0] q,
output reg[1:0] qb
);
always @ (posedge clk) //时钟上升沿时,触发D触发器
begin
if(!set&& reset) //若set为低电平,reset为高电平时,D触发器置1
begin
q<= 2'b11 ;
qb<= 2'b00 ;
end
else if (set&& !reset) //若set为高电平,reset为低电平时,D触发器置0
begin
q<= 2'b00 ;
qb<= 2'b11 ;
end
else //D触发器正常工作
begin
q<= d ;
qb<= ~d ;
end
end
endmodule