Verilog设计(二):分频电路设计
目錄
1.偶數(shù)分頻
2. 奇數(shù)分頻
3.半整數(shù)分頻
? ? ? ? 分頻器是FPGA中常用的設計之一,在FPGA設計中擔任重要的角色(時鐘對于FPGA電路系統(tǒng)的重要性不言而喻!)。盡管大多數(shù)設計中會廣泛采用廠家集成的鎖相環(huán)PLL資源進行分頻,倍頻和相移(每個廠商Xilinx/Alter等其開發(fā)套件會提供各自的IP),但對對時鐘要求不高的基本設計還是需要通過自行設計分頻相移,可節(jié)省鎖相環(huán)資源。
? ? ? ? 提到分頻,對于初學者可定就會想到利用一個計數(shù)器才基時鐘下計數(shù),通過翻轉獲得想要的時鐘。這樣的方法的確可以實現(xiàn)偶數(shù)分頻,但是實現(xiàn)奇數(shù)分頻的話,一個計數(shù)器可能不夠,一般需要兩個計數(shù)器。
1.偶數(shù)分頻
? ? ? 偶數(shù)分頻較奇數(shù)分頻更為常見,通過一個計數(shù)器就完全可以實現(xiàn)了。如需要N分頻(N為偶數(shù),則N/2為整數(shù)),可通過一個計數(shù)器在待分頻時鐘的觸發(fā)下循環(huán)奇數(shù)。當計數(shù)器從0奇數(shù)至N/2 -1時,輸出時鐘翻轉。
Verilog實現(xiàn):
module even( clk_in ,rst_n ,clk_out );input clk_in; input rst_n; output reg clk_out;parameter N=6; //定義分頻參數(shù) reg [3:0] cnt;always @(posedge clk_in or negedge rst_n) beginif(!rst_n) begin cnt <= 4'b0000 ;clk_out <= 1'b0 ;endelse if(cnt==(N/2-1)) beginclk_out <= ~clk_out;cnt <= 4'b0000;end else cnt<=cnt+1; endendmodule?
2. 奇數(shù)分頻
? ? ? ? 首先看一下3分頻的時序圖:
?從時序圖上可以看出,對于奇數(shù)分頻,就是分別利用主時鐘的上升沿觸發(fā)生成一個時鐘,然后用下降沿觸發(fā)生成一組時鐘,然后將兩個時鐘信號進行或運算得到奇數(shù)分頻的結果。
如果N是奇數(shù),那么N/2非整數(shù)了(N-1/2為整數(shù)),那么該如何實現(xiàn)呢?
實現(xiàn)方法為:
? ? ? ? Step1:? ?雙沿計數(shù)器計數(shù);
? ? ? ? ? ? ? ? ? ? ?使用2個計數(shù)器:cnt_up和cnt_down,分別在時鐘的上升沿觸發(fā)計數(shù)器cnt_up和cnt_down。
? ? ? ? Step2:生成兩個控制信號Clk_up和Clk_down;
? ? ? ? ? ? ? ? ? ? cnt_up計數(shù)到(N-1)/2-1電平翻轉信號Clk_up,再計數(shù)到N-1電平翻轉信號Clk_up,同時cnt_down計數(shù)到(N-1)/2-1電平翻轉信號Clk_down,再計數(shù)到N-1電平翻轉信號Clk_down。
? ? ? ? Step3:? 求出分頻后時鐘;
? ? ? ? ? ? ? ?如果Clk_up和Clk_down信號與Clk_out的關系與Clk_up和Clk_down信號中高低電平比有關(占空比):
? ? ? ? ? ? ? ?(1)如果高 / 低電平比例為N-1/2? ? ??: N-1/2 + 1??,則分頻時鐘 clk_div = clk_up || clk_down (如圖 1 所示)。
? ? ? ? ? ? ? ?(2)如果高 / 低電平比例為?N-1/2?+1 :N/2? ? ? ? ,則分頻時鐘 clk_div = clk_up && clk_down(如圖 2 所示)。
module div3(clk ,rst_n ,clk_out );input clk , rst_n; output clk_out ;//=======================================================================\ //**************************Internal Signals****************************** //=======================================================================/reg [3:0] cnt_p , cnt_n; //clk上升沿(下降沿)觸發(fā)生成的計數(shù)器cnt_p(cnt_n) reg clk_p , clk_n; //clk上升沿(下降沿)觸發(fā)生成的時鐘clk_p(clk_n)parameter N=5 ; //分頻參數(shù)//===========================================================================\ //*****************************main code************************************ //==========================================================================///cnt_p 0-4 always @(posedge clk or negedge rst_n) beginif(!rst_n)cnt_p <= 4'd0;else if(cnt_p == N-1)cnt_p <= 0;else cnt_p <= cnt_p + 1'b1;end//cnt_n 0-4 always @(negedge clk or negedge rst_n) begin if(!rst_n)cnt_n <= 4'd0;else if(cnt_n == (N-1))cnt_n <= 0;else cnt_n <= cnt_n + 1'b1;end//clk_p always @(posedge clk or negedge rst_n) beginif(!rst_n)clk_p <= 1;else if(cnt_p == (N-1)/2-1) clk_p <= ~clk_p;else if(cnt_p == (N-1))clk_p <= ~clk_p;end//clk_p always @(negedge clk or negedge rst_n) beginif(!rst_n)clk_n<=1;else if(cnt_n==(N-1)/2-1)clk_n<=~clk_n;else if(cnt_n==(N-1))clk_n<=~clk_n;end assign clk_out=clk_n|clk_p;endmodule3.半整數(shù)分頻
半整數(shù)分頻,本次以2.5分頻為例子。這個主要是利用時鐘的上升沿和下降沿進行計數(shù)。
?
?
總結
以上是生活随笔為你收集整理的Verilog设计(二):分频电路设计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小度独立融资,百度上演“大象跳舞”
- 下一篇: 柔性防水套管A型和B型的区别