//基本D觸發器 module D_EF(Q,D,CLK) input D,CLK; output Q; reg Q; //在always語句中被賦值的信號要聲明為reg類型 寄存器定義 always @ (posedge CLK) //上升沿,下降沿用negedge表示,^_^ 需要記憶 begin Q D觸發器 module D_EF(q,qn,d,clk,set,reset) input d,clk,set,reset; output q,qn; reg q,qn;//寄存器定義 always @ (posedge clk or negedge set or negedge reset) begin if(!reset) begin qD觸發器 module D_EF(q,qn,d,clk,set,reset) input d,clk,set,reset; output q,qn; reg q,qn; always @ (posedge clk) begin if(reset) begin q<=0;qn<=1;end//同步清0,高有效 else if(set) begin q<=1;qn<=1;end //同步置1,高有效 else begin q<=~d;qn<=~d;end end endmodule 附:D觸發器二分頻 module dff_2(clk,rst,clk_out); input clk,rst; output clk_out; wire clk,rst; reg clk_out; always @(posedge clk or negedge rst) if(!rst) begin clk_out<=0; end else begin clk_out<=~clk_out; end endmodule 因為器件有時延所以可以這樣,也因為時延所以多個D觸發器可以組合成多位寄存器。 |