FPGA学习记录——分频

本文详细介绍了数字分频技术,包括奇数分频、半整数分频和小数分频的实现方法。通过Verilog代码示例展示了五分频、3.5分频和5.1分频的设计过程,阐述了如何利用计数器和逻辑门电路来实现不同类型的分频。这些技术在数字信号处理和时钟发生器等领域具有广泛应用。
摘要由CSDN通过智能技术生成

1.奇数分频:

设计思路:将两个模N计数器(一个上升沿触发、一个下降沿触发)相或

eg:五分频

module v_jsfp(
    input clk,
    input rst,
    output clk_5
    );//实现五分频
    reg [2:0] m;
    reg [2:0] n;
    reg clk1,clk2;//两个模五计数器
    initial
     begin
      m=0;
      n=0;
      clk1=0;
      clk2=0;
     end
    always@(posedge clk)
    begin
      if(!rst)
       begin
        m=0;
        clk1=0;
       end
      else
       begin
         if(m==4)
          m<=0;
         else
          m<=m+1;
       end
         if(m<2)
          begin
           clk1<=1;
          end
         else
           clk1<=0;
    end

    always@(negedge clk)
    begin
      if(!rst)
       begin
        n<=0;
        clk2<=0;
       end
      else
       begin
         if(n==4)
          n<=0;
         else
          n<=n+1;
       end
         if(n<2)
          begin
           clk2<=1;
          end
         else
           clk2<=0;
    end
    
    assign clk_5=clk1|clk2;
endmodule

仿真:

若要实现任意奇数N分频,parameter N=*

clk1:前(N-1)/2的计数周期为高电平,

clk2:前(N-1)/2的计数周期为高电平。

2.半整数分频

计思路:若要实现(N-1).5分频,要设计一个模N计数器,一个脉冲扣除电路加在模N计数器之后,每来N个脉冲就扣除半个脉冲。

 eg:3.5分频

module v_div3_5(
    input clk,
    input rst,
    output reg clk_out
    );
    reg clk1;
    wire clk2;
    reg [3:0] cnt;
    initial
    begin
     cnt=0;
     clk1=0;
    end
    xor xor1(clk2,clk1,clk);
    always@(posedge clk_out or negedge rst)//二分频
    begin
      if(!rst)
          clk1<=0;
      else
        clk1<=~clk1;
    end
    
    always@(posedge clk2 or negedge rst)//模四分频器
    begin
      if(!rst)
       begin
        cnt<=0;
        clk_out<=0;
       end
      else
       begin
         if(cnt==3)
          begin
           cnt<=0;
           clk_out<=1;
          end
         else
          begin
           cnt<=cnt+1;
           clk_out<=0;
          end
       end
    end
endmodule

仿真:

3.小数分频 

设计思路:先设计两个不同分频比的整数分频器,然后通过控制两种分频比出现的不同次数来获得所需的小数分频值,从而实现平均意义上的小数分频,称为双模前置小数分频器。

实现X=M.N分频,M<X<M+1

X=M+\frac{N_{2}}{N_{1}+N_{2}}=\frac{M\times N_{1} +(M+1)\times N_{2}}{N_{1}+N_{2}}

 以实现5.1分频为例:M=5,N1=9,N2=1,即9次五分频1次六分频。

module v_div5_1(
    input clk,
    input rst,
    output reg clk_out
    );
    reg [3:0] cnt1,cnt2;
   
    initial
      begin
        cnt1=0;
        cnt2=0;
      end
   
    always@(posedge clk or negedge rst)
    begin
      if(!rst)
        begin
          cnt1<=0;
          cnt2<=0;
          clk_out<=0;
        end
      else
        begin
          if(cnt1<9)
            begin
              if(cnt2<4)
                begin
                  cnt2=cnt2+1;
                  clk_out=0;
                end
              else
                begin
                  cnt2=0;
                  clk_out=1;
                  cnt1=cnt1+1;
                end
            end
          else
            begin
              if(cnt2<5)
                begin
                  cnt2=cnt2+1;
                  clk_out=0;
                end
              else
                begin
                  cnt2=0;
                  cnt1=0;
                  clk_out=1;
                end
            end
        end
    end
endmodule

仿真:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值