佟星元,楊 梅
(西安郵電大學 電子工程學院,陜西 西安 710121)
模/數轉換器(Analog-to-Digital Converter, ADC)主要通過對輸入信號在模擬域和基準進行比較的方式完成模擬輸入信號數字化[1],以便于隨后的數字信息加工及處理。基于壓控振蕩器(Vol-tage-Controlled Oscillator, VCO)的ADC是一種常用的模/數轉換器類型,其利用VCO將ADC的輸入信號從電壓域信息轉換到時間域信息。隨著ADC輸入信號的改變,VCO輸出信號頻率和周期發生相應的變化,通過在一個采樣周期內統計VCO脈沖的個數獲得最終的數字輸出。VCO的電壓/頻率特性曲線存在非線性,會降低VCO-ADC的信噪失真比(Signal to Noise and Distortion Ratio, SNDR)和無雜散動態范圍(Spurious Free Dynamic Range, SFDR)[2],影響模/數信息轉換的準確度。針對VCO-ADC的非線性校準方法進行研究尤為重要。
現實中,通常的做法是將VCO作為反饋回路中的積分器,提供一個大的環路增益,以減小ADC的非線性[3],該方法需要模擬支持電路,并且反饋電路中的數模轉換器(Digital-to-Analog Converter, DAC)和額外的模擬放大器或積分器導致整體電路設計復雜[4]。基于最小均方根(Least Mean Square, LMS)算法校準技術能夠明顯改善VCO-ADC的線性性能[5],該方案采用了一個4位Flash ADC,增大了電路面積。經典的查找表(Look-Up Table, LUT)校準算法校準效果較好,但是需要額外的調制器和一條復制電路路徑才能確定校準參數[6]。基于LUT的非線性校準算法,以抖動信號作為校準算法的前提,使用LMS反饋回路確定校準參數,完成LUT線性插值,得到正確輸出碼[7-9]。這種校準算法不需要模擬電路支持,校準參數的確定不需要復制電路路徑,還可以滿足不同輸入信號的校準需求,是一種新興的VCO-ADC的非線性校準方法,越來越引起研究者的關注。但是,該算法存在消耗資源過多的缺點。
為了降低電路中的資源消耗,在VCO-ADC非線性校準方法的基礎上,主要采用加法運算,以節省大量硬件資源消耗,并且選擇較少的LUT點數。此外,采用現場可編程門陣列(Field Programmable Gate Array, FPGA)片外校準方法,以滿足在校準算法的選取和修改上的靈活度要求。
經典的非線性VCO-ADC整體電路原理示意圖如圖1所示。非線性VCO-ADC整體電路由兩個VCO-ADC子通道A和B構成,每個通道分別采用差分結構實現VCO-ADC[10]。利用偽隨機噪聲碼(Pseudo Random Noise, PRN)分別為A、B通道兩端Vn、Vp添加正、負擾動信號pΔV/2,其中,p=±1表示信號的正負屬性,ΔV表示添加的擾動電壓。正負擾動信號相差180°。通過采樣保持(Sample/Hold, S/H)電路后A、B兩個通道的差分理想輸出電壓分別為VinA和VinB。VinA和VinB經過非線性VCO、計數器和減法器輸出數字碼nA和nB。

圖1 非線性VCO-ADC電路原理示意圖
對于理想ADC,兩個ADC輸出的平均值為最終數字輸出碼xout,但是,在實際電路中會存在非線性問題。nA、nB通過LUTA和LUTB完成線性插值,得到xA、xB。校準信號Δx為xA、xB的差值。若兩個ADC的輸出能夠被正確地校準,則得到的校準信號Δx=2pD,其中D為擾動電壓ΔV經過ADC后得到的信號值;反之,則Δx≠2pD,需要通過校準調整每個ADC的值,使得Δx趨近于2pD,從而使得ADC的誤差趨近于0,最終得到正確的數字輸出碼,完成校準過程。
采用差分結構的VCO-ADC可以有效抑制共模干擾和偶次諧波,從而為整個系統的線性提供保障,減小后續非線性校準算法的工作量。
VCO-ADC將采樣后的輸入信號作為VCO的輸入控制電壓,完成電壓-頻率轉換,理想情況下,t時刻VCO的實時輸出頻率為
fvco(t)=fc+kvVin(t)
其中:fc表示自由振蕩頻率;kv表示VCO的增益;Vin(t)表示t時刻的輸入控制電壓。
t時刻VCO的輸出電壓為
Vo(t)=Avcocosθvco(t)
其中:Avco表示VCO輸出的幅值;θvco(t)表示t時刻VCO的實時輸出相位,為VCO輸出頻率的時間積分,即

