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

下載本文檔

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

文檔簡介

1、 jiangsu university of technology fpga技術實驗報告 基于fpga的直接數(shù)字頻率合成器設計學 院: 電氣信息工程學院 專 業(yè): 測控技術與儀器 班 級: 11測控2 姓 名: 學 號: 指導教師: 時 間: 2014年12月 目 錄一、功能要求與整體設計-(3)1.1功能要求-(3)1.2整體設計-(3) 二、 dds技術的基本原理-(3)三、 基本dds設計-(5)3.1 頻率預置與調(diào)節(jié)電路-(5)3.2 累加器-(5)3.3 波形存儲器-(6)3.4 d/a轉(zhuǎn)換器-(6)3.5 低通濾波器-(6)四 、基于dds的正弦信號發(fā)生器設計實現(xiàn)-(6)4.1 3

2、2位加法器adder32設計-(6)4.2 32位寄存器reg32b設計-(7)4.3 正弦波rom設計-(8)五、程序設計-(9)5.1正弦波產(chǎn)生程序設計-(9)5.2 三角波產(chǎn)生程序設計-(11)5.3方波產(chǎn)生程序設計-(12)5.4鋸齒波產(chǎn)生程序設計-(14)5.5 頂層仿真-(16)六、 dac0832接口電路及程序設計-(17)6.1 dac0832接口電路設計-(17)6.2 dac0832 接口程序設計-(18)七、 軟硬件調(diào)試-(18)7.1 軟件下載-(18)7.2 硬件調(diào)試-(19)八、心得體會-(22)九、參考文獻-(22)十、附錄-(23) 附錄1 源程序清單-(23)

3、 附錄2 實物圖-(27)一、功能要求和整體設計1.1功能要求設計一個多功能波形發(fā)生器。該波形發(fā)生器能產(chǎn)生正弦波、方波、三角波和由用戶編輯的特定形狀波形。具體要求如下:(1)具有產(chǎn)生正弦波、方波、三角波、鋸齒波4種周期性波形的功能。(2)用鍵盤輸入編輯生成上述4種波形(同周期)的線性組合波形。(3)具有波形存儲功能。(4)輸出波形的頻率范圍為100hz200khz;重復頻率可調(diào),頻率步進間隔100hz。(5)具有顯示輸出波形的類型、重復頻率(周期)和幅度的功能。 1.2整體設計多功能波形發(fā)生器系統(tǒng)由輸入部分、fpga部分、dac、顯示部分四部分組成。其系統(tǒng)框圖如圖1-1所示。 圖1-1 系統(tǒng)框

4、圖二、dds技術的基本原理 對于正弦信號發(fā)生器,它的輸出可以用下式來描述: (1)其中,sout是指該信號發(fā)生器的輸出信號波形,fout只輸出信號對應的頻率。上式的表述對于時間t是連續(xù)的,為了用數(shù)字邏輯實現(xiàn)該表達式,必須進行離散化處理,用基準時鐘clk進行抽樣,令正弦信號的的相位為 (2)在一個clk周期clk,相位的變化量為 (3)其中fclk指clk的頻率對于2可以理解為“滿”相位,為了對進行數(shù)字量化,把2切割成2n,用詞每個clk周期的相位增量用量化值b來描述:b=(·2n)/2,且b為整數(shù)與上式聯(lián)立可得: (4)顯然,信號發(fā)生器可以描述 (5)其中k-1指前一個clk周期的相

5、位值,同樣得出 (6)由以上推倒可以得出,只要對相位的量化值進行簡單的累加運算,就可以得到正弦信號的當前相位值,而用于累加的香味增量量化值b決定了信號的輸出頻率fout并呈現(xiàn)簡單的線性關系。 直接數(shù)字合成器dds就是根據(jù)以上原理而設計的數(shù)控頻率合成器,圖2-1為其基本dds結(jié)構(gòu),主要有相位累加器、相位調(diào)制器、正弦rom查找表構(gòu)成圖中的相位累加器、相位調(diào)制器、正弦rom查找表是dds結(jié)構(gòu)中的數(shù)字部分。圖2-1 基本dds結(jié)構(gòu)三、 基本dds設計dds基本組成如圖3-1所示。圖3-1為dds基本組成3.1 頻率預置與調(diào)節(jié)電路 此部分主要實現(xiàn)頻率控制量的輸入與調(diào)節(jié),不變量k被稱為相位增量,也叫頻率控

