【設計要求】
實現佔空比爲50%的奇數分頻器(示例以三分頻爲例).spa
【原理分析】
在進行數字電路設計的過程當中,分頻器是設計中使用頻率較高的一種基本設計之一,雖然不少廠家都提供特定的電路模塊對時鐘進行分頻、倍頻以及特定相移等,可是對於時鐘要求不高的邏輯,特別是在仿真過程當中,使用硬件描述語言實現分頻仍是較爲方便快捷的,同時經過硬件描述語言實現的時鐘分頻器對於鞏固和加深對於硬件描述語言理解不無裨益.經常使用的分頻器有偶數分頻和奇數分頻,由於偶數分頻相較奇數分頻實現較爲方便,此處路過不進行贅述.而奇數分頻又有佔空比(佔空比是指在一個脈衝循環內,高電平持續時間在所在整個週期中佔據的比例)爲50%和不爲50%的狀況,爲了加深理解,本文僅以佔空比爲50%的奇數分頻爲例進行說明.設計
佔空比爲50%的奇數分頻器:當須要進行(2N+1)分頻時,偶數分頻所使用的的方法已經不適用了,這是由於2N+1的一半是N+0.5,單獨對一個時鐘計數是得不到0.5個時鐘,由於一個計數器只能在時鐘的上升沿或者降低沿被採樣,因此一個週期以內只能計數一次,沒法獲得0.5個計數.可是須要注意的是在一個時鐘週期內時鐘上升沿和降低沿之間恰好相差0.5個時鐘週期.那麼結合上升沿和降低沿相差的0.5個時鐘週期,就能夠獲得設計奇數分頻器的思路:採用兩個徹底同樣的時鐘,其中一個計數器經過上升沿計數,一個計數器經過降低沿計數,而後利用兩個計數器的計數值結合偶數分頻的方法分別獲得兩個中間時鐘(兩個中間時鐘的相差爲原時鐘週期的奇數倍),由於要獲取的最終的奇數分頻後的時鐘的半週期爲原時鐘週期半週期的奇數倍,因此經過兩個中間時鐘進行邏輯操做,便可衍生出奇數倍個原時鐘的半週期,從而獲取到最終的時鐘.blog
即奇數分頻器的分頻出時鐘的特色是:時鐘週期的半週期爲原時鐘週期半週期的奇數倍。class
【源代碼】
方法一:時鐘相或產生原理
第一步:分別使用原時鐘上升沿和降低沿產生兩個兩位計數器(基於上升沿計數的cnt1和基於降低沿計數的cnt2),計數器在計數到2(即2N)時,計數器歸零從新從零開始計數,依次循環;循環
第二步:cnt1計數到0或者計數到1(即N)時,clk1翻轉,從而獲得佔空比爲1:3的clk1;硬件
第三步:cnt2計數到0或者計數到1(即N)時,clk2翻轉,從而獲得佔空比爲1:3的clk2;方法
第四步:由於clk1和clk2相差半個原時鐘週期,兩個中間時鐘進行或操做後,便可獲得輸出時鐘clk_out; im
方法二:時鐘相與產生d3
第一步:分別使用原時鐘上升沿和降低沿產生兩個兩位計數器(基於上升沿計數的cnt1和基於降低沿計數的cnt2),計數器在計數到2(即2N)時,計數器歸零從新從零開始計數,依次循環.
第二步:cnt1計數到0或者計數到2(即2N)時,clk1翻轉,從而獲得佔空比爲2:3的clk1;
第三步:cnt2計數到0或者計數到2(即2N)時,clk2翻轉,從而獲得佔空比爲2:3的clk2;
第四步:由於clk1和clk2相差半個原時鐘週期,兩個中間時鐘進行與操做後,便可獲得輸出時鐘clk_out;
方法三:時鐘異或產生
第一步:實現計數功能;
經過時鐘上升沿實現計數器功能,在計數到2(即2N)時,計數器歸零從新從零開始計數,依次循環;
第二步:上升沿產生中間時鐘clk1;
在計數器計數到2時,clk1翻轉,實現週期爲6(2*(2N+1))的clk1;
第三步: 降低沿產生中間時鐘clk2
時鐘降低沿採樣計數器的計數值,在計數器計數到1(N)時,clk2翻轉,實現週期爲6的clk2,此時clk1和clk2相位差爲1(N)個原時鐘週期加半個願時鐘週期;
第四步:clk1和clk2異或,便可獲得輸出時鐘clk_out;
前兩種方法使用了兩個計數器,最後一種方法使用了一個計數器.由於偶數分頻的半時鐘週期爲原時鐘週期的偶數倍,奇數分頻時鐘週期的半週期爲原來時鐘週期整數倍加半個時鐘週期,所以在進行奇數分頻時必定要注意獲取到原時鐘週期的半個週期,這樣才能在進行各類邏輯操做後獲取到指望的奇數分頻器.
【仿真結果】
【總結】
奇數分頻器實際上就是經過兩個分頻器輸出邏輯操做後得到,關鍵點在於兩個分頻器需經過待分頻時鐘的上升沿和降低沿分別進行設計。
更多資訊,請關注我的公衆號:芯光燦爛