D觸發(fā)器Verilog描述
//基本D觸發(fā)器
本文引用地址:http://www.ex-cimer.com/article/201604/290366.htmmodule D_EF(Q,D,CLK)
input D,CLK;
output Q;
reg Q; //在always語句中被賦值的信號要聲明為reg類型 寄存器定義
always @ (posedge CLK) //上升沿,下降沿用negedge表示,^_^ 需要記憶
begin Q <= D; end
endmodule
//帶異步清0、異步置1的D觸發(fā)器
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 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
//帶同步清0、同步置1的D觸發(fā)器
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觸發(fā)器二分頻
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觸發(fā)器可以組合成多位寄存器。
評論