6、制字,通過調(diào)節(jié)頻率控制字可以改變信號的輸出頻率。3.2 累加器相位累加器由加法器和寄存器組成,其組成框圖如圖3-2所示。 圖3-2 相位累加器組成框圖 在時鐘的作用下,進行相位累加,當相位累加器累加滿量時就會產(chǎn)生一次溢出,完成一個周期性的動作。3.3 波形存儲器 可以進行波形的相位幅值轉(zhuǎn)換。rom的n位地址:把0360度的正弦角度離散成具有2n個樣值的序列 ;rom的d位數(shù)據(jù)位:2n個樣值的幅值量化為d位二進制數(shù)據(jù)。3.4 d/a轉(zhuǎn)換器 d/a轉(zhuǎn)換器可以把已經(jīng)合成的波形的數(shù)字量轉(zhuǎn)換成模擬量。3.5 低通濾波器濾除生成的階梯形正弦波中的高頻成分,將其變成光滑的波形。四、基于dds的正弦信號發(fā)生器

7、設計實現(xiàn)根據(jù)設計原理框圖分別設計出加法器、寄存器、正弦波等rom。 4.1 32位加法器adder32設計 在原理圖文件下在空白處雙擊,單擊“megawizard plug-in manager”選擇第一項,如圖4-1所示 。圖4-1 原理圖設置 選擇器件為cyclone,語言方式為veriloghdl。在算數(shù)項arithmetic中選擇計數(shù)器lpm_add_sub.存于所建工程文件夾下命名為adder32. 單擊next,進入以后對話框后選擇32位加法器工作模式選擇有一位加法進位輸出,選擇有符號加法方式,選擇2級流水線工作模式 ,此時該加法器變?yōu)橛袝r序電路的模塊,最后至finish按鈕,編輯

8、完成,32位加法器模塊如圖4-2所示。 圖4-2 32位加法器模塊4.2 32位寄存器reg32b設計 寄存器dff32由lmp_ff宏模塊擔任,生成方法同adder32相同,設置位數(shù)為32位,且為時序控制模塊,如圖4-3所示。圖4-3 32位寄存器模塊 dff32與adder32構(gòu)成一個32位累加器其高十位a31.22為波形數(shù)據(jù)rom的地址。 十位加法器和寄存器與32位方法相同。4.3 正弦波rom設計 a.首先通過mif文件來產(chǎn)生正弦波注意:在生成正弦波的時候要注意與sin_rom中的數(shù)據(jù)一致。即位depth = 1024;width = 10;這樣才能保證在最后的輸出中能夠有完整的正弦波

9、圖形輸出。存盤并命名為sin_rom.mifb.lpm_rom的訂制:按adder32的產(chǎn)生方法來產(chǎn)生lmp_rom,在宏模塊選擇中選“memory complier”中“rom:1-port”項,依次設定地址線與數(shù)據(jù)線的位寬均為十位,最后產(chǎn)生lmp_rom,如圖4-4所示。圖4-4 正弦波模塊 其他波形rom與正弦波類似。五、程序設計5.1 正弦波產(chǎn)生程序設計 通過循環(huán)不斷地從ram中依次讀取正弦波一個周期在時域上64個采樣點的波形數(shù)據(jù)送入波形dac,從而產(chǎn)生正弦波。正弦波的頻率取決于讀取數(shù)據(jù)的速度。程序如下:library ieee;use ieee.std_logic_1164.all;

