基于FPGA的直接數(shù)字頻率合成器的設(shè)計(jì)實(shí)現(xiàn)
相位/幅度轉(zhuǎn)換電路是DDS電路中另一個(gè)關(guān)鍵,設(shè)計(jì)中面臨的主要問題就是資源的開銷。電路通常采用ROM結(jié)構(gòu),相位累加器的輸出是一種數(shù)字式鋸齒波,通過取它的高若干位作為ROM的地址輸入,而后通過查表(LUT)和運(yùn)算后,ROM就輸出所需波形的量化數(shù)據(jù)。
ROM一般在FPGA(針對(duì)Altera公司的器件)中是由EAB實(shí)現(xiàn),并且ROM表的尺寸隨著地址位數(shù)或數(shù)據(jù)位數(shù)的增加成指數(shù)遞增關(guān)系,因此在滿足信號(hào)性能的前提條件下,如何減少資源的開銷就是一個(gè)重要的問題。在實(shí)際設(shè)計(jì)時(shí)我們充分利用了信號(hào)周期內(nèi)的對(duì)稱性和算術(shù)關(guān)系來減少EAB的開銷。
我們利用圖2的結(jié)構(gòu)設(shè)計(jì)整個(gè)DDS電路:
采用Verilog硬件描述語言來實(shí)現(xiàn)整個(gè)電路,這不僅利于設(shè)計(jì)文檔的管理,而且方便設(shè)計(jì)的修改和擴(kuò)充,以及在不同FPGA器件之間的移植。
由圖2可以清楚地看出整個(gè)系統(tǒng)只加入了一級(jí)流水線來提高速度,需要說明的是在ROM和系統(tǒng)控制電路之間也可以加入流水線,但實(shí)際仿真表明效果不明顯,反而消耗了更多的資源,因此綜合考慮后只加入一級(jí)流水線。
為了進(jìn)一步提高速度,在DDS電路的相位累加器模塊和加法器模塊的設(shè)計(jì)時(shí)并沒有采用FPGA單元庫中的16~32位加法器,盡管它們可以很容易地實(shí)現(xiàn)高達(dá)32位的相位累加器,但當(dāng)工作頻率較高時(shí),這種方法不可取,因?yàn)樗鼈冚^大的延時(shí)不能滿足速度要求。
因此,具體實(shí)現(xiàn)時(shí)我們分別用了4個(gè)和8個(gè)4位的累加器,以流水線的方式實(shí)現(xiàn)16位和32位累加器和加法器。比較仿真結(jié)果表明,采用流水線技術(shù)可以大大提高系統(tǒng)的工作速度。
從前面的分析可知,相位/幅度變換電路也是比較難實(shí)現(xiàn)的部分,它不僅要解決速度的問題,還要考慮節(jié)省資源的問題。如何有效利用FPGA有限的資源,是實(shí)現(xiàn)相位/幅度變換電路的最關(guān)鍵一點(diǎn)。
在實(shí)際運(yùn)用中,我們將著眼點(diǎn)主要放在了節(jié)省資源上來,相位/幅度轉(zhuǎn)換電路中的主要問題在于ROM的大小上。由于本次設(shè)計(jì)的DDS主要用于數(shù)字視頻編碼中,因此只需要輸出余弦(正弦)波,我們考慮了以下的優(yōu)化方式:余弦波信號(hào)對(duì)于直線成偶對(duì)稱,基于此可以將ROM表減至原來的1/2,再利用左半周期內(nèi),波形對(duì)于點(diǎn)成奇對(duì)稱,進(jìn)一步將ROM表減至最初的1/4,因此通過一個(gè)正弦碼表的前1/4周期就可以變換得到正弦和余弦的整個(gè)周期碼表。這樣就節(jié)省了將近3/4的資源,非??捎^。
系統(tǒng)控制電路主要是根據(jù)是否需要相位調(diào)制(BPSK)及頻率調(diào)制(BFSK),系統(tǒng)時(shí)鐘是否需要分頻得到所需的基準(zhǔn)時(shí)鐘,頻率碼的輸入方式是串行、并行還是微機(jī)接口方式,如何控制輸出等具體要求而設(shè)計(jì)的。這一部分可以靈活設(shè)計(jì),凸現(xiàn)FPGA的優(yōu)點(diǎn)所在。
評(píng)論