20世紀60年代末,伴隨數(shù)字集成電路與微電子技術(shù)的發(fā)展出現(xiàn)了直接數(shù)字頻率合成器(DDS),它與傳統(tǒng)的頻率合成技術(shù)相比較,具有極高的頻率分辨率與穩(wěn)定度、轉(zhuǎn)換時間短、輸出信號的頻率、相位、幅度可控等諸多優(yōu)點,易于實現(xiàn)調(diào)頻、調(diào)相、調(diào)幅等多種信號,因而得到廣泛應(yīng)用。本文從DDS的電路結(jié)構(gòu)與具體參數(shù)的設(shè)計出發(fā),詳細論述了DDS的VHDL語言實現(xiàn)過程,給出了頻率控制字長為24位的完整的VHDL,代碼。
1 DDS的工作原理
目前,比較廣泛使用的一種DDS設(shè)計方案是查找法,如圖1所示,其基本工作原理是通過頻率控制字的累加與相位控制字相加形成訪問波形表的地址,然后通過地址映射,輸出波形的幅度信息給DAC電路,再通過DAC中的LPF,得到相應(yīng)的波形信號。
以正弦信號合成為例,設(shè)輸出信號的頻率為fo,在不考慮初相位的條件下,其瞬時相位:θ=2πfot,一個Tclk內(nèi),相位的變化總量為:
實際當中,確定相位量化字長N的大小,并不是任意的,它既取決于上面兩個因素,也與量化信噪比有關(guān)。文獻[7]給出了較為詳細的討論。如正弦波合成時,相位量化的信噪比與幅度量化的信噪引起的總信噪比估計為:
其中D為正弦信號振幅量化字長。
相位量化字長N越大,所需的查表法空間越大,因此設(shè)計DDS時,要合理選擇N,D的大小。當N,D取定后,應(yīng)根據(jù)波形特點,進一步采用ROM壓縮技術(shù)減小所需單元的數(shù)量。如合成正弦信號時,可根據(jù)信號的對稱性,僅存儲0~π/2的幅度值,這樣可以將ROM大小壓縮為原來的1/4。
2 VHDL語言實現(xiàn)
程序設(shè)計包含三個部分:數(shù)據(jù)輸入、相位累加和ROM查找,分別由三個進程實現(xiàn)。data_in進程:在WR=0并CLK=1時,寫頻率控制字;phase_add進程:在CLK上升沿,做相位累加,并取累加結(jié)果的高12位的低10位用于ROM表的地址,其最高位與次高位分別送s_1和s_2用來正弦相位區(qū)間控制;lookfor_rom進程:在CLK上升沿,按照phase_add進程提供的地址尋址,并對尋址結(jié)構(gòu)按s_1和s_2所劃分的四個象限進行數(shù)據(jù)處理,并將處理的結(jié)果輸出。相位控制的具體操作如表1所示。
下面程序為正弦DDS的VHDL實現(xiàn)。相位量化字長為24 b,振幅量化字長采用10 b。完整的程序代碼如下:
程序中的component dds_rom元件可通過Max+Plus II的File菜單中的MegaWizard Plug-in Manager創(chuàng)建一個LPM_ROM,名為dds_rom.vhl,該元件創(chuàng)建前,需按照圖2所示的mif文件格式創(chuàng)建一正弦波形數(shù)據(jù)文件(如名為:sin_data.mif),該數(shù)據(jù)文件存有正弦1/4周期波形數(shù)據(jù)。
由于波形數(shù)據(jù)文件中數(shù)據(jù)較多,可通過C語言編程生成數(shù)據(jù),生成正弦波形采樣數(shù)據(jù)文件的C程序代碼如下:
將這個C語言程序存為singen.c,編譯鏈接后生成singen.exe,即可在DOS命令行下執(zhí)行:
就可以生成.mif文件中的波形數(shù)據(jù)。
3 結(jié) 語
文中有關(guān)代碼均是通過Max+Plus Ⅱ10.2編譯通過的,讀者可稍加修改就可以用于自己的實際系統(tǒng)設(shè)計。相位累加器可采用流水線型超前進位加法器實現(xiàn),同時可增加同步相位取模器以改善DDS的性能,或采用CORDIC算法代替波形ROM的使用。
作者:趙林軍
(1.西安電子科技大學(xué) 陜西 西安 710071;2.陜西理工學(xué)院 陜西 漢中 723003)
來源:《現(xiàn)代電子技術(shù)》