clk_div.v

来自「用MATLAB产生各种时钟信号」· Verilog 代码 · 共 64 行

V
64
字号

//////////////////////////////////
//  Clock Divider by Odd Number //
//////////////////////////////////

module  clk_div ( 
                 clk   ,
                 rstn  ,
                 clk_o
                 ); 

input  clk   ;
input  rstn  ;
output clk_o ;

parameter  N = 9 ; // 3, 5, 7

// Posedge Domain 
reg       clkn_pos  ;
reg[7:0]  count_pos ;
wire      clear_pos = (count_pos == (N - 1));
wire      updat_pos = (count_pos == (N-1)/2);
always @(posedge clk or negedge rstn )
if (!rstn )
    count_pos <= #3 8'h00 ;
else if(clear_pos )    
    count_pos <= #3 8'h00 ;
else 
    count_pos <= #3 count_pos + 1'b1 ;
    
always @(posedge clk or negedge rstn )
if (!rstn )
    clkn_pos  <= #3 1'b0 ;
else if(updat_pos )
    clkn_pos  <= #3 1'b1 ;
else if(clear_pos )
    clkn_pos  <= #3 1'b0 ;         

// Negedge Domain 
reg       clkn_neg  ;
reg[7:0]  count_neg ;
wire      clear_neg = (count_neg == (N - 1));
wire      updat_neg = (count_neg == (N-1)/2);
always @(negedge clk or negedge rstn )
if (!rstn )
    count_neg <= #3 8'h00 ;
else if(clear_neg )    
    count_neg <= #3 8'h00 ;
else 
    count_neg <= #3 count_neg + 1'b1 ;
    
always @(negedge clk or negedge rstn )
if (!rstn )
    clkn_neg  <= #3 1'b0 ;
else if(updat_neg )
    clkn_neg  <= #3 1'b1 ;
else if(clear_neg )
    clkn_neg  <= #3 1'b0 ;                                   

wire  clk_o = clkn_pos | clkn_neg ;

/////////////////////////////////////////////
endmodule

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?