基于頻率源的fpga分頻方法
【專利摘要】本發明提供的基于頻率源的FPGA分頻方法,頻率源中FPGA的信號輸入口輸入的信號觸發FPGA的累加器進行計數,FPGA的邏輯控制電路根據累加器的值控制FPGA的脈沖輸出口輸出相應的分頻信號,作為頻率源的輸出信號。節省了FPGA的鎖相環資源,僅占用較少的邏輯單元就可達到對時鐘操作的目的,實現多路不同頻率信號輸出的功能,同時降低了頻率源的成本。無需添加任何硬件電路,全憑軟件實現分頻功能,兼容性好。
【專利說明】基于頻率源的FPGA分頻方法
【技術領域】
[0001]本發明屬于數字電路領域,特別涉及基于頻率源的現場可編程門陣列(FPGA)實現分頻功能的方法。
【背景技術】
[0002]隨著電子技術的快速發展,科學研究、工業生產中需要高精度、高穩定性頻率源的場合越來越多。傳統上的頻率源不但造價昂貴,而且它們在精度和穩定性上都普遍較差,往往不適應當下的要求。
[0003]隨著數字電路應用越來越廣泛,以及超大規模可編程器件的出現,現有的頻率源常常使用現場可編程門陣列(FPGA)實現分頻。目前常見的設計方式是直接使用廠家集成于FPGA芯片內部的鎖相環資源,如Altera公司FPGA中的PLL,Xilinx公司FPGA中的DLL,一個鎖相環資源只能產生一個頻率信號,當頻率源需要多個不同頻率信號輸出時,就需要用到FPGA內部的多個鎖相環資源,這樣,頻率源在設計的時候就需要選用集成有多個鎖相環資源的FPGA,提高了對FPGA的要求和頻率源的成本。并且現有的FPGA芯片內部一般集成有f 2個鎖相環資源,對于需要輸出更多路不同頻率信號的頻率源,現有的FPGA芯片難以滿足要求。
【發明內容】
[0004]針對上述現有技術的不足,本發明所要解決的技術問題是怎么提供一種能夠降低頻率源成本,僅利用FPGA中少量的鎖相環資源實現多路不同頻率信號輸出的FPGA分頻方法。
[0005]為了解決上述技術問題,本發明采用了如下的技術方案:
基于頻率源的FPGA分頻方法,頻率源中FPGA的信號輸入口輸入的信號觸發FPGA的累加器進行計數,FPGA的邏輯控制電路根據累加器的值控制FPGA的脈沖輸出口輸出相應的分頻信號,作為頻率源的輸出信號。
[0006]進一步,所述FPGA分頻方法為偶數倍分頻方法,分頻倍數為N倍,N為偶數;FPGA獲得分頻信號的步驟具體為:
O設置累加器的觸發方式為上升沿觸發;設置累加器為模為N的計數方式;
2)當FPGA的信號輸入口輸入的信號上升沿到達時,累加器進行一次計數;
3)FPGA的邏輯控制電路判斷累加器的值是否為N/2-1,如果是,執行步驟4,否則返回步驟2 ;
4)邏輯控制電路控制FPGA的脈沖輸出口輸出的分頻信號進行翻轉;將累加器進行復位,返回步驟2。
[0007]進一步,所述FPGA分頻方法為奇數倍分頻方法,分頻倍數為M倍,M為奇數,占空比為r/M,r為小于M的正整數;FPGA獲得分頻信號的步驟具體為:
I)設置累加器的觸發方式為上升沿觸發;FPGA的脈沖輸出口輸出低電平;設置累加器為模為M的計數方式;
2)當FPGA的信號輸入口輸入的信號上升沿到達時,累加器進行一次計數;FPGA的邏輯控制電路判斷累加器的值是否為O,如果是,執行步驟5 ;否則執行步驟3 ;
3)FPGA的邏輯控制電路判斷累加器的值是否達到r,如果是,執行步驟5,否則執行步驟4;
4)FPGA的邏輯控制電路判斷累加器的值是否達到M-1,如果是,執行步驟6,否則執行步驟2 ;
5)邏輯控制電路控制FPGA的脈沖輸出口輸出的分頻信號進行翻轉;返回步驟2;
6)將累加器進行復位,返回步驟2。
[0008]進一步,所述FPGA分頻方法為奇數倍分頻方法,分頻倍數為L倍,占空比為1/2 ;所述累加器為2個,包括第一累加器和第二累加器;該方法包括第一分頻信號處理模塊和第二分頻信號處理模塊;第一分頻信號處理模塊和第二分頻信號處理模塊分別通過FPGA的邏輯控制電路得到第一分頻信號和第二分頻信號;邏輯控制電路還用于將第一分頻信號和第二分頻信號進行相或運算,得到頻率源的輸出信號,從FPGA的脈沖輸出口輸出;其中,
第一分頻信號處理模塊獲得第一分頻信號的步驟具體為:
Al)設置第一累加器的觸發方式為上升沿觸發;設FPGA輸出的第一分頻信號的初始狀態為低電平;設置第一累加器為模為L的計數方式;
A2)當FPGA的信號輸入口輸入的信號上升沿到達時,第一累加器進行一次計數;
A3) FPGA的邏輯控制電路判斷第一累加器的值是否為0,如果是,執行步驟A6,否則執行步驟A4 ;
A4) FPGA的邏輯控制電路判斷第一累加器的值是否達到(L-1)/2,如果是,執行步驟A6,否則執行步驟A5 ;
A5) FPGA的邏輯控制電路判斷第一累加器的值是否達到L-1,如果是,將第一累加器復位;返回步驟A2;
A6)邏輯控制電路控制FPGA輸出的第一分頻信號進行翻轉;返回步驟A2 ;
第二分頻信號處理模塊獲得第二分頻信號的步驟具體為:
BI)設置第二累加器的觸發方式為下降沿觸發;設FPGA輸出的第二分頻信號的初始狀態為低電平;設置第二累加器為模為L的計數方式;
B2)當FPGA的信號輸入口輸入的信號下降沿到達時,第二累加器進行一次計數;
B3) FPGA的邏輯控制電路判斷第二累加器的值是否為0,如果是,執行步驟B6,否則執行步驟B4 ;
B4) FPGA的邏輯控制電路判斷第二累加器的值是否達到(L-1)/2,如果是,執行步驟B6,否則執行步驟B5 ;
B5) FPGA的邏輯控制電路判斷第二累加器的值是否達到L-1,如果是,將第二累加器復位;返回步驟A2;
B6)邏輯控制電路控制FPGA輸出的第二分頻信號進行翻轉;返回步驟B2。
[0009]相對于現有技術,本發明具有以下優點:
1、FPGA芯片中的鎖相環資源是一種有限資源,而其內部的邏輯單元卻相當豐富,數以萬計。本發明基于頻率源的FPGA分頻方法,FPGA中可以僅用一個鎖相環資源產生其信號輸入口輸入的信號,節省了 FPGA的鎖相環資源,僅占用較少的邏輯單元就可達到對時鐘操作的目的,實現多路不同頻率信號輸出的功能,同時降低了頻率源的成本。
[0010]2、本發明基于頻率源的FPGA分頻方法無需添加任何硬件電路,全憑軟件實現分頻功能,兼容性好。
[0011]3、本發明基于頻率源的FPGA分頻方法還可以擴展為小數分頻方法,且該方法分頻精度高。解決了現有技術的FPGA用鎖相環資源分頻時,當出現外接晶振乘以倍頻系數不能被分頻系數整除的情況,將引入頻率的舍入誤差的問題。
【專利附圖】
【附圖說明】
[0012]圖1是本發明的基于頻率源的FPGA分頻方法的流程框圖。
[0013]圖2是16分頻的RTL綜合電路原理圖;
圖3是16分頻的仿真波形;
圖4是3分頻的RTL綜合電路原理圖;
圖5是3分頻的仿真波形;
圖6是半整數分頻的原理框圖。
【具體實施方式】
[0014]本發明的基于頻率源的FPGA分頻方法,如圖1所示。頻率源中FPGA的信號輸入口輸入的信號觸發FPGA的累加器進行計數,FPGA的邏輯控制電路根據累加器的值控制FPGA的脈沖輸出口輸出相應的分頻信號,作為頻率源的輸出信號。本發明當要改變頻率源所需分頻信號的頻率或需要輸出多路不同頻率的分頻信號時,僅需要修改、更新FPGA內部軟件即可,而不需對其外部電路進行修改,使硬件修改工作被更新軟件工作所替代,縮短了系統設計、系統升級的周期,提高了實現的靈活性并降低了頻率源的成本,具有較強的適應性和可擴展性,且該方案是基于FPGA內部較少數量的邏輯單元來實現的,而對于FPGA芯片來說,其內部均包含豐富的、高集成度的邏輯單元,一塊FPGA芯片內包含的邏輯單元的密度從數萬門到數千萬門不等,可供用戶完成極其復雜的時序與組合邏輯電路功能,所以適用于高速、高密度的高端邏輯電路設計領域。
[0015]下面結合實施例及附圖對本發明作進一步詳細的描述,但本發明的實施方式不限于此。
[0016]實施例1:
所述FPGA分頻方法為偶數倍分頻方法,分頻倍數為N倍,N為偶數;FPGA獲得分頻信號的步驟具體為:
O設置累加器的觸發方式為上升沿觸發;設置累加器為模為N的計數方式;
2)當FPGA的信號輸入口輸入的信號上升沿到達時,累加器進行一次計數;
3)FPGA的邏輯控制電路判斷累加器的值是否為N/2-1,如果是,執行步驟4,否則返回步驟2 ;
4)邏輯控制電路控制FPGA的脈沖輸出口輸出的分頻信號進行翻轉;將累加器進行復位,返回步驟2。
[0017]例如16分頻方法,其RTL綜合電路原理圖和仿真波形如圖2、3所示,N取16。圖2、3中的reset為FPGA的復位信號,reset為低時復位,reset為高時進入工作狀態,對輸入信號進行16分頻;圖2、3中的clk_in為信號輸入口輸入的信號,可以看到clk_in為占空比50%的方波信號,其周期為10ns ;圖2、3中的clk_out為脈沖輸出口輸出的分頻信號。可以看到clk_out為占空比50%的方波信號,其周期為1600ns。從圖2、3中可以看出,輸出信號與輸入信號在形狀上保持了一致,但其頻率卻變為了輸入信號的1/16,成功實現了輸入信號的16分頻。
[0018]實施例2:
所述FPGA分頻方法為奇數倍分頻方法,分頻倍數為M倍,M為奇數,占空比為r/M,r為小于M的正整數;FPGA獲得分頻信號的步驟具體為:
1)設置累加器的觸發方式為上升沿觸發;FPGA的脈沖輸出口輸出低電平;設置累加器為模為M的計數方式;
2)當FPGA的信號輸入口輸入的信號上升沿到達時,累加器進行一次計數;FPGA的邏輯控制電路判斷累加器的值是否為0,如果是,執行步驟5 ;否則執行步驟3 ;
3)FPGA的邏輯控制電路判斷累加器的值是否達到r,如果是,執行步驟5,否則執行步驟4;
4)FPGA的邏輯控制電路判斷累加器的值是否達到M-1,如果是,執行步驟6,否則執行步驟2 ;
5)邏輯控制電路控制FPGA的脈沖輸出口輸出的分頻信號進行翻轉;返回步驟2;
6)將累加器進行復位,返回步驟2。
[0019]實施例3:
所述FPGA分頻方法為奇數倍分頻方法,分頻倍數為L倍,占空比為1/2 ;所述累加器為2個,包括第一累加器和第二累加器;該方法包括第一分頻信號處理模塊和第二分頻信號處理模塊;第一分頻信號處理模塊和第二分頻信號處理模塊分別通過FPGA的邏輯控制電路得到第一分頻信號和第二分頻信號;邏輯控制電路還用于將第一分頻信號和第二分頻信號進行相或運算,得到頻率源的輸出信號,從FPGA的脈沖輸出口輸出;其中,
第一分頻信號處理模塊獲得第一分頻信號的步驟具體為:
Al)設置第一累加器的觸發方式為上升沿觸發;設FPGA輸出的第一分頻信號的初始狀態為低電平;設置第一累加器為模為L的計數方式;
A2)當FPGA的信號輸入口輸入的信號上升沿到達時,第一累加器進行一次計數;
A3) FPGA的邏輯控制電路判斷第一累加器的值是否為0,如果是,執行步驟A6,否則執行步驟A4 ;
A4) FPGA的邏輯控制電路判斷第一累加器的值是否達到(L-1)/2,如果是,執行步驟A6,否則執行步驟A5 ;
A5)FPGA的邏輯控制電路判斷第一累加器的值是否達到L-1,如果是,將第一累加器復位;返回步驟A2;
A6)邏輯控制電路控制FPGA輸出的第一分頻信號進行翻轉;返回步驟A2 ;
第二分頻信號處理模塊獲得第二分頻信號的步驟具體為:
BI)設置第二累加器的觸發方式為下降沿觸發;設FPGA輸出的第二分頻信號的初始狀態為低電平;設置第二累加器為模為L的計數方式; B2)當FPGA的信號輸入口輸入的信號下降沿到達時,第二累加器進行一次計數;
B3) FPGA的邏輯控制電路判斷第二累加器的值是否為O,如果是,執行步驟B6,否則執行步驟B4 ;
B4) FPGA的邏輯控制電路判斷第二累加器的值是否達到(L-1)/2,如果是,執行步驟B6,否則執行步驟B5 ;
B5) FPGA的邏輯控制電路判斷第二累加器的值是否達到L-1,如果是,將第二累加器復位;返回步驟A2;
B6)邏輯控制電路控制FPGA輸出的第二分頻信號進行翻轉;返回步驟B2。
[0020]例如3分頻,占空比為50%的分頻方法,其RTL綜合電路原理圖和仿真波形如圖4、
5所示。圖4、5中的reset為FPGA的復位信號,reset為低時復位,reset為高時進入工作狀態,對輸入信號進行3分頻;圖4、5中的clk_in為信號輸入口輸入的信號,可以看到clk_in為占空比50%的方波信號,其周期為10ns ;圖4、5中的clk_out為脈沖輸出口輸出的分頻信號。可以看到clk_out為占空比50%的方波信號。其周期為300ns。從圖4、5中可以看出,輸出信號與輸入信號在形狀上保持了一致,但其頻率卻變為了輸入信號的1/3,成功實現了輸入信號的3分頻。
[0021]該發明還可以擴展為小數分頻方法,例如半整數分頻和任意整數帶小數的分頻。
[0022]半整數分頻的原理是:如圖6所示,假設小數分頻比是Q,分頻器的輸入脈沖數是P,分頻器的輸出脈沖數是O。則有:Q=P/0,由于小數分頻不要求占空比,因此只要在O個周期里面取出P個周期的時鐘就可以了,由于P=Q*0,所以可以設計一個寄存器來放Q的值,而Q乘以0,相當于把Q的值累加O次,這樣就可以得到P的值了,從而實現分頻的要求。例如:對于實現P+0.5的半整數分頻一般需要對輸入時鐘進行操作,其基本設計思想是首先進行模P的計數,在計數到P-1時,輸出時鐘賦為“1”,回到計數O時,又賦為0,因此,當計數值為P-1時,輸出時鐘才為I。因此,只要保持計數值P-1為半個輸入時鐘周期,即實現了 P+0.5分頻時鐘,而保持P-1為半個時鐘周期即是一個難點,從中可以發現,因為計數器是通過時鐘上升沿計數,所以可以在計數為η-1時對計數觸發時鐘進行翻轉,此時時鐘的下降沿變成了上升沿,即在計數值為P-1期間的時鐘下降沿變成了上升沿,則計數值P-1只保持了半個時鐘周期,由于時鐘翻轉下降沿變成上升沿,計數值變為0,因此,每產生一個P+0.5分頻時鐘的周期,觸發時鐘都要翻轉一次。
[0023]任意整數帶小數的分頻的原理是:通過不同分頻進行組合來實現,比如要實現6+1/3分頻,可以通過2個七分頻脈沖加上I個五分頻脈沖實現該分頻的設計。即(2*7+5)/(2+1)實現,一般而言,這種分頻由于分頻輸出的時鐘脈沖抖動很大,在設計中使用得很少,但是這種方法從原理上來講是可以實現的。
[0024]采用該發明實現小數分頻,分頻精度高。解決了現有技術的FPGA用鎖相環資源分頻時,當出現外接晶振乘以倍頻系數不能被分頻系數整除的情況,將引入頻率的舍入誤差的問題。
[0025]最后說明的是,以上實施例僅用以說明本發明的技術方案而非限制,盡管參照較佳實施例對本發明進行了詳細說明,本領域的普通技術人員應當理解,可以對本發明的技術方案進行修改或者等同替換,而不脫離本發明技術方案的宗旨和范圍,其均應涵蓋在本發明的權利要求范圍當中。
【權利要求】
1.基于頻率源的FPGA分頻方法,其特征在于,頻率源中FPGA的信號輸入口輸入的信號觸發FPGA的累加器進行計數,FPGA的邏輯控制電路根據累加器的值控制FPGA的脈沖輸出口輸出相應的分頻信號,作為頻率源的輸出信號。
2.如權利要求1所述的基于頻率源的FPGA分頻方法,其特征在于,所述FPGA分頻方法為偶數倍分頻方法,分頻倍數為N倍,N為偶數;FPGA獲得分頻信號的步驟具體為: O設置累加器的觸發方式為上升沿觸發;設置累加器為模為N的計數方式; 2)當FPGA的信號輸入口輸入的信號上升沿到達時,累加器進行一次計數; 3)FPGA的邏輯控制電路判斷累加器的值是否為N/2-1,如果是,執行步驟4,否則返回步驟2 ; 4)邏輯控制電路控制FPGA的脈沖輸出口輸出的分頻信號進行翻轉;將累加器進行復位,返回步驟2。
3.如權利要求1所述的基于頻率源的FPGA分頻方法,其特征在于,所述FPGA分頻方法為奇數倍分頻方法,分頻倍數為M倍,M為奇數,占空比為r/M,r為小于M的正整數;FPGA獲得分頻信號的步驟具體為: 1)設置累加器的觸發方式為上升沿觸發;FPGA的脈沖輸出口輸出低電平;設置累加器為模為M的計數方式; 2)當FPGA的信號輸入口輸入的信號上升沿到達時,累加器進行一次計數;FPGA的邏輯控制電路判斷累加器的值是否為O,如果是,執行步驟5 ;否則執行步驟3 ; 3)FPGA的邏輯控制電路判斷累加器的值是否達到r,如果是,執行步驟5,否則執行步驟4; 4)FPGA的邏輯控制電路判斷累加器的值是否達到M-1,如果是,執行步驟6,否則執行步驟2 ; 5)邏輯控制電路控制FPGA的脈沖輸出口輸出的分頻信號進行翻轉;返回步驟2; 6)將累加器進行復位,返回步驟2。
4.如權利要求1所述的基于頻率源的FPGA分頻方法,其特征在于,所述FPGA分頻方法為奇數倍分頻方法,分頻倍數為L倍,占空比為1/2 ;所述累加器為2個,包括第一累加器和第二累加器;該方法包括第一分頻信號處理模塊和第二分頻信號處理模塊;第一分頻信號處理模塊和第二分頻信號處理模塊分別通過FPGA的邏輯控制電路得到第一分頻信號和第二分頻信號;邏輯控制電路還用于將第一分頻信號和第二分頻信號進行相或運算,得到頻率源的輸出信號,從FPGA的脈沖輸出口輸出;其中, 第一分頻信號處理模塊獲得第一分頻信號的步驟具體為: Al)設置第一累加器的觸發方式為上升沿觸發;設FPGA輸出的第一分頻信號的初始狀態為低電平;設置第一累加器為模為L的計數方式; A2)當FPGA的信號輸入口輸入的信號上升沿到達時,第一累加器進行一次計數; A3) FPGA的邏輯控制電路判斷第一累加器的值是否為O,如果是,執行步驟A6,否則執行步驟A4 ; A4) FPGA的邏輯控制電路判斷第一累加器的值是否達到(L-1)/2,如果是,執行步驟A6,否則執行步驟A5 ; A5) FPGA的邏輯控制電路判斷第一累加器的值是否達到L-1,如果是,將第一累加器復位;返回步驟A2; A6)邏輯控制電路控制FPGA輸出的第一分頻信號進行翻轉;返回步驟A2 ; 第二分頻信號處理模塊獲得第二分頻信號的步驟具體為: BI)設置第二累加器的觸發方式為下降沿觸發;設FPGA輸出的第二分頻信號的初始狀態為低電平;設置第二累加器為模為L的計數方式; B2)當FPGA的信號輸入口輸入的信號下降沿到達時,第二累加器進行一次計數; B3) FPGA的邏輯控制電路判斷第二累加器的值是否為O,如果是,執行步驟B6,否則執行步驟B4 ; B4) FPGA的邏輯控制電路判斷第二累加器的值是否達到(L-1)/2,如果是,執行步驟B6,否則執行步驟B5 ; B5) FPGA的邏輯控制電路判斷第二累加器的值是否達到L-1,如果是,將第二累加器復位;返回步驟A2; B6)邏輯控制電路控制FPGA輸出的第二分頻信號進行翻轉;返回步驟B2。
【文檔編號】H03K23/68GK104283551SQ201410585747
【公開日】2015年1月14日 申請日期:2014年10月28日 優先權日:2014年10月28日
【發明者】李林, 卜凡偉, 趙自知, 陳彬, 于志鈜 申請人:重慶華渝電氣集團有限公司