zoukankan      html  css  js  c++  java
  • 五分频器

    主体部分:

    数分频器的设计比偶数分频器复杂一些,特别是占空比为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
  • 相关阅读:
    我的ZigBee学习之路
    php form表单post提交获取不到数据,而使用get提交能获取到数据 的解决办法
    Mac phpstorm破解版安装(简单,有效)
    Mac下phpstorm 浏览器出现 502 bad gateway 解决办法
    LayUI之table数据表格获取行、行高亮等相关操作
    钉钉自定义机器人配合SVN钩子事件进行消息的推送实践
    电脑无故失去焦点,罪魁祸首是谁?终极解决办法
    Java实现的电脑已连接WiFi热点的导入导出小工具 wifi备份
    C# DataGridView自定义分页控件
    C# DataGridView控件禁止拷贝数据
  • 原文地址:https://www.cnblogs.com/ajiaoa/p/12621152.html
Copyright © 2011-2022 走看看