校招Verilog——任意整数分频

 一、代码

 1 //**************************************************************************
 2 // *** 名称 : div_clk.v
 3 // *** 作者 : xianyu_FPGA
 4 // *** 博客 : https://www.cnblogs.com/xianyufpga/
 5 // *** 日期 : 2019-08-10
 6 // *** 描述 : 任意整数分频,占空比为 1:2
 7 //**************************************************************************
 8 
 9 module div_clk
10 //========================< 参数 >==========================================
11 #(
12 parameter DIV               = 2                   //分频系数(奇偶任意)
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_clk             ;
23 reg   [31:0]                neg_cnt             ;
24 wire                        neg_clk             ;
25 //==========================================================================
26 //==    clk上升沿分频
27 //==========================================================================
28 always @(posedge clk or negedge rst_n) begin
29     if(!rst_n)
30         pos_cnt <= 0;
31     else if(pos_cnt == DIV - 1)
32         pos_cnt <= 0;
33     else
34         pos_cnt <= pos_cnt + 1;
35 end
36 
37 assign pos_clk = (pos_cnt < DIV/2) ? 0 : 1;
38 //==========================================================================
39 //==    clk下降沿分频
40 //==========================================================================
41 always @(negedge clk or negedge rst_n) begin
42     if(!rst_n)
43         neg_cnt <= 0;
44     else if(neg_cnt == DIV - 1)
45         neg_cnt <= 0;
46     else
47         neg_cnt <= neg_cnt + 1;
48 end
49 
50 assign neg_clk = (neg_cnt < DIV/2) ? 0 : 1;
51 //==========================================================================
52 //==    奇偶判断后,输出正确的分频
53 //==========================================================================
54 assign div_clk = DIV[0] ? (pos_clk & neg_clk) : pos_clk;
55 
56 
57 endmodule

 

二、仿真情况

1、DIV=2时

 2、DIV=3时

 

posted @ 2018-11-30 21:45  咸鱼IC  阅读(2018)  评论(0编辑  收藏  举报