基于FPGA的直接數(shù)字頻率合成器的設(shè)計說明書_第1頁
基于FPGA的直接數(shù)字頻率合成器的設(shè)計說明書_第2頁
基于FPGA的直接數(shù)字頻率合成器的設(shè)計說明書_第3頁
基于FPGA的直接數(shù)字頻率合成器的設(shè)計說明書_第4頁
基于FPGA的直接數(shù)字頻率合成器的設(shè)計說明書_第5頁
已閱讀5頁,還剩50頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、 PAGE50 / NUMPAGES55畢業(yè)設(shè)計論文基于FPGA的直接數(shù)字頻率合成器的設(shè)計摘要 在頻率合成領(lǐng)域,常用的頻率合成技術(shù)有直接模擬合成、模擬鎖相環(huán)、小數(shù)分頻鎖相環(huán)等,直接數(shù)字頻率合成(Direct Digital Frequency Synthesis ,DDFS,簡稱DDS)是近年來的新的頻率合成技術(shù)。本文介紹了直接數(shù)字頻率合成器的基本組成與設(shè)計原理,給出了基于FPGA的具體設(shè)計方案與編程實現(xiàn)方法。仿真結(jié)果表明,該設(shè)計簡單合理,使用靈活方便,通用性好,可寫入各種FPGA芯片,最高可將頻率提高100萬倍。具有良好的性價比。關(guān)鍵詞 直接數(shù)字頻率合成器(DDS) FPGA Designo

2、fdirectdigitalfrequencysynthesizerbasedonFPGAAbstract In Frequency domain, the common Synthesis technology has Direct simulation, phase lock loop simulation, decimal Frequency and phase lock loop, Direct Digital Frequency Synthesis (as some DDFS, Digital, referred to as spurious bio-synthesis) in re

3、cent years is the new Frequency Synthesis technology. The structure and principles of Direct Digital Frequency Synthesizer is introduced. Also a detailed design and the method of program realization based on FPGA are introduced. The result of simulation shows that the design is simple and feasible,

4、convenient and flexible, high universality, writeable various FPGA chip, the highest frequency can be 100 million times. Ratiofor quality to price.Keywords Direct Digitalfrequency Synthesizer(DDS)FPGA前言在頻率合成領(lǐng)域,常用的頻率合成技術(shù)有直接模擬合成、模擬鎖相環(huán)、小數(shù)分頻鎖相環(huán)等,直接數(shù)字頻率合成(DDS)是近年來的新的頻率合成技術(shù)。DDS以穩(wěn)定度高的參考時鐘為參考源,通過精密的相位累加器和數(shù)字

5、信號處理,再通過高速D/A變換器產(chǎn)生所需的數(shù)字波形,這個數(shù)字濾波經(jīng)過一個模擬濾波器后,得到最終的模擬信號波形。DDS是產(chǎn)生高精度、快速頻率變換、輸出波形失真小的優(yōu)先選用技術(shù)。隨著可編程邏輯器件的飛速發(fā)展,使用FPGA(FieldProgrammable Gate Array)設(shè)計DDS系統(tǒng)成為一種很好的選擇,由于FPGA現(xiàn)場可編程,設(shè)計復(fù)雜或者簡單系統(tǒng)完全從實際需要出發(fā),通過重寫RAM/ROM數(shù)據(jù),可以做到任意波形輸出和動態(tài)波形輸出,這是其他方法所無法比擬的。本章提出了一種基于FPGA的直接數(shù)字頻率合成設(shè)計方法,并利用比例乘法器,將頻率分辨率提高到驚人的程度。目錄TOC o 1-3 h z u

6、HYPERLINK l _Toc2630065221DDS原理 PAGEREF _Toc263006522 h 1HYPERLINK l _Toc2630065231.1 直接模擬(DAS) PAGEREF _Toc263006523 h 1HYPERLINK l _Toc2630065241.2 間接式頻率合成(PLL) PAGEREF _Toc263006524 h 1HYPERLINK l _Toc2630065251.3 直接數(shù)字頻率合成(DDS) PAGEREF _Toc263006525 h 2HYPERLINK l _Toc2630065262 系統(tǒng)設(shè)計 PAGEREF _Toc

7、263006526 h 6HYPERLINK l _Toc2630065272.1微控制器接口模塊 PAGEREF _Toc263006527 h 8HYPERLINK l _Toc2630065282.2 相位累加寄存器 PAGEREF _Toc263006528 h 8HYPERLINK l _Toc2630065292.3雙端口RAM PAGEREF _Toc263006529 h 8HYPERLINK l _Toc2630067063模塊設(shè)計與實現(xiàn) PAGEREF _Toc263006706 h 15HYPERLINK l _Toc2630067083.1 微控制器接口模塊 PAGER

8、EF _Toc263006708 h 15HYPERLINK l _Toc2630067403.1.1分頻寄存器(FWORD1-FWORD4) PAGEREF _Toc263006740 h 16HYPERLINK l _Toc2630067593.1.2控制寄存器(DDSCR) PAGEREF _Toc263006759 h 16HYPERLINK l _Toc2630067973.1.3數(shù)據(jù)輸入寄存器(DATA) PAGEREF _Toc263006797 h 17HYPERLINK l _Toc2630072123.2 比例乘法器模塊 PAGEREF _Toc263007212 h 31

9、HYPERLINK l _Toc2630072303.3 相位累加器模塊 PAGEREF _Toc263007230 h 37HYPERLINK l _Toc2630072863.4 雙端口RAM模塊 PAGEREF _Toc263007286 h 39 TOC o 1-1 h z u HYPERLINK l _Toc263015834致 PAGEREF _Toc263015834 h 48HYPERLINK l _Toc263015835參考文獻(xiàn) PAGEREF _Toc263015835 h 49DDS原理 顧名思義頻率合成技術(shù),就是能從一個高穩(wěn)定和準(zhǔn)確度的標(biāo)準(zhǔn)頻率中產(chǎn)生千百萬個同一高穩(wěn)定

