一個數字倍頻電路


這個就是原理圖,奉上代碼

 1 /////////////////////////////////////////////////////////////////////////////
 2 //  DATE    :   Wed Jun  6 22:58:17 CST 2012
 3 /////////////////////////////////////////////////////////////////////////////
 4 module clk_mul(
 5     input   wire            clk
 6 ,   input   wire            rst_n
 7 ,   output  wire            clk_out
 8 );
 9 //////////////////////////////////////////////////////////////////////////////
10 // variable declaration
11 reg     temp_mul    ;
12 //////////////////////////////////////////////////////////////////////////////
13 // logic
14 always @(posedge clk_out or negedge rst_n) begin
15     if(~rst_n)                      temp_mul    <=  1'b0            ;
16     else                            temp_mul    <=  #2 ~temp_mul    ;
17 end
18 assign  clk_out =   ~(clk ^ ~temp_mul)  ;
19 //////////////////////////////////////////////////////////////////////////////
20 
21 endmodule   //          CREATED by poiu_elab@1207
22 
23 //////////////////////////////////////////////////////////////////////////////

 

這個東西很簡單的,但是要注意,它的核心是第16行的#2,這里的延時(占空比)可以通過電路的Tco和經過反相器的時間來搞定(其中可以插入一些buffer來調節時間),testbench這么來寫(很簡單,但是便於下面解釋延時對占空比的影響還是附上)。

 1 ///////////////////////////////////////////////////////////////////////////////
 2 //  DATE    :   Wed Jun  6 23:00:31 CST 2012
 3 ///////////////////////////////////////////////////////////////////////////////
 4 `define CLK_CYCLE   20
 5 module tb();
 6 ///////////////////////////////////////////////////////////////////////////////
 7 // variable declaration
 8 reg             clk         ;
 9 reg             rst_n       ;
10 wire            clk_out     ;
11 ///////////////////////////////////////////////////////////////////////////////
12 // stimulation generation
13 initial forever #(`CLK_CYCLE/2) clk = ~clk;
14 initial begin
15     rst_n           =   1'b0            ;
16     clk             =   1'b1            ;
17 #500;
18     rst_n           =   1'b1            ;
19 #5000;
20 $stop;
21 end
22 ///////////////////////////////////////////////////////////////////////////////
23 // module instaniation
24 clk_mul u_clk_mul(
25     .clk        (   clk     )
26 ,   .rst_n      (   rst_n   )
27 ,   .clk_out    (   clk_out )
28 );
29 ///////////////////////////////////////////////////////////////////////////////
30 
31 endmodule   //          CREATED by poiu_elab@1207
32 
33 ///////////////////////////////////////////////////////////////////////////////

 

下面給出仿真圖,當#2的時候,是這樣的,其中你要關心的其實是~temp_mul & clk, 當你要是q端經過反相器的信號與接入的clk信號相同的時候你的clk_out就會起來,之后你的q端翻轉了的話,你的clk_out就會落下來,這時候在下一個clk翻轉的時候,你的~temp_mul & clk就會又要把clk_out拉起來,q端又翻轉,以此類推,就可以繼續在每個clk的跳變沿出現你的clk_out的高電平,調整你的Tco和反相器延時就可以調整你的高電平時間,由於周期又是固定的,這樣就可以調整你的占空比。

 

而當#5的時候,是這樣的

看出什么端倪了沒,當你的延時,正好是時鍾周期的1/4的時候,你就可以得到一個占空比是50%的2倍頻時鍾。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM