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

          關 閉

          新聞中心

          EEPW首頁 > 工控自動化 > 設計應用 > 基于FPGA的直接數(shù)字頻率合成器的設計實現(xiàn)

          基于FPGA的直接數(shù)字頻率合成器的設計實現(xiàn)

          作者: 時間:2008-11-26 來源:網(wǎng)絡 收藏

            相位/幅度轉(zhuǎn)換電路是電路中另一個關鍵,設計中面臨的主要問題就是資源的開銷。電路通常采用ROM結(jié)構,相位的輸出是一種數(shù)字式鋸齒波,通過取它的高若干位作為ROM的地址輸入,而后通過查表(LUT)和運算后,ROM就輸出所需波形的量化數(shù)據(jù)。

            ROM一般在FPGA(針對Altera公司的器件)中是由EAB實現(xiàn),并且ROM表的尺寸隨著地址位數(shù)或數(shù)據(jù)位數(shù)的增加成指數(shù)遞增關系,因此在滿足信號性能的前提條件下,如何減少資源的開銷就是一個重要的問題。在實際設計時我們充分利用了信號周期內(nèi)的對稱性和算術關系來減少EAB的開銷。

            我們利用圖2的結(jié)構設計整個電路:

            采用Verilog硬件描述語言來實現(xiàn)整個電路,這不僅利于設計文檔的管理,而且方便設計的修改和擴充,以及在不同之間的移植。

            由圖2可以清楚地看出整個系統(tǒng)只加入了一級流水線來提高速度,需要說明的是在ROM和系統(tǒng)控制電路之間也可以加入流水線,但實際仿真表明效果不明顯,反而消耗了更多的資源,因此綜合考慮后只加入一級流水線。

            為了進一步提高速度,在電路的相位模塊和加法器模塊的設計時并沒有采用FPGA單元庫中的16~32位加法器,盡管它們可以很容易地實現(xiàn)高達32位的相位,但當工作頻率較高時,這種方法不可取,因為它們較大的延時不能滿足速度要求。

            因此,具體實現(xiàn)時我們分別用了4個和8個4位的累加器,以流水線的方式實現(xiàn)16位和32位累加器和加法器。比較仿真結(jié)果表明,采用流水線技術可以大大提高系統(tǒng)的工作速度。

            從前面的分析可知,相位/幅度變換電路也是比較難實現(xiàn)的部分,它不僅要解決速度的問題,還要考慮節(jié)省資源的問題。如何有效利用FPGA有限的資源,是實現(xiàn)相位/幅度變換電路的最關鍵一點。

            在實際運用中,我們將著眼點主要放在了節(jié)省資源上來,相位/幅度轉(zhuǎn)換電路中的主要問題在于ROM的大小上。由于本次設計的DDS主要用于數(shù)字視頻編碼中,因此只需要輸出余弦(正弦)波,我們考慮了以下的優(yōu)化方式:余弦波信號對于直線成偶對稱,基于此可以將ROM表減至原來的1/2,再利用左半周期內(nèi),波形對于點成奇對稱,進一步將ROM表減至最初的1/4,因此通過一個正弦碼表的前1/4周期就可以變換得到正弦和余弦的整個周期碼表。這樣就節(jié)省了將近3/4的資源,非??捎^。

            系統(tǒng)控制電路主要是根據(jù)是否需要相位調(diào)制(BPSK)及頻率調(diào)制(BFSK),系統(tǒng)時鐘是否需要分頻得到所需的基準時鐘,頻率碼的輸入方式是串行、并行還是微機接口方式,如何控制輸出等具體要求而設計的。這一部分可以靈活設計,凸現(xiàn)FPGA的優(yōu)點所在。



          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁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); })();