本發明涉及集成電路設計技術領域,具體涉及一種振蕩器的頻率校準電路及其頻率校準方法,基于鎖相環二分法確定最佳電容控制字。
背景技術:
鎖相環是射頻通信系統中的一個關鍵模塊,被用來為收發機提供穩定的頻率。鎖相環電路是一種反饋控制電路,利用外部晶振提供的輸入參考時鐘,來控制環路內部振蕩信號的頻率以及相位,從而得到需要的頻率信號。經典的鎖相環電路由鑒頻鑒相器、電荷泵、環路濾波器、壓控振蕩器以及分頻器組成,若要實現小數分頻,還需要加入sigma-delta調制器。由于射頻鎖相環需要高的振蕩頻率,寬的調諧范圍,以及好的相位噪聲,所以通常采用電感電容壓控振蕩器(LCVCO)。在選定一個電感之后,LCVCO的振蕩頻率由電容決定。為了覆蓋寬的調諧范圍,以及工藝角變化,通常將振蕩器的頻率分為多個子帶來控制,上電后采用自動頻率校準技術,在電路開環狀態下,篏位LCVCO控制電壓值,利用開關電容陣列提供粗調,預先將LCVCO調諧到目標頻率附近的子帶,再利用連續可變的電容提供細調,從而將壓控振蕩器鎖定到目標頻率。
子帶的選擇,通常采用純數字的自動頻率校準方法來實現。傳統的頻率校準方法有遍歷法和二分法等。遍歷法,可以從高到低,或者從低到高,直到找到目標值,缺點是在狀態很多時,用時會比較長。二分法是從中間值開始,先決定最高位的值,然后依次比較,最后定出最低位的值。二分法的優點是快速高效,但是結果具有方向性。例如,目標頻率處于子帶一和子帶二之間,且子帶一的頻率大于子帶二的頻率,則具有向上性的二分法,無論目標頻率是距離子帶一近,還是距離子帶二近,校準的結果都會選則子帶一。
技術實現要素:
本發明的目的在于提供一種振蕩器的頻率校準電路及其頻率校準方法,在不增加開關電容陣列的前提下,有效提高頻率校準精度。
為了達到上述目的,本發明通過以下技術方案實現:一種振蕩器的振蕩頻率校準電路,其特點是,包含:
狀態機模塊,用于接收校準開始信號后,輸出計數開始信號,以及控制狀態關系轉移;
參考時鐘計數器,用于接收計數開始信號后開始計數,并向狀態機模塊反饋振蕩器延遲完成位信號;
分頻時鐘計數器,用于接收計數開始信號后開始計數;
電容字選擇模塊,用于存儲參考時鐘計數器和分頻時鐘計數器的計數值及采用預設算法確定最佳電容控制字。
一種振蕩器的振蕩頻率校準方法,應用于上述的振蕩頻率校準電路中,其特點是,用于4位電容控制字校準,該振蕩頻率校準方法包含以下步驟:
步驟S102:狀態機模塊接收到校準開始信號后,向電容字選擇模塊發送控制信號,設置電容控制字的初始值、最佳電容控制字的初始值、最大計數值的初始值、當前計數值的初始值,并分別向參考時鐘計數器和分頻時鐘計數器發送計數開始信號;
步驟S104:當參考時鐘計數器與分頻時鐘計數器中的一個,其計數值達到第一預設閾值時,則電容字選擇模塊將未計數完成的計數器的計數值存儲為當前計數值,并根據當前計數值與最大計數值之間的大小關系,對最佳電容控制字和最大計數值進行賦值;
步驟S106:狀態機模塊再次向參考時鐘計數器和分頻時鐘計數器發送計數開始信號,參考時鐘計數器和分頻時鐘計數器由零開始計數,重復步驟S104,依次確定4位電容控制字的bit3、bit2、bit1、bit0的值;
步驟S108:當參考時鐘計數器與分頻時鐘計數器中的一個,其計數值達到第一預設閾值時,電容字選擇模塊將未計數完成的計數器的計數值存儲為當前計數值,將當前計數值與最大計數值進行比較,若當前計數值大于最大計數值,則將當前計數值賦值給最大計數值,并將當前電容控制字賦值給最佳電容控制字;
步驟S110:振蕩頻率校準完成,將完成標志位置為高,電路開環標志設為零,控制電容陣列的電容字選擇最佳電容控制字。
所述的電容控制字的初始值為1000;最佳電容控制字的初始值為1000;最大計數值的初始值為0當前計數值的初始值為0。
所述的第一預設閾值為512。
所述的步驟S102之后、步驟S104之前還包含一步驟S112,所述的步驟S112包含:
步驟S112:當參考時鐘計數器的計數值達到第二預設閾值時,參考時鐘計數器向狀態機模塊反饋振蕩器延遲完成位信號,所述的狀態機模塊再次向參考時鐘計數器和分頻時鐘計數器發送計數開始信號,參考時鐘計數器和分頻時鐘計數器由零開始計數。
所述的第二預設閾值為16。
所述的步驟S104中包含:
若參考時鐘計數器的計數值首先達到第一預設閾值,則對電容控制字進行重設,減小電容控制字,并將分頻時鐘計數器的計數值賦值給當前計數值;
比較當前計數值與最大計數值;
若當前計數值大于最大計數值,則將重設前的電容控制字賦值給最佳電容控制字,將當前計數值賦值給最大計數值;
若當前計數值小于最大計數值,則最佳電容控制字和最佳電容控制字均保持不變。
所述的步驟S104中包含:
若分頻時鐘計數器的計數值首先達到第一預設閾值,則對電容控制字進行重設,增大電容控制字,并將分頻時鐘計數器的計數值賦值給當前計數值;
比較當前計數值與最大計數值;
若當前計數值大于最大計數值,則將重設前的電容控制字賦值給最佳電容控制字,將當前計數值賦值給最大計數值;
若當前計數值小于最大計數值,則最佳電容控制字和最佳電容控制字均保持不變。
所述的步驟S110中還包含:
狀態機模塊等待接收新的校準開始信號;
若無新的校準開始信號,則將振蕩器鎖定;
若有新的校準開始信號,則初始化振蕩頻率校準電路,繼續執行步驟S102~步驟S110。
本發明一種振蕩器的頻率校準電路及其頻率校準方法與現有技術相比具有以下優點:在相同電容陣列的條件下,有效提高頻率校準精度,從而使得振蕩器能夠在不同的工藝角,不同溫度變化下,都能夠鎖定。
附圖說明
圖1為本發明一種振蕩器的頻率校準電路的結構框圖;
圖2為本發明一種振蕩器的頻率校準方法的流程圖;
圖3為二分法頻率校準狀態轉移圖;
圖4為最佳電容控制字的選擇流程圖。
具體實施方式
以下結合附圖,通過詳細說明一個較佳的具體實施例,對本發明做進一步闡述。
一種振蕩器的振蕩頻率校準電路10,如圖1所示,包含:狀態機模塊101,用于接收校準開始信號后,輸出計數開始信號,以及控制狀態關系轉移;參考時鐘計數器102,用于接收計數開始信號后開始計數,并向狀態機模塊101反饋振蕩器延遲完成位(stDelBit)信號;分頻時鐘計數器103,用于接收計數開始信號后開始計數;電容字選擇模塊104,用于存儲參考時鐘計數器102和分頻時鐘計數器103的計數值及采用預設算法確定最佳電容控制字。
本發明還公開了一種振蕩器的振蕩頻率校準方法,應用于振蕩頻率校準電路中,用于4位電容控制字校準,如圖2所示,該振蕩頻率校準方法包含以下步驟:
步驟S102:狀態機模塊接收到校準開始信號后,向電容字選擇模塊發送控制信號,設置電容控制字的初始值、最佳電容控制字的初始值、最大計數值的初始值、當前計數值的初始值,并分別向參考時鐘計數器和分頻時鐘計數器發送計數開始信號。
步驟S112:當參考時鐘計數器的計數值達到第二預設閾值時,參考時鐘計數器向狀態機模塊反饋振蕩器延遲完成位信號,所述的狀態機模塊再次向參考時鐘計數器和分頻時鐘計數器發送計數開始信號,參考時鐘計數器和分頻時鐘計數器由零開始計數。
步驟S104:當參考時鐘計數器與分頻時鐘計數器中的一個,其計數值達到第一預設閾值時,則電容字選擇模塊將未計數完成的計數器的計數值存儲為當前計數值,并根據當前計數值與最大計數值之間的大小關系,對最佳電容控制字和最大計數值進行賦值。
若參考時鐘計數器的計數值首先達到第一預設閾值,則對電容控制字進行重設,減小電容控制字,并將分頻時鐘計數器的計數值賦值給當前計數值;比較當前計數值與最大計數值;若當前計數值大于最大計數值,則將重設前的電容控制字賦值給最佳電容控制字,將當前計數值賦值給最大計數值;若當前計數值小于最大計數值,則最佳電容控制字和最佳電容控制字均保持不變。
若分頻時鐘計數器的計數值首先達到第一預設閾值,則對電容控制字進行重設,增大電容控制字,并將分頻時鐘計數器的計數值賦值給當前計數值;比較當前計數值與最大計數值;若當前計數值大于最大計數值,則將重設前的電容控制字賦值給最佳電容控制字,將當前計數值賦值給最大計數值;若當前計數值小于最大計數值,則最佳電容控制字和最佳電容控制字均保持不變。
步驟S106:狀態機模塊再次向參考時鐘計數器和分頻時鐘計數器發送計數開始信號,參考時鐘計數器和分頻時鐘計數器由零開始計數,重復步驟S104,依次確定4位電容控制字的bit3、bit2、bit1、bit0的值。
步驟S108:當參考時鐘計數器與分頻時鐘計數器中的一個,其計數值達到第一預設閾值時,電容字選擇模塊將未計數完成的計數器的計數值存儲為當前計數值,將當前計數值與最大計數值進行比較,若當前計數值大于最大計數值,則將當前計數值賦值給最大計數值,并將當前電容控制字賦值給最佳電容控制字。
步驟S110:振蕩頻率校準完成,將完成標志位置為高,電路開環標志設為零,控制電容陣列的電容字選擇最佳電容控制字。狀態機模塊等待接收新的校準開始信號;若無新的校準開始信號,則將振蕩器鎖定;若有新的校準開始信號,則初始化振蕩頻率校準電路,繼續執行步驟S102~步驟S110。
具體地,結合圖1、圖3和圖4通過具體實施例對本發明的振蕩器的振蕩頻率校準方法作進一步詳細說明,將頻率校準狀態從0~11,分為12個狀態。需要說明的是,附圖均采用非常簡化的形式、使用非精確的比例,且僅用以方便、明晰地達到輔助說明本發明實施例的目的。
狀態0,又稱之為空閑狀態:當狀態機模塊接收到校準開始信號calStartIn時,狀態機模塊進入狀態1,同時將電容控制字的初始值置為1000,產生計數開始信號CountStart,參考時鐘計數器和分頻時鐘計數器同時開始計數。電容字選擇模塊將最大計數值和當前計數值設為0,當前電容字和最佳電容字設為1000。狀態0中的電容控制字輸出capArrayOut=1000。
狀態1,又稱之為電容控制字bit3的等待狀態:當參考時鐘計數器的計數值到16時,產生stDelBit信號,狀態機模塊進入狀態2,同時產生計數開始信號CountStart,使得參考時鐘計數器和分頻時鐘計數器同時開始從零計數,此步驟是為了使得校準結果比較準確,在每次電容控制字發生改變后,都加入了16個參考時鐘長度的等待時間,從而使得振蕩時鐘穩定才開始計數。狀態1中的電容控制字輸出capArrayOut=1000。
狀態2,又稱之為電容控制字bit3的決定狀態:當任一個計數器的計數值達到512時,狀態機模塊進入狀態3,同時產生計數開始信號CountStart,使得參考時鐘計數器和分頻時鐘計數器同時開始從零計數,如果是參考時鐘計數器計數先完成,說明分頻時鐘慢,需要減小電容字,則減小電容控制字,bit3的值設為0,bit2的值置為1,bit1的值及bit0的值保持不變,將電容控制字存入當前電容控制字寄存器,并將分頻時鐘計數器的計數值賦值給當前計數值,當前計數值存入計數寄存器;比較當前計數值與最大計數值;若當前計數值大于最大計數值,說明當前的電容控制字對應的頻率子帶更接近目標頻率,則將重設前的電容控制字賦值給最佳電容控制字,將當前計數值賦值給最大計數值;若當前計數值小于最大計數值,則最佳電容控制字和最佳電容控制字均保持不變;如果是分頻時鐘計數器先完成計數,說明分頻時鐘快,需要加大電容字,則增大電容字,bit3保持1,bit2同時置為1,bit1的值及bit0的值保持不變,將電容控制字存入當前電容控制字寄存器,并將分頻時鐘計數器的計數值賦值給當前計數值;比較當前計數值與最大計數值;若當前計數值大于最大計數值,則將重設前的電容控制字賦值給最佳電容控制字,將當前計數值賦值給最大計數值;若當前計數值小于最大計數值,則最佳電容控制字和最佳電容控制字均保持不變。狀態2中的參考計數完成時的電容控制字輸出capArrayOut=(capArrayOut&4'b0111)|4'b0100;分頻計數完成時的電容控制字輸出capArrayOut=capArrayOut|4'b0100。
狀態3,又稱之為電容控制字bit2的等待狀態:當參考時鐘計數器的計數值到16時,產生stDelBit信號,狀態機模塊進入狀態4,同時產生計數開始信號CountStart,使得參考時鐘計數器和分頻時鐘計數器同時開始從零計數。
狀態4,又稱之為電容控制字bit2的決定狀態:當任一個計數器的計數值達到512時,狀態機模塊進入狀態3,同時產生計數開始信號CountStart,使得參考時鐘計數器和分頻時鐘計數器同時開始從零計數,如果是參考時鐘計數器計數先完成,則減小電容控制字,bit2的值設為0,bit1的值置為1,bit3的值及bit0的值保持不變,將電容控制字存入當前電容控制字寄存器,并將分頻時鐘計數器的計數值賦值給當前計數值,當前計數值存入計數寄存器;比較當前計數值與最大計數值;若當前計數值大于最大計數值,則將重設前的電容控制字賦值給最佳電容控制字,將當前計數值賦值給最大計數值;若當前計數值小于最大計數值,則最佳電容控制字和最佳電容控制字均保持不變;如果是分頻時鐘計數器先完成計數,則增大電容字,bit1的值置為1,bit3的值、bit2的值及bit0的值保持不變,將電容控制字存入當前電容控制字寄存器,并將分頻時鐘計數器的計數值賦值給當前計數值;比較當前計數值與最大計數值;若當前計數值大于最大計數值,則將重設前的電容控制字賦值給最佳電容控制字,將當前計數值賦值給最大計數值;若當前計數值小于最大計數值,則最佳電容控制字和最佳電容控制字均保持不變。狀態4中的參考計數完成時的電容控制字輸出capArrayOut=(capArrayOut&4'b1011)|4'b0010;分頻計數完成時的電容控制字輸出capArrayOut=capArrayOut|4'b0010。
狀態5,又稱之為電容控制字bit1的等待狀態:當參考時鐘計數器的計數值到16時,產生stDelBit信號,狀態機模塊進入狀態6,同時產生計數開始信號CountStart,使得參考時鐘計數器和分頻時鐘計數器同時開始從零計數。
狀態6,又稱之為電容控制字bit1的決定狀態:當任一個計數器的計數值達到512時,狀態機模塊進入狀態7,同時產生計數開始信號CountStart,使得參考時鐘計數器和分頻時鐘計數器同時開始從零計數,如果是參考時鐘計數器計數先完成,則減小電容控制字,bit1的值設為0,bit0的值置為1,bit3的值及bit2的值保持不變,將電容控制字存入當前電容控制字寄存器,并將分頻時鐘計數器的計數值賦值給當前計數值,當前計數值存入計數寄存器;比較當前計數值與最大計數值;若當前計數值大于最大計數值,則將重設前的電容控制字賦值給最佳電容控制字,將當前計數值賦值給最大計數值;若當前計數值小于最大計數值,則最佳電容控制字和最佳電容控制字均保持不變;如果是分頻時鐘計數器先完成計數,則增大電容字,bit0的值置為1,bit3的值、bit2的值及bit1的值保持不變,將電容控制字存入當前電容控制字寄存器,并將分頻時鐘計數器的計數值賦值給當前計數值;比較當前計數值與最大計數值;若當前計數值大于最大計數值,則將重設前的電容控制字賦值給最佳電容控制字,將當前計數值賦值給最大計數值;若當前計數值小于最大計數值,則最佳電容控制字和最佳電容控制字均保持不變。狀態6中的參考計數完成時的電容控制字輸出capArrayOut=(capArrayOut&4'b1101)|4'b0001;分頻計數完成時的電容控制字輸出capArrayOut=capArrayOut|4'b0001。
狀態7,又稱之為電容控制字bit0的等待狀態:當參考時鐘計數器的計數值到16時,產生stDelBit信號,狀態機模塊進入狀態8,同時產生計數開始信號CountStart,使得參考時鐘計數器和分頻時鐘計數器同時開始從零計數。
狀態8,又稱之為電容控制字bit0的決定狀態:當任一個計數器的計數值達到512時,狀態機模塊進入狀態9,同時產生計數開始信號CountStart,使得參考時鐘計數器和分頻時鐘計數器同時開始從零計數,如果是參考時鐘計數器計數先完成,則減小電容控制字,bit0的值設為0,bit3的值、bit2的值及bit1的值保持不變,將電容控制字存入當前電容控制字寄存器,并將分頻時鐘計數器的計數值賦值給當前計數值,當前計數值存入計數寄存器;比較當前計數值與最大計數值;若當前計數值大于最大計數值,則將重設前的電容控制字賦值給最佳電容控制字,將當前計數值賦值給最大計數值;若當前計數值小于最大計數值,則最佳電容控制字和最佳電容控制字均保持不變;如果是分頻時鐘計數器先完成計數,則bit3的值、bit2的值、bit1的值及bit0的值保持不變,將電容控制字存入當前電容控制字寄存器,并將分頻時鐘計數器的計數值賦值給當前計數值;比較當前計數值與最大計數值;若當前計數值大于最大計數值,則將重設前的電容控制字賦值給最佳電容控制字,將當前計數值賦值給最大計數值;若當前計數值小于最大計數值,則最佳電容控制字和最佳電容控制字均保持不變。狀態8中的參考計數完成時的電容控制字輸出capArrayOut=(capArrayOut&4'b1110)|4'b0000;分頻計數完成時的電容控制字輸出capArrayOut=capArrayOut|4'b0000。
狀態9,又稱之為等待電容控制字的穩定狀態:當參考時鐘計數器的計數值到16時,產生stDelBit信號,狀態機模塊進入狀態10,同時產生計數開始信號CountStart,使得參考時鐘計數器和分頻時鐘計數器同時開始從零計數。
狀態10:當任一個計數器的計數值達到512時,狀態機模塊進入狀態11。電容字選擇模塊將未計數完成的計數值存入當前計數寄存器,電容控制字存入當前電容控制字寄存器;然后比較當前的計數值與最大計數值的大小,如過當前計數值大于最大計數值,則將當前計數值賦值給最大計數值,當前的電容值為最佳電容控制字。
狀態11,又稱之為校準完成狀態:自此振蕩頻率校準完成,將完成標志位calComp置為高,電路開環標志openLoopOut設為零,控制電容陣列的電容字選擇最佳電容字。當有新的校準開始信號calStartIn時,將狀態機模塊相關參數初始化,狀態機模塊將進入狀態1,重新開始校準;否則電路則處于鎖定狀態。
盡管本發明的內容已經通過上述優選實施例作了詳細介紹,但應當認識到上述的描述不應被認為是對本發明的限制。在本領域技術人員閱讀了上述內容后,對于本發明的多種修改和替代都將是顯而易見的。因此,本發明的保護范圍應由所附的權利要求來限定。