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教程

  • 相关阅读:
    dotnet 新项目格式与对应框架预定义的宏
    dotnet 线程静态字段
    dotnet 线程静态字段
    dotnet 通过 WMI 拿到显卡信息
    dotnet 通过 WMI 拿到显卡信息
    dotnet 通过 WMI 获取指定进程的输入命令行
    dotnet 通过 WMI 获取指定进程的输入命令行
    dotnet 通过 WMI 获取系统信息
    dotnet 通过 WMI 获取系统信息
    PHP show_source() 函数
  • 原文地址:https://www.cnblogs.com/xianyufpga/p/11012938.html
Copyright © 2011-2022 走看看