FPGA模擬DDS正弦波信號源1_第1頁
FPGA模擬DDS正弦波信號源1_第2頁
FPGA模擬DDS正弦波信號源1_第3頁
FPGA模擬DDS正弦波信號源1_第4頁
FPGA模擬DDS正弦波信號源1_第5頁
已閱讀5頁,還剩16頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、摘要隨著科學(xué)技術(shù)的發(fā)展和測量技術(shù)的進步,普通的信號發(fā)生器已無法滿足目前日益發(fā)展的電子技術(shù)領(lǐng)域的生產(chǎn)調(diào)試需要。而dds技術(shù)是一種新興的直接數(shù)字頻率合成技術(shù),具有頻率分辨率高、頻率切換速度快、切換相位連續(xù)、輸出信號相位噪聲低、可編程、全數(shù)字化易于集成、體積小、重量輕等優(yōu)點,因而在雷達及通信等領(lǐng)域具有廣泛的應(yīng)用前景。目前市面上的dds芯片,價格昂貴、功能固定單一,應(yīng)用受到限制。本綜合實驗項目采用基于fpga的eda技術(shù)設(shè)計實現(xiàn)dds芯片,并可以根據(jù)實際需要對其功能進行靈活地修改,配置。關(guān)鍵字:fpga eda dds1 dds的研究現(xiàn)狀及發(fā)展趨勢在頻率合成(fs, frequency synthes

2、is)領(lǐng)域中,常用的頻率合成技術(shù)有模擬鎖相環(huán)、數(shù)字鎖相環(huán)、小數(shù)分頻鎖相環(huán)(fractional-n pll synthesis)等,直接數(shù)字合成(direct digital synthesisdds)是近年來新的fs技術(shù)。單片集成的dds產(chǎn)品是一種可代替鎖相環(huán)的快速頻率合成器件。dds是產(chǎn)生高精度、快速變換頻率、輸出波形失真小的優(yōu)先選用技術(shù)。dds以穩(wěn)定度高的參考時鐘為參考源,通過精密的相位累加器和數(shù)字信號處理,通過高速d/a變換器產(chǎn)生所需的數(shù)字波形(通常是正弦波形),這個數(shù)字波經(jīng)過一個模擬濾波器后,得到最終的模擬信號波形。如圖1-1所示,通過高速dac產(chǎn)生數(shù)字正弦數(shù)字波形,通過帶通濾波器后

3、得到一個對應(yīng)的模擬正弦波信號,最后該模擬正弦波與一門限進行比較得到方波時鐘信號。 dds系統(tǒng)一個顯著的特點就是在數(shù)字處理器的控制下能夠精確而快速地處理頻率和相位。除此之外,dds的固有特性還包括:相當好的頻率和相位分辨率(頻率的可控范圍達hz級,相位控制小于0.09),能夠進行快速的信號變換(輸出dac的轉(zhuǎn)換速率300百萬次/秒)。這些特性使dds在軍事雷達和通信系統(tǒng)中應(yīng)用日益廣泛。其實,以前dds價格昂貴、功耗大(以前的功耗達watt級)、dac器件轉(zhuǎn)換速率不高,應(yīng)用受到限制,因此只用于高端設(shè)備和軍事上。隨著數(shù)字技術(shù)和半導(dǎo)體工業(yè)的發(fā)展,dds芯片能集成包括高速dac器件在內(nèi)的部件,其功耗降低

4、到mw級(ad9851在3.3v時功耗為650mw),功能增加了,價格便宜。因此,dds也獲得廣泛的應(yīng)用:現(xiàn)代電子器件、通信技術(shù)、醫(yī)學(xué)成像、無線、pcs/pcn系統(tǒng)、雷達、衛(wèi)星通信。1.1dds的系統(tǒng)簡介dds的原理框圖如圖1所示。圖中相位累加器可在每一個時鐘周期來臨時將頻率控制字(tuning word)所決定的相位增量m累加一次,如果記數(shù)大于2n,則自動溢出,而只保留后面的n位數(shù)字于累加器中。正弦查詢表rom用于實現(xiàn)從相位累加器輸出的相位值到正弦幅度值的轉(zhuǎn)換,然后送到dac中將正弦幅度值的數(shù)字量轉(zhuǎn)變?yōu)槟M量,最后通過濾波器輸出一個很純凈的正弦波信號。 由圖可知,一個基本的dds結(jié)構(gòu),主要由

