D触发器实现分频电路
一D触发器实现2的幂次方分频如4分频
触发器模块代码
module D_flip_flop(
input clk,
input d,
output reg q=0,
output qb
);
assign qb=~q;
always @(posedge clk)begin q<=d;
end
endmodule
二 任意奇数分频模块
module div_odd(clkin,reset_n,clkout_p,clkout_n,clkout,count_p,count_n);
input clkin;
input reset_n;
output reg clkout_p;
output reg clkout_n;
output reg [2:0]count_p; output reg [2:0]count_n; output clkout;
parameter cnt_1=2,cnt_2=4;//此处设定的是5分频的
方案
气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载
; always@(posedge clkin or negedge reset_n) //由正跳变沿触发产生中间时钟clkout_p;
begin
if(!reset_n)
clkout_p<=0;
else if(count_p==cnt_1)
clkout_p<=~clkout_p;
else if(count_p==cnt_2)
clkout_p<=~clkout_p;
else
clkout_p<=clkout_p; end
always@(posedge clkin or negedge reset_n) //对输入时钟的正跳变沿计数;
begin
if(!reset_n)
count_p<=0;
else if(count_p==cnt_2)
count_p<=0;
else
count_p<=count_p+1;
end
always@(negedge clkin or negedge reset_n) //由负跳变沿触发产生中间时钟clkout_n;
begin
if(!reset_n)
clkout_n<=0;
else if(count_n==cnt_1)
clkout_n<=~clkout_n;
else if(count_n==cnt_2)
clkout_n<=~clkout_n;
else
clkout_n<=clkout_n; end
always@(negedge clkin or negedge reset_n) //对输入时钟的负跳变沿计数; begin
if(!reset_n)
count_n<=0;
else if(count_n==cnt_2)
count_n<=0;
else
count_n<=count_n+1; end
assign clkout=clkout_p||clkout_n; //将两个中间时钟相或产生输出时钟; endmodule
三 编写一顶层模块分别实现2分频,4分频,两种方式5分频 module job_test_top(
input clk,
input reset_n,
output clk_4div,
output clk_odd_div,
output clk_5div
);
wire clk_2div;
wire qb1;
wire qb2;
wire q3;
wire q4;
wire q5;
D_flip_flop D_flip_flop_1 (
.clk(clk),
.d(qb1),
.q(clk_2div),
.qb(qb1)
);
D_flip_flop D_flip_flop_2 (
.clk(clk_2div),
.d(qb2),
.q(clk_4div),
.qb(qb2)
);
//用计数的方式实现5分频
div_odd div_odd (
.clkin(clk),
.reset_n(reset_n),
.clkout_p(clkout_p),
.clkout_n(clkout_n),
.clkout(clk_odd_div),
.count_p(count_p),
.count_n(count_n)
);
//用D触发器D触发器+组合逻辑实现5分频
D_flip_flop D_flip_flop_3 (
.clk(clk),
.d( (!q3)&&(!q4)&&q5 ),
.q(q3),
.qb()
);
D_flip_flop D_flip_flop_4 (
.clk(clk),
.d( (!q3)&&(!q5) ),
.q(q4),
.qb()
);
D_flip_flop D_flip_flop_5 (
.clk(clk),
.d(q4),
.q(q5),
.qb()
);
assign clk_5div=(q3||clk_5div)&&(clk||(!q4));
endmodule
用d触发器实现5分频的逻辑图如下