• 五分频器


    主体部分:

    数分频器的设计比偶数分频器复杂一些,特别是占空比为50%的奇数分频器。如果对占空比没有明确的要求,则可以直接对上升沿计数,计数到(N-1)/2 时让输出翻转,计数到(N-1)时让输出状态再次翻转,并将计数器清零,这样就可以得到一个占空比为2:3的N分频(N为奇数)的分频器。而如果要实现50%的占空比,可以通过“错位相或”的方法实现。具体方法是用刚才的方法先通过对上升沿计数产生一个占空比为不是50%的N分频器,再用同样的方法对下降沿计数产生一个占空比也不是50%的N分频器,最后将这两个分频器的输出进行“或”运算,就可以得到占空比为50%的奇数N分频器,具体实现代码如下:

     1 module Freq_divide
     2 (
     3     input clk,
     4     input rst_n,
     5     output clk_divide
     6  );
     7  
     8 //----------count the posedge---------------------
     9 reg [2:0] cnt_p;
    10 reg clk_p;
    11 
    12 always @ (posedge clk or negedge rst_n) 
    13 if(!rst_n) 
    14     cnt_p <= 3'd0;
    15 else if(cnt_p == 3'd4)
    16     cnt_p <= 3'd0;
    17 else 
    18     cnt_p <= cnt_p + 1'b1;
    19 
    20 always @ (posedge clk or negedge rst_n) 
    21 if(!rst_n)     
    22     clk_p <= 1'b0;
    23 else if((cnt_p == 3'd2) || (cnt_p == 3'd4))
    24     clk_p <= ~ clk_p;
    25 //---------------------------------------------
    26 
    27 //----------count the negedge------------------
    28 reg [2:0] cnt_n;
    29 reg clk_n;
    30 
    31 always @ (negedge clk or negedge rst_n) 
    32 if(!rst_n) 
    33     cnt_n <= 3'd0;
    34 else if(cnt_n == 3'd4) 
    35     cnt_n <= 3'd0;
    36 else
    37     cnt_n <= cnt_n + 1'b1;
    38     
    39 always @ (negedge clk or negedge rst_n) 
    40 if(!rst_n) 
    41     clk_n <= 1'b0;
    42 else if((cnt_n == 3'd2) || (cnt_n == 3'd4)) 
    43     clk_n <= ~clk_n;
    44 //----------------------------------------------
    45 
    46 assign clk_divide = clk_p | clk_n;
    47 
    48     
    49 endmodule

    tb部分:

     1 `timescale 1ns / 1ps
     2  
     3 module clk_divide_tb(
     4  
     5     );
     6     reg clk;
     7     reg rst_n;
     8     wire clk_divide;
     9     
    10     
    11     initial begin
    12         clk = 0;
    13         forever 
    14             #2 clk = ~clk;//时钟周期4ns,频率250MHz
    15     end
    16     
    17     initial begin
    18         
    19         rst_n = 0;
    20         
    21         #11
    22         rst_n = 1;
    23     
    24     
    25     
    26     end
    27     
    28     Freq_divide u0(
    29     .clk(clk),
    30     .rst_n(rst_n),
    31     .clk_divide(clk_divide)
    32     );
    33     
    34     
    35 endmodule
    View Code

     2:3取或,变成2.5:2.5,实现百分之五十占比。

    YKJIAO
  • 相关阅读:
    sublime text 内调试Javascript代码
    Sublime Text 3快捷键汇总
    call、apply、bind的异同
    jQuery.cookie的使用指南
    原来css也可以计算-calc()使用
    WebStorm 最新版本激活方式
    JS获取开始、结束时间
    sublime text3---Emmet:HTML/CSS代码快速编写神器
    ThinkPHP3上传文件中遇到的问题
    ThinkPHP3自动加载公共函数文件
  • 原文地址:https://www.cnblogs.com/ajiaoa/p/12621152.html
Copyright © 2020-2023  润新知