根據(jù)圖1,并假定相位控制字為0,這時DDS的核心部分相位累加器的FPGA的設(shè)計可分為如下幾個模塊:相位累加器SUM99、相位寄存器REG1、正弦查找表ROM和輸出數(shù)據(jù)寄存器REG2,其內(nèi)部組成框圖如圖 2所示。圖中,輸入信號有時鐘輸入CLK,使能端EN,復(fù)位端RESET,頻率控制字K,輸出信號為Q。
圖2 DDS內(nèi)部組成框圖
整個DDS模塊采用一個時鐘,以用來同步各個模塊的運算速度。其中相位累加器SUM99是一個帶有累加功能的10位加法器,它以設(shè)定的10位頻率控制字Κ作為步長來進行加法運算,當(dāng)其和滿時,計數(shù)器清零,并進行重新運算。相位寄存器REG1就是一個一般的10位寄存器,它對輸入端輸入的數(shù)據(jù)進行寄存,當(dāng)下一個時鐘到來時,輸出寄存的數(shù)據(jù)。正弦查找表ROM是DDS最關(guān)鍵的部分,也是最復(fù)雜的部分,設(shè)計時首先需對正弦函數(shù)進行采樣,接著將采樣的結(jié)果放到ROM模塊的對應(yīng)存儲單元中,每一位地址對應(yīng)一個數(shù)值,輸出為9位。為了保證輸出數(shù)據(jù)的穩(wěn)定性,我們將ROM的輸出數(shù)據(jù)先寄存在REG2中,待下一個時鐘到來時,再將其輸出。整個系統(tǒng)各模塊是在同步時鐘信號CLK的控制下協(xié)調(diào)工作的。
下面介紹一下正弦查找表ROM模塊的具體設(shè)計。
首先利用MATLAB或C語言編程對正弦函數(shù)進行采樣;然后對采樣數(shù)據(jù)進行二進制轉(zhuǎn)換,其結(jié)果作為查找表地址的數(shù)值。
用MATLAB語言編寫的正弦函數(shù)數(shù)據(jù)采集程序如下:
用C語言編寫的正弦函數(shù)數(shù)據(jù)采樣程序如下:
兩個程序運行之后所得結(jié)果是一致的。
MATLAB語言編寫的正弦函數(shù)數(shù)據(jù)采集程序運行結(jié)果如下:
總共是1024個數(shù)據(jù)。
歡迎轉(zhuǎn)載,信息來源維庫電子市場網(wǎng)(www.dzsc.com)
來源:ks990次