但是,在實際電路中,VCO-ADC存在非線性問題,主要體現在VCO的輸入控制電壓與實時輸出頻率不成正比。時間電路t時刻VCO的實時輸出頻率為
其中,ki(i=1,2,…,5)表示第二階到六階的畸變項。
畸變項的存在表明VCO頻率存在奇偶非線性,導致VCO輸出的正弦振蕩信號中存在諧波,以此振蕩信號作為計數器的計數時鐘,則會導致最終的數字輸出也存在非線性。
VCO非線性模型示意圖如圖2所示。理想VCO和非線性VCO的模型的輸出電壓頻率曲線如圖3所示,從圖中可以很明顯地看出實際VCO的非線性特征。

圖2 非線性VCO的模型示意圖

圖3 VCO輸出電壓頻率曲線
改進VCO電壓頻率曲線的非線性的常用技術是差分結構方法,但是,差分結構方法只能在一定程度上改善ADC的非線性,通常還需要采用抑制技術進一步降低ADC的非線性。經常被使用的抑制技術有以下3種。
第一種抑制技術基于DAC的閉環反饋,由差分反饋回路中的兩個VCO組成[11]。VCO由輸入差分信號與轉換后的數字輸出反饋之間的差值驅動。兩個VCO的輸出驅動一個計數器,利用得到的相位差使回路趨向平衡。該結構類似一個具有大環路增益的控制回路,在VCO輸入節點處進行轉換運算,從而大大降低了VCO非線性的影響。
第二種抑制技術是一種粗量化和細量化結合的技術,其運算過程為一種閉環結構[12]。輸入信號首先被一個粗量化器量化,產生一個粗糙的數字輸出結果。其次,將該數字輸出結果通過DAC轉換得到一個模擬量,將該模擬量從輸入信號中減去,得到一個低擺幅殘差信號,這個殘差信號驅動細量化器工作,得到數字輸出結果。最后,將經過粗量化器得到的數字輸出和細量化器得到的數字輸出相加從而得到最終的量化結果。
第三種抑制技術是數字校準技術。將輸入信號通過非理想VCO-ADC產生帶有誤差的數字輸出碼,采用VCO的復制路徑提取VCO非線性的估計值。將該估計值作為校準信號,采用連續的自適應數字校準算法,以減少VCO-ADC的非線性[13]。
前兩種非線性抑制技術都需要DAC電路,會增加電路面積和電路設計的復雜度,而校準技術無須使用DAC電路,相對更加簡便。
非線性校準算法原理示意圖如圖4所示。圖4分為上方虛線框中的轉換部分和下方實線框中的校準部分。

圖4 非線性校準算法的原理示意圖
在轉換過程中,首先,對輸入信號Vin進行采樣,并根據PRN擾動信號產生VinA和VinB,然后,經VCO和計數器模塊轉換,產生帶有誤差的數字碼nA、nB,并作為算法的輸入。
在校準過程中,首先,利用LUT線性插值模塊分別得到與數字碼nA、nB相對應的LUT中的位置,再進行線性插值得到與數字碼nA、nB相對應的校準輸出碼xA、xB。然后,使用LUT線性插值模塊得到與數字碼nA、nB相對應的矩陣系數yA、yB,構建估算矩陣Y,得到校準信號Δx=xB-xA。利用YT和Δx-2pD做乘法運算得到對應的誤差向量,用以更新LUT中的相關數據,從而構成LMS的反饋環路,如圖4中所示。其中,μ值取2-7為步長因子,其大小由LMS算法決定[14]。
根據得到的查找表的最新數據,采用線性插值方法更新xA和xB,對Δx和2pD的差值進行判決,若判決結果不為0,則繼續循環上述步驟,直到差值為0,輸出校正值xA和xB。由于使用了兩個VCO-ADC,難以抉擇出選哪一個更適合作為最終的輸出,所以需要以兩個ADC輸出的平均值作為校準后的輸出碼,從而得到輸出碼x=(xA+xB)/2[15]。
查找表線性插值原理示意圖如圖5所示。LUT中取值個數由ADC的精度和VCO的電壓-頻率特性曲線決定。

圖5 查找表線性插值原理示意圖
校準算法的目的是確定圖5中LUT中的值ai(i=0,1,2…,M)的傳輸特性。首先,將校準算法的輸入n分為M位高有效位nM和L位低有效位nL,并將M作為LUT的地址。高有效位決定了LUT中的點數N(N<2M),對于每一個nM,都有一個與之對應的校準輸出碼anM。然后,在每個部分中,低有效位nL作為anM和anM+1之間的插值。n軸點與點之間的間距為2L,通過線性插值得到校準后的輸出碼
在Modelsim仿真平臺上對非線性校準算法系統進行仿真,觀測輸入輸出波形,以驗證校準算法的功能。校準算法功能仿真流程示意圖如圖6所示。首先,使用硬件描述語言Verilog HDL編寫校準算法的LUT線性插值模塊、隨機序列產生模塊、LUT參數輸入和更新模塊、DIF模塊Δx-2pD、LMS模塊和輸出模塊x=(xA+xB)/2的硬件描述語言,并利用軟件Modelsim對各模塊完成功能仿真驗證。其次,在頂層模塊中,對各個模塊進行實例化,應用仿真軟件Matlab建模非線性VCO-ADC,并將得到的輸出作為校準算法的輸入,寫入*.txt文本。最后,編寫Testbench,對*.txt文本中的數據進行讀取,完成校準電路設計和功能仿真。

