概述
偶数分频
// 偶数N分频
// 计数器位宽 X
module div(
input clk,
input rst_n,
output out_clk);
reg out_clk;
reg [X:0] cnt;
always @(posedge clk or negedge rst_n)
if(!rst_n) begin
cnt <= 0; out_clk <= 0;
else if(cnt == N/2 - 1) begin
cnt <= 0; out_clk <= ~out_clk;
end
else begin
cnt <= cnt + 1'b1; out_clk <= out_clk;
end
endmodule
奇数分频
- 非50%占空比
// 奇数N分频
// 占空比 1:N-1
// 计数器位宽 X
module div(
input clk,
input rst_n,
output out_clk);
reg out_clk;
reg [X:0] cnt;
always @(posedge clk or negedge rst_n)
if(!rst_n) begin
cnt <= 0; out_clk <= 0;
end
else if(cnt == X'd(N-1))
cnt <= 0; out_clk <= ~out_clk;
else begin
cnt <= cnt + 1'b1; out_clk <= out_clk;
end
endmodule
- 50%占空比
// 奇数N分频
// 占空比 1:1
// 计数器位宽 X
module div(
input clk,
input rst_n,
output out_clk);
reg [X:0] cnt;
reg out_clk;
reg pos_clk;
reg neg_clk;
always @(posedge clk or negedge rst_n)
if(!rst_n) cnt<= 0;
else if(cnt == X'd(N-1)) cnt <= 0;
else cnt <= cnt + 1'b1;
// 上升沿产生一个2N分频
always @(posedge clk or negedge rst_n)
if(!rst_n) pos_clk <= 0;
else if(cnt == 0) pos_clk <= ~pos_clk
else pos_clk <= pos_clk;
// 下降沿产生一个2N分频
always @(negedge clk or negedge rst_n)
if(!rst_n) pos_clk <= 0;
else if(cnt == (N+1)/2) neg_clk <= ~neg_clk
else neg_clk <= neg_clk;
// 两个信号相异或
assign out_clk = pos_clk ^ neg_clk;
endmodule
最后
以上就是勤劳雪碧为你收集整理的时钟分频-奇/偶数分频的全部内容,希望文章能够帮你解决时钟分频-奇/偶数分频所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复