版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 電工電子實(shí)驗(yàn)報(bào)告</b></p><p> 課程名稱EDA技術(shù)基礎(chǔ)</p><p> 實(shí)驗(yàn)名稱綜合實(shí)驗(yàn)總結(jié)</p><p> 選題性質(zhì)基于FPGA的DDS信號(hào)發(fā)生器的設(shè)計(jì)</p><p> 基于FPGA的DDS信號(hào)發(fā)生器的設(shè)計(jì)</p><p> 1 DDS的基本
2、原理</p><p> DDS技術(shù)是一種把一系列數(shù)字量形式的信號(hào)通過DAC轉(zhuǎn)換成模擬量形式的信號(hào)的合成技術(shù),它是將輸出波形的一個(gè)完整的周期、幅度值都順序地存放在波形存儲(chǔ)器中,通過控制相位增量產(chǎn)生頻率、相位可控制的波形。DDS電路一般包括基準(zhǔn)時(shí)鐘、相位增量寄存器、相位累加器、波形存儲(chǔ)器、D/A轉(zhuǎn)換器和低通濾波器(LPF)等模塊,如圖1.1所示。</p><p> 相位增量寄存器寄存頻率控
3、制數(shù)據(jù),相位累加器完成相位累加的功能,波形存儲(chǔ)器存儲(chǔ)波形數(shù)據(jù)的單周期幅值數(shù)據(jù),D/A轉(zhuǎn)換器將數(shù)字量形式的波形幅值數(shù)據(jù)轉(zhuǎn)化為所要求合成頻率的模擬量形式信號(hào),低通濾波器濾除諧波分量。</p><p> 整個(gè)系統(tǒng)在統(tǒng)一的時(shí)鐘下工作,從而保證所合成信號(hào)的精確。每來(lái)一個(gè)時(shí)鐘脈沖,相位增量寄存器頻率控制數(shù)據(jù)與累加寄存器的累加相位數(shù)據(jù)相加,把相加后的結(jié)果送至累加寄存器的數(shù)據(jù)輸出端。這樣,相位累加器在參考時(shí)鐘的作用下,進(jìn)行線性
4、相位累加,當(dāng)相位累加器累加滿量時(shí)就會(huì)產(chǎn)生一次溢出,完成一個(gè)周期性的動(dòng)作,這個(gè)周期就是DDS合成信號(hào)的一個(gè)頻率周期,累加器的溢出頻率就是DDS輸出的信號(hào)頻率。</p><p> 相位累加器輸出的數(shù)據(jù)的高位地址作為波形存儲(chǔ)器的地址,從而進(jìn)行相位到幅值的轉(zhuǎn)換,即可在給定的時(shí)間上確定輸出的波形幅值。</p><p> 圖1-1:DDS原理圖 </p><p> 波形存
5、儲(chǔ)器產(chǎn)生的所需波形的幅值的數(shù)字?jǐn)?shù)據(jù)通過D/A轉(zhuǎn)換器轉(zhuǎn)換成模擬信號(hào),經(jīng)過低通濾波器濾除不需要的分量以便輸出頻譜純凈的所需信號(hào)。信號(hào)發(fā)生器的輸出頻率fo可表示為:</p><p> ( 1.1) </p><p> 式中為系統(tǒng)時(shí)鐘,為系統(tǒng)分辨率,N為相位累加器位數(shù),M為相位累加器的增量。</p><p> 參數(shù)確定及誤差分析.</p>
6、;<p><b> 2 參數(shù)確定</b></p><p> 首先確定系統(tǒng)的分辨率,最高頻率,及最高頻率下的最少采樣點(diǎn)數(shù)根據(jù)需要產(chǎn)生的最高頻率以及該頻率下的最少采樣點(diǎn)數(shù),由公式</p><p><b> (1.2)</b></p><p> 確定系統(tǒng)時(shí)鐘的下限值。同時(shí)又要滿足分辨率計(jì)算公式</p
7、><p><b> (1.3)</b></p><p><b> 綜合考慮決定的值。</b></p><p> 選定了的值后,則由公式(1.3)可得=,據(jù)此可確定相位累加器位數(shù)N。</p><p><b> 然后由最高輸出頻率</b></p><p&g
8、t;<b> (1.4)</b></p><p> 推出M=,得出相位增量寄存器為S位。</p><p> 確定波形存儲(chǔ)器的地址位數(shù)W,本系統(tǒng)中決定寄存?zhèn)€數(shù)據(jù)值,因此RAM地址為Z位。</p><p> 一般選用FPGA/CPLD器件作為DDS的實(shí)現(xiàn)器件,對(duì)于D/A轉(zhuǎn)換器的選擇,首先要考慮到D/A轉(zhuǎn)換器的轉(zhuǎn)換速率。要實(shí)現(xiàn)所需的頻率,D/
9、A的轉(zhuǎn)換速度要大于,然后根據(jù)D/A轉(zhuǎn)換器字長(zhǎng)所帶來(lái)的誤差,決定D/A的位數(shù)。由此選擇D/A轉(zhuǎn)換器的型號(hào)。</p><p> 3 DDS的FPGA實(shí)現(xiàn)設(shè)計(jì)</p><p> 本設(shè)計(jì)要求DDS實(shí)現(xiàn)的性能指標(biāo)為:當(dāng)系統(tǒng)時(shí)鐘頻率為24MHz時(shí),分辨率為1.43Hz,當(dāng)相位增量寄存器為19位時(shí),最高輸出頻率是749731Hz。(理論上完全可以達(dá)到,甚至更高,但是由于受到DA器件及運(yùn)算放大器的影響
10、,實(shí)際中的頻率不可能達(dá)到)。</p><p> 根據(jù)上面所列公式可以得出:累加器位數(shù)N= 24;相位增量寄存器為19位。</p><p> 如圖3.1所示,DDS系統(tǒng)包括相位增量寄存器、相位累加器、地址寄存器、波形存儲(chǔ)器、時(shí)鐘倍頻器及地址發(fā)生部分等幾個(gè)模塊。內(nèi)部所有模塊均用Verilog語(yǔ)言編寫或調(diào)用maxplus2中的已有的lpm庫(kù)文件,其頂層設(shè)計(jì)用原理圖的方式進(jìn)行模塊間的連接。&l
11、t;/p><p> 圖3.1 DDS系統(tǒng)框圖</p><p> 下面就上面向個(gè)模塊的結(jié)構(gòu)進(jìn)行論述:</p><p> 3.1 相位累加器 </p><p> 相位累加器在參考時(shí)鐘的作用下,進(jìn)行線性相位累加,當(dāng)相位累加器累加滿量時(shí)就會(huì)產(chǎn)生一次溢出,完成一個(gè)周期性的動(dòng)作,這個(gè)周期就是DDS合成信號(hào)的一個(gè)頻率周期,累加器的溢出頻率就是DDS輸
12、出的信號(hào)頻率。相位增量分段寄存器的端口如圖3.1.1所示。根據(jù)前面的計(jì)算可知,相位增量寄存器需要24位。</p><p> 圖3.1.1 相位增量寄存器</p><p> 圖3.1.2是相位增量分段寄存器仿真圖,從圖中可以看出,在時(shí)鐘的激勵(lì)下,累加器的仿真結(jié)果是正確的.</p><p> 圖 3.1.2累加器的仿真結(jié)果</p><p>
13、<b> 3.2 波形存儲(chǔ)器</b></p><p> 波形存儲(chǔ)器實(shí)際上就是一個(gè)ROM,波形存儲(chǔ)器存儲(chǔ)的是所生成波形一周期采樣256點(diǎn)的數(shù)據(jù)值,通過地址的改變,所輸出的值就會(huì)變化,因?yàn)椋刂凡灰欢ㄊ沁B續(xù)變化的,所以所輸出的值也不是連續(xù)的,在同樣的時(shí)鐘周期下,地址間隔的變化也就造成了生成波形的頻率的變化。地址值每溢出一次,便完成了一個(gè)周期的輸出。</p><p>
14、 當(dāng)改變波形存儲(chǔ)器中波形數(shù)據(jù)時(shí),也就改變了輸出波形。</p><p> 圖3.2.1 ROM模塊</p><p> ROM的設(shè)計(jì)直接調(diào)用LPM中的庫(kù)生成,端口分別為:時(shí)鐘輸入端clock,輸出數(shù)據(jù)總線daout(7:0),輸入數(shù)據(jù)總線result[23:16].</p><p> 地址總線address(7:0)是相位累加器輸出高8位的數(shù)據(jù).輸出數(shù)據(jù)總線do
15、uta(7:0)連接輸出緩沖通過FPGA的I/O口輸出,作為D/A轉(zhuǎn)換器的輸入。</p><p> 3.3相位增量寄存器及顯示模塊.</p><p> 這個(gè)模塊的功能是接收從單片中傳來(lái)的數(shù)據(jù).從單片機(jī)中傳遞過來(lái)的數(shù)據(jù)為分兩部分,第一是頻率控制字,即給相位增量寄存器的控制字.第二是將當(dāng)前的輸出頻率顯示在數(shù)碼管上.這個(gè)模塊的底層文件是基于Verilog語(yǔ)言描述的,在頂層上生成相就的功能模塊
16、.其生成的原理圖如圖3.3.1所示:</p><p> 圖3.3.1相位增量寄存器及顯示模塊</p><p> 上面的頂層模塊簡(jiǎn)要描述如下:clock是系統(tǒng)輸入時(shí)鐘,LED_SEG[7..0]是8段數(shù)碼管的段選,LED_WEI[2..0]是8個(gè)數(shù)碼管的位選。(這里聯(lián)接是38譯碼器的輸入端)。其源程序如下:</p><p> module led_print(&
17、lt;/p><p> clock, //輸入時(shí)鐘 </p><p> led_seg, //數(shù)碼管段選</p><p> led_wei, //數(shù)碼管位選 </p><p><b> Code,</b></p><p><b
18、> data_clk,</b></p><p> write_data, </p><p><b> );</b></p><p> input data_clk;</p><p> input clock ; //時(shí)鐘輸入 </p>
19、<p> input [7:0] Code;</p><p> output [23:0] write_data;</p><p> output [2:0] led_wei; //132,133,135</p><p> output [7:0] led_seg; //131,130,128,122,121,120,11
20、9,118 </p><p> /*********************************************************/</p><p> wire clock,rst;</p><p> reg[2:0] led_wei;</p><p> reg[7:0] led_seg;</p>&l
21、t;p> reg[23:0] count; //計(jì)數(shù)器單元</p><p> reg[3:0] ledbuff; </p><p> reg[23:0] times; //時(shí)分秒要分配的單元 </p><p> reg[3:0] seg_count;</p><p> reg[3:0] seg_flag;</p&g
22、t;<p> reg write_flag;</p><p> reg[23:0] write_data;</p><p> always @( posedge data_clk )//送給FPGA的數(shù)據(jù)改變時(shí).</p><p><b> begin </b></p><p> seg_
23、count = Code [3:0]; //數(shù)據(jù)位</p><p> seg_flag = Code [7:4];//標(biāo)志位</p><p> case(seg_flag)</p><p> //在數(shù)碼管中顯示的數(shù)字</p><p> 4'b0000: times[3:0] <= seg_count;<
24、/p><p> 4'b0001: times[7:4] <= seg_count;</p><p> 4'b0010: times[11:8] <= seg_count;</p><p> 4'b0011: times[15:12] <= seg_count;</p><p> 4
25、39;b0100: times[19:16] <= seg_count; </p><p> 4'b0101: times[23:20] <= seg_count;</p><p> //給控制寄存器中的數(shù)據(jù)</p><p> 4'b0110: write_data[3:0] <= seg_count;</p&
26、gt;<p> 4'b0111: write_data[7:4] <= seg_count;</p><p> 4'b1000: write_data[11:8] <= seg_count;</p><p> 4'b1001: write_data[15:12] <= seg_count;</p>&l
27、t;p> 4'b1010: write_data[19:16] <= seg_count; </p><p> 4'b1011: write_data[23:20] <= seg_count; </p><p><b> default:</b></p><p><b> begin &l
28、t;/b></p><p> times <= times;</p><p> write_data <= write_data;</p><p><b> end </b></p><p> endcase </p><p><b> end<
29、;/b></p><p> always@(posedge clock ) </p><p> begin </p><p> if (count == 24'd1200000)// </p><p><b> begin</b></p><p> count =
30、 0; </p><p><b> end </b></p><p><b> else </b></p><p><b> begin </b></p><p> count = count +1;</p><p> /
31、/ write_data = 24'd699;</p><p><b> end </b></p><p><b> end</b></p><p> /******************數(shù)碼管掃描程序*************************/</p><p> al
32、ways @(count[12:10]) </p><p><b> begin</b></p><p> case(count[12:10])</p><p> 3'h0: led_wei = 3'b000; </p><p> 3'h1: led_wei = 3'b0
33、01; </p><p> 3'h2: led_wei = 3'b010;</p><p> 3'h3: led_wei = 3'b011;</p><p> 3'h4: led_wei = 3'b100;</p><p> 3'h5: led_wei = 3'b101;
34、</p><p> 3'h6: led_wei = 3'b110;</p><p> 3'h7: led_wei = 3'b111;</p><p> default :led_wei = 3'bzzz; </p><p><b> endcase</b></
35、p><p> case(count[12:10])</p><p> 3'h0: ledbuff = 4'ha; </p><p> 3'h1: ledbuff = 4'hb; </p><p> 3'h2: ledbuff = times[3:0]; </p>
36、<p> 3'h3: ledbuff = times[7:4]; </p><p> 3'h4: ledbuff = times[11:8]; </p><p> 3'h5: ledbuff = times[15:12];</p><p> 3'h6: ledbuff = times[19:16
37、]; </p><p> 3'h7: ledbuff = times[23:20]; </p><p> default :ledbuff = 3'bzzz; </p><p><b> endcase</b></p><p><b> end </b></
38、p><p> always @( ledbuff) </p><p><b> begin</b></p><p> case( ledbuff )</p><p> 4'h0: led_seg = 8'h3f;//0</p><p> 4'h1: led_seg =
39、 8'h06;//1</p><p> 4'h2: led_seg = 8'h5b;//2</p><p> 4'h3: led_seg = 8'h4f;//3</p><p> 4'h4: led_seg = 8'h66;//4</p><p> 4'h5: led_s
40、eg = 8'h6d;//5</p><p> 4'h6: led_seg = 8'h7d;//6</p><p> 4'h7: led_seg = 8'h07;//7</p><p> 4'h8: led_seg = 8'h7f;//8 </p><p> 4
41、'h9: led_seg = 8'h6f;//9 </p><p> 4'hb: led_seg = 8'h76;//H</p><p> 4'ha: led_seg = 8'h5b;//Z</p><p> 4'hc: led_seg = 8'b00; </p>&l
42、t;p> default :led_seg = 8'hzz; </p><p> endcase </p><p><b> end </b></p><p> endmodule </p><p> 3.4 FPGA與單片機(jī)通信接口設(shè)計(jì)</p><p&
43、gt; 單片機(jī)在讀得矩陣鍵盤的控制字后,必須把相應(yīng)的數(shù)據(jù)傳遞給FPGA。本實(shí)驗(yàn)中單片機(jī)所傳遞的數(shù)據(jù)有兩大部分。第一是傳遞給相位增量寄存器的相位增量字。第二是數(shù)碼管要顯示當(dāng)前在頻率控制字下面的頻率輸出值。因?yàn)镕PGA只負(fù)責(zé)掃描8個(gè)數(shù)碼管,故其顯示的頻率值必須是單片機(jī)計(jì)算好后再將其值傳遞給FPGA顯示。如圖3.4.1所示:</p><p> 圖 3.4.1 FPGA與單片機(jī)通信接口設(shè)計(jì) </p>
44、<p> 單片機(jī)與FPGA接口總共用了9根線,一根時(shí)鐘線外加8根數(shù)據(jù)線。如圖3.4.1所示。每一個(gè)時(shí)鐘下降沿時(shí),單片機(jī)傳送一個(gè)8位的數(shù)據(jù)到FPGA中。其中8位寬度的數(shù)據(jù)線中高四位的值表示的是FPGA內(nèi)各寄存器內(nèi)約定好的地址,低四位表示的數(shù)要傳遞過來(lái)的數(shù)據(jù)。在FPGA內(nèi)部有下面一段代碼:</p><p> always @( posedge data_clk )//送給FPGA的數(shù)據(jù)改變時(shí).<
45、/p><p><b> begin </b></p><p> seg_count = Code [3:0]; //數(shù)據(jù)位</p><p> seg_flag = Code [7:4];//標(biāo)志位</p><p> case(seg_flag)</p><p> //在數(shù)碼管中顯示的數(shù)
46、字</p><p> 4'b0000: times[3:0] <= seg_count;</p><p> 4'b0001: times[7:4] <= seg_count;</p><p> 4'b0010: times[11:8] <= seg_count;</p><p>
47、 4'b0011: times[15:12] <= seg_count;</p><p> 4'b0100: times[19:16] <= seg_count; </p><p> 4'b0101: times[23:20] <= seg_count;</p><p> //給控制寄存器中的數(shù)據(jù)</p&
48、gt;<p> 4'b0110: write_data[3:0] <= seg_count;</p><p> 4'b0111: write_data[7:4] <= seg_count;</p><p> 4'b1000: write_data[11:8] <= seg_count;</p>&l
49、t;p> 4'b1001: write_data[15:12] <= seg_count;</p><p> 4'b1010: write_data[19:16] <= seg_count; </p><p> 4'b1011: write_data[23:20] <= seg_count; </p><p&g
50、t;<b> default:</b></p><p><b> begin </b></p><p> times <= times;</p><p> write_data <= write_data;</p><p><b> end </b>&l
51、t;/p><p> endcase </p><p><b> end</b></p><p> 在單片機(jī)每產(chǎn)生一個(gè)有下降的時(shí)鐘信號(hào)時(shí),會(huì)執(zhí)行上面一塊代碼程序。 每次傳送8位數(shù)據(jù)后,進(jìn)行分離如下:</p><p> seg_count = Code [3:0]; //數(shù)據(jù)位</p><p
52、> seg_flag = Code [7:4];//標(biāo)志位</p><p> 再根據(jù)各個(gè)標(biāo)志位的不同,傳遞給FPGA各個(gè)寄存器中不同的數(shù)據(jù)。高四位作為標(biāo)志位,最多可表示16種不同的情況,而本實(shí)驗(yàn)最多只用到其中的12種,因此是滿足要求的。</p><p><b> 3.4 頂層框圖</b></p><p> 圖 3.4.1生成的
53、頂層框圖</p><p><b> 4 實(shí)驗(yàn)總結(jié)</b></p><p> 通過本次基于FPGA的設(shè)計(jì)實(shí)驗(yàn),不僅使我熟悉DDS的原理,而且對(duì)于單片機(jī)與FPGA綜合應(yīng)用也是一次很好的嘗試。本次實(shí)驗(yàn)中所到的實(shí)驗(yàn)箱中的實(shí)驗(yàn)?zāi)K有FPGA核心板,AD/DA模塊,4*4鍵盤模塊,51單片機(jī)模塊。在這次設(shè)計(jì)實(shí)驗(yàn)過程中碰到了很多困難,但是最后都解決了,有缺陷地方就是還可以把鍵盤
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于fpga的dds信號(hào)發(fā)生器設(shè)計(jì)【開題報(bào)告】
- 基于fpga的dds信號(hào)發(fā)生器設(shè)計(jì)
- 基于fpga的dds信號(hào)發(fā)生器設(shè)計(jì)開題
- dds信號(hào)發(fā)生器的fpga實(shí)現(xiàn)[開題報(bào)告]
- 基于fpga的dds信號(hào)發(fā)生器設(shè)計(jì)【文獻(xiàn)綜述】
- 畢業(yè)設(shè)計(jì)--基于fpga的dds信號(hào)發(fā)生器設(shè)計(jì)
- 基于FPGA的DDS信號(hào)發(fā)生器的實(shí)現(xiàn).pdf
- 基于fpga的dds信號(hào)發(fā)生器設(shè)計(jì)【畢業(yè)論文】
- 基于fpga的dds正弦波信號(hào)發(fā)生器設(shè)計(jì)【開題報(bào)告】
- eda課程設(shè)計(jì)--基于fpga的dds信號(hào)發(fā)生器設(shè)計(jì)
- 基于fpga的dds信號(hào)發(fā)生器-畢業(yè)論文
- 基于FPGA的DDS信號(hào)發(fā)生器的研究與設(shè)計(jì).pdf
- 基于FPGA的PXI接口的DDS信號(hào)發(fā)生器設(shè)計(jì).pdf
- 基于fpga的dds信號(hào)發(fā)生器設(shè)計(jì)【開題報(bào)告+文獻(xiàn)綜述+畢業(yè)設(shè)計(jì)】
- 基于dds的函數(shù)信號(hào)發(fā)生器設(shè)計(jì)
- 基于dds的任意信號(hào)發(fā)生器設(shè)計(jì)【開題報(bào)告】
- 基于fpga的dds信號(hào)發(fā)生器的研究畢業(yè)論文
- 基于FPGA和單片機(jī)的DDS信號(hào)發(fā)生器設(shè)計(jì).pdf
- 基于fpga的信號(hào)發(fā)生器設(shè)計(jì)
- 基于FPGA-DDS的諧波信號(hào)發(fā)生器的研究與設(shè)計(jì).pdf
評(píng)論
0/150
提交評(píng)論