chrisongs的个人空间 https://blog.eetop.cn/chrisongs [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

奇数分频模块 [2011年08月02日]

已有 1260 次阅读| 2011-8-2 15:49 |个人分类:技术文章

用错位异或法原理实现 奇数分频模块:

原理:对于实现占空比为50%的N倍奇数分频,首先进行上升沿触发的模N计数,
计数到某一选定值时进行输出时钟翻转,
然后经过(N-1)/ 2再次进行翻转得到一个占空比非50%奇数N分频时钟。
再者同时进行下降沿触发的模N计数,
到和上升沿触发输出时钟翻转选定值相同值时,进行输出时钟翻转,
同样经过(N-1)/2时,
输出时钟再次翻转生成占空比非50%的奇数N分频时钟。
两个占空比非50%的N分频时钟相或运算,得到占空比为50%的N分频奇数时钟。

源代码:
module clk_div_9(
clk_in,
rst_n,
clk_out
    );
input clk_in;
input rst_n;
output clk_out;
reg [4:0] cnt_p;
reg [4:0] cnt_n;
reg clk_out_p;
reg clk_out_n;
assign clk_out = clk_out_p | clk_out_n;

always @(posedge clk_in) begin
if (!rst_n) begin
clk_out_p <= 0;
cnt_p <= 0;
end
else begin
if ((cnt_p==4'b0000) || (cnt_p==4'b0100)) begin
clk_out_p <= !clk_out_p;
cnt_p <= cnt_p + 1;
end
else if (cnt_p == 4'b1000) begin
clk_out_p <= clk_out_p;
cnt_p <= 4'b0000;
end
else begin
clk_out_p <= clk_out_p;
cnt_p <= cnt_p + 1;
end
end
end
always @(negedge clk_in) begin
if (!rst_n) begin
clk_out_n <= 0;
cnt_n <= 0;
end
else begin
if ((cnt_n==4'b0000) || (cnt_n==4'b0100)) begin
clk_out_n <= !clk_out_n;
cnt_n <= cnt_n + 1;
end
else if (cnt_n == 4'b1000) begin
clk_out_n <= clk_out_n;
cnt_n <= 4'b0000;
end
else begin
clk_out_n <= clk_out_n;
cnt_n <= cnt_n + 1;
end
end
end

endmodule


点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 2

    粉丝
  • 0

    好友
  • 1

    获赞
  • 4

    评论
  • 412

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-6 19:17 , Processed in 0.029265 second(s), 14 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部