5、相位累加器、相位調(diào)制器、正弦rom查找表和dac構(gòu)成。圖中的相位累加器、相位調(diào)制器、正弦rom查找表是dds結(jié)構(gòu)中的數(shù)字部分,由于具有數(shù)控頻率合成的功能,又合稱為nco(numerically controlled oscillators)。相位累加器是整個dds的核心,在這里完成上述原理推導(dǎo)中的相位累加功能。相位調(diào)制器接收相位累加器的相位輸出,在這里加上一個相位偏移值,主要用于信號的相位調(diào)制。正弦查找表rom是dds最關(guān)鍵的部分,也是最復(fù)雜的部分;設(shè)計時首先需要對正弦函數(shù)進行采樣,接著將采樣的結(jié)果放到rom模塊的對應(yīng)存儲單元中;每一個地址對應(yīng)一個數(shù)值,輸出為10位。為了保證輸出數(shù)據(jù)的穩(wěn)定性,

6、將rom的輸出數(shù)據(jù)先寄存在regout中,待下一個始終到來時,再將其輸出。整個系統(tǒng)各模塊是在同步時鐘信號clk的控制下協(xié)調(diào)工作的。數(shù)模轉(zhuǎn)換器(dac)的作用是將數(shù)字形式的波形幅值轉(zhuǎn)換成所要求合成頻率的模擬形式信號。dac有電壓和電流輸出兩種,其輸出的信號并不能真正連續(xù)可變,而是以其絕對分辨率為最小單位的,所以其輸出實際上是一個階梯模擬信號。現(xiàn)在,一些器件廠家如美國的ad公司,都在dds器件的芯片內(nèi)部集成了dac,這種結(jié)構(gòu)稱為complete-dds,大大簡化了dds的系統(tǒng)設(shè)計。1.2 dds的性能特點(1)dds的頻率分辨率在相位累加器的位數(shù)n足夠大時,理論上可以獲得相應(yīng)的分辨精度,這是傳統(tǒng)方

7、法難以實現(xiàn)的。 (2)dds是一個全數(shù)字結(jié)構(gòu)的開環(huán)系統(tǒng),無反饋環(huán)節(jié),因此速度極快,一般在毫微秒量級。(3)dds的相位誤差主要依賴于時鐘的相位特性,相位誤差小。另外,dds的相位是連續(xù)變化的,形成的信號具有良好的頻譜,這是傳統(tǒng)的直接頻率合成方法無法實現(xiàn)的(4)相位變化連續(xù) 改變dds輸出頻率,實際上改變的每一個時鐘周期的相位增量,相位函數(shù)的曲線是連續(xù)的,只是在改變頻率的瞬間其頻率發(fā)生了突變,因而保持了信號相位的連續(xù)性。 (5)輸出波形的靈活性只要在dds內(nèi)部加上相應(yīng)控制如調(diào)頻控制fm、調(diào)相控制pm和調(diào)幅控制am,即可以方便靈活地實現(xiàn)調(diào)頻、調(diào)相和調(diào)幅功能,產(chǎn)生fsk、psk、ask和msk等信號

8、。另外,只要在dds的波形存儲器存放不同波形數(shù)據(jù),就可以實現(xiàn)各種波形輸出,如三角波、鋸齒波和矩形波甚至是任意的波形。當dds的波形存儲器分別存放正弦和余弦函數(shù)表時,既可得到正交的兩路輸出。 (6)其他優(yōu)點 由于dds中幾乎所有部件都屬于數(shù)字電路,易于集成,功耗低、體積小、重量輕、可靠性高,且易于程控,使用相當靈活,因此性價比極高。1.3 dds的基本參數(shù)計算公式 由于相位累加器是n比特的模2加法器,正弦查詢表rom中存儲一個周期的正弦波幅度量化數(shù)據(jù),所以頻率控制字m取最小值1時,每2n個時鐘周期輸出一個周期的正弦波。所以此時有: f0=fc/2n (1.3.1)式中f0為輸出信號的頻率,fc為

