zoukankan      html  css  js  c++  java
  • 偶分频、奇分频、任意整数分频

    一、偶分频电路,占空比为1:2

     1 //**************************************************************************
     2 // *** 名称 : div_clk.v
     3 // *** 作者 : xianyu_FPGA
     4 // *** 博客 : https://www.cnblogs.com/xianyufpga/
     5 // *** 日期 : 2018-11-30
     6 // *** 描述 : 任意偶数分频,占空比为 1:2
     7 //**************************************************************************
     8 
     9 module div_clk
    10 //==================<参数>==================================================
    11 #(
    12 parameter DIV               = 4                   //分频系数(必须是偶数)
    13 )
    14 //==================<端口>==================================================
    15 (
    16 input  wire                 clk                 , //时钟,50Mhz
    17 input  wire                 rst_n               , //复位,低电平有效
    18 output wire                 div_clk               //分频时钟
    19 );
    20 //==================<信号>==================================================
    21 reg  [31:0]                 cnt                 ;
    22 wire                        add_cnt             ;
    23 wire                        end_cnt             ;
    24 
    25 //==========================================================================
    26 //==    分频计数
    27 //==========================================================================
    28 always @(posedge clk or negedge rst_n) begin
    29     if(!rst_n)
    30         cnt <= 0;
    31     else if(add_cnt) begin
    32         if(end_cnt)
    33             cnt <= 0;
    34         else
    35             cnt <= cnt + 1;
    36     end
    37 end
    38 
    39 assign add_cnt = 1;
    40 assign end_cnt = add_cnt && cnt== DIV-1;
    41 
    42 //==========================================================================
    43 //==    分频时钟
    44 //==========================================================================
    45 assign div_clk = (cnt < DIV/2) ? 0 : 1;
    46 
    47 
    48 
    49 endmodule

    二、奇分频电路,占空比为1:2

     1 //**************************************************************************
     2 // *** 名称 : div_clk.v
     3 // *** 作者 : xianyu_FPGA
     4 // *** 博客 : https://www.cnblogs.com/xianyufpga/
     5 // *** 日期 : 2018-11-30
     6 // *** 描述 : 任意奇数分频,占空比为 1:2
     7 //**************************************************************************
     8 
     9 module div_clk
    10 //==================<参数>==================================================
    11 #(
    12 parameter DIV               = 3                   //分频系数(必须是奇数)
    13 )
    14 //==================<端口>==================================================
    15 (
    16 input  wire                 clk                 , //时钟,50Mhz
    17 input  wire                 rst_n               , //复位,低电平有效
    18 output wire                 div_clk               //分频时钟
    19 );
    20 //==================<信号>==================================================
    21 reg  [31:0]                 pos_cnt             ;
    22 wire                        pos_add_cnt         ;
    23 wire                        pos_end_cnt         ;
    24 reg                         pos_clk             ;
    25 reg  [31:0]                 neg_cnt             ;
    26 wire                        neg_add_cnt         ;
    27 wire                        neg_end_cnt         ;
    28 reg                         neg_clk             ;
    29 
    30 //==========================================================================
    31 //==    clk上升沿触发,得到DIV分频的前半段分频pos_clk
    32 //==========================================================================
    33 always @(posedge clk or negedge rst_n)begin
    34     if(!rst_n)
    35         pos_cnt <= 0;
    36     else if(pos_add_cnt)begin
    37         if(pos_end_cnt)
    38             pos_cnt <= 0;
    39         else
    40             pos_cnt <= pos_cnt + 1;
    41     end
    42 end
    43 
    44 assign pos_add_cnt = 1;
    45 assign pos_end_cnt = pos_add_cnt && pos_cnt==DIV-1;
    46 
    47 always @(posedge clk or negedge rst_n)begin
    48     if(!rst_n) begin
    49         pos_clk <= 0;
    50     end
    51     else if(pos_cnt==DIV/2) begin
    52         pos_clk <= 1;
    53     end
    54     else if(pos_end_cnt) begin
    55         pos_clk <= 0;
    56     end
    57 end
    58 
    59 //==========================================================================
    60 //==    clk下降沿触发,得到DIV分频的后半段分频neg_clk
    61 //==========================================================================
    62 always @(negedge clk or negedge rst_n)begin
    63     if(!rst_n)
    64         neg_cnt <= 0;
    65     else if(neg_add_cnt)begin
    66         if(neg_end_cnt)
    67             neg_cnt <= 0;
    68         else
    69             neg_cnt <= neg_cnt + 1;
    70     end
    71 end
    72 
    73 assign neg_add_cnt = 1;
    74 assign neg_end_cnt = neg_add_cnt && neg_cnt==DIV-1;
    75 
    76 always @(negedge clk or negedge rst_n)begin
    77     if(!rst_n) begin
    78         neg_clk <= 0;
    79     end
    80     else if(neg_cnt==DIV/2) begin
    81         neg_clk <= 1;
    82     end
    83     else if(neg_end_cnt) begin
    84         neg_clk <= 0;
    85     end
    86 end
    87 
    88 //==========================================================================
    89 //==    相或,输出占空比为 1:2 的DIV分频
    90 //==========================================================================
    91 assign div_clk = pos_clk || neg_clk;
    92 
    93 
    94 
    95 endmodule

    三、任意整数分频

      任意偶数分频和任意奇数分频结合即可以扩展为任意整数分频。

      1 //**************************************************************************
      2 // *** 名称 : div_clk.v
      3 // *** 作者 : xianyu_FPGA
      4 // *** 博客 : https://www.cnblogs.com/xianyufpga/
      5 // *** 日期 : 2018-11-30
      6 // *** 描述 : 任意整数分频,占空比为 1:2
      7 //**************************************************************************
      8 
      9 module div_clk
     10 //==================<参数>==================================================
     11 #(
     12 parameter DIV               = 3                   //分频系数(奇偶任意)
     13 )
     14 //==================<端口>==================================================
     15 (
     16 input  wire                 clk                 , //时钟,50Mhz
     17 input  wire                 rst_n               , //复位,低电平有效
     18 output wire                 div_clk               //分频时钟
     19 );
     20 
     21 //==================<信号>==================================================
     22 reg  [31:0]                 cnt                 ;
     23 wire                        add_cnt             ;
     24 wire                        end_cnt             ;
     25 wire                        div_clk_even        ;
     26 reg  [31:0]                 pos_cnt             ;
     27 wire                        pos_add_cnt         ;
     28 wire                        pos_end_cnt         ;
     29 reg                         pos_clk             ;
     30 reg  [31:0]                 neg_cnt             ;
     31 wire                        neg_add_cnt         ;
     32 wire                        neg_end_cnt         ;
     33 reg                         neg_clk             ;
     34 wire                        div_clk_odd         ;
     35 
     36 //==========================================================================
     37 //==    偶分频
     38 //==========================================================================
     39 always @(posedge clk or negedge rst_n) begin
     40     if(!rst_n)
     41         cnt <= 0;
     42     else if(add_cnt) begin
     43         if(end_cnt)
     44             cnt <= 0;
     45         else
     46             cnt <= cnt + 1;
     47     end
     48 end
     49 
     50 assign add_cnt = 1;
     51 assign end_cnt = add_cnt && cnt== DIV-1;
     52 
     53 assign div_clk_even = (cnt < DIV/2) ? 0 : 1;
     54 
     55 //==========================================================================
     56 //==    奇分频
     57 //==========================================================================
     58 always @(posedge clk or negedge rst_n)begin
     59     if(!rst_n)
     60         pos_cnt <= 0;
     61     else if(pos_add_cnt)begin
     62         if(pos_end_cnt)
     63             pos_cnt <= 0;
     64         else
     65             pos_cnt <= pos_cnt + 1;
     66     end
     67 end
     68 
     69 assign pos_add_cnt = 1;
     70 assign pos_end_cnt = pos_add_cnt && pos_cnt==DIV-1;
     71 
     72 always @(posedge clk or negedge rst_n)begin
     73     if(!rst_n) begin
     74         pos_clk <= 0;
     75     end
     76     else if(pos_cnt==DIV/2) begin
     77         pos_clk <= 1;
     78     end
     79     else if(pos_end_cnt) begin
     80         pos_clk <= 0;
     81     end
     82 end
     83 
     84 always @(negedge clk or negedge rst_n)begin
     85     if(!rst_n)
     86         neg_cnt <= 0;
     87     else if(neg_add_cnt)begin
     88         if(neg_end_cnt)
     89             neg_cnt <= 0;
     90         else
     91             neg_cnt <= neg_cnt + 1;
     92     end
     93 end
     94 
     95 assign neg_add_cnt = 1;
     96 assign neg_end_cnt = neg_add_cnt && neg_cnt==DIV-1;
     97 
     98 always @(negedge clk or negedge rst_n)begin
     99     if(!rst_n) begin
    100         neg_clk <= 0;
    101     end
    102     else if(neg_cnt==DIV/2) begin
    103         neg_clk <= 1;
    104     end
    105     else if(neg_end_cnt) begin
    106         neg_clk <= 0;
    107     end
    108 end
    109 
    110 assign div_clk_odd = pos_clk || neg_clk;
    111 
    112 //==========================================================================
    113 //==    奇偶判断后,输出正确的分频
    114 //==========================================================================
    115 assign div_clk = (DIV%2) ? div_clk_odd : div_clk_even;
    116 
    117 
    118 endmodule

    参考资料:[1]威三学院FPGA教程

  • 相关阅读:
    Linux 调用动态库(.SO文件)总结
    Spring Batch 之 skip讲解(九)
    达梦数据库的工具(dmrman、disql)如何在 麒麟V10 下实现上下翻页
    Silverlight BitmapImage的SetSource(Stream streamSource)致命性错误的解决办法
    MEF In MVC
    诟病WCF之一,对已知类型的支持比较弱智(WCF面向接口编程)
    用JQuery异步加载PartialView
    不用windows安装盘安装64位win7或windows server 2008的方法(32位winpe下安装64位的办法)
    WCF客户端配置文件分离(自定义WCF客户端配置文件)
    起步
  • 原文地址:https://www.cnblogs.com/xianyufpga/p/11012938.html
Copyright © 2011-2022 走看看