五分频器
Posted ajiaoa
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了五分频器相关的知识,希望对你有一定的参考价值。
主体部分:
数分频器的设计比偶数分频器复杂一些,特别是占空比为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
以上是关于五分频器的主要内容,如果未能解决你的问题,请参考以下文章