//基本D触发器
moduleD_EF(Q,D,CLK)
inputD,CLK;
outputQ;
regQ;//在always语句中被赋值的信号要声明为reg类型寄存器定义
always@(posedgeCLK)//上升沿,下降沿用negedge表示,^_^需要记忆
beginQ<=D;end
endmodule
//带异步清0、异步置1的D触发器
moduleD_EF(q,qn,d,clk,set,reset)
inputd,clk,set,reset;
outputq,qn;
regq,qn;//寄存器定义
always@(posedgeclkornegedgesetornegedgereset)
begin
if(!reset)beginq<=0;qn<=1;end//异步清0,低有效
elseif(!set)beginq<=1;qn<=1;end//异步置1,低有效
elsebeginq<=~d;qn<=~d;end
end
endmodule
//带同步清0、同步置1的D触发器
moduleD_EF(q,qn,d,clk,set,reset)
inputd,clk,set,reset;
outputq,qn;
regq,qn;
always@(posedgeclk)
begin
if(reset)beginq<=0;qn<=1;end//同步清0,高有效
elseif(set)beginq<=1;qn<=1;end//同步置1,高有效
elsebeginq<=~d;qn<=~d;end
end
endmodule
附:D触发器二分频
moduledff_2(clk,rst,clk_out);
inputclk,rst;
outputclk_out;
wireclk,rst;
regclk_out;
always@(posedgeclkornegedgerst)
if(!rst)
begin
clk_out<=0;
end
else
begin
clk_out<=~clk_out;
end
endmodule
因为器件有时延所以可以这样,也因为时延所以多个D触发器可以组合成多位寄存器。