日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Verilog设计(二):分频电路设计

發(fā)布時間:2023/12/20 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Verilog设计(二):分频电路设计 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

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;endmodule


3.半整數(shù)分頻

半整數(shù)分頻,本次以2.5分頻為例子。這個主要是利用時鐘的上升沿和下降沿進行計數(shù)。

?

?

總結

以上是生活随笔為你收集整理的Verilog设计(二):分频电路设计的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。