10、度和準(zhǔn)確度的頻率。頻率合成技術(shù)廣泛地應(yīng)用于通信、導(dǎo)航、雷達(dá)、儀器儀表、軍事裝備等領(lǐng)域、現(xiàn)代的電子系統(tǒng)對頻率合成器提出越來越高的要求,主要表現(xiàn)在:轉(zhuǎn)換速度快、頻段寬、步進(jìn)間隔小、雜散小、體積小、重量輕、功耗低等。隨著大規(guī)模集成電路的發(fā)展,頻率合成技術(shù)日趨完善,目前,主要有以下幾種方式。1.1 直接模擬(DAS)直接模擬合成技術(shù)是通過對標(biāo)準(zhǔn)參考頻率進(jìn)行加、減、乘、除運算而合成一系列相干頻率,其換頻率速度主要由電路部件響應(yīng)速度決定,相位噪聲指標(biāo)也還不錯。主要技術(shù)問題是雜波干擾,由于直接模擬合成引入了大量的混頻器、倍頻器、分頻器,這些非線性的部件使得雜波抑制相當(dāng)困難、在實際應(yīng)用中,這種技術(shù)的電路結(jié)構(gòu)比

11、較復(fù)雜,體積、重量、成本等方面缺點大大限制其應(yīng)用、1.2 間接式頻率合成(PLL)間接式頻率合成技術(shù)重要有鑒頻器、環(huán)路濾波器、壓控振蕩器、分頻器等4個基本部件構(gòu)成,如下圖1-1所示。鎖相環(huán)是一個相位誤差反饋控制系統(tǒng),它比較輸入信號和壓控振蕩器經(jīng)分頻后輸出信號之間的相位差,從而產(chǎn)生誤差控制電壓來調(diào)整壓控制振蕩器的輸出頻率,以達(dá)到與輸入信號倍頻的關(guān)系。鎖相環(huán)的頻率轉(zhuǎn)換速度與環(huán)路濾波器的帶寬有關(guān),環(huán)路帶寬越寬,轉(zhuǎn)換速度越快,而環(huán)路帶寬又取決于鑒相器頻率。才用這種技術(shù)產(chǎn)生的頻譜較純,系統(tǒng)體積小、重量輕、成本低、易集成,具有廣泛的應(yīng)用前景。但是,它也有一個致命的缺點,就是在高分辨率情況下,換頻速度較慢。

12、分頻器鑒相器壓控振蕩器低通濾波器合成頻率參考頻率圖 1-1 鎖相環(huán)電路基本結(jié)構(gòu)為了解決高分辨率于高鑒相頻率之間的矛盾,可以采用多環(huán)技術(shù)或者小數(shù)分頻技術(shù)。如果要求分辨率很高,那么采用多環(huán)PLL就顯得電路結(jié)構(gòu)復(fù)雜、成本高、調(diào)試?yán)щy;而采用小數(shù)分頻技術(shù),可以輕易解決高分辨率問題,但是小數(shù)分頻的主要問題是“尾數(shù)難抑”,國外對這方面的研究不少,但是還沒有徹底解決。1.3 直接數(shù)字頻率合成(DDS) DDS的概念最初是有美國學(xué)者J.Tierncy,C.M.Rader 和 B.Gold 提出的,它是以全數(shù)字技術(shù),從相位概念出發(fā)直接合成所需波形的一種新的頻率合成技術(shù),典型的DDS系統(tǒng)由相位累加器,波形查找表(

13、ROM/RAM),D/A,低通濾波器(Low Pass Filter簡稱LPF)構(gòu)成,如圖 1-2所示。低通濾波器m相位累加器波形查找表D/A圖 1-2 DDS原理框圖圖中,m為相位累加器步長,也有資料稱為頻率控制字,是參考頻率,是合成頻率。其系統(tǒng)的核心是相位累加器,它由一個累加器和一個n位相位寄存器組成(也可用帶有輸出鎖存的累加器代替),如圖1-3所示。每來一個時鐘脈沖,相位累加器以步長m累加,其結(jié)果作為波形查找表地址。當(dāng)相位累加器加滿量程,就會產(chǎn)生一次溢出,完成一個周期性的動作,這個周期是合成信號的一個周期,換句話說,累加器的溢出頻率也就是DDS的合成信號頻率。相位累加器的輸出數(shù)據(jù)作為波形

14、查找表地址,進(jìn)行波形的相位幅值的轉(zhuǎn)換,即可在給定的時間上確定輸出波形的抽樣幅值,如圖1-4所示。n位的尋址RAM/ROM相當(dāng)于把正弦信號離散成具有個樣值的序列,以二進(jìn)制數(shù)值形式存儲在個地址單元,按照地址不同輸出相應(yīng)的信號幅值。D/A轉(zhuǎn)換器的作用是把合成的數(shù)字波形轉(zhuǎn)換成模擬波形。離散量化幅度序列S(n)經(jīng)D/A轉(zhuǎn)換后變成了階梯波S(t),值得注意的是,頻率合成系統(tǒng)對D/A轉(zhuǎn)換器的分辨率有一定要求,D/A轉(zhuǎn)換器的分辨率越高,合成的階梯波S(t)臺階數(shù)越多,輸出的波形的精度也就越高,減少了量化失真。寄存器累加器步長m參考時鐘相位碼序列圖 1-3 相位累加器波形存儲器(ROM/RAM)幅度量化序列數(shù)據(jù)

