基于FPGA的DDS設(shè)計及實(shí)現(xiàn)
ADC轉(zhuǎn)換芯片處理后的8位數(shù)字信號,為了使DDS合成的頻率較大,末尾補(bǔ)4個O作為參數(shù)化模塊lpm_add_sub的12位輸入datai。由于ADC信號輸出的是8位二進(jìn)制偏移碼,與計算機(jī)處理的二進(jìn)制補(bǔ)碼形式不同,需將二進(jìn)制偏移碼轉(zhuǎn)換成二進(jìn)制補(bǔ)碼,在這里與另一路輸入信號常數(shù)2 048做減法,就能達(dá)到求補(bǔ)的目的,并輸出12位有符號數(shù)。
12位的輸出接入lpm_mult模塊,lpm_mult的另一路輸入為12位任意數(shù)輸入。乘法器的輸出直接影響累加器累加相位的速度。當(dāng)乘以一個比較大的數(shù),則頻率變化加快。
同理,為了使合成頻率較大,乘法器的24位輸出在末尾補(bǔ)O成為32位數(shù)datab送到累加模塊altaccumulate中。為了節(jié)省ROM容量,最后取altaccumulate輸出的高10位作為ROM查找表的地址信號。累加控制模塊的時序仿真如圖3所示。本文引用地址:http://www.ex-cimer.com/article/191571.htm
2.2 ROM查找表的設(shè)計
針對不同的可編程器件,ROM查找表的設(shè)計采用的方法也不相同。主要是基于lpm_rom和VHDL選擇語句這兩種方法。使用lpm_rom的波形存儲表只需要產(chǎn)生數(shù)據(jù)文件*.mif,然后直接在定制lpm_rom時,添加數(shù)據(jù)文件即可。不過這種方法在FPGA支持內(nèi)部嵌入式陣列塊(EAB)時才可以使用;使用VHDL選擇語句比較直觀,但當(dāng)輸入數(shù)據(jù)量大的時候,這種方法是比較繁瑣的。此次設(shè)計采用第一種方法。
mif文件是在編譯和仿真過程中作為存儲器(ROM或RAM)初始化輸入的文件,即memory initialization file。創(chuàng)建mif文件的方式有很多種,在這次設(shè)計中,在Matlab中采用C語言來生成mif文件。mif文件編寫格式如下:
通常相位累加器的位數(shù)N很大,實(shí)際設(shè)計中受到體積和成本的限制。為了節(jié)省ROM的容量采用相位截斷的方法,一般只取累加器輸出的高幾位作為ROM的尋址地址。設(shè)計中取累加結(jié)果的高10(M=10)位來進(jìn)行查表,也就是說正余弦ROM有210=1 024個尋址地址,數(shù)據(jù)寬度為12。如圖4所示,設(shè)計了2個lpm_rom模塊,分別是sin波形存儲器和cos波形存儲器。
評論