直接數(shù)字頻率合成器的PFGA實現(xiàn)
2.2 波形存儲器
以相位累加器輸出數(shù)據(jù)作為波形存儲器的取樣地址,進行波形的相位—幅碼轉(zhuǎn)換,即可在給定的時間上確定輸出的波形的抽樣幅碼。N位的尋址ROM相當于把0~2π的正弦信號離散成具有2N個樣值的序列。若波形存儲器有D位數(shù)據(jù)位,則各樣值的幅碼以D位二進制數(shù)值保存在該模擬ROM中,按照不同地址輸出相應(yīng)相位的正弦信號的幅碼數(shù)值。為了更加有效的表示波形,當然期望波形存儲器輸出的二進制值位數(shù)越多越好。但是查找表的設(shè)計和D/A轉(zhuǎn)換器的選擇是相關(guān)的,因此需要選擇位數(shù)高的D/A轉(zhuǎn)換器。本文設(shè)計的正弦表,具有16b輸出,采樣點為256。
2.3 D/A轉(zhuǎn)換電路的實現(xiàn)
D/A轉(zhuǎn)換單元是繼波形數(shù)據(jù)產(chǎn)生單元之后,將數(shù)字量形式的波形幅值轉(zhuǎn)換成所要求的合成頻率的模擬量形式信號。DAC輸出信號實際上是階梯模擬信號,需在D/A轉(zhuǎn)換后利用低通濾波器對波形進行平滑處理。在此,用Maxim公司生產(chǎn)的A/D換器MAX5885芯片。該芯片需要將輸入時鐘信號轉(zhuǎn)換為差分輸入,且由外部芯片MAX6161提供1.2 V的參考電壓,D/A轉(zhuǎn)換后的差分輸出經(jīng)變壓器轉(zhuǎn)換后即可得到所需的信號:
3 系統(tǒng)軟件設(shè)計
3.1 累加控制模塊的設(shè)計
相位累加器主要完成相位累加,實現(xiàn)輸出波形頻率可調(diào)的功能。該模塊采用Verilog HDL語言來實現(xiàn),若要求DDS系統(tǒng)精度高,相位累加器的位數(shù)N需較大。這里取N=8,它的Verilog HDL關(guān)鍵代碼如下:
其中,data信號為8位的頻率控制字,通過改變data的值可以實現(xiàn)不同頻率波形的輸出。
3.2 波形存儲器的設(shè)計
針對不同的可編程器件,ROM查找表的設(shè)計采用的方法也不相同。主要是基于IP核Single Port BlockMemory和Verilog選擇語句這兩種方法。使用SinglePort Block Memory的波形存儲表只需要產(chǎn)生數(shù)據(jù)文件*.mif或*.coe,然后直接在定制Single Port BlockMemory時,添加數(shù)據(jù)文件即可。不過這種方法在FPGA支持內(nèi)部嵌入式陣列塊(EAB)時才可以使用;使用Verilog選擇語句比較直觀,但當輸入數(shù)據(jù)量大的
這種方法是比較繁瑣的。此次設(shè)計采用第一種方法。
coe文件是在編譯和仿真過程中作為存儲器(ROM或RAM)初始化輸入的文件,即memory initializationfile。創(chuàng)建coe文件的方式有很多種,在這次設(shè)計中,在Matlab中采用C語言來生成coe文件。coe文件編寫格式如下:
將生成的cos.txt文件的后綴該為.coe,打開文件并將最后一行的逗號改為分號,并在文件的最開始添加下面兩行:
最后保存文件退出,并加載到Single Port BlockMemory所生成的ROM中。加載時要特別注意數(shù)據(jù)基數(shù)和數(shù)據(jù)長度的參數(shù)設(shè)置。
4 系統(tǒng)的功能仿真和驗證分析
累加控制器、ROM查找表組成一個整體,實現(xiàn)了一個基本的DDS系統(tǒng)。該設(shè)計以原子鐘(33 MHz)為基準頻率輸入,取累加器為32位,實現(xiàn)輸出頻率為700 kHz的信號。
評論