15、相位嗎序列地址圖 1-4 相位幅度變換原理圖 低通濾波器的作用不容忽視。對D/A輸出的階梯波S(t)進(jìn)行頻譜分析,可知S(t)中除了主頻外,還存在分布在,2兩邊處的非諧波分量。因此,為了取出主頻,必須在D/A轉(zhuǎn)換器的輸出端接入截止頻率為的低通濾波器。DDS具有以下特點:(1) 頻率分辨率高。DDS的頻率分辨率在固定時,取決于相位累加器的位數(shù)n,只要n足夠大,理論上就可以獲得相應(yīng)的分辨率精度,這是傳統(tǒng)方法難以實現(xiàn)的。(2) 頻率變換速度快。在DDS中,一個頻率的建立時間通常取決于濾波器的帶寬。影響因素為相位累加器,ROM/RAM的工藝結(jié)構(gòu),D/A轉(zhuǎn)換器與它信號處理過程中可能產(chǎn)生的時延。其中,信號

16、處理的時延與時鐘周期相關(guān)。由于DDS中不要相位反饋控制,頻率建立與切換快,與頻率分辨率,頻譜純度相互獨立,明顯優(yōu)于PLL。(3) DDS中相位改變是線性過程。數(shù)字相位累加器是優(yōu)良的線性數(shù)字增值發(fā)生器。因此,DDS的相位誤差主要依賴于時鐘的相位特性,相位誤差小。另外,DDS的相位是連續(xù)變化的,形成的信號具有良好的頻譜特性,這是傳統(tǒng)的直接頻率合成法所無法實現(xiàn)的。(4)輸出頻率圍寬。 理論上,DDS輸出的頻率圍在,實際上,考慮到低通濾波器的設(shè)計,為,而FPGA的時鐘頻率可達(dá)到100MHz,因此,利用FPGA,可以實現(xiàn)輸出頻率圍很寬的信號。根據(jù)前面的講述,可以得到一下公式:其中,是輸出波形的周期,n是

17、相位累加器位數(shù),m是相位累加器步長,是輸入波形周期。是參考頻率,是輸出波形頻率,是最小分辨率,是最高合成頻率。根據(jù)奈奎斯特(Nyquist)定理,即采樣頻率必須不小于被采樣信號的最高頻率,否則原信號不能被恢復(fù),所以當(dāng)時,得到最高合成頻率,當(dāng)然,這僅是理論值,實際上與D/A精度、轉(zhuǎn)換速度,濾波網(wǎng)絡(luò)性能密切相關(guān),一般取,例如,晶振時鐘為100MHz時,可知輸出合成波頻率將出現(xiàn)在較寬頻段上。2 系統(tǒng)設(shè)計本章所需要設(shè)計的直接數(shù)字頻率合成系統(tǒng)與前面介紹的DDS原理完全一致。從實現(xiàn)方式上看,有如下特色:(1) 引入8級級聯(lián)的BCD比例乘法器,將頻率分辨率提高100萬倍!(2) 利用FPGA部嵌入式存儲單元

18、,在FPGA部集成了2Kbit容量雙端口RAM,降低了硬件難度,提高了系統(tǒng)可靠性。從前面的介紹中可以知道,增加相位累加器的位數(shù)n,可以提高頻率分辨率,最低輸出頻率可達(dá)Hz、mHz甚至是Hz,即DDS的最低合成頻率接近零頻。有人計算過,如果為50MHz,那么當(dāng)n為48位時,其分辨率可達(dá)179nHz。但是,增加相位累加器的位數(shù)n將使加法算法過于龐大,消耗驚人的FPGA資源。何不從入手,對實現(xiàn)任意可分頻,利用降低來換取高分辨率呢?事實證明,使用比例乘法器是可行的,經(jīng)過8級BCD比例乘法器的分頻,分頻比達(dá)到,例如,晶振頻率為100MHz,經(jīng)過分頻可以是Hz任意整數(shù)頻率,整個分頻模塊僅消耗65個宏單元。

19、現(xiàn)代FPGA部集成了存儲單元,這些是寶貴的存儲資源,通常只有通過利用開發(fā)商提供的知識產(chǎn)權(quán)核(IP CORE)才能使用,這些知識產(chǎn)權(quán)核經(jīng)過嚴(yán)格的測試和優(yōu)化,可以在特定器件上發(fā)揮最大效能,利用這些模塊,就是將優(yōu)秀EDA開發(fā)人員的硬件成果嵌入到自己設(shè)計中,縮短了開發(fā)時間,提高了效率。本章設(shè)計的參數(shù)選取如下。由相位累加器位數(shù)n=8,存儲容量2568=2048 bit,晶振頻率為100MHz,可知:(1) 頻率分辨率 Hz(2) 最高合成頻率MHZ前面講過,這僅是理論值,實際中與具體電路(D/A,濾波器)有關(guān)。(3) 相位步進(jìn) 本設(shè)計按照模塊化層次化設(shè)計方法,根據(jù)結(jié)構(gòu)功能,可以劃分出3個功能模塊,即微控

20、制器接口模塊、相位累加器模塊、雙端口RAM模塊,其連接關(guān)系如圖2-1所示。圖 2-1微控制器接口模塊微控制器接口模塊向微控制器提供友好,方便的操作接口,MCU可通過片選(CS)、地址選通(AS)、數(shù)據(jù)選通(DS)、數(shù)據(jù)總線和地址總線來操作其部寄存器。微控制器接口模塊部實現(xiàn)了6個寄存器,其中,4個位分頻寄存器,1個位控制寄存器,1個位數(shù)據(jù)輸入寄存器。此外,8級比例乘法器組成的分頻模塊以端口映射的方式例化在控制器接口模塊中,對外輸出參考時鐘頻率fclk。2.2 相位累加寄存器相位累加寄存器是系統(tǒng)的核心模塊,使用經(jīng)過分頻器分頻后的時鐘,圍相當(dāng)寬廣。相位累加器輸出相位碼序列,作為查尋地址送入雙端口RA