9、時鐘頻率,n為累加器的位數(shù)。 更一般的情況,頻率控制字是m時,每2n/m個時鐘周期輸出一個周期的正弦波。所以此時有:f0 = m*fc/2n (1.3.2)式中為f0輸出信號的頻率,fc為時鐘頻率,n為累加器的位數(shù),m為頻率控制字。 式(1.3.2)為dds系統(tǒng)最基本的公式之一。由此可以得出: 輸出信號的最小頻率(分辨率)為:f0min= fc/2n(1.3.3) 輸出信號的最大頻率為:f0max =mmax*fc/2n (1.3.4) dac 每信號周期輸出的最少點數(shù)為k= 2n /mmax(1.3.5)當 n 比較大時,對于很大范圍內(nèi)的 m 值,dds系統(tǒng)都可以在一個周期內(nèi)輸出足夠的點,保

10、證輸出波形失真很小。 2 dds主體部分設(shè)計整個dds系統(tǒng)的設(shè)計采用層次結(jié)構(gòu),采用vhdl與原理圖輸入相結(jié)合的方法,下面就各個部分的設(shè)計分別介紹。 本設(shè)計中采用的頻率字為32位,即n=32,rom為256*8位,故rom的地址線寬m=8,輸出數(shù)據(jù)線寬l=8. 由于rom地址線為8位(28=256),而相位累加器的輸出為32位,為了保證他們之間的對應(yīng),我們將相位累加器的高8位與rom的地址線相連。這樣存在多個相位地址對應(yīng)同一個rom地址的情況,如果把相位累加器輸出的所有位數(shù)全部用來查詢rom,那rom的容量會非常的大,如此巨大的rom表容量在實際工作中難以實現(xiàn)。因此,常使用相位地址高位來尋址,舍

