我是靠谱客的博主 勤劳雪碧,最近开发中收集的这篇文章主要介绍时钟分频-奇/偶数分频,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

偶数分频

// 偶数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分频
// 占空比 11
// 计数器位宽 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


最后

以上就是勤劳雪碧为你收集整理的时钟分频-奇/偶数分频的全部内容,希望文章能够帮你解决时钟分频-奇/偶数分频所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部