圖6 校準算法功能仿真流程示意圖
在功能仿真的基礎上,采用FPGA開發板對校準算法實施硬件驗證。在FPGA硬件驗證過程中,需要使用分頻模塊、地址產生模塊和只讀存儲器模塊。分頻模塊為地址產生模塊、只讀存儲器模塊和整個校準電路提供時鐘。地址產生模塊用于產生只讀存儲器模塊所需的10進制地址。只讀存儲器模塊用于存儲Matlab建模產生的10位VCO-ADC輸出。
在Quartus II 13.1使用Verilog HDL語言完成硬件電路的設計,程序通過USB-Blaster下載至Cyclone IV系列EP4CE30F23C8開發板,使用Quartus II 13.1中的SignalTap II Logic Analyzer對輸入輸出信號進行實時監測,并對數據進行保存輸出,進行后續頻譜分析。
使用Matlab對帶有非線性的VCO-ADC進行建模,基于10位ADC模型驗證選取校準算法的效果。對ADC進行仿真,并結合Matlab對ADC仿真得到的4 096個采樣點進行快速傅里葉變換(Fast Fourier Transformation, FFT)分析,得到ADC的輸出頻譜圖。10位VCO-ADC校準前、后的頻譜圖分別如圖7和圖8所示。可以看出,相較于校準前的頻譜圖,由于采用差分結構和校準算法,抑制了偶次諧波,去除了奇次諧波,并且導致噪聲底板有所下降。

圖7 校準前的VCO-ADC頻譜圖

圖8 校準后的VCO-ADC頻譜圖
經過測試發現,在校準之前,由于受到VCO非線性影響,ADC的有效位數(Effective Number of Bits, ENOB)僅為7.33,SNDR僅為45.92 dB,SFDR為46.15 dB。校準后的頻譜,ENOB從7.33提升至9.46,SNDR提升至58.73 dB,SFDR為85.24 dB。說明校準算法能有效降低ADC的各次諧波和噪聲。這是因為SNDR表示輸出信號的基波信號功率與所有噪聲總功率的比值,當所有噪聲總功率減小時,SNDR增大。ENOB由SNDR計算得到,當SNDR增加時,ENOB也增加。SFDR是輸出信號的基波信號功率與最大諧波功率的比值,當最大諧波功率減小時,SFDR會變大。
利用斜坡輸入信號,仿真得到微分非線性(Differential Non-linearity, DNL)和積分非線性(Integral Non-linearity, INL)。校準前、后的DNL和INL的值分別如圖9和圖10所示。可以看出,校準前后DNL的取值范圍分別為-1~+1.73 LSB和-0.14~+0.71 LSB。校準前后INL的取值范圍分別為-3.59~+17.43 LSB和-0.46~+1.35 LSB。說明校準算法減輕了實際數字輸出與理想數字輸出之間的差異,改善了ADC的非線性問題。

圖9 VCO-ADC校準前后的DNL

圖10 VCO-ADC校準前后的INL
所提方法與其他校準算法的性能參數對比如表1所示。可以看出,所提校準算法校準前、后SNDR的提升與其他校準算法校準前、后SNDR的提升幅度相當,但是,SFDR提升幅度明顯,這是因為所提校準算法對ADC最大諧波的抑制能力強。另外,雖然其他3個文獻的方法均采用數字校準算法降低了ADC的非線性,但都需要模擬電路的支持。這會增加電路面積和電路設計的復雜度,而實現的數字校準算法,則不需要模擬電路的支持。

表1 不同校準算法的性能參數對比
針對VCO非線性影響VCO-ADC的線性性能問題,構建了一種10位VCO-ADC模型,并完成了功能仿真和FPGA驗證。利用LUT線性插值模塊得到數字碼在LUT中相對應的位置,執行線性插值獲取對應于數字碼的校正值及相關的估算矩陣。利用校正值得到校準信號,將估算矩陣轉置和校準信號相乘,以獲取相應的誤差向量,并更新LUT中的相關數據,構成LMS反饋環路。根據LUT的最新數據,采用線性插值獲取最新的校正值,并最終輸出正確的校正值。所提校準算法可以有效提高ADC的ENOB、SNDR和SFDR,并且降低了ADC的DNL和INL。