袁 林 徐 慨 馮延青
(海軍工程大學(xué)電子工程學(xué)院 武漢 430033)
隨著微電子技術(shù)和數(shù)字集成技術(shù)的發(fā)展以及各種新型器件的不斷涌現(xiàn),數(shù)控振蕩器已成為數(shù)字通信中調(diào)制解調(diào)必不可少的部分,同時也是DDS(Direct Digital Synthesizers)的核心。它可根據(jù)需要產(chǎn)生各種波形,如三角波﹑方波﹑鋸齒波等。所產(chǎn)生的正弦和余弦信號可以用做 FSK、BPSK、QPSK等多種調(diào)制方式的載波。它被廣泛應(yīng)用于電子測量、調(diào)頻通信、電子對抗等領(lǐng)域。本文根據(jù)NCO的基本原理,利用 QuartusⅡ軟件實現(xiàn)了NCO的功能仿真和時序仿真,仿真結(jié)果表明設(shè)計的正確性。它的應(yīng)用不僅使得數(shù)字電路系統(tǒng)的設(shè)計非常方便,節(jié)省了成本、并且還大大縮短了開發(fā)時間。
數(shù)控振蕩器主要是由相位累加器和波形數(shù)據(jù)產(chǎn)生器兩部分組成。其結(jié)構(gòu)圖如圖1所示。
圖1 NCO結(jié)構(gòu)框圖
1)相位累加器是NCO的核心,用于實現(xiàn)相位的累加并存儲累加結(jié)果。它由兩個N位加法器和一個N位相位寄存器組成。工作過程如下:當(dāng)一個時鐘脈沖到來時,加法器將上個時鐘周期內(nèi)寄存器所寄存的值與輸入?yún)?shù)K相加,其和存入寄存器作為相位加法器的當(dāng)前相位值輸出,若當(dāng)前相位加法器的值為Σn,經(jīng)過一個時鐘周期后變?yōu)棣瞡+1,則滿足[1]:
其中,Σ0為相位加法器的初始相位值。相位寄存器輸出值與相位控制字相加,其和作為 ROM的尋址地址。顯然,K就是一個時鐘周期內(nèi)的相位增量。當(dāng)寄存器存滿時,產(chǎn)生一次溢出,將整個相位累加器置零,從而完成一個周期性的動作。
2)波形數(shù)據(jù)產(chǎn)生器即正弦查找表(LUT)實際上是一個存儲器,相位寄存器的輸出與相位控制字相加的結(jié)果作為其地址[2]。它主要的功能是存儲一個整周期正弦波的所有采樣點的幅值數(shù)據(jù),從而構(gòu)成一個查找表。其內(nèi)部存有一個完整周期正弦波的數(shù)字幅度信息,每個查找表的地址對應(yīng)著正弦波中0°~360°范圍的一個相位點。查找表把輸入的地址信息映射成正(余)弦幅度信號。每一個時鐘到來時,查找表根據(jù)相位累加器結(jié)果讀取正弦波的采樣數(shù)據(jù),然后送出正弦波數(shù)據(jù)。總的來說,波形數(shù)據(jù)發(fā)生器的作用是根據(jù)相位信息輸出該相位所對應(yīng)的采樣點的數(shù)據(jù)。
形成ROM表主要有兩種方法:用邏輯單元實現(xiàn)ROM表和用LPM實現(xiàn)ROM[3]。用邏輯單元實現(xiàn)ROM表的方法志適用于簡單而且變化緩慢的波形,例如方波和三角波;而對于數(shù)據(jù)點較多、手動計算困難的波形如正弦波則用LPM實現(xiàn)ROM的方法較為方便。
根據(jù)NCO的基本原理,本文設(shè)計的相位累加器的字長N取16,截取高10位作為尋址地址,頻率控制字K取十六進制數(shù)h1000,故產(chǎn)生的正弦序列為16倍過采樣,即一個正弦周期采集16個樣點。經(jīng)程序編譯后生成的相位累加器的寄存器傳輸級視圖(RT L-Register Transfer Level)如圖2所示。
圖2 相位累加器的寄存器傳輸級視圖
在本設(shè)計中,ROM查找表的實現(xiàn)用CYCLONEⅡ系列器件EP2C35F484C8中的M4K存儲器來完成,在EP2C35F484C8器件中共有105個M4K存儲器,同時每個M4K存儲器塊的大小為4608bit,故總?cè)萘繛?83840bit。
但是由于ROM容量的限制,正弦查找表的字長是有限,從而引起存放在ROM中的正弦波形幅度碼字也是有限的。在本設(shè)計中,取查找表的字長為10,即輸入地址寬度為10位,故存放在ROM中的數(shù)據(jù)個數(shù)設(shè)置為1024。波形文件數(shù)據(jù)用MATLAB生成,利用計算式511*sin([0:2*pi/(2^10):2*pi-2*pi/(2^10)])+512得到所需要的文件數(shù)據(jù),并把它粘貼到QuartusⅡ的 sine.mif文件中,圖 3是部分相位地址所對應(yīng)的幅度碼位地址所對應(yīng)的幅度碼。
這樣得到了ROM的初始化數(shù)據(jù)文件,通過程序加載這些數(shù)據(jù),這里利用QuartusⅡ的宏功能模塊LPM_ROM,并加載剛才建立的sine.mif波形文件,初始化ROM,得到正弦波形的數(shù)據(jù)存儲器。圖4為生成的ROM的寄存器傳輸級視圖,圖中clock為系統(tǒng)的主時鐘,address_a為查找表的正弦地址,address_b為查找表的余弦地址,q_a為正弦輸出,q_b為余弦輸出。
對數(shù)字載波NCO進行仿真,仿真結(jié)果如圖5所示,其中clk為系統(tǒng)的主時鐘,cos_addr為查找表地址,cos_out為NCO的輸出,從圖中結(jié)果可以看出數(shù)字載波NCO的功能正確。
基于QuartusⅡ的FPGA開發(fā)軟件對數(shù)控振蕩器進行匯編設(shè)計,可以看出只要改變時鐘頻率 fs和頻率控制字K就可以改變輸出信號頻率;只要相位累加器的位數(shù)N足夠大,NCO的頻率分辨率就足夠精確;NCO中 ROM的容量是與地址線位數(shù)有關(guān)的,通過地址線位數(shù)來保證輸出正弦波的幅度精度,而靠相位累加器的頻率字位數(shù)來保證頻率的分辨率。與DDS電路相比,由于NCO的輸出只要求是離散的正(余)弦樣本,因而不需要再通過模數(shù)轉(zhuǎn)換器和低通濾波器將其轉(zhuǎn)換成模擬信號,所以在設(shè)計上大大節(jié)省了設(shè)計時間和成本。結(jié)果表明系統(tǒng)產(chǎn)生的波形穩(wěn)定,頻率、相位和幅度調(diào)節(jié)方便,精度高,而且又便于修改,完全滿足實際需求。
[1]潘志浪.基于FPGA的DDS信號源的設(shè)計[D].武漢:武漢理工大學(xué),2007:6,9
[2]王美妮.基于FPGA的DDS的研究設(shè)計與實現(xiàn)[D].大連:大連海事大學(xué),2006:10
[3]羅朝霞,高書莉.CPLD/FPGA設(shè)計及應(yīng)用[M].北京;人民郵電出版社,2007:7