11、去低位的相位截斷方法。當然,這種方法會引入一定的噪聲,但對于節(jié)省的資源來說,這種方法還是值得的。2.1 相位累加器其vhdl代碼為:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity 10701 is port(clk:in std_logic; fre: in std_logic_vector(31 downto 0); add_pio:out std_logic_vector(9 downto 0);end 10701;architecture 10701 of 10701 isbe

12、gin process(clk,fre)variable phase:std_logic _vector(31 downto 0);beginif(clkevent and clk=1)thenphase:=phase+fre;add_pio=phase(31 downto 22);end if;end process;end 10701;輸入端口中clk和fre分別代表相位累加器的時鐘和頻率字。變量phase代表相位累加器,每來一個時鐘完成一次相位累加。相位累加器輸出的高10位用作波形數(shù)據(jù)表的地址,由輸出管腳add_pio輸出。2.2 顯示電路正弦信號產(chǎn)生器采用數(shù)碼管來顯示工作狀態(tài)。為簡化設(shè)

13、計,顯示電路包括4位數(shù)碼管.4個數(shù)碼管電路設(shè)計為獨立工作,它們各自接收需要顯示的數(shù)據(jù)。準備顯示的數(shù)據(jù)在可編程邏輯器件中進行譯碼,產(chǎn)生的顯示代碼被送到7段數(shù)碼管實現(xiàn)數(shù)據(jù)的顯示。由于3個數(shù)碼管電路完全一樣,下面給出其中一路的vhdl代碼,該代碼支持共陰極數(shù)碼管的工作。修改代碼中的顯示代碼,就可很方便地用于共陽極數(shù)碼管。設(shè)計一個共陰極7段數(shù)碼管顯示電路。其vhdl代碼為:library ieee;use ieee.std_logic_1164.all;entity 10702 isport(data: in std_logic_vector(3 downto 0); seven_seg:out st

14、d_logic_vector(6 downto 0);end 10702;architecture 10702 of 10702 isbeginwith data selectseven_seg=”0111111”when”0000”, ”0000110”when”0001”,”1011011”when”0010”,”1001111”when”0011”,”1100110”when”0100”,”1101101”when”0101”,”0111101”when”0110”,”0000111”when”0111”,”1111111”when”1000”,”1101111”when”1001”,”

15、0000000”when others;end 10702;接收準備顯示的一位數(shù)據(jù),該數(shù)據(jù)采用8421bcd碼。輸入的8421bcd碼譯碼以后通過可編程邏輯器件的輸入/輸出管腳送到數(shù)碼管的輸入管腳。輸出端口seven_seg的7位數(shù)據(jù)按照從低到高的順序依次送到數(shù)碼管的管腳a_g。2.3鍵盤電路鍵盤是一組按鍵開關(guān)的集合。像數(shù)碼管,鍵盤也是數(shù)字系統(tǒng)的一個關(guān)鍵部件。按鍵開關(guān)具有兩個狀態(tài),閉合或者斷開。這兩個狀態(tài)反映在電壓上就是按鍵開關(guān)呈現(xiàn)出高電平或者低電平。如果按鍵開關(guān)呈現(xiàn)高電平表示它斷開,那么按鍵開關(guān)呈現(xiàn)低電平表示它閉合,因此通過檢測按鍵開關(guān)呈現(xiàn)的電平狀態(tài)就可以確認按鍵開關(guān)是否被按下。在鍵盤包含的

16、按鍵開關(guān)較少的情況下,例如只包含4個按鍵開關(guān),獨立式鍵盤占用的輸入/輸出管腳數(shù)量是可以接受的。具有4個按鍵的獨立式鍵盤電路如圖所示。鍵盤中的5個按鍵分別有兩個不同的用途:輸入數(shù)據(jù)和刷新dds的頻率狀態(tài)字。輸入數(shù)據(jù)通過按鍵key0、key1、key2、key3實現(xiàn)。其中按鍵key0用來調(diào)整輸出信號頻率的個位;按鍵key1用來調(diào)整輸出信號的十位;按鍵key2用來調(diào)整輸出信號的百位;按鍵key3用來調(diào)整輸出信號的千位;按鍵key4用來刷新dds的頻率狀態(tài)字,因此它被稱為執(zhí)行鍵(enter)。在輸入數(shù)據(jù)的過程中,輸出信號的頻率保持原數(shù)值,這時只改變對應(yīng)的數(shù)據(jù)存儲單元的內(nèi)容,并利用數(shù)碼管把當前內(nèi)容顯示出

17、來以方便數(shù)據(jù)調(diào)整。當按下執(zhí)行鍵(enter),輸入的頻率值被轉(zhuǎn)換成新的dds的頻率狀態(tài)字。數(shù)據(jù)調(diào)整鍵key0、key1、key2、key3中的每一個都對應(yīng)一個存儲單元,每按一次按鍵,該按鍵對應(yīng)的存儲單元的內(nèi)容加1.這個過程一直到內(nèi)容為9,再次按鍵將使存儲單元的內(nèi)容清零。為避免一次按鍵導(dǎo)致存儲單元的內(nèi)容變化太大,鍵盤電路的時鐘應(yīng)該選的較低,例如1hz。在按鍵被按下,同時時鐘信號的前沿到來時,該按鍵對應(yīng)的存儲單元的內(nèi)容加1,利用數(shù)碼管把當前內(nèi)容顯示出來。當顯示的數(shù)值為需要的數(shù)據(jù)時,釋放按鍵。輸入的頻率值與dds的頻率狀態(tài)字之間的關(guān)系位為:f0=fc*k/2n,在這里,fc=100khz,相位累加器

18、的位數(shù)為n=21.正弦信號產(chǎn)生器的輸出信號頻率f0與頻率控制字k的關(guān)系如表所示。輸出信號頻率f0與頻率控制字k的關(guān)系輸出信號頻率f頻率控制字k輸出信號頻率f頻率控制字k輸出信號頻率f頻率控制字k輸出信號頻率f頻率控制字k1hz1010b10hz1101000b100hz10000011000b100hz10100011110101b2hz10100b20hz11010001b200hz100000110001b200hz101000111101011b3hz11111b30hz100111010b300hz110001001001b300hz111101011100001b4hz101001b

19、40hz110100011b400hz1000001100010b400hz1010001111010111b5hz110100b50hz1000001100b500hz1010001111010b500hz1100110011001100b6hz111110b60hz1001110101b600hz1100010010011b600hz1111010111000010b7hz1001001b70hz1011011110b700hz1110010101100b700hz10001111010111000b8hz1010011b80hz1101000110b800hz10000011000100

20、b800hz10100011110101110b9hz1011110b90hz1110101111b900hz10010011011101b900hz10111000010100011b設(shè)計鍵盤電路vhdl代碼為:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity 10703 isport(clk_lhz:in std_logic;-定義時鐘輸入端口key_data:in std_logic_vector(3 downto 0);-定義按鍵輸入端口seven_sega,seven_seg

21、b,seven_segc,seven_segd:out std_logic_vector(3 downto 0);-定義顯示代碼輸出端口fre:out std_logic_vector(21 downto 0);-定義頻率字輸出端口 end 10703;architecture 10703 of 10703 is signal key_rama, key_ramb, key_ramc, key_ramd: std_logic_vector(4 downto 0);beginprocess(clk_lhz,key_data)variable fre_a, fre_b, fre_c, fre_d:

22、 std_logic_vector(21 downto 0);beginif(clk_lhzevent and clk_lhz=1)thenif(key_data=”11110”)thenif(key_rama”1001”)thenkey_rama= key_rama+1;elsekey_rama=”0000”end if;end if;if(key_data=”11101”)thenif(key_ramb”1001”)thenkey_ramb= key_ramb+1;elsekey_ramb=”0000”end if;end if;if(key_data=”11011”)thenif(key

23、_ramc”1001”)thenkey_ramc= key_ramc+1;elsekey_ramc=”0000”end if;end if;if(key_data=”10111”)thenif(key_ramd”1001”)thenkey_ramd= key_ramd+1;elsekey_ramdfre_a:=”0000000000000000000000”;when “0001”=fre_a:=”0000000000000000001010”;when “0010”=fre_a:=”0000000000000000010100”;when “0011”=fre_a:=”00000000000

24、00000011111”;when “0100”=fre_a:=”0000000000000000101001”;when “0101”=fre_a:=”0000000000000000110100”;when “0110”=fre_a:=”0000000000000000111110”;when “0111”=fre_a:=”0000000000000001001001”;when “1000”=fre_a:=”0000000000000001010011”;when “1001”=fre_a:=”0000000000000001011110”;when “others=null;end c

25、ase;case key_ramb iswhen “0000”=fre_b:=”0000000000000000000000”;when “0001”=fre_b:=”0000000000000001101000”;when “0010”=fre_b:=”0000000000000011010001”;when “0011”=fre_b:=”0000000000000100111010”;when “0100”=fre_b:=”0000000000000110100011”;when “0101”=fre_b:=”0000000000001000001100”;when “0110”=fre_

26、b:=”0000000000001001110101”;when “0111”=fre_b:=”0000000000001011011110”;when “1000”=fre_b:=”0000000000001101000110”;when “1001”=fre_b:=”0000000000001110101111”;when “others=null;end case;case key_ramc iswhen “0000”=fre_c:=”0000000000000000000000”;when “0001”=fre_c:=”0000000000010000011000”;when “001

27、0”=fre_c:=”0000000000100000110001”;when “0011”=fre_c:=”0000000000110001001001”;when “0100”=fre_c:=”0000000001000001100010”;when “0101”=fre_c:=”0000000001010001111010”;when “0110”=fre_c:=”0000000001100010010011”;when “0111”=fre_c:=”0000000001110010101100”;when “1000”=fre_c:=”0000000010000011000100”;w

28、hen “1001”=fre_c:=”0000000010010011011101”;when “others=null;end case;case key_ramd iswhen “0000”=fre_d:=”0000000000000000000000”;when “0001”=fre_d:=”0000000010100011110101”;when “0010”=fre_d:=”0000000101000111101011”;when “0011”=fre_d:=”0000000111101011100001”;when “0100”=fre_d:=”000000101000111101

29、0111”;when “0101”=fre_d:=”0000001100110011001100”;when “0110”=fre_d:=”0000001111010111000010”;when “0111”=fre_d:=”0000010001111010111000”;when “1000”=fre_d:=”0000010100011110101110”;when “1001”=fre_d:=”0000010111000010100011”;when “others=null;end case;endif;endif;fre=fre_a+fre_b+fre_c+fre_d;end pro

30、cess;seven_sega=key_rama;seven_segb=key_ramb;seven_segc=key_ramc;seven_segd=key_ramd;end 10703; 2.4 波形存儲器為了實現(xiàn)波形存儲器模塊,首先需要到rom內(nèi)的波形數(shù)據(jù)文件,即memory initialization file(.mif),它的文件格式如下:depth=存儲器深度;width=存儲器字寬;address_radix=地址進制;data_radix=存儲數(shù)據(jù)進制;以下為存儲內(nèi)容示例,格式:“地址:數(shù)據(jù);”,共256個單元,中間省略。content begin0:127;1:130;2:

31、133;254:121;255:124;end;知道了格式,我們就可以自己編輯需要的mif文件了,對于存儲單元較多的rom,手工編寫比較麻煩,可以借助matlab里生成正弦信號的采樣點數(shù)據(jù)表格,還需要自己添加程序,下面舉例說明:先編寫一段m文件程序,這里以產(chǎn)生02*pi范圍內(nèi)正弦波幅度之為例。即在02*pi的周期范圍內(nèi)采樣256個點,每個點的值用8位二級制數(shù)表示。在matlab里編寫的m文件,保存的文件名為rom_data.miff=(0:1:255);f=round(-128*sin(2*pi*x/256)+127;fid=fopen(rom_data.mif,w);fprintf(fid,

32、%d:%d;n,x,y);fclose(fid);plot(x,y);grid on執(zhí)行后sin_dat.mif中數(shù)據(jù)如下:0:127;1:130;2:133;3:136;4:140;5:143;但是這樣的數(shù)據(jù)表格在max+plus ii/quartus ii軟件里還不能直接調(diào)用,需要我們自己手動修改,按前面的格式介紹,在最前面加上數(shù)據(jù)類型聲明,如下:depth=256;width=8;address_radix=uns;data_radix=uns;content begin之后,在結(jié)尾處還要加上end;至此,我們就得到了所需要的.mif。但這僅僅是rom的數(shù)據(jù)文件,還需要編寫一個vhdl文

33、件來加載該波形數(shù)據(jù)。3.3 數(shù)/模轉(zhuǎn)換電路系統(tǒng)中的數(shù)/模轉(zhuǎn)換器采用burr-brown公司生產(chǎn)的dac7611數(shù)/模轉(zhuǎn)換器芯片。采用該芯片的目的是通過一個完整的設(shè)計過程來學(xué)習(xí)如何進行電路系統(tǒng)設(shè)計。dac7611數(shù)/模轉(zhuǎn)換器dac7611的介紹dac7611是一種具有串行接口的12位數(shù)/模轉(zhuǎn)換器,它的一種典型應(yīng)用電路所示。該芯片具有片內(nèi)參考電壓源,同時它具有pdip8的封裝形式使得能夠用面包板組裝電路。dac7611的串行通信接口包括以下管腳。管腳3(clk):串行時鐘輸入。管腳4(sdi):串行數(shù)據(jù)輸入。在串行時鐘的上跳沿數(shù)據(jù)被移入dac7611內(nèi)部的串行移位寄存器。管腳5()數(shù)/模轉(zhuǎn)換器da

34、c7611的控制電路設(shè)計代碼如下:library ieee;use ieee.std_logic_1164.all;entity 10704 isport(reset,clock: in std_logic; -定義復(fù)位和時鐘信號輸入端口d_in: in std_logic_vector(11 downto 0);-定義數(shù)據(jù)輸入端口 sdi,clk,cs,ld:out std_logic);-定義輸出信號端口end 10704;architecture 10704 of 10704 issignal current_state,next_state:integer range 0 to 26;

35、-定義狀態(tài)信號signal sdi_t,clk_t,cs_t,ld_t:std_logic;-定義暫態(tài)信號begin -開始電路功能描述reg:process(reset,clock) -時序邏輯電路的實現(xiàn)begin -進程功能描述開始 if(reset=1)then -判斷復(fù)位信號是否有效current_state=0; -復(fù)位信號有效,當前狀態(tài)字位aelsif(clockevent and clock=1)then復(fù)位信號無效,判斷時鐘是否有效current_state=next_state;-下一個狀態(tài)字代替當前狀態(tài)sdi=sdi_t; -時鐘同步dac7611的數(shù)據(jù)信號clk=clk_

36、t; -時鐘同步dac7611的時鐘信號cs=cs_t; -時鐘同步dac7611的片選信號ld -當前狀態(tài)為狀態(tài)0next_state=1;-狀態(tài)調(diào)整sdi_t=0;clk_t=0;cs_t=0;ld_t-當前狀態(tài)為狀態(tài)1next_state=2; -狀態(tài)調(diào)整sdi_t=d_in(11);clk_t=0;cs_t=0;ld_t-當前狀態(tài)為狀態(tài)2next_state=3; -狀態(tài)調(diào)整sdi_t=d_in(11);clk_t=1;cs_t=0;ld_t-當前狀態(tài)為狀態(tài)3next_state=4; -狀態(tài)調(diào)整sdi_t=d_in(10);clk_t=0;cs_t=0;ld_t -當前狀態(tài)為狀態(tài)4n

37、ext_state=5; -狀態(tài)調(diào)整sdi_t=d_in(10);clk_t=1;cs_t=0;ld_t-當前狀態(tài)為狀態(tài)24next_state=25; -狀態(tài)調(diào)整sdi_t=0;clk_t=1;cs_t=1;ld_t-當前狀態(tài)為狀態(tài)26next_state=26; -狀態(tài)調(diào)整sdi_t=0;clk_t=1;cs_t=1;ld_tf32b,din=fword,load=clk);-控制字輸入u1:adder32b prot map(a=f32b,b=d32b,s=din32b);-加法器u2:reg32b prot map(dout=d32b,din=din32b,load=clk);-累加器

38、內(nèi)部寄存u3:rom prot map(address=d32b(31 downto 24),q=fout,clock=clk);end;與前面各模塊的代碼合在一起編譯之后,將dds的核心部分代碼生成一個元件,其輸入為32位的頻率控制字fword,及系統(tǒng)時鐘clk,輸出為8位rom數(shù)據(jù)輸出fout,如圖,其后的設(shè)計中可以方便的調(diào)用該模塊。合并后的dds元件4 系統(tǒng)連調(diào)設(shè)計信號產(chǎn)生器系統(tǒng)所需要的各種時鐘的產(chǎn)生電路。系統(tǒng)可以被劃分為兩個部分:包括鍵盤電路和數(shù)碼管顯示電路的人機界面,dds核電路以及數(shù)/模轉(zhuǎn)換器控制代碼的產(chǎn)生模塊。前者的時鐘可以直接由系統(tǒng)時鐘通過分頻獲得;后者不僅需要產(chǎn)生多種頻率的時

39、鐘信號,而且這些信號之間還需要滿足一定的時間關(guān)系。為了更好地產(chǎn)生dds核電路以及數(shù)/模轉(zhuǎn)換器控制代碼產(chǎn)生模塊需要的各種時鐘信號,這里再次回顧這部分電路的工作過程:相位累加器接收從鍵盤電路送來的頻率字,在它的時鐘信號的作用下完成相位累加;相位累加器的高8位輸出作為波形數(shù)據(jù)表的地址,在該地址信號穩(wěn)定以后,波形數(shù)據(jù)表在它的時鐘信號的作用下把地址對應(yīng)的波形數(shù)據(jù)送出;在波形數(shù)據(jù)信號穩(wěn)定以后,dac7611數(shù)/模轉(zhuǎn)換器開始裝入控制信號,完成一次控制信號的裝入需要26個時鐘信號。設(shè)計控制時鐘產(chǎn)生電路代碼如下:library ieee;use ieee.std_logic_1164.all;entity 10705 isport(clk_sys:in std_logic;-定義系統(tǒng)時鐘輸入端口clk_lhz:out std_logic;-定義鍵盤時鐘輸出端口clk_phses:out std_logic;-定義相位累加器時鐘輸出端口clk_data:out std_logic;-定義波形數(shù)據(jù)表讀數(shù)時鐘輸出端口reset_dac:out std_logic);-定義dac7611復(fù)位信號輸出端口end 10705;architecture 10705 of 10705

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論