<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > EDA/PCB > 設(shè)計應(yīng)用 > 基于FPGA的DDS設(shè)計及實(shí)現(xiàn)

          基于FPGA的DDS設(shè)計及實(shí)現(xiàn)

          作者: 時間:2010-09-20 來源:網(wǎng)絡(luò) 收藏

          ADC轉(zhuǎn)換芯片處理后的8位數(shù)字信號,為了使合成的頻率較大,末尾補(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ù)文件即可。不過這種方法在支持內(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波形存儲器。




          關(guān)鍵詞: FPGA DDS

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();