21、M,相應(yīng)地,還有讀使能和讀時鐘信號。相位累加步長m可取,n=0,1,2, ,7這里,為了減小失真,一般m取值不超過32雙端口RAM利用ALtera提供的Mega Wizard Plug-In Manager定制了數(shù)據(jù)線和地址線寬度均為8位,存儲容量為2048bit的雙端口RAM,獨立的兩套讀/寫接口,有興趣的讀者不妨使用Mega Wizard Plug-In Manager定制其他的存儲器,看看哪種存儲器使用起來最方便。接口信號說明如下:RESET,系統(tǒng)復(fù)位,低電平有效;CS,片選信號,低電平有效;AS,地址選通信號,低電平有效;DS,數(shù)據(jù)選通信號,低電平有效;DATABUS,數(shù)據(jù)總線;寬度為

22、8位;ADDRBUS,地址總線,寬度為3位。頂層實體的VHDL程序如下:- dds.vhdLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY dds ISPORT(- 與微控制器接口信號- 全局復(fù)位reset: INSTD_LOGIC;- 全局時鐘clk: INSTD_LOGIC;- 地址總線addrbus: INSTD_LOGIC_VECTOR(2 DOWNTO 0);- 數(shù)據(jù)總線databus: INSTD_lOGIC_VEC

23、TOR(7 DOWNTO 0);- 片選cs: INSTD_LOGIC;- 地址選通as: INSTD_LOGIC;- 數(shù)據(jù)選通ds: INSTD_LOGIC;- 數(shù)據(jù)輸出,送至D/A轉(zhuǎn)換器q: OUTSTD_LOGIC_VECTOR(7 DOWNTO 0);END dds;ARCHITECTURE rtl of dds IS- 元件說明- 接口模塊COMPONENT interfaceport(- 與微控制器接口信號- 全局復(fù)位reset: INSTD_LOGIC;- 全局時鐘clk: INSTD_LOGIC;- 地址總線addrbus: INSTD_LOGIC_VECTOR(2 DOWNT

24、O 0);- 數(shù)據(jù)總線databus: INSTD_lOGIC_VECTOR(7 DOWNTO 0);- 片選cs: INSTD_LOGIC;- 地址選通as: INSTD_LOGIC;- 數(shù)據(jù)選通ds: INSTD_LOGIC;- 與部模塊接口信號- DDS掃頻使能ddsen: OUTSTD_LOGIC;- 經(jīng)比例乘法器分頻后的時鐘fclk: OUT STD_LOGIC;- 步長m: OUTSTD_LOGIC_VECTOR(7 DOWNTO 0);- 數(shù)據(jù)輸出,送至雙端口RAMdataout: OUTSTD_LOGIC_VECTOR(7 DOWNTO 0);- 地址輸出,送至雙端口RAMad

25、drout: OUTSTD_LOGIC_VECTOR(7 DOWNTO 0);- 雙端口RAM寫使能wren: OUTSTD_LOGIC;- 雙端口RAM寫時鐘wrclock: OUTSTD_LOGIC);END COMPONENT;- 雙端口RAMCOMPONENT ramdpPORT(wren: IN STD_LOGIC;wrclock: INSTD_LOGIC;rden: IN STD_LOGIC;rdclock: INSTD_LOGIC;data: INSTD_LOGIC_VECTOR(7 DOWNTO 0);wraddress:INSTD_LOGIC_VECTOR(7 DOWNTO

26、0);rdaddress:INSTD_LOGIC_VECTOR(7 DOWNTO 0);q: OUTSTD_LOGIC_VECTOR(7 DOWNTO 0);END COMPONENT;- 相位累加器COMPONENT phasesumPORT(- 全局復(fù)位reset: INSTD_LOGIC;- 分頻時鐘fclk: INSTD_LOGIC;- 掃頻使能ddsen: INSTD_LOGIC;- 相位累加步長m: INSTD_LOGIC_VECTOR(7 DOWNTO 0);- 讀RAM時鐘rdclock: OUTSTD_LOGIC;- 讀RAM使能rden: OUTSTD_LOGIC;- 讀R

27、AM地址rdaddress:OUTSTD_LOGIC_VECTOR(7 DOWNTO 0);END COMPONENT;- 信號說明SIGNAL ddsen: STD_LOGIC;SIGNAL fclk: STD_LOGIC;SIGNAL wren: STD_LOGIC;SIGNAL wrclock: STD_LOGIC;SIGNAL rdclock: STD_LOGIC;SIGNAL rden: STD_LOGIC;SIGNAL dataout: STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL addrout: STD_LOGIC_VECTOR(7 DOWNTO 0)

28、;SIGNAL m: STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL rdaddress: STD_LOGIC_VECTOR(7 DOWNTO 0);BEGIN- 元件例化INTER_CONTROL: interfacePORT MAP(- 與微控制器接口信號- 全局復(fù)位reset= reset,- 全局時鐘clk= clk,- 地址總線addrbus= addrbus,- 數(shù)據(jù)總線databus= databus,- 片選cs= cs,- 地址選通as= as,- 數(shù)據(jù)選通ds= ds,- 與部模塊接口信號- DDS掃頻使能ddsen= ddsen,- 經(jīng)比例乘法器分

29、頻后的時鐘fclk= fclk,- 步長m= m,- 數(shù)據(jù)輸出,送至雙端口RAMdataout= dataout,- 地址輸出,送至雙端口RAMaddrout= addrout,- 雙端口RAM寫使能wren= wren,- 雙端口RAM寫時鐘wrclock= wrclock);- 雙端口RAMDP_RAM: ramdpPORT MAP(wren= wren,wrclock= wrclock,rden= rden,rdclock= rdclock,data= dataout,wraddress=addrout,rdaddress=rdaddress,q= q);- 相位累加器PHASE_ADD

30、ER: phasesumPORT MAP(- 全局復(fù)位reset= reset,- 分頻時鐘fclk= fclk,- 掃頻使能ddsen= ddsen,- 相位累加步長m= m,- 讀RAM時鐘rdclock= rdclock,- 讀RAM使能rden= rden,- 讀RAM地址rdaddress=rdaddress);END rtl;圖 2-2是頂層實體仿真波形,由圖中可以看到,首先,向地址為000的寄存器寫數(shù)據(jù)00010000,表示將晶振頻率10分頻,然后向地址為100的寄存器寫數(shù)據(jù)10000000,表示相位累加器使能,隨后,輸出波形。讀者可能暫時還不能理解整個系統(tǒng)的工作原理,這里只需了

31、解系統(tǒng)的輪廓即可,后面會詳細(xì)介紹各模塊的設(shè)計與實現(xiàn)。模塊設(shè)計與實現(xiàn)如前面所述,頂層實體由3個模塊構(gòu)成:微控制器接口模塊、相位累加器模塊與雙端口RAM模塊。由8個比例乘法器級聯(lián)組成的分頻器模塊以端口定義的形式例化在微控制器模塊中,屬于后者的子模塊,但是由于比例乘法器的本設(shè)計中所發(fā)揮的作用很大,加之相關(guān)資料少之又少,為了加深讀者的領(lǐng)悟,決定單獨作為一節(jié)。3.1 微控制器接口模塊微控制器接口向8位、16位、32位微處理器級微控制器提供友好的操作接口,如圖3-1所示。其輸入引腳前面已經(jīng)介紹過,這里不再重復(fù)。現(xiàn)在,介紹一下輸出引腳。圖 3-1ddsen:相位累加器使能,有效時為高電平;fclk:分頻時鐘

32、,作為相位累加器的輸入時鐘;m:相位累加步長,m=,n=0,1,2, ,7;dataout:數(shù)據(jù)輸出,作為RAM輸入數(shù)據(jù);addrout:地址輸出,作為RAM輸入地址;wern:RAM寫使能信號;wrclock:RAM寫時鐘信號。前面已經(jīng)提到,DDS部實現(xiàn)了6個寄存器,其中,4個位分頻寄存器,1個位控制寄存器,1個位數(shù)據(jù)輸入寄存器,這些寄存器的地址在表3-1中。表 3-1 寄存器地址名稱訪問屬性地址FWORD1Write000FWORD2Write001FWORD3Write010FWORD4Write011DDSCRWrite100DATAWrite101分頻寄存器(FWORD1-FWORD

33、4)以FWORD1為例,如表3-2所示。分頻寄存器用于存儲分頻系數(shù),分頻模塊由8個BCD比例乘法器構(gòu)成。每一個比例乘法器需要4位二進(jìn)制碼來確定分頻系數(shù),48=32 bit,也就是4 byte。FWORD1對應(yīng)第一級和第二級比例乘法器,F(xiàn)WORD2對應(yīng)第三級和第四級比例乘法器,以此類推,F(xiàn)WORD4對應(yīng)第七級和第八級比例乘法器。表3-2 分頻寄存器FWORD1BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT0控制寄存器(DDSCR)如表3-3所示,控制寄存器只有4位是有意義的,ddsen為相位累加器使能,當(dāng)其為有效時(邏輯1),相位累加器工作,輸出波形。m2、m1、m0是相位累加步

34、長控制字,由于系統(tǒng)設(shè)計中規(guī)定相位累加步長m=,n=0,1,2, ,7,所以使用3位表示他們足夠了,對應(yīng)的累加步長值如表3-4所示。表 3-3 控制寄存器BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT0DDSEN0000M2M1M0表 3-4 m2m1m0與相位累加步長m對照表m2m1m0m0001001201040118100161013211064111128數(shù)據(jù)輸入寄存器(DATA)如表3-5所示,微控制器通過數(shù)據(jù)輸入寄存器緩沖,將數(shù)據(jù)寫入雙端口RAM中。復(fù)位時,地址為0,每向DATA寄存器寫一次數(shù)據(jù),地址自動加1,直到地址寫滿,自動清零,準(zhǔn)備下一次寫入過程。這意味著可以重

35、復(fù)多次寫波形數(shù)據(jù),從而實現(xiàn)任意波形輸出和動態(tài)波形輸出的功能。表 3-5 控制寄存器BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT0DATA7DATA6DATA5DATA4DATA3DATA2DATA1DATA0本模塊通過片選信號、地址選通信號、數(shù)據(jù)選通信號來鎖定地址和數(shù)據(jù),當(dāng)片選信號CS和地址選通信號AS有效時,根據(jù)地址總線容使能對應(yīng)寄存器。在檢測到數(shù)據(jù)選通信號DS下降沿后,在系統(tǒng)時鐘的上升沿將數(shù)據(jù)寫入選中的寄存器中。微控制器接口模塊的狀態(tài)機(jī)如圖3-2所示:(1) IDLE。當(dāng)系統(tǒng)上電或復(fù)位后,微控制器接口處于此狀態(tài)。此狀態(tài)等待片選信號有效和AS信號的下降沿,當(dāng)條件滿足時,狀態(tài)

36、機(jī)切換到STROBE狀態(tài)。(2) STROBE。當(dāng)片選信號有效時,狀態(tài)機(jī)在此狀態(tài)等待,直到DS信號出現(xiàn)下降時沿,切換到DATA_LAUNCH狀態(tài);當(dāng)片選信號無效時,狀態(tài)機(jī)切換到IDLE狀態(tài)。(3) DATA_LAUNCH。 此狀態(tài)只持續(xù)1個時鐘周期,在時鐘上升沿寫入數(shù)據(jù),返回IDLE狀態(tài)。圖 3-2 微控制器接口狀態(tài)機(jī)文件interface部的各進(jìn)程說明:第一個進(jìn)程延遲信號,目的是檢測信號跳變。第二個進(jìn)程是狀態(tài)寄存器,同步狀態(tài)。第三個進(jìn)程是主狀態(tài)機(jī)。第四個進(jìn)程是寫RAM狀態(tài)機(jī)。第五個進(jìn)程根據(jù)地址譯碼,使能對應(yīng)寄存器。第六個進(jìn)程根據(jù)使能,寫對應(yīng)寄存器。描述微控制器接口模塊的VHDL程序如下:-

37、interface.vhdLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY interface ISport(- 與微控制器接口信號- 全局復(fù)位reset: INSTD_LOGIC;- 全局時鐘clk: INSTD_LOGIC;- 地址總線addrbus: INSTD_LOGIC_VECTOR(2 DOWNTO 0);- 數(shù)據(jù)總線databus: INSTD_lOGIC_VECTOR(7 DOWNTO 0);- 片選cs: IN

38、STD_LOGIC;- 地址選通as: INSTD_LOGIC;- 數(shù)據(jù)選通ds: INSTD_LOGIC;- 與部模塊接口信號- DDS掃頻使能ddsen: OUTSTD_LOGIC;- 經(jīng)比例乘法器分頻后的時鐘fclk: OUT STD_LOGIC;- 步長m: OUTSTD_LOGIC_VECTOR(7 DOWNTO 0);- 數(shù)據(jù)輸出,送至雙端口RAMdataout: OUTSTD_LOGIC_VECTOR(7 DOWNTO 0);- 地址輸出,送至雙端口RAMaddrout: OUTSTD_LOGIC_VECTOR(7 DOWNTO 0);- 雙端口RAM寫使能wren: OUTST

39、D_LOGIC;- 雙端口RAM寫時鐘wrclock: OUTSTD_LOGIC);END interface;ARCHITECTURE rtl of interface IS- 元件說明- 8個比例乘法器級聯(lián)COMPONENT fre_divPORT(- 輸入時鐘FIN: IN STD_LOGIC;- 分頻系數(shù)BCD1: INSTD_LOGIC_VECTOR(3 DOWNTO 0);BCD2: INSTD_LOGIC_VECTOR(3 DOWNTO 0);BCD3: INSTD_LOGIC_VECTOR(3 DOWNTO 0);BCD4: INSTD_LOGIC_VECTOR(3 DOWNT

40、O 0);BCD5: INSTD_LOGIC_VECTOR(3 DOWNTO 0);BCD6: INSTD_LOGIC_VECTOR(3 DOWNTO 0);BCD7: INSTD_LOGIC_VECTOR(3 DOWNTO 0);BCD8: INSTD_LOGIC_VECTOR(3 DOWNTO 0);- 分頻時鐘FOUT: OUTSTD_LOGIC);END COMPONENT;- 常數(shù)聲明CONSTANT RESET_ACTIVE : STD_LOGIC := 0;CONSTANT FWORD1_ADDR : STD_LOGIC_VECTOR(2 downto 0) := 000;CON

41、STANT FWORD2_ADDR : STD_LOGIC_VECTOR(2 downto 0) := 001;CONSTANT FWORD3_ADDR : STD_LOGIC_VECTOR(2 downto 0) := 010;CONSTANT FWORD4_ADDR : STD_LOGIC_VECTOR(2 downto 0) := 011;CONSTANT DDSCR_ADDR: STD_LOGIC_VECTOR(2 downto 0) := 100;CONSTANT DATA_ADDR: STD_LOGIC_VECTOR(2 downto 0) := 101;- 信號聲明SIGNAL

42、as_delay: STD_LOGIC;SIGNAL ds_delay: STD_LOGIC;SIGNAL bcd8: STD_LOGIC_VECTOR(3 downto 0);SIGNAL bcd7: STD_LOGIC_VECTOR(3 downto 0);SIGNAL bcd6: STD_LOGIC_VECTOR(3 downto 0);SIGNAL bcd5: STD_LOGIC_VECTOR(3 downto 0);SIGNAL bcd4: STD_LOGIC_VECTOR(3 downto 0);SIGNAL bcd3: STD_LOGIC_VECTOR(3 downto 0);S

43、IGNAL bcd2: STD_LOGIC_VECTOR(3 downto 0);SIGNAL bcd1: STD_LOGIC_VECTOR(3 downto 0);- 狀態(tài)機(jī)定義TYPE STATE_TYPE IS (IDLE,STROBE,DATA_LAUNCH);- 狀態(tài)機(jī)信號SIGNAL prs_state, next_state : STATE_TYPE;- 狀態(tài)機(jī)定義TYPE WR_STATE_TYPE IS (wr_idle,wr_high,wr_low);- 狀態(tài)機(jī)信號SIGNAL wr_state : WR_STATE_TYPE;SIGNAL DDSCR_reg: STD_L

44、OGIC_VECTOR(7 downto 0);SIGNAL wrclock_reg: STD_LOGIC;SIGNAL wren_reg: STD_LOGIC;SIGNAL ramaddress: STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL ramdata: STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL fout: STD_LOGIC;- FWORD1寄存器使能SIGNAL f1_en : STD_LOGIC;- FWORD2寄存器使能SIGNAL f2_en: STD_LOGIC;- FWORD3寄存器使能SIGNAL f3_en: S

45、TD_LOGIC;- FWORD4寄存器使能SIGNAL f4_en: STD_LOGIC;- DDSCR 寄存器使能SIGNAL cr_en: STD_LOGIC;- DDSDATA寄存器使能SIGNAL data_en: STD_LOGIC;BEGIN- Delayed Signals Detection Process- 檢測延遲信號Delay_Signals_Proc:PROCESS(reset,clk)BEGINIF(reset = RESET_ACTIVE) THENas_delay = 1;ds_delay = 1;ELSIF rising_edge(clk) THENas_de

46、lay = as;ds_delay = ds;END IF;END PROCESS;- Status Register Process- 狀態(tài)寄存器- 同步狀態(tài)State_Register_Proc: PROCESS (clk, reset)BEGINIF reset = RESET_ACTIVE THENprs_state = IDLE;ELSIF rising_edge(clk) THENprs_state = next_state;END IF;END PROCESS;- Next Status Logic Process- 次態(tài)邏輯Next_Logic_Proc: PROCESS (p

47、rs_state, as,as_delay,ds,ds_delay,cs)BEGINnext_state - 等待as的下降沿IF cs = 0 THEN- 片選,低有?IF as = 0 AND as_delay = 1 THENnext_state - 等待ds的下降沿IF cs = 0 THENIF ds = 0 AND ds_delay = 1 THENnext_state = DATA_LAUNCH;ELSIF ds = 1 THENnext_state = STROBE;END IF;ELSE next_state - 回到空閑狀態(tài)next_state = IDLE;END CAS

48、E;END PROCESS;- wr state Process- wr信號狀態(tài)機(jī)Wr_Logic_Proc: PROCESS (clk,reset)BEGINIF reset = RESET_ACTIVE THENwren_reg = 0;wrclock_reg = 0;ramaddress = 00000000;wr_state wren_reg = 0;wrclock_reg = 0;IF prs_state = DATA_LAUNCH THENIF data_en = 1 THENwren_reg = 1;ramdata = databus;wr_state - 產(chǎn)生wr上升沿wrcl

49、ock_reg = 1;wr_state wrclock_reg = 0;- 計算RAM地址IF ramaddress = 11111111 THENramaddress = 00000000;ELSEramaddress = ramaddress + 1;END IF;- 回到空閑狀態(tài)wr_state = wr_idle;END CASE;END IF;END PROCESS;- 寫雙端口RAM的信號wrclock = wrclock_reg;wren = wren_reg;dataout = ramdata;addrout = ramaddress;- ADDR_DECODE Proces

50、s- 地址譯碼Addr_Decode_Proc: PROCESS (reset, clk, addrbus, cs, as)BEGINIF reset = RESET_ACTIVE THENf1_en = 0;f2_en = 0;f3_en = 0;f4_en = 0;cr_en = 0;data_enf1_en = 1;f2_en = 0;f3_en = 0;f4_en = 0;cr_en = 0;data_enf1_en = 0;f2_en = 1;f3_en = 0;f4_en = 0;cr_en = 0;data_enf1_en = 0;f2_en = 0;f3_en = 1;f4_e

51、n = 0;cr_en = 0;data_enf1_en = 0;f2_en = 0;f3_en = 0;f4_en = 1;cr_en = 0;data_enf1_en = 0;f2_en = 0;f3_en = 0;f4_en = 0;cr_en = 1;data_enf1_en = 0;f2_en = 0;f3_en = 0;f4_en = 0;cr_en = 0;data_enf1_en = 0;f2_en = 0;f3_en = 0;f4_en = 0;cr_en = 0;data_en=0;END CASE;ELSEf1_en = 0;f2_en = 0;f3_en = 0;f4_

52、en = 0;cr_en = 0;data_en=0;END IF;END IF;END PROCESS;- register write Process- 寫寄存器Reg_Write_Proc: PROCESS(clk, reset, prs_state)BEGIN- 部寄存器復(fù)位IF reset = RESET_ACTIVE THEN- 分頻系數(shù)寄存器bcd1 = 0000;bcd2 = 0000;bcd3 = 0000;bcd4 = 0000;bcd5 = 0000;bcd6 = 0000;bcd7 = 0000;bcd8 = 0000;- 控制寄存器DDSCR_reg = 000000

53、00;- 等待時鐘上升沿ELSIF rising_edge(clk) THENIF (prs_state = DATA_LAUNCH) THEN- FWORD1寄存器使能IF f1_en = 1 THENbcd1 = databus(7 DOWNTO 4);bcd2 = databus(3 DOWNTO 0);END IF;- FWORD2寄存器使能IF f2_en = 1 THENbcd3 = databus(7 DOWNTO 4);bcd4 = databus(3 DOWNTO 0);END IF;- FWORD3寄存器使能IF f3_en = 1 THENbcd5 = databus(7

54、 DOWNTO 4);bcd6 = databus(3 DOWNTO 0);END IF;- FWORD4寄存器使能IF f4_en = 1 THENbcd7 = databus(7 DOWNTO 4);bcd8 = databus(3 DOWNTO 0);END IF;- DDSCR寄存器使能IF cr_en = 1 THENDDSCR_reg = databus;END IF;END IF;END IF;END PROCESS;ddsen = DDSCR_reg(7);- m是相位累加器的計數(shù)步長- 000 - 1001 - 2- 010 - 4 011 - 8- 100 - 16 101

55、 - 32- 110 - 64 111 - 128WITH DDSCR_reg(2 DOWNTO 0) SELECTm clk,- 分頻系數(shù)BCD1= bcd1,BCD2= bcd2,BCD3= bcd3,BCD4= bcd4,BCD5= bcd5,BCD6= bcd6,BCD7= bcd7,BCD8= bcd8,- 分頻時鐘FOUT= fout);- 作為相位累加器的時鐘fclk = fout;END rtl;程序的仿真波形如圖3-3所示,首先,系統(tǒng)復(fù)位,想FWORD1(地址為000)寫數(shù)據(jù)1。作用是設(shè)置分頻器系數(shù)位100:1,可以看到下面的fclk信號輸出與系統(tǒng)時鐘clk之間的關(guān)系;然后,

56、向DDSCR(地址為100)寫數(shù)據(jù)3,查表3-4可知,設(shè)置相位累加系數(shù)m=8;最后,向數(shù)據(jù)輸入寄存器DATA(地址101)連續(xù)寫數(shù)據(jù),1,2,可以看到寫使能信號wren,寫時鐘信號wrclock以與數(shù)據(jù)輸出、地址輸出信號的波形。圖 3-3 微控制器接口模塊的仿真波形比例乘法器模塊比例乘法器分為兩種,一種是BCD比例乘法器(CD4527,J690),另一種是二進(jìn)制比例乘法器(CD4089)。BCD比例乘法器是由BCD輸入數(shù)控制輸出脈沖序列個數(shù),所謂BCD碼指4位二進(jìn)制表示1位十進(jìn)制數(shù),對應(yīng)關(guān)系如表3-6。輸出脈沖序列的多少取決于一個可變的數(shù)X(BCD碼或二進(jìn)制碼)與運算系數(shù)和輸入時鐘的運算關(guān)系,

57、表示為: 因而輸出脈沖數(shù)總是比小或是等于,式中的是運算系數(shù),K值在BCD比例乘法器中為10,在二進(jìn)制比例乘法器中為16,n為運算級數(shù)。在并行連接方式時,對于第一級比例乘法器n為1。依次,后面幾級分別為2,3,4。 這種電路具有用積木式產(chǎn)生很寬圍的數(shù)字頻率功能,在頻率系統(tǒng)中廣泛應(yīng)用,當(dāng)與可逆計數(shù)器與一些控制邏輯連用時,可以實現(xiàn)乘法、加法、減法、開方、平方以與解代數(shù)方程和微分方程、積分等功能。表3-6 BCD碼與十進(jìn)制數(shù)對應(yīng)關(guān)系BCD碼十進(jìn)制數(shù)00000000110010200113010040101501106011171000810019圖3-4為J690和CD4527比例乘法器的邏輯圖。CD

58、4527主要由兩部分組成,即BCD計數(shù)器和比例輸出控制電路組成。BCD計數(shù)器采用5421碼編碼,計數(shù)器中的技術(shù)單元采用T型觸發(fā)器。對計數(shù)器的邏輯結(jié)構(gòu)用卡諾圖進(jìn)行分析,并考慮時禁止輸入端INHin,可以得到每個T型觸發(fā)器的控制邏輯表達(dá)式:圖中INHin是時鐘脈沖禁止輸入端,當(dāng)INHin為1時,禁止時鐘激勵計數(shù)器計數(shù);為0時允許時鐘激勵計數(shù)器計數(shù)。SET9是置“9”端,在SET9為1時,計數(shù)器置9(1001)。ST端為選通端,在ST為0時允許脈沖輸出。CS是擴(kuò)展級聯(lián)端,不用時為0,擴(kuò)展時將前一級比例乘法器輸出OUT送入下一級的擴(kuò)展級聯(lián)端CS,當(dāng)上一級比例乘法器A的輸出端送出一個脈沖給下一級比例乘法

59、器B的擴(kuò)展級聯(lián)端時,這個脈沖將傳至比例乘法器B的輸出端,也就是說比例乘法器B的輸出端OUT輸出的脈沖,除了它本身的輸出脈沖外,還包含了一級比例乘法器輸出的脈沖序列,更進(jìn)一步說,如果比例乘法器B還有下一級,即比例乘法器C的話,C通過擴(kuò)展級聯(lián)端與B級聯(lián),那么比例乘法器C的輸出脈沖個數(shù)是A、B、C輸出脈沖個數(shù)之和。“9”為計數(shù)器的譯碼輸出,有效時輸出1;INHout端是禁止輸出端,也是計數(shù)器的“9”譯碼輸出,有效時為輸出0。它同時還受到禁止輸入端INHin的控制,實際上,“9”端與INHin端的點位始終是相反的,可以把INHout看作是“9”的反向輸出;OUT受擴(kuò)展級聯(lián)輸入CS的控制,而NOUT端不

60、受CS控制,即NOUT的輸出不包含擴(kuò)展級聯(lián)端的脈沖,兩者有這種區(qū)別。應(yīng)該注意到,CC4527(J690)電路中的計數(shù)器是在輸入時鐘脈沖Fin的上升沿計,而電路的輸出端OUT在輸入時鐘的下降沿同步輸出。圖 3-4 BCD比例乘法器CD4527下面舉2個BCD比例乘法器CD4527級聯(lián)時的例子,如圖3-5所示。圖3-5 2個BCD比例乘法器CD4527級聯(lián)設(shè)。則 第一級比例乘法器輸出端OUT取得的輸出脈沖數(shù),并將此輸出送入第二級比例乘法器的擴(kuò)展級聯(lián)端,因此在第二級比例乘法器的輸出端輸出的脈沖數(shù)包含了從擴(kuò)展級聯(lián)端輸入的個脈沖,和該位自身的比例輸出個脈沖兩部分。后一部分的輸出是由于第二級比例乘法器的禁

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論