verilog实现简单奇偶分频

分频在 fpga 设计中一直都担任着很重要的角色,实现偶数分频可通过一个简单计数器实现,而如果需要三分频,五分频,七分频等等奇数类分频,一个计数器是不够的,下面我会介绍可以实现偶数分频和任意奇数分频的方法,偶数分频和奇数分频都是利用计数器来计算,但是奇数分频跟偶数分频不一样的地方是奇数分频利用了两个计数器来实现。

1.偶分频
偶分频比较简单,假设为N(偶数)分频,只需计数到N/2-1,然后时钟翻转、计数清零,如此循环就可以得到N(偶)分频,可以通过改变参量N的值和计数变量cnt的位宽实现任意偶分频。代码如下:

always @ (posedge clk or negedge rst_n)
  begin
    if(!rst_n)
       begin
          cnt <= 0;
          out_clk <= 0;
       end
    else begin
       if(cnt==N/2-1)
          begin 
             out_clk <= ~out_clk; 
             cnt<=0; 
          end
       else
          cnt <= cnt + 1;
    end
end

偶数分频波形图,这里N的值为4
2.实现占空比为50%的奇(N)分频
实现奇数分频原理是分别用上升沿计数到N/2+1,时钟进行翻转,再计数到N/2输出out_clk1,再用下降沿计数到N/2+1,时钟进行翻转,再计数到N/2输出out_clk2,将out_clk1和out_clk2相或即可。可以通过修改N的值和计数器的位宽来实现其他奇数分频。代码如下:

always @(posedge clk or negedge rst_n)
                                //上升沿输出out_clk1
  begin
    if(!rst_n)
      begin
        out_clk1<=0; 
        cnt_1<=1; //这里计数器从1开始
      end
    else
      begin
        if(out_clk1 == 0) 
          begin
            if(cnt_1 == N/2+1)
            begin
             out_clk1<=~out_clk1;
             cnt_1 <= 1;
            end
            else
              cnt_1 <= cnt_1+1;
          end
        else
          if(cnt_1 == N/2)
            begin
              out_clk1<=~out_clk1;
              cnt_1 <= 1;
            end
          else
            cnt_1 <= cnt_1+1;
      end
  end
always @(negedge clk or negedge rst_n)
                                //下降沿输出out_clk2
  begin
    if(!rst_n)
      begin
        out_clk2 <= 0; 
        cnt_2 <= 1; 
      end
    else
      begin
        if(out_clk2 == 0)
          begin
            if(cnt_2 == N/2+1)
            begin
             out_clk2 <= ~out_clk2;
             cnt_2 <= 1;
            end
            else
              cnt_2 <= cnt_2+1;
          end
        else
          if(cnt_2 == N/2)
            begin
              out_clk2 <= ~out_clk2;
              cnt_2 <= 1;
            end
          else
            cnt_2 <= cnt_2+1;
      end
  end

assign out_clk = out_clk1 | out_clk2;

奇数分频波形图,这里N的值为5
共勉!欢迎指正

  • 4
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值