介绍一下奇数分频器的设计

电子说

1.3w人已加入

描述

入门从简单开始,先来个三分频分析一下。三分频其实就是把输入时钟的三个周期当作一个周期,具体波形如图所示。(本文只针对于占空比为50%的分析)

计数器

此处还是用计数器的方式完成设计,但是与偶分频有所区别。因为奇数分频的频率与输入的时钟频率有相位差,因此需要增加一些信号完成设计。

clk_n是下降沿触发的信号,clk_p是上升沿触发的信号,通过计数并且因为不同的边沿触发而形成一定的相位差,并将两个信号进行或门处理,最后输出的就是奇数分频结果了。

缺点分析:奇数分频需要在两个触发器之后再加一个组合逻辑门,这个组合逻辑门不仅会增加时钟的延时,而且在设计当中可能出现毛刺。

具体的占空比为50%的任意奇数分频的代码如下所示。

`timescale 1ns/1ps
module CLK_DIV #(parameter DIV_NUM=3)(
    input clk,
    input rst_n,
    output clk_out
    );



  //all odd div
  reg [4:0] cnt1,cnt2;
  reg clk_p,clk_n;

  always @(posedge clk,negedge rst_n)
  if(!rst_n) begin
    cnt1 <= 0;
    clk_p <= 1'b0;
  end
  else begin
    if(cnt1 == DIV_NUM-1) begin
      cnt1 <= 0;
      clk_p <= clk_p;
    end
    else begin
    cnt1 <= cnt1 + 1'b1;
    if(cnt1 == ((DIV_NUM-1)/2)-1 || cnt1 == DIV_NUM-2)
      clk_p <= ~clk_p;
    end
  end

  always @(negedge clk,negedge rst_n)
    if(!rst_n) begin
      cnt2 <= 0;
      clk_n <= 1'b0;
    end
  else begin
    if(cnt2 == DIV_NUM-1) begin
      cnt2 <= 0;
      clk_n <= clk_n;
    end
  else begin
    cnt2 <= cnt2 + 1'b1;
    if(cnt2 == ((DIV_NUM-1)/2)-1 || cnt2 == DIV_NUM-2)
      clk_n <= ~clk_n;
    end
  end

  assign clk_out = clk_p | clk_n;
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分