精华内容
下载资源
问答
  • VHDL实验分频器设计

    2010-03-31 11:05:01
    分频器设计 实验目的 1. 熟悉QUARTUSII 软件的使用 2. 熟悉PLD设计流程 3. 学习分频器的设计 设计思路与框图 设计一个25位的二进制计数器,以50MHz时钟作为输入,然后将其最后一位引出即可得到大致为1Hz的输出。
  • 基于Verilog的奇偶分频器设计源码及对应的testbench,供大家一起学习。
  • Verilog 分频器设计

    千次阅读 多人点赞 2019-11-19 20:40:59
    在数字电路中,使用 Verilog 生成不同频率的时钟和占空比是较为常见的一种设计,主要分为偶数分频,奇数分频,也可以任意进行分频和占空比的配置; 1、偶分频 偶分频电路指的是分频系数为 2、4、6、8 ... 等偶数...

    目录

     

    1、偶分频

    2、奇分频

    3、任意分频和占空比


     

    在数字电路中,使用 Verilog 生成不同频率的时钟和占空比是较为常见的一种设计,主要分为偶数分频,奇数分频,也可以任意进行分频和占空比的配置;

     

    1、偶分频

    偶分频电路指的是分频系数为 2、4、6、8 ... 等偶数整数的分频电路,这种是比较简单的分频方式

    例如下面 divider.v 中,对输入时钟进行6分频,即假设clk 为 50MHz ,分频后的时钟频率为 (50/6) MHz。程序如下:

    //rtl
    module clk_even_div(
        input clk,
        input rst_n,
        output reg clk_div
    );    
        parameter NUM_DIV = 6;
        reg [3:0]cnt;
        
    always @(posedge clk or negedge rst_n)
        if(!rst_n) begin
            cnt     <= 4'd0;
            clk_div    <= 1'b0;
        end
        else if(cnt < NUM_DIV / 2 - 1) begin
            cnt     <= cnt + 1'b1;
            clk_div    <= clk_div;
        end
        else begin
            cnt     <= 4'd0;
            clk_div    <= ~clk_div;
        end
    endmodule

    testbench为:

    //testbench
    `timescale 1ns / 1ps
    module testb_div_even;
        // Inputs
        reg clk;
        reg rst_n;
        // Outputs
        wire clk_div;
    
        // Instantiate the Unit Under Test (UUT)
        clk_even_div uut (
            .clk(clk), 
            .rst_n(rst_n), 
            .clk_div(clk_div)
        );
        always #10 clk = ~clk;
    
        initial begin
            // Initialize Inputs
            clk = 0;
            rst_n = 0;
            // Wait 100 ns for global reset to finish
            #100;
            // Add stimulus here
            rst_n = 1;
        end
    endmodule
    
    

    2、奇分频

    由于奇分频需要保持分频后的时钟占空比为 50% ,所以不能像偶分频那样直接在分频系数的一半时使时钟信号翻转(高电平一半,低电平一半)。
    接下来我们设计一个 5 分频的模块,设计思路如下:

    采用计数器 cnt1 进行计数,在时钟上升沿进行加 1 操作,计数器的值为 0、1 时,输出时钟信号 clk_div 为高电平;计数器的值为2、3、4 时,输出时钟信号 clk_div 为低电平,计数到 5 时清零,从头开始计数。我们可以得到占空比为 40% 的波形 clk_div1。

    采用计数器 cnt2 进行计数,在时钟下降沿进行加 1 操作,计数器的值为 0、1 时,输出时钟信号 clk_div 为高电平;计数器的值为2、3、4 时,输出时钟信号 clk_div 为低电平,计数到 5 时清零,从头开始计数。我们可以得到占空比为 40% 的波形 clk_div2。

    clk_div1 和clk_div2 的上升沿到来时间相差半个输入周期,所以将这两个信号进行或操作,即可得到占空比为 50% 的5分频时钟。程序如下:

    设计代码:

    module clk_odd_div(
        input clk,
        input rst_n,
        output clk_div
        );
    
        parameter NUM_DIV = 5;
        reg[2:0] cnt1;
        reg[2:0] cnt2;
        reg    clk_div1, clk_div2;
    
    always @(posedge clk or negedge rst_n)
        if(!rst_n)
            cnt1 <= 0;
        else if(cnt1 < NUM_DIV - 1)
            cnt1 <= cnt1 + 1'b1;
        else 
            cnt1 <= 0;
            
    always @(posedge clk or negedge rst_n)
        if(!rst_n)
            clk_div1 <= 1'b1;
        else if(cnt1 < NUM_DIV / 2) 
            clk_div1 <= 1'b1;
        else
            clk_div1 <= 1'b0;
            
    always @(negedge clk or negedge rst_n)
        if(!rst_n)
           cnt2 <= 0;
        else if(cnt2 < NUM_DIV - 1)
           cnt2 <= cnt2 + 1'b1;
        else 
           cnt2 <= 0;
    
    always @(negedge clk or negedge rst_n)
        if(!rst_n)
            clk_div2 <= 1'b1;
        else if(cnt2 < NUM_DIV / 2) 
            clk_div2 <= 1'b1;
        else
            clk_div2 <= 1'b0;
            
        assign clk_div = clk_div1 | clk_div2;
    
    endmodule

    testbench 为;

    //testbench
    `timescale 1ns / 1ps
    module testb_div_odd;
        // Inputs
        reg clk;
        reg rst_n;
        // Outputs
        wire clk_div;
    
        // Instantiate the Unit Under Test (UUT)
        clk_odd_div uut (
            .clk(clk), 
            .rst_n(rst_n), 
            .clk_div(clk_div)
        );
        always #10 clk = ~clk;
    
        initial begin
            // Initialize Inputs
            clk = 0;
            rst_n = 0;
            // Wait 100 ns for global reset to finish
            #100;
            // Add stimulus here
            rst_n = 1;
        end
    endmodule
    

    绿色部分是输入的时钟,红色的部分是输出的 5 分频的时钟;

    黄色和白色部分是 clk_div1 和 clk_div2

     

    3、任意分频和占空比

    获取的任意占空比和分频系数的方式是通过直接进行输入 clk 的值进行计数,在计数器到达某时刻,直接进行输出时钟的 0/1 翻转控制;

    示例代码为:

    module clk_div(
        input clk,
        input rst_n,
        output reg clk_div
        );
    
        reg[5:0] cnt;
        parameter MAX_CNT = 8;
        parameter TOG_CNT = 2;
    	
    always @(posedge clk or negedge rst_n)
        if(!rst_n)
            cnt <= 1'b0;
        else if(cnt < MAX_CNT)
            cnt <= cnt + 1'b1;
        else 
            cnt <= 1'b0;
    
    always @(posedge clk or negedge rst_n)
        if(!rst_n)
            clk_div <= 1'b0;
        else if(cnt < TOG_CNT)
            clk_div <= 1'b1;
        else 
            clk_div <= 1'b0;

    testbench 为:

    module clk_div;
    
        // Inputs
        reg clk;
        reg rst_n;
    
        // Outputs
        wire clk_div;
    
        // Instantiate the Unit Under Test (UUT)
        clk_div uut (
            .clk(clk), 
            .rst_n(rst_n), 
            .clk_div(clk_div)
        );
    
        always #10 clk = ~clk;
    
        initial begin
            // Initialize Inputs
            clk = 0;
            rst_n = 0;
    
            // Wait 100 ns for global reset to finish
            #100;
            
            // Add stimulus here
            rst_n = 1;
    	end
          
    endmodule

    黄色部分为分频出来的时钟;

     

    参考:

    https://www.cnblogs.com/zhangxianhe/p/11083208.html

    展开全文
  • 占空比为50%的奇数分频器设计

    千次阅读 多人点赞 2013-09-05 19:39:00
    占空比为50%的奇数分频器设计思路  1. 首先进行上升沿触发的N模计数,计数器从零开始,到 (N-1)/2 处时钟翻转,然后经过 (N+1)/2再次翻转  得到一个占空比非50%的输出时钟out1.  2. 同时进行下降沿触发的N模计数...

                     占空比为50%的奇数分频器设计思路

                  1.  首先进行上升沿触发的N模计数,计数器从零开始,到 (N-1)/2 处时钟翻转,然后经过 (N+1)/2再次翻转

                       得到一个占空比非50%的输出时钟out1.

                  2. 同时进行下降沿触发的N模计数,计数方法同上升沿相同,然后得到一个占空比非50%的输出时钟out2

                  3.把以上两步得到的输出时钟out1和out2相“与”得到的输出out即占空比为50%的N分频(N为奇数)。

     

                 下面是占空比为50%的N分频代码,修改参数N的值就可以实现任意奇数分频:

     

    module div_odd(clk,out
        );
    input clk;
    output out;
    reg [m:0] a=0,b=0;  //m为满足 2^(m+1)>N 的任意整数
    reg out1,out2;

    always@(posedge clk)
    begin
     if(a<(N-1)/2)
       begin
      a<=a+1;
      out1<=0;
     end
     else if(a==N-1)
      
      a<=0;
     else
      begin
        a<=a+1;
      out1<=1;
     end
    end
    always@(negedge clk)
    begin
     if(b<(N-1)/2)
       begin
      b<=b+1;
      out2<=0;
     end
     else if(b==N-1)
      
      b<=0;
     else
      begin
        b<=b+1;
      out2<=1;
     end
    end
    assign out=out1&&out2;
    endmodule

     
     

    展开全文
  • Verilog各类分频器设计详解

    千次阅读 2021-04-08 11:36:49
    Verilog各类分频器设计详解 分频器是时序电路的基本器件,它的功能是对系统时钟或其他时钟进行分频产生所需要的时钟信号。分频有两种方式:一是通过HDL语言建模产生所需要的时钟信号,二是利用开发工具的PLL进行分频...

    Verilog各类分频器设计详解

    分频器是时序电路的基本器件,它的功能是对系统时钟或其他时钟进行分频产生所需要的时钟信号。分频有两种方式:一是通过HDL语言建模产生所需要的时钟信号,二是利用开发工具的PLL进行分频。前者分频灵活,需编写代码实现;后者使用场景受限,因为有的低端FPGA没有PLL,但PLL的分频效果更好,而且在进行小数分频时也比较容易实现。本文首先尝试用HDL语言建模方式设计各种类型的分频器,最后给大家简单介绍一下PLL的使用。如有不足之处还望大家批评指正。

    偶数分频器

    我们先从最简单的偶数分频器切入,慢慢分析各种分频器的实现。

    若要实现二分频,则只需要在原时钟的上升沿进行输出时钟状态的翻转即可,如下图所示

    2分频.png

    若实现四分频呢?则需要一个计数器,每次在原时钟的上升沿计数,当计数器记到2个上升沿时输出时钟状态进行翻转,如下图所示

    4分频.png

    现在对一般情况进行分析,对时钟进行N分频,N为偶数;则计数器每次在原时钟的上升沿计数,计数器的范围为0-(N-1),我们可以在0-(N-1)这N个数中分出两个范围选择输出时钟的状态,如当cnt在0-M范围时输出时钟为低电平,当cnt在(M+1)-(N-1)范围时输出时钟为高电平,则我们可以动态调整输出时钟的占空比,输出时钟的占空比为(N-M-1)/N;

    8分频.png

    以8分频为例,则N=8,取M=3,则此时输出的时钟应当是50%占空比,如下图所示

    8分频.png

    若取M=1,则此时输出时钟的占空比应当是75%,如下图所示

    8分频75占空比.png

    偶数分频器代码

    // 偶数分频器示例,可调占空比
    module clk_div_even(
    	input wire clk,                 //系统时钟
    	input wire rst_n,               //异步低电平复位
    	input wire [7:0] clkperiod,     //分频系数,N(偶数)分频时clkperiod=N
    	input wire [7:0] clklow,        //低电平占用系统时钟的周期数
                                        //占空比为50%时clklow=N/2
        output reg clk_out				//输出时钟
        );
     
    reg [7:0] cnt;
     
    always @(posedge clk or negedge rst_n) begin
        if(!rst_n) begin
            cnt <= 8'b0;
            clk_out <= 1'b0;
        end
        else begin
            if(cnt == clklow - 1'b1) begin
                clk_out <= 1'b1;
                cnt <= cnt + 8'd1;
            end
            else if(cnt == clkperiod - 1'b1) begin
                clk_out <= 1'b0;
                cnt <= 8'd0;
            end
    		else begin
                cnt <= cnt + 8'd1;
    		end
        end
    end
     
    endmodule
    

    奇数分频器

    我们先以三分频模块切入,分析奇数分频器的思想:整体思路是产生两路上升沿和下降沿触发信号,然后对这两路信号进行操作得到最终分频时钟。

    当分频系数N为奇数时,使用一个计数器在0~(N-1)循环进行计数,控制输出(N-1)/2个高电平,(N+1)/2个低电平,称为clk_1;然后将此clk_1电平信号延迟半个周期称为clk_2,最后输出clk_out = clk_1 | clk_2,即为占空比为50%的奇数分频器;另一种思路是产生输出(N+1)/2个高电平,(N-1)/2个低电平的clk_1,输出的分频时钟为clk_out = clk_1 & clk_2

    clk_out = clk_1 & clk_2为例,将clk_1延时半个时钟周期的方法有两种,法1是直接使用下降沿的锁存器对clk_1锁存得到clk_2,法2得到clk_2的原理与clk_1相同,不过是在下降沿检测。

    3分频.png

    若采用法一,则我们用一个下降沿触发的D触发器锁存clk_1的结果clk_2,然后将clk_1clk_2信号做逻辑“或”就得到了占空比50%的分频时钟信号clk_out

    结合上面的偶数分频器,如果N为偶数,则clk_1就是我们所需要的分频结果,如果N为奇数,则clk_1 & clk_2就是我们所需的分频结果,所以我们可以把偶数分频和奇数分频结合,实现N分频器设计,其中N为正整数;通过N[0]选择输出,N[0]=1为奇数分频,N[0]=0为偶数分频。

    5分频结果如下:

    integer_div5_out.png

    6分频结果如下:

    integer_div6_out.png

    正整数分频器代码

    module clk_div_integer #(
        parameter N = 6,        //N分频,N为整数
        parameter WIDTH = 3     //计数器位宽
    ) (
        input wire clk,
        input wire rstn,
        output wire clk_out
    );
    
        reg [WIDTH-1:0] cnt;
        reg clk_1,clk_2;
        wire clk_odd;
    
        always @(posedge clk or negedge rstn) begin
            if(~rstn) begin
                cnt <= 0;
            end
            else begin
                if(cnt == N-1) begin
                    cnt <= 0;
                end
                else begin
                    cnt <= cnt + 1'b1;
                end
            end
        end
    
        always @(posedge clk or negedge rstn) begin
            if(~rstn) begin
                clk_1 <= 1'b0;
            end
            else begin
                if(cnt == ((N-1) >> 1)) begin
                    clk_1 <= 1'b1;
                end
                else if(cnt == (N-1))begin
                    clk_1 <= 1'b0;
                end
                else begin
                    clk_1 <= clk_1;
                end
            end
        end
    
        //法1:在时钟下降沿锁存clk_1得到clk_2
        always @(negedge clk or negedge rstn) begin
            if(~rstn) begin
                clk_2 <= 1'b0;
            end
            else begin
                clk_2 <= clk_1;
            end
        end
    
        //法2:clk2与clk_1产生的方式相同,差别是clk_2是下降沿触发
        // always @(negedge clk or negedge rstn) begin
        //     if(~rstn) begin
        //         clk_2 <= 1'b0;
        //     end
        //     else begin
        //         if(cnt == ((N-1) >> 1)) begin
        //             clk_2 <= 1'b0;
        //         end
        //         else if(cnt == (N-1)) begin
        //             clk_2 <= 1'b1;
        //         end
        //         else begin
        //             clk_2 <= clk_2;
        //         end
        //     end
        // end
    
        assign clk_odd = clk_1 | clk_2;
        assign clk_out = N[0] ? clk_odd : clk_1;
        
    endmodule
    

    半整数分频器

    1、占空比非50%

    网上比较多的分频思路是:半整数分频多出来的那半个周期为高电平,其余为低电平。以5.5分频为例,以原时钟的半周期为单位,可以分频输出1高10低。原理是用计数器循环记数0~10即11个周期,控制输出clk_1前6周期高电平,后5周期低电平,然后再使用该计数器得到一下降沿触发的5低6高的输出clk_2,最后输出clk_out = clk_1 & clk_2。波形图如下图所示

    5.5分频.png

    现在我们虽然得到了5.5分频后的信号,但占空比不是很理想,是否可以在其基础上进行改进来实现占空比近似50%的分频信号呢?

    2、占空比近似50%

    由上面的波形图我们可以看到,如果clkxclkycnt的其它状态(稍微偏大的值)进行状态翻转的话,可能输出的clk_out = clk_1 & clk_2就能达到近似50%的占空比。在尝试后发现,clkxcnt等于N+M2N时进行状态翻转,clkycnt等于NM时进行状态翻转,此时输出的clk_out = clk_1 & clk_2近似50%占空比。其中N为不超过分频系数的最大整数,如5.5分频时N=5,当N为奇数时M=(N-1)/2,当N为偶数时M=(N+1)/2

    占空比近似50%的4.5分频的波形图如下所示

    4.5分频.png

    半整数分频器代码

    `timescale 1ns/1ns
    module clk_div_half #(
        parameter N = 5             //5.5分频时N=5,以此类推
    ) (
        input wire clk,
        input wire rstn,
        output wire clk_div
    );
    
        //localparam M = 0;                                           //占空比非50%,高电平仅有半周期
        localparam M = N[0] ? ((N - 1) >> 1) : ((N + 1) >> 1);        //占空比近似50%
        reg [31:0] cnt;
        reg clkx,clky;
    
        always @(posedge clk or negedge rstn) begin
           if(~rstn) begin
               cnt <= 32'd0;
           end
           else if(cnt == (N<<1)) begin
               cnt <= 32'd0;
           end
           else begin
               cnt <= cnt + 1'b1;
           end
        end
    
        always @(posedge clk or negedge rstn) begin
            if(~rstn) begin
                clkx <= 1'b0;
            end
            else if(cnt == N + M) begin
                clkx <= 1'b0;
            end
            else if(cnt == (N << 1))begin
                clkx <= 1'b1;
            end
        end
    
        always @(negedge clk or negedge rstn) begin
            if(~rstn) begin
                clky <= 1'b0;
            end
            else if(cnt == N) begin
                clky <= 1'b1;
            end
            else if(cnt == M) begin
                clky <= 1'b0;
            end
        end
    
        assign clk_div = clkx & clky;
        
    endmodule
    

    小数分频器

    以8.7分频为例来分析小数分频器的设计。因为无法用计数器表示0.7这种数字,所以我们用一个等效的概念来实现8.7分频,原时钟87个周期的总时间等于分频后的时钟10个周期的总时间。

    因为8.7分频在8分频和9分频之间,所以我们用8分频和9分频来组合生成8.7分频的时钟。可以列方程组,设8分频共x个周期,9分频共y个周期,则

    • x+y=10 (1)
    • 8*x + 9 *y = 87 (2)

    解得x=3,y=7。

    即通过3次8分频和7次9分频可得到8.7分频。但如果是按序先输出3个8分频再输出7次9分频的时钟用处不大,我们还得乱序使其均匀输出,不然会造成时钟频率均匀性不好,相位抖动大的问题

    此处我们介绍脉冲删除小数分频,该方法相对比较简单。什么意思呢?就是说我在87个输入时钟里删掉77个时钟周期,这样不就输出了10个时钟周期了吗?也就实现了8.7分频,那么该怎么删呢?查阅论文后得到结论:

    1. 设置寄存器cnt位宽自定,初始值为0;
    2. clk的上升沿cnt=cnt+分母,并判断cnt是否大于分子,若大于分子则在下一周期减去分子;
    3. cnt小于分子时,输出脉冲信号为0,cnt大于分子时,输出脉冲信号为1;

    说起来比较乱,我们以7/3分频为例来看

    时钟序号 cnt 输出脉冲
    0 3 0
    1 6 0
    2 9 1
    3 (12->)5 0
    4 8 1
    5 (11->)4 0
    6 (7->)0 1

    从表中可以看到每7个周期输出3个脉冲,刚好满足分频要求。

    小数分频器代码

    `timescale 1ns/1ns
    module clk_div_decimal #(
        parameter fraction = 16'd87,       //分频的分子
        parameter denominator = 16'd10,    //分频的分母
        parameter cnt_width = 8            //计数器的位宽
    ) (
        input wire clk,
        input wire rstn,
        output reg clk_out
    );
    
        reg [cnt_width-1:0] cnt;
        always @(posedge clk or negedge rstn) begin
            if(~rstn) begin
                cnt <= 0;
                clk_out <= 1'b0;
            end
            else if(cnt < fraction) begin
                cnt <= cnt + denominator;
                clk_out <= 1'b0;
            end
            else begin
                cnt <= cnt + denominator - fraction;
                clk_out <= 1'b1;
            end
        end
        
    endmodule
    

    8.7分频结果如下

    8.7分频结果.jpg

    3.25分频结果如下

    3.25分频.jpg

    PLL分频

    这里就给大家简单介绍一下如何在Vivado中对PLL进行例化。

    首先打开vivado,新建一个RTL项目,点击Flow Navigator窗口中的IP Catalog,在search处搜索自己想要的IP核的名字,例如输入clock就会找到Clocking Wizard这个IP核,如下图所示

    pll_1.jpg

    双击Clocking Wizard 这个IP核,就能弹出配置窗口;我们简单配置一些信息,输入时钟为100MHz,分频输出两个时钟,一个是30MHz,一个是18MHz,查看分频效果;

    pll_2.jpg

    pll_3.jpg

    点击Generate,生成IP核,然后在source窗口就会出现一个文件

    pll_4.jpg

    pll_5.jpg

    下面对这个生成的IP进行例化,测试分频效果

    pll_6.jpg

    将这个例化模块的例程添加到自己的顶层仿真代码中,查看分频结果,由下图可见Xilinx提供的PLL分频效果真的厉害,其中一个是10/3分频,一个是50/9分频,占空比均为50%。

    pll_7.jpg


    本次的博客就讲到这里,其中PLL的使用讲的很浅显,大家要想深入学习PLL的IP使用的话可以学习官方文档。
    若文章中存在任何错误或不足欢迎大家指正,欢迎大家在博客下方留言交流。

    展开全文
  • 数字电路中的分频器主要是分为两种:整数分频和小数分频。其中整数分频又分为偶分频和奇分频,首先从偶分频开始吧,入门先从简单的开始!

    ​   

    目录

    一、2^n的偶分频器设计

    这种级联触发器的方式优缺点分析:

    二、任意偶数的分频器设计

    微信公众号


     

     所谓“分频”,就是把输入信号的频率变成成倍数地低于输入频率的输出信号。数字电路中的分频器主要是分为两种:整数分频和小数分频。其中整数分频又分为偶分频和奇分频,首先从偶分频开始吧,入门先从简单的开始!

     

     

    一、2^n的偶分频器设计

        先来看最简单的最常见的一个例子——2分频。

       假设输入时钟clk是100MHz(T=10ns),要求得到一个50MHz的输出时钟clk_out,二分频波形应该如下图所示:

     

        该波形的实际电路只需要一个D触发器便可以完成,将Q非的输出接到D端输入,便可以实现二分频电路,如下图所示。

        由此可以得出,所有2^n次方的偶分频(即二分频、四分频、八分频等等)都可以用触发器级联的方式得到,例如两个触发器级联就是四分频,三个触发器级联就是八分频,如此类推。

     

    这种级联触发器的方式优缺点分析:

    优点:1、能得到占空比为50%的波形;

              2、所使用的的资源也比较少。

    缺点唯一比较大的缺点就是触发器之间有一定的延时。因为驱动clk_out的触发器是由clk作为时钟的,那么这个触发器的Q端变化相比于clk有一个必不可少的clk-to-q延时,例如下图的q3与q1之间的差距就是clk-to-q延时造成的。

        

        这个clk-to-q延时根据不同的工艺,数值会不同。这个clk-to-q的延时在做时钟树综合的时候是要考虑进去的。特别是如果你还期望clk和clk_out是同步的时钟,时钟边沿要对齐的话,在做clock tree的时候要给clk的tree加一些buffer来弥补这个clk-to-q。而如果你是用了好几个分频器级联产生更低频率,那么每一级的分频器都会贡献一个clk-to-q延时,那么你需要平衡时钟的时候就需要插入更多的buffer,这部分buffer又占面积,又耗功耗,甚至可能导致时钟无法平衡。所以这是需要大家在设计的时候考虑进去的。

     

     

    二、任意偶数的分频器设计

        除了上面那种做法之外,对于任意偶数分频的设计还有一种传统的做法就是通过计数器的形式完成设计。例如要设计一个四分频,波形如图所示。cnt计数了DIV_NUM/2-1次之后取反,便可以得到任意偶数分频的波形,任意偶数分频通用代码如下所示

     

     

    `timescale 1ns/1psmodule CLK_DIV #(parameter DIV_NUM=4)(    input clk,    input rst_n,    output reg clk_out    );     reg[3:0] cnt;  always@(posedge clk or negedge rst_n)begin    if(!rst_n)      cnt <= 4'b0;    else begin      if(cnt == (DIV_NUM/2)-1)        cnt <= 4'b0;      else        cnt <= cnt + 1'b1;    end  end  always@(posedge clk or negedge rst_n)begin    if(!rst_n)      clk_out <= 1'b0;    else begin      if(cnt == (DIV_NUM/2)-1)        clk_out <= ~clk_out;    end  end

    微信公众号

         建立了一个微信公众号“Andy的ICer之路”,此公众号主要分享数字IC相关的学习经验,文章主要在公众号上发,csdn会尽量同步更新,有兴趣的朋友可以关注一下!

     

    展开全文
  • 分频器设计

    千次阅读 2020-07-16 09:04:43
    要实现占空比为50%的奇数分频器,在待分频的时钟的上升沿触发计数器,在模n时候进行翻转,再在(n-1)/2再进行翻转,这样得到一个非50%的n倍奇数分频。再利用下降沿触发模n计数,在(n-1)的时候进行一次翻转,再在...
  • 本人最近研究FPGA,结合网上经验和自己领悟,重新编写的分频器,首先是偶数分频器,对于N(偶数)分频器,其原理就是利用计数器,当计数器(从0开始计数).../*偶数分频器设计 Designer : he chunjuan Data : 2018/...
  • 基于VHDL语言分频器电路程序设计

    千次阅读 2020-06-13 15:51:39
    基于VHDL语言分频器电路程序设计(汇总) 分频器简介: 分频器是数字电路中最常用的电路之一,在 FPGA 的设计中也是使用效率非常高的基本设计。基于 FPGA 实现的分频电路一般有两种方法:一是使用FPGA 芯片内部提供...
  • 基于FPGA的任意分频器设计

    千次阅读 2018-05-29 09:21:45
    作者:卢威虎1、前言 分频器是FPGA设计中使用频率非常高的基本单元之一。尽管目前在大部分设计中还广泛使用集成锁相环(如Altera的PLL,Xilinx的DLL)来进行时钟的分频、倍频以及相移设计,但是,对于时钟要求不太...
  • 早期的分频器多为正弦分频器,随着数字集成电路的发展,脉冲分频器(又称数字分频器)逐渐取代了正弦分频器。 一、占空比为50%的分频器。 1、偶分频: 偶分频电路指的是分频系数为 2、4、6、8 … 等偶数整数的分频...
  • 三、基于Verilog的奇偶分频器设计

    千次阅读 2018-08-03 14:57:45
    在对时钟进行分频时,如果要保证设计出的时钟占空比为 50% ,需要考虑的问题是分频系数是偶数还是奇数。针对分频系数的奇偶性,设计出对应的 module 。 2、偶分频电路 偶分频电路指的是分频系数为 2、4、6、8 ......
  • 分频器是用的最广的一种FPGA电路了,我最初使用的是crazybingo的一个任意分频器,可以实现高精度任意分频的一个通用模块,他的思想在于首先指定计数器的位宽比如32位,那么这个计数器的最大值就是2^32=4294967296, ...
  • 任意分频器

    千次阅读 2018-03-01 11:22:14
    由于对任意分频器不熟悉,所以我的思路是把奇分频、偶分频分开做,然后再把他们合在一起首先我做的是偶分频,偶分频是分频中比较简单的,需要对上升沿进行计数,当计数到(N/2-1)的时候,时钟进行反转,然后再计时,...
  • Verilog设计分频器(面试必看)

    千次阅读 2019-06-25 15:41:00
    分频器是指使输出信号频率为输入信号频率整数分之一的电子... 早期的分频器多为正弦分频器,随着数字集成电路的发展,脉冲分频器(又称数字分频器)逐渐取代了正弦分频器。 下面以Verilog HDL 语言为基础介绍占空比...
  • 【VHDL】分频器设计要求:25分频,占空比为50% 程序` LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.all; entity DIV_25 IS PORT(CLK:IN STD_LOGIC; S1,S2:BUFFER STD_LOGIC; CNT:BUFFER INTEGER; Q:OUT STD_LOGIC); ...
  • vhdl入门6分频器

    千次阅读 2019-09-21 14:47:18
    分频器设计有两种思路,一种只适用于偶数次,另外一个是通用。 1.首先,需要知道分频的次数。 通过晶振算出时钟周期,然后你需要定时多少时间,用这个时间除周期,就可以得到计数次数。如:500ms的led翻转,50mhz...
  • 设计思路 从分频数来看,整个设计可分为三部分:1分频、奇数分频、偶数分频。 ①1分频:可直接将输入时钟信号进行输出。 ②偶数分频:使用一个计数器在上升沿或者下降沿进行计数,计数到N/2时,分频时钟进行跳变。 ...
  • D触发器实现分频器

    2021-04-27 11:54:10
    D触发器实现分频器 对于分频器的实现,我们最常用的方法就是通过计数器来实现,具体的实现可以看前面的文章,但是通过D触发器实现却很少遇到,我将通过这篇文章讲解D触发器实现分频器,这里以9分频为例。 我们要实现...
  • 基于VHDL语言的占空比50%的奇数分频器的实现方法,源代码及原理说明。
  • Verilog6-分频器

    2020-10-10 20:42:37
    文章目录Verilog实现分频器1、偶数分频2、奇数分频非50% 占空比的N倍奇数分频:50% 占空比的N倍奇数分频方法1:方法2:方法3:状态机实现方法4:上升、下降沿触发生成两时钟信号 ,二者相与作为时钟 产生 奇数 n ...
  • 上一篇文章介绍了有关分频器的RTL设计,有细心的读者可以发现RTL代码并不完善,如何对RTL改进,优雅的写出RTL,让面试官对你的coding style有深刻的印象,并认为你的基础扎实; 下面先看这个例子: 使用Verilog语言...
  • 在进行数字电路设计的过程中,分频器设计中使用频率较高的一种基本设计之一,虽然很多厂家都提供特定的电路模块对时钟进行分频、倍频以及特定相移等,但是对于时钟要求不高的逻辑,特别是在仿真过程中,使用硬件描述...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,053
精华内容 1,221
关键字:

分频器的设计思路