10、library altera_mf;use altera_mf.all;entity sin_rom isport(address: in std_logic_vector (9 downto 0);inclock: in std_logic ; q: out std_logic_vector (9 downto 0);end sin_rom;architecture syn of sin_rom issignal sub_wire0: std_logic_vector (9 downto 0);component altsyncramgeneric (clock_enable_input_a

11、: string;clock_enable_output_a: string;init_file: string;intended_device_family: string;lpm_hint: string;lpm_type: string;numwords_a: natural;operation_mode: string;outdata_aclr_a: string;outdata_reg_a: string;ram_block_type: string;widthad_a: natural;width_a: natural;width_byteena_a: natural);port

12、(clock0: in std_logic ;address_a: in std_logic_vector (9 downto 0);q_a: out std_logic_vector (9 downto 0);end component;beginq <= sub_wire0(9 downto 0);altsyncram_component : altsyncramgeneric map (clock_enable_input_a => "bypass",clock_enable_output_a => "bypass",init_f

13、ile => "myrom.mif",intended_device_family => "cyclone ii",lpm_hint => "enable_runtime_mod=no",lpm_type => "altsyncram",numwords_a => 1024,operation_mode => "rom",outdata_aclr_a => "none",outdata_reg_a => "clock0

14、",ram_block_type => "m4k",widthad_a => 10,width_a => 10,width_byteena_a => 1)port map (clock0 => inclock,address_a => address,q_a => sub_wire0);end syn; 5.2 三角波產(chǎn)生程序設計 三角波波形是對稱的,每邊呈線形變化,所以可以根據(jù)地址數(shù)據(jù)做簡單運算,就可以得到三角波。程序如下:library ieee;use ieee.std_logic_1164.all;use ieee

15、.std_logic_unsigned.all;-程序包entity triangle is-定義三角波實體port(clk,reset:in std_logic;q:out std_logic_vector(7 downto 0);end triangle;architecture behav of triangle is -定義三角波結(jié)構(gòu)體beginprocess(clk,reset) -進程開始variable tmp:std_logic_vector(7 downto 0); -定義中間變量tmp、avariable a:std_logic;beginif reset='0&#

16、39;then -復位信號設置tmp:="00000000"elsif rising_edge(clk) then -捕捉時鐘信號上升沿if a='0'then -a=0時依次輸出三角波上升沿if tmp="11111110"thentmp:="11111111"a:='1'else tmp:=tmp+1; end if;else -a=1時依次輸出三角波下降沿if tmp="00000001"thentmp:="00000000"a:='0'el

17、se tmp:=tmp-1; end if;end if;end if;q<=tmp; -輸出信號q=tmpend process; end behav;5.3 方波產(chǎn)生程序設計 方波產(chǎn)生也是由64個采樣點組成, 64個采樣點的數(shù)據(jù)只有“低電平”和“高電平” 2種狀態(tài)。更改“低電平”和“高電平”出現(xiàn)的比例,可以達到調(diào)節(jié)占空比的目的。程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity square isport(clk,reset: in std_logic;q:out s

18、td_logic_vector(7 downto 0);end square;architecture behav of square issignal a:std_logic;beginprocess(clk,reset)variable tmp:std_logic_vector(7 downto 0);beginif reset='0'thena<='0' elsif rising_edge(clk) thenif tmp="11111111"thentmp:="00000000"else tmp:=tmp+1;

19、end if;if tmp<="10000000"thena<='1'elsea<='0'end if;end if;end process;process(clk,a)begin if rising_edge(clk)thenif a='1' thenq<="11111111"elseq<="00000000"end if;end if;end process;end behav; 5.4 鋸齒波產(chǎn)生程序設計 產(chǎn)生單調(diào)性鋸齒波,因此把地址數(shù)據(jù)進行左移2位,

20、結(jié)果送波形dac就可。 程序如下:library ieee;use ieee.std_logic_1164.all; library altera_mf;use altera_mf.all; entity juxing isport(address: in std_logic_vector (9 downto 0);clock: in std_logic ;q: out std_logic_vector (9 downto 0);end juxing;architecture syn of juxing issignal sub_wire0: std_logic_vector (9 downt

21、o 0);component altsyncramgeneric (clock_enable_input_a: string;clock_enable_output_a: string;init_file: string;intended_device_family: string;lpm_hint: string;lpm_type: string;numwords_a: natural;operation_mode: string;outdata_aclr_a: string;outdata_reg_a: string;ram_block_type: string;widthad_a: na

22、tural;width_a: natural;width_byteena_a: natural);port (clock0: in std_logic ;address_a: in std_logic_vector (9 downto 0);q_a: out std_logic_vector (9 downto 0);end component; beginq <= sub_wire0(9 downto 0);altsyncram_component : altsyncramgeneric map (clock_enable_input_a => "bypass"

23、;,clock_enable_output_a => "bypass",init_file => "juxing.mif",intended_device_family => "cyclone ii",lpm_hint => "enable_runtime_mod=no",lpm_type => "altsyncram",numwords_a => 1024,operation_mode => "rom",outdata_aclr_a

24、 => "none",outdata_reg_a => "clock0",ram_block_type => "m4k",widthad_a => 10,width_a => 10,width_byteena_a => 1)port map (clock0 => clock,address_a => address,q_a => sub_wire0); end syn;5.5 頂層仿真設置波形選擇位,以方便控制各種波形的顯示。仿真結(jié)果如圖5-1所示。頻率控制字為2的仿真波形頻率控制

25、字為12的仿真波形頻率控制字為13的仿真波形圖5-1 波形仿真結(jié)果六、dac0832接口電路及程序設計6.1 dac0832接口電路設計 (1)fpga_io1-8向dac0832的數(shù)據(jù)輸入口(di0-di7)輸送數(shù)據(jù)。 (2)fpga_io9提供dac0832數(shù)據(jù)鎖存允許控制信號ile,高電平有效。 (3)fpga_io10提供dac0832控制信號(cs:片選信號;xfer:數(shù)據(jù)傳輸控制信號;wr1、wr2:dac寄存器寫選通信號),低電平有效; (4)iout1、iout2、rfb與運算放大器lm324完成電流/電壓的轉(zhuǎn)換(dac0832屬電流輸出型); (5)fpga與dac0832接

26、口電路原理圖如圖6-1所示。圖6-1 fpga與dac0832接口電路原理圖6.2 dac0832 接口程序設計根據(jù)圖6-2 dac0832 輸出控制時序,利用接口電路圖,通過改變輸出數(shù)據(jù)設計一個鋸齒波發(fā)生器。dac0832是8位的d/a轉(zhuǎn)換器,轉(zhuǎn)換周期為1s。鋸齒波形數(shù)據(jù)可以由256個點構(gòu)成,每個點的數(shù)據(jù)長度為8位。又因為fpga的系統(tǒng)時鐘為50mhz,必須對其進行分頻處理,這里進行64分頻,得到的鋸齒波的頻率為762.9hz。 圖6-2 dac0832 輸出控制時序圖七、軟硬件調(diào)試7.1 軟件下載調(diào)試、仿真成功后進行硬件調(diào)試階段,在“assignment”菜單下選擇“device”項進行器

27、件選擇cyclone中的ep2c5t144c8器件,在“assignment”菜單下選擇”pins”項,進行管腳鎖定。引腳鎖定如圖7-1所示。圖7-1引腳鎖定 管腳鎖定后再次進行編譯,成功后選擇“tools”菜單下“programmer”項進行下載。7.2 硬件調(diào)試將fpga與d/a轉(zhuǎn)換模塊連好,接示波器進行觀察調(diào)試。波形輸出頻率應滿足 。圖7-2所示為頻率控制字是0ch的四種波形調(diào)試結(jié)果;圖7-3所示為頻率控制字是1ch的四種波形調(diào)試結(jié)果;圖7-4所示為頻率控制字是3ch的四種波形調(diào)試結(jié)果。 圖7-2 控制字為08h的四種波形 根據(jù)公式,求得輸出頻率為195.31hz,四種波形頻率與理論值基

28、本一致,但每個波形都有一定的誤差。 圖7-3 控制字為0ch的四種波形 根據(jù)公式,求得輸出頻率為292.968hz,四種波形頻率與理論值基本一致,但每個波形都有一定的誤差。圖7-4 控制字為0dh的四種波形 根據(jù)公式,求得輸出頻率為390.625hz四種波形頻率與理論值基本一致,但每個波形都有一定的誤差。八、心得體會 兩周的課程設計結(jié)束了,在這次的課程設計中不僅檢驗了我所學習的知識,也培養(yǎng)了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。在設計過程中,與同學分工設計,和同學們相互探討,相互學習,相互監(jiān)督。學會了合作,學會了運籌帷幄,學會了寬容,學會了理解,也學會了做人與處世。 課程

29、設計是我們專業(yè)課程知識綜合應用的實踐訓練,著是我們邁向社會,從事職業(yè)工作前一個必不少的過程”千里之行始于足下”,通過這次課程設計,我深深體會到這句千古名言的真正含義我今天認真的進行課程設計,學會腳踏實地邁開這一步,就是為明天能穩(wěn)健地在社會大潮中奔跑打下堅實的基礎 通過這次fpga課程設計,本人在多方面都有所提高。通過這次設計,綜合運用本專業(yè)所學課程的理論和知識進行設計工作的實際訓練從而培養(yǎng)和提高學生獨立工作能力,鞏固課程所學的內(nèi)容,掌握設計的方法和步驟,掌握設計的基本的技能懂得了怎樣分析,怎樣確定方案,了解基本結(jié)構(gòu),提高了計算能力,繪圖能力,熟悉了規(guī)范和標準,同時各科相關的課程都有了全面的復習

30、,獨立思考的能力也有了提高。在這次設計過程中,體現(xiàn)出自己單獨設計的能力以及綜合運用知識的能力,體會了學以致用、突出自己勞動成果的喜悅心情,從中發(fā)現(xiàn)自己平時學習的不足和薄弱環(huán)節(jié),從而加以彌補。在此感謝我們的老師.,老師嚴謹細致、一絲不茍的作風一直是我工作、學習中的榜樣;老師循循善誘的教導和不拘一格的思路給予我無盡的啟迪;這次設計的每個實驗細節(jié)和每個數(shù)據(jù),都離不開老師您的細心指導。同時感謝對我?guī)椭^的同學們,謝謝你們對我的幫助和支持,讓我感受到同學的友誼。 由于本人的設計能力有限,在設計過程中難免出現(xiàn)錯誤,懇請老師們多多指教,我十分樂意接受你們的批評與指正,本人將萬分感謝。九、參考文獻1朱小斌電子

31、測量儀器 北京:電子工業(yè)出版社,19962michael lauterbach artpin任意波形發(fā)生器在通訊測試中的應用電子產(chǎn)品世界,19973史海明個人儀器多功能任意波形發(fā)生器的研制 儀表技術,19884林青dds在數(shù)字調(diào)制中的應用無線電工程,20015張開增,張迎新,王尚忠高分辨率高穩(wěn)度寬帶函數(shù)發(fā)生器的研制 華北工學院學報6華清遠見嵌入式培訓中心fpga應用開發(fā)入門與典型實例北京:人民郵電出版社,2008十、附錄附錄1 源程序清單library ieee; -dds頂層設計use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.a

32、ll;entity dds_vhdl is port ( clk : in std_logic; selz: in std_logic_vector(1 downto 0); fword : in std_logic_vector(7 downto 0); -頻率控制字 pword : in std_logic_vector(7 downto 0); -相位控制字 fout : out std_logic_vector(9 downto 0) ); end;architecture one of dds_vhdl is component fre is port( clk1:in std_lo

33、gic; outclk:out std_logic); end component; component juxing isport(address: in std_logic_vector (9 downto 0);clock: in std_logic ;q: out std_logic_vector (9 downto 0);end component; component sanjiao isport(address: in std_logic_vector (9 downto 0);clock: in std_logic ;q: out std_logic_vector (9 dow

34、nto 0); end component; component fangbo isport(address: in std_logic_vector (9 downto 0);clock: in std_logic ;q: out std_logic_vector (9 downto 0); end component; component mux41 is port(sel:in std_logic_vector(1 downto 0);-定義輸入端口seld1,d2,d3,d4: in std_logic_vector(9 downto 0);-定義輸入端口d1,d2,d3,d4q: o

35、ut std_logic_vector(9 downto 0);-定義輸出端口 end component; component mux411 is port(sel:in std_logic_vector(1 downto 0);-定義輸入端口seld1,d2,d3,d4: out std_logic_vector(9 downto 0);-定義輸入端口d1,d2,d3,d4q: in std_logic_vector(9 downto 0);-定義輸出端口 end component; component reg32b port ( load : in std_logic; din : i

36、n std_logic_vector(31 downto 0); dout : out std_logic_vector(31 downto 0) ); end component; component reg10b port ( load : in std_logic; din : in std_logic_vector(9 downto 0); dout : out std_logic_vector(9 downto 0) ); end component; component adder32b port ( a : in std_logic_vector(31 downto 0); b

37、: in std_logic_vector(31 downto 0); s : out std_logic_vector(31 downto 0) ); end component; component adder10b port ( a : in std_logic_vector(9 downto 0); b : in std_logic_vector(9 downto 0); s : out std_logic_vector(9 downto 0) ); end component; component sin_rom port( address: in std_logic_vector(

38、9 downto 0); inclock: in std_logic ; q: out std_logic_vector(9 downto 0); end component; signal clk2 : std_logic; signal f32b : std_logic_vector(31 downto 0); signal d32b : std_logic_vector(31 downto 0); signal din32b : std_logic_vector(31 downto 0); signal p10b : std_logic_vector( 9 downto 0); signal lin10b : std_logic_vector( 9 downto 0); signal sin10b : std_logic_vector( 9 downto 0); signal

溫馨提示

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

評論

0/150

提交評論