eda技術與vhdl課程設計-基于dds移相信號發(fā)生器_第1頁
已閱讀1頁,還剩31頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  移相信號發(fā)生器</b></p><p><b>  摘要</b></p><p>  信號發(fā)生器又稱信號源,在生產生活實踐中應用廣泛。在我們各電子實驗室是不可少的實驗儀器。他能夠產生多種波形,如正弦波、三角波、方波、鋸齒波等。并且可以選擇輸出任意頻率、幅度、相位的波形。</p><p>  本

2、設計是采用DDS直接數字頻率合成技術來產生各種波形信號,它具有相對帶寬很寬,頻率轉換時間極短,頻率分辨率很高,輸出相位連續(xù),并且很容易實現頻率、相位、幅度的調制。本設計是移相信號發(fā)生器具有波形選擇,調頻、調相、調幅的功能。</p><p>  關鍵字 DDS 調頻 調相 調幅 正弦波 三角波 方波 鋸齒波</p><p><b>  目錄</b></p>

3、;<p><b>  摘要1</b></p><p><b>  目錄2</b></p><p>  第一章 整體設計論述3</p><p>  第二章 直接數字頻率合成技術(DDS)基本原理5</p><p><b>  2.1基本原理5</b><

4、;/p><p>  2.2 DDS的參數確定6</p><p>  第三章 單元模塊設計及仿真波形7</p><p>  3.1正弦波設計模塊7</p><p>  3.2 三角波設計模塊8</p><p>  3.3 方波產生模塊10</p><p>  3.4 鋸齒波設計模塊11&l

5、t;/p><p>  3.5 整體電路仿真波形13</p><p>  第四章 硬件實驗結果14</p><p>  4.1引腳鎖定14</p><p>  4.2 硬件測試結果15</p><p>  第五章 心得與體會21</p><p>  第六章 附錄23</p>

6、<p>  第一章 整體設計論述</p><p>  本設計是基于DDS技術(直接數字頻率合成技術)設計的一個移相信號發(fā)生器。能夠產生正弦波、三角波、方波、鋸齒波四種周期性波形。具有選擇波形類別、調頻、調相、調幅的功能。設計利用EDA硬件在嵌入式邏輯分析儀(SingnalTap II)進行采樣分析。</p><p>  本設計輸出有兩路信號標準信號pout_h(13位)及移相信

7、號fout_h(13位)。</p><p>  頻率由8位的頻率控制字fword_h控制,控制其取點的步距,最大范圍0~255倍,頻率控制字越大頻率越大。相位由8位的相位控制字pword_h控制,最大范圍0~255,控制他的起始值,相位控制字越大初相越大。幅度由十位乘法器一4位乘數ss所以可以最大增大16倍,ss值越大幅度越大。波形類型的選擇采用2位的位選sel來確定當sel=00時輸出正弦波這時可以對正弦波進行

8、調頻,調相,調幅,當sel=01時輸出三角波,當sel=10時輸出方波,當sel=11時輸出鋸齒波。這里利用按鍵Q2、Q4來控制波形選擇。Q4接高位。同時電路還設計了復位功能低電平復位,將鍵Q1按下就復位輸出為0。</p><p><b>  設計框圖如下:</b></p><p>  波形產生原理:1、正弦波原理 采用dds技術,包括基準時鐘、相位增量寄存器、相

9、位累加器、波形存儲器,乘法器等模塊。正弦波將采集的1024點波形數據預先存在ROM單元中,然后在系統(tǒng)標準時鐘clk下,按照一定的順序從定制的ROM單元中讀取數據。用頻率控制字來控制地址間隔,從而改變頻率。用相位控制字來控制初始地址從而控制相位。通過在波形存儲器后接乘法器來控制幅度。</p><p>  2、三角波原理 連續(xù)加運算到一定值,然后連續(xù)進行減運算回到原值,這樣反復就是三角波。他通過改變加的數fword

10、的值來改變頻率。通過對初值置一個數pword來改變相位。進行相位累加來產生波形。通過對輸出的數做乘法來改變幅度。</p><p>  3、方波原理 輸出高電平一段時間在讓其輸出低電平一段時間就可以產生方波了。改變計數間隔可以改變頻率。與三角波一樣通過置數在進行加法來調相。調幅與三角波一樣。</p><p>  4、鋸齒波原理 連續(xù)加一個數到一定值,然后置0,可以得到一鋸齒波。調頻,調

11、相,調幅的方法與三角波一樣。</p><p><b>  程序見附錄</b></p><p>  第二章 直接數字頻率合成技術(DDS)基本原理</p><p>  DDS技術,是一種新型的頻率合成技術和信號產生方法。其電路系統(tǒng)具有較高的頻率分辨率,可以實現快速的頻率切換,并且在改變時能夠保持相位的連續(xù),很容易實現頻率、相位、幅度的調制。它是將

12、輸出波形的一個完整的周期、幅度值都順序地存放在波形存儲器中,通過控制相位增量產生頻率、相位可控制的波形。</p><p><b>  2.1基本原理</b></p><p>  DDS電路一般包括基準時鐘、相位增量寄存器、相位累加器、波形存儲器、D/A轉換器和低通濾波器(LPF)等模塊。</p><p><b>  原理框圖如下:&l

13、t;/b></p><p>  相位增量寄存器寄存頻率控制數據,相位累加器完成相位累加的功能,波形存儲器存儲波形數據的單周期幅值數據,D/A轉換器將數字量形式的波形幅值數據轉化為所要求合成頻率的模擬量形式信號,低通濾波器濾除諧波分量。</p><p>  整個系統(tǒng)在統(tǒng)一的時鐘下工作,從而保證所合成信號的精確。每來一個時鐘脈沖,相位增量寄存器頻率控制數據與累加寄存器的累加相位數據相加,

14、把相加后的結果送至累加寄存器的數據輸出端。這樣,相位累加器在參考時鐘的作用下,進行線性相位累加,當相位累加器累加滿量時就會產生一次溢出,完成一個周期性的動作,這個周期就是DDS合成信號的一個頻率周期,累加器的溢出頻率就是DDS輸出的信號頻率。</p><p>  相位累加器輸出的數據的高位地址作為波形存儲器的地址,從而進行相位到幅值的轉換,即可在給定的時間上確定輸出的波形幅值。</p><p&

15、gt;  波形存儲器產生的所需波形的幅值的數字數據通過D/A轉換器轉換成模擬信號,經過低通濾波器濾除不需要的分量以便輸出頻譜純凈的所需信號。信號發(fā)生器的輸出頻率f0可表示為:</p><p>  上式中為系統(tǒng)時鐘,為系統(tǒng)分辨率,N為相位累加器位數即相位控制,M為相位累加器的增量即頻率控制字。</p><p>  2.2 DDS的參數確定</p><p>  首先確定

16、系統(tǒng)的分辨率,最高頻率,及最高頻率下的最少采樣點數根據需要產生的最高頻率以及該頻率下的最少采樣點數,由公式</p><p><b>  (1.2)</b></p><p>  確定系統(tǒng)時鐘的下限值。同時又要滿足分辨率計算公式</p><p><b>  (1.3)</b></p><p><

17、b>  綜合考慮決定的值。</b></p><p>  選定了的值后,則由公式(1.3)可得=,據此可確定相位累加器位數N。</p><p><b>  然后由最高輸出頻率</b></p><p>  推出M=,得出相位增量寄存器為S位。</p><p>  第三章 單元模塊設計及仿真波形</

18、p><p>  3.1正弦波設計模塊</p><p><b>  正弦波產生原理</b></p><p><b>  電路圖如下</b></p><p>  Fword是8位頻率控制字,控制輸出信號的頻率;pword是8位相移控制字,控制輸出信號的相移量;adder32b和adder10b分別是32位和

19、10位加法器;sin_rom是存放正弦波數據的rom,10跟數據線,10根地址線,其中的數據文件是LUT10X10.mif。reg32b和reg10b分別是32位和10 位寄存器;mux10 b是10位乘法器;pout1和fout1是13位輸出,可以分別與兩位高速d/a相接,他們分別輸出參考信號和可移相正弦信號。Fout1經過了一個移相的10位加法器adder10b。</p><p>  本電路是在每個時鐘周期內

20、,將加法器的值與頻率控制字相加,得到當前相位的值,將當前相位的值作為rom的地址,讀出rom的正弦波數據。ROM是所生成正弦波形一周期采樣1024點的數據值,只需改變FWORD的值而改變地址間隔從而改變頻率。頻率控制字越大,ROM的地址變化越快,輸出頻率越大。為了頻率變化明顯將fword向左移20位在與adder32b相加。對于移相是通過PWORD相位控制字與10位加法器ADDER10B在送入10位寄存器得到當前相位的地址值,從而得到當

21、前相位值。只需改變PWORD的值就可以改變相位。在將從ROM讀出的數據通過與一4位數SS相乘控制輸出幅度。</p><p><b>  主要參數</b></p><p>  頻率控制范圍:0~255。相位控制范圍:0~255。輸出分辨率:與加法器的位數有關。位數大分辨率高。</p><p>  3.1.2 mif文件的生成</p>

22、<p>  本設計定制的正弦波形數據存儲器ROM所需的正弦波形數據MIF文件,數據深度是1024、數據類型是十進制數,數據位寬為10位。</p><p>  可以通過MATLABLE來采樣取點。這里是通過C語言程序生成的程序。</p><p><b>  MIF文件見附錄2</b></p><p><b>  正弦波產生

23、程序</b></p><p><b>  見附錄</b></p><p><b>  正弦波仿真波形</b></p><p><b>  具體說明如下:</b></p><p>  CLK是系統(tǒng)時鐘信號,設為100納秒。FWORD為8位的頻率控制字;</p&g

24、t;<p>  PWORD為8位的頻率控制字;SS為4位控制幅度。FOUT1為移相輸出信號;POUT1為標準輸出信號。</p><p>  從上圖可以看出當FWORD的值為200時,POUT1輸出的數的間隔大于當FWORD=1時的值。如666與806之間差140,5490與5460差30。即FWORD越大間隔越大頻率也就越大。當PWORD=1時與PWORD=0時比較。FOUT1對POUT1明顯相移了

25、。PWORD=1時FOUT1不等于POUT1。PWORD=0時FOUT1=POUT1。改變PWORD的值可以改變相位。由圖可知當改變SS的值輸出的幅值也不一樣。所以改變ss可以實現調幅。</p><p>  3.2 三角波設計模塊</p><p>  3.2.1 基本原理</p><p>  該設計是通過連續(xù)加運算到a,然后連續(xù)進行減運算回到b,這樣反復就是三角波。

26、A=“1100000000”, 只要加到大于a這個數就可以做減運算;b=“0000000111”,當小于b再進行加運算。他通過改變加的數fword的值來改變增量從而改變頻率。通過對初值置一個數pword來改變相位。這個數是在復位是設置的,而且在每次改變pword是必須復位。最后將得到的10位數乘以四位的ss得到14位的數從而實現調幅。</p><p>  補充:fword、pword為8位 最終的結果為14位。&

27、lt;/p><p>  設計框圖如下:程序見附錄</p><p>  3.2.2 三角波仿真波形</p><p><b>  具體說明如下:</b></p><p>  CLK是系統(tǒng)時鐘信號,設為100納秒。FWORD為8位的頻率控制字;</p><p>  PWORD為8位的頻率控制字;SS為4位控

28、制幅度。Clrn為復位低電平復位。FOUT2為13位移相輸出信號;POUT2為13位標準輸出信號。</p><p>  從上圖可以看出當FWORD的值為130時,POUT2輸出的數的相對間隔大于當FWORD=1時的值。如0與10之間差10,17與34差17。即FWORD越大間隔越大頻率也就越大。當PWORD=100時與PWORD=0時比較。FOUT2對POUT2明顯相移了。PWORD=100時FOUT2不等于PO

29、UT2(fout2=3840,pout2=0)。PWORD=0時FOUT2=POUT2。改變PWORD的值可以改變相位。由圖可知(當ss=10時fout2=3840,當ss=1時fout2=17)當改變SS的值輸出的幅值也不一樣。所以改變ss可以實現調幅。且具有復位功能,低電平復位。每次改變pword的值時需先復位。</p><p>  3.3 方波產生模塊</p><p>  3.3.1

30、 基本工作原理</p><p>  輸出高電平一段時間在讓其輸出低電平一段時間就可以產生方波了。具體如下:通過計數來控制是否為高電平還是低電平。設f,若小于512則置1,否則置0.同三角波原理,他也是通過改變加的數fword的值來改變增量從而改變頻率。通過對初值置一個數pword來改變相位。這個數是在復位是設置的,而且在每次改變pword是必須復位。最后將得到的10位數乘以四位的ss得到14位的數從而實現調幅。&

31、lt;/p><p>  程序設計框圖如下:程序見附錄</p><p><b>  方波仿真波形</b></p><p><b>  具體說明如下:</b></p><p>  CLK是系統(tǒng)時鐘信號,設為100納秒。FWORD為8位的頻率控制字;</p><p>  PWORD為8

32、位的頻率控制字;SS為4位控制幅度。Clrn為復位低電平復位。FOUT3為13位移相輸出信號;POUT3為13位標準輸出信號。</p><p>  從上圖可以看出當FWORD的值為200時,POUT3輸出的數的疏密程度大于當FWORD=50時。即FWORD越大越密頻率也就越大。當PWORD=110時與PWORD=0時比較。FOUT3對POUT3明顯相移了。PWORD=100時FOUT3不等于POUT3(fout2

33、=1023,pout2=0),它們上下不同步。PWORD=0時FOUT3=POUT3??梢钥闯龈淖働WORD的值可以改變相位。由圖可知(當ss=10時fout3=3840,當ss=1時fout3=17)當改變SS的值輸出的幅值也不一樣。所以改變ss可以實現調幅。且具有復位功能,低電平復位。每次改變pword的值時需先復位。</p><p>  3.4 鋸齒波設計模塊</p><p><

34、;b>  3.4.1基本原理</b></p><p>  這里是遞增鋸齒波,它是通過連續(xù)加法運算到某個值時再置0.他是通過頻率控制字fword控制加的間隔,來控制頻率,fword越大頻率也越大。相位是通過給被加數置一個數pword來改變。調相波與標準波不同在于初值不同。標準波是從0開始加。調幅是通過乘法來實現。且具有復位功能,低電平復位。每次改變pword的值時需先復位。</p>

35、<p>  設計框圖如下 :(程序見附錄4)</p><p>  3.4.2鋸齒波仿真波形</p><p>  CLK是系統(tǒng)時鐘信號,設為100納秒。FWORD為8位的頻率控制字;</p><p>  PWORD為8位的頻率控制字;SS為4位控制幅度。Clrn為復位低電平復位。FOUT4為13位移相輸出信號;POUT4為13位標準輸出信號。</p&g

36、t;<p>  從上圖可以看出當FWORD的值為200時,POUT4輸出的數的相對間隔大于當FWORD=1時的值。如384與408之間差24,12與24差12。即FWORD越大間隔越大頻率也就越大。當PWORD=100時與PWORD=0時比較。FOUT4對POUT4明顯相移了。PWORD=100時FOUT4不等于POUT4(fout4=384,pout4=0)。PWORD=0時FOUT2=POUT2。改變PWORD的值可以

37、改變相位。由圖可知在頻率,相位不變的情況下,當ss=12時fout4=12,當ss=1時fout2=4,改變SS的值輸出的幅值也不一樣。所以改變ss可以實現調幅。且具有復位功能,低電平復位。每次改變pword的值時需先復位。</p><p>  3.5 整體電路仿真波形</p><p><b>  具體說明如下:</b></p><p>  C

38、LK_h是系統(tǒng)時鐘信號,設為100納秒。FWORD_h為8位的頻率控制字;</p><p>  PWORD_h為8位的頻率控制字;SS_h為4位控制幅度。Clrn_h為復位低電平復位。Sel是兩位的波形選擇位。FOUT_h為13位移相輸出信號;POUT_h為13位標準輸出信號。</p><p>  如上圖所示:當sel=“00”是輸出正弦波,sel=“01”輸出三角波,sel=“10”&l

39、t;/p><p>  輸出方波,sel=“11”輸出鋸齒波。然后通過fword_h來調頻,pword_h 來移相,ss_h來調幅。</p><p>  第四章 硬件實驗結果</p><p><b>  4.1引腳鎖定</b></p><p>  如上圖輸入輸出信號所接引腳為:</p><p>  Cl

40、k_h系統(tǒng)時鐘接pin_152,設為2kHz,CLRN_H復位信號鎖定引腳PIN_135,名稱位QK1,當按下時復位。(鍵按下為0,平時為1).fword_h[7--5]是頻率控制字的高三位分別鎖定PIN-159、PIN_158、PIN_156,名稱分別為DK3、DK2、DK1。(ON為0,OFF為1)pword_h[7--5]是相位控制字的高三位分別鎖定PIN-162、PIN_161、PIN_160,名稱分別為DK6、DK5、DK4。

41、SS_H[3-2]是幅度控制的高2位分別鎖定PIN-164、PIN_163,名稱分別為DK8、DK7。Sel[1-0]是波形選擇位,分別鎖定PIN_138 PIN_136名稱為QK4、QK2。</p><p>  4.2 硬件測試結果</p><p>  輸出結果是通過signaltap II來觀察分析。啟動分析儀后,將QK1按下,可以看到輸出一直線。當將QK4、QK2都按下,可看到輸出正

42、弦波,再將DK1、DK2、DK3置ON或OFF可以改變頻率,將DK6、DK5|、DK4置ON或OFF可以改變相位,將DK8、DK7置ON或OFF可以改變輸出幅度(結果如圖1---4)。將QK4按下可以觀察輸出三角波,同理將DK1、DK2、DK3置ON或OFF可以改變頻率,將DK6、DK5|、DK4置ON或OFF可以改變相位,將DK8、DK7置ON或OFF可以改變輸出幅度(結果如圖5---8)。若將QK2按下輸出方波通過DK1~DK8可以

43、調頻、調相、調幅(結果如圖9~12)。若不按下QK4、QK2輸出鋸齒波,結果如圖12~15。</p><p>  硬件結果如下:正弦波</p><p>  圖1 參照波 pword_h=0 ,將fword_h[5]DK1置1其他為0,ss_h[2]、ss_h[3]都置1</p><p>  圖2 調頻 只改變fword_h,讓其增大,頻率比圖1要大<

44、;/p><p>  圖3 調相 在圖2的基礎上改變了pword_h,將pword_h[5]、pword_h[6]置1其他為0.上下波形相位不一樣。</p><p>  圖4調幅 在圖3的基礎上將ss_h[2]置0,從而改變輸出幅度</p><p><b>  三角波</b></p><p>  圖5 參照波 pword

45、_h=0 ,將fword_h[5]DK1置1其他為0,ss_h[2]、ss_h[3]都置1</p><p>  圖6 調頻 只改變fword_h,讓其增大,頻率比圖5要大</p><p>  圖7 調相 在圖6的基礎上改變了pword_h,將pword_h[5]、pword_h[6]置1其他為0.上下波形相位不一樣。</p><p>  圖8調幅 在圖7的基

46、礎上將ss_h[2]置0,從而改變輸出幅度,輸出幅度比圖7要小</p><p><b>  方波</b></p><p>  圖9 參照波 pword_h=0 ,將fword_h[5]DK1置1其他為0,ss_h[2]、ss_h[3]都置1</p><p>  圖10 調頻 只改變fword_h,讓其增大,頻率比圖9要大</p&

47、gt;<p>  圖11 調相 在圖9的基礎上改變了pword_h,將pword_h[5]、pword_h[6]置1其他為0.上下波形相位不一樣。</p><p>  圖12調幅 在圖11的基礎上將ss_h[2]置0,從而改變輸出幅度,輸出幅度減小</p><p><b>  鋸齒波</b></p><p>  圖13 參照波

48、 pword_h=0 ,將fword_h[5]DK1置1其他為0,ss_h[2]、ss_h[3]都置1</p><p>  圖14 調頻 只改變fword_h,讓其增大,頻率比圖13要大</p><p>  圖15 調相 在圖13的基礎上改變了pword_h,將pword_h[5]、pword_h[6]置1其他為0.上下</p><p><b> 

49、 波形相位不一樣。</b></p><p>  圖16調幅 在圖15的基礎上將ss_h[2]置0,從而改變輸出幅度,輸出幅度減小</p><p><b>  鋸齒波</b></p><p><b>  第五章 心得與體會</b></p><p>  經過長達兩個星期的課程設計,終于在自

50、己的努力奮戰(zhàn)下完成了設計。雖然這兩個星期沒日沒夜的在實驗室,但是這兩星期過得很充實,收獲也很多。</p><p>  這次的設計是移相信號發(fā)生器,要求產生正弦波、三角波、方波。并且可以進行調頻、調相、調幅。</p><p>  在整個設計過程中,學會了很多知識。首先,讓我熟練了QUARTUS II軟件。1、文件名必須與實體名一樣,工程名可以自選。2、若要對某個VHDL文件進行編譯、仿真或其

51、他操作必須現將其設為頂層文件。3、仿真波形中信號值的設置要求可以觀察明顯的現象。其次,學會了用嵌入式邏輯分析儀signaltap II。步驟:1、file—new—others file打開signaltap II編輯窗口。2、調入待測信號,主頻時鐘信號不可調入。3、參數設置,設工作時鐘信號clock時應選主頻時鐘信號。4、保存、編譯下載,每次編譯后都要重新下載。5、最后啟動分析儀進行分析觀察。</p><p>

52、  同時在整個設計過程中,我碰到了許多問題,并解決了。1、剛設計的時候,應載想整個設計的大概而遲遲不知如何下手,最后經同學指點,分模塊來做才一一完成。2、整個基本設計都完成后在對波形觀察分析時,發(fā)現波形不規(guī)則而且有好多毛刺。經分析嘗試發(fā)現是因為在對信號進行引腳鎖定時,頻率控制字和相位控制字只用了高三位,其他懸空了。將其他沒用到的為置0后毛刺少好多,波形也規(guī)則了。還有發(fā)現在頻率較低的情況下,波形很標準。3、在觀察調相時,不管仿真波形,還是

53、硬件測試,三角波、方波、鋸齒波,不管相位控制字設為多大都沒移相,最終在經程序中得知因為每次都是在復位后才置數的。所以在調相前必須先復位再測試。</p><p>  總體來說,在這次設計過程中,給我感觸最深的是,學會了電子系統(tǒng)設計的一般方法。在設計過程中應一個模塊一模塊的完成,一個一個問題的解決,這樣所有難題就會迎刃而解。</p><p><b>  第六章 附錄</b&g

54、t;</p><p>  程序附錄1 正弦波產生程序</p><p>  library ieee;</p><p>  use ieee.std_logic_1164.all;</p><p>  use ieee.std_logic_unsigned.all;</p><p>  entity adder32b i

55、s --32位加法器</p><p>  port (a: in std_logic_vector(31 downto 0);</p><p>  b: in std_logic_vector(31 downto 0);</p><p>  s: out std_logic_vector(31 downto 0)); &l

56、t;/p><p>  end adder32b;</p><p>  architecture behav of adder32b is</p><p><b>  begin </b></p><p><b>  s<=a+b;</b></p><p>  end beh

57、av;</p><p>  library ieee; --10位加法器</p><p>  use ieee.std_logic_1164.all;</p><p>  use ieee.std_logic_unsigned.all;</p><p>  entity adder10b

58、is</p><p>  port (a: in std_logic_vector(9 downto 0);</p><p>  b: in std_logic_vector(9 downto 0);</p><p>  s: out std_logic_vector(9 downto 0)); </p><p>  end adder10b

59、;</p><p>  architecture behav of adder10b is</p><p><b>  begin </b></p><p><b>  s<=a+b;</b></p><p>  end behav;</p><p>  library

60、 ieee;</p><p>  use ieee.std_logic_1164.all;</p><p>  entity reg32b is --32位寄存器</p><p>  port (load:in std_logic;</p><p>  din:in std_logic_vecto

61、r(31 downto 0);</p><p>  dout:out std_logic_vector(31 downto 0));</p><p>  end reg32b;</p><p>  architecture behav of reg32b is</p><p><b>  begin</b></p&

62、gt;<p>  process(load,din)</p><p><b>  begin</b></p><p>  if load'event and load='1' then</p><p>  dout<=din;</p><p><b>  end if

63、;</b></p><p>  end process;</p><p>  end behav;</p><p>  library ieee;</p><p>  use ieee.std_logic_1164.all;</p><p>  entity reg10b is

64、 --10位寄存器</p><p>  port (load:in std_logic;</p><p>  din:in std_logic_vector(9 downto 0);</p><p>  dout:out std_logic_vector(9 downto 0));</p><p>  end reg10b;</p>

65、;<p>  architecture behav of reg10b is</p><p><b>  begin</b></p><p>  process(load,din)</p><p><b>  begin</b></p><p>  if load'event

66、and load='1' then</p><p>  dout<=din;</p><p><b>  end if;</b></p><p>  end process;</p><p>  end behav;</p><p>  library ieee;</p

67、><p>  use ieee.std_logic_1164.all;</p><p>  use ieee.std_logic_unsigned.all;</p><p>  entity mux10b is --乘法器</p><p>  port (c: in std_logic_vector(3 downto 0);</p

68、><p>  d: in std_logic_vector(9 downto 0);</p><p>  s: out std_logic_vector(13 downto 0)); </p><p>  end mux10b;</p><p>  architecture behav of mux10b is</p><p&

69、gt;<b>  begin </b></p><p><b>  s<=c*d;</b></p><p>  end behav;</p><p>  library ieee;</p><p>  use ieee.std_logic_1164.all;</p><p&

70、gt;  use ieee.std_logic_unsigned.all;</p><p>  entity dds1 is --正弦波</p><p>  port(clk: in std_logic;</p><p>  ss:in std_logic_vector(3 downto 0);</p><p

71、>  fword:in std_logic_vector(7 downto 0);</p><p>  pword:in std_logic_vector(7 downto 0);</p><p>  fout1:out std_logic_vector(13 downto 0);</p><p>  pout1:out std_logic_vector(13

72、 downto 0));</p><p><b>  end;</b></p><p>  architecture one of dds1 is</p><p>  component reg32b --32位寄存器</p><p>  port (load:in std_logic;</p><

73、;p>  din:in std_logic_vector(31 downto 0);</p><p>  dout:out std_logic_vector(31 downto 0));</p><p>  end component;</p><p>  component reg10b --10位寄存器</p><p>  

74、port (load:in std_logic;</p><p>  din:in std_logic_vector(9 downto 0);</p><p>  dout:out std_logic_vector(9 downto 0));</p><p>  end component;</p><p>  component adder

75、32b --32位加法器</p><p>  port (a: in std_logic_vector(31 downto 0);</p><p>  b: in std_logic_vector(31 downto 0);</p><p>  s: out std_logic_vector(31 downto 0)); </p><p>

76、;  end component;</p><p>  component adder10b --10位加法器</p><p>  port (a: in std_logic_vector(9 downto 0);</p><p>  b: in std_logic_vector(9 downto 0);</p><p>  s: o

77、ut std_logic_vector(9 downto 0)); </p><p>  end component;</p><p>  component sin_rom --正弦波形存儲器</p><p>  port (address:in std_logic_vector(9 downto 0);</p><p>  cloc

78、k:in std_logic;</p><p>  q:out std_logic_vector(9 downto 0));</p><p>  end component;</p><p>  component mux10b --10*4位乘法器</p><p>  port (c: in std_logic_vector(3 do

79、wnto 0);</p><p>  d: in std_logic_vector(9 downto 0);</p><p>  s: out std_logic_vector(13 downto 0));</p><p>  end component;</p><p>  signal f32b,d32b,din32b:std_logic

80、_vector(31 downto 0);-- 定義信號</p><p>  signal p10b,lin10b,sin10b,ptmp1,ftmp1:std_logic_vector(9 downto 0);</p><p><b>  begin</b></p><p>  f32b(27 downto 20)<=fword;f32

81、b(31 downto 28)<="0000";</p><p>  f32b(19 downto 0)<="00000000000000000000";--將fword移位</p><p>  p10b(9 downto 2)<=pword;p10b(1 downto 0)<="00";</p>

82、;<p>  u1:adder32b port map(a=>f32b,b=>d32b,s=>din32b); --元件例化</p><p>  u2:reg32b port map(dout=>d32b,din=>din32b,load=>clk);</p><p>  u3:sin_rom port map(addres

83、s=>sin10b,q=>ftmp1,clock=>clk);</p><p>  u4:adder10b port map(a=>p10b,b=>d32b(31 downto 22),s=>lin10b);</p><p>  u5:reg10b port map(dout=>sin10b,din=>lin10b,load=>clk)

84、;</p><p>  u6:sin_rom port map(address=>d32b(31 downto 22),q=>ptmp1,clock=>clk);</p><p>  u7:mux10b port map(d=>ptmp1,c=>ss,s=>pout1);</p><p>  u8:mux10b port map(

85、d=>ftmp1,c=>ss,s=>fout1);</p><p><b>  end one;</b></p><p><b>  程序附錄2</b></p><p>  LIBRARY IEEE;</p><p>  use ieee.std_logic_1164.all;&l

86、t;/p><p>  use ieee.std_logic_unsigned.all;</p><p>  ENTITY dds2 IS --三角波</p><p>  PORT( clk,clrn: in std_logic;</p><p>  ss:in std_logic_vector(3 down

87、to 0);</p><p>  fword:in std_logic_vector(7downto 0);</p><p>  pword:in std_logic_vector(7 downto 0);</p><p>  fout2:out std_logic_vector(13 downto 0);</p><p>  pout2:o

88、ut std_logic_vector(13 downto 0));</p><p><b>  end;</b></p><p>  ARCHITECTURE a OF dds2 IS</p><p><b>  BEGIN</b></p><p>  PROCESS(CLK,clrn,fword

89、 ,pword) ---進程</p><p>  variable tmp1,tmp2,p10b: std_logic_vector(9 downto 0); --定義信號</p><p>  variable f,p: std_logic;</p><p>  variable f5b:std_

90、logic_vector(4 downto 0);</p><p><b>  begin</b></p><p>  f5b(4 downto 2):=fword(7 downto 5);f5b(1 downto 0):="00";</p><p>  p10b(9 downto 7):=pword(7 downto 5)

91、;p10b(6 downto 0):="0000000";</p><p>  if clrn='0' then tmp1:="0000000000";tmp2:=p10b;--復位</p><p>  elsif clk'event and clk='1' then</p><p> 

92、 if f='0' then </p><p>  if tmp1>"1100000000" then f:='1'; </p><p>  else tmp1:=tmp1+1+f5b; end if;--增加</p><p><b>  else </b></p><

93、;p>  if tmp1<"0000000111" then f:='0';</p><p>  else tmp1:=tmp1-1-f5b; end if;--減小</p><p><b>  end if;</b></p><p>  if p='0' then </p&

94、gt;<p>  if tmp2>"1100000000" then p:='1';</p><p>  else tmp2:=tmp2+1+f5b; end if;--增加</p><p><b>  else </b></p><p>  if tmp2<"000000

95、0111" then p:='0';</p><p>  else tmp2:=tmp2-1-f5b; end if;--減小</p><p><b>  end if;</b></p><p><b>  end if;</b></p><p>  fout2<=t

96、mp2*ss;---調幅</p><p>  pout2<=tmp1*ss;</p><p>  end process;</p><p><b>  end a;</b></p><p><b>  程序附錄3</b></p><p>  LIBRARY IEEE;&

97、lt;/p><p>  use ieee.std_logic_1164.all;</p><p>  use ieee.std_logic_unsigned.all;</p><p>  ENTITY dds3 IS --方波</p><p>  PORT( clk,clrn: in std_log

98、ic;</p><p>  ss:in std_logic_vector(3 downto 0);</p><p>  fword:in std_logic_vector(7 downto 0);</p><p>  pword:in std_logic_vector(7 downto 0);</p><p>  fout3:out std_

99、logic_vector(13 downto 0);</p><p>  pout3:out std_logic_vector(13 downto 0));</p><p><b>  end;</b></p><p>  ARCHITECTURE a OF dds3 IS</p><p>  SIGNAL F,p: s

100、td_logic;</p><p>  signal q1,q2: std_logic_vector(9 downto 0);</p><p><b>  BEGIN</b></p><p>  PROCESS(CLK,clrn,fword ,pword)</p><p>  variable tmp1,tmp2,p10

101、b: std_logic_vector(9 downto 0);</p><p>  variable f5b:std_logic_vector(4 downto 0);</p><p><b>  BEGIN</b></p><p>  f5b(4 downto 2):=fword(7 downto 5);f5b(1 downto 0):=&

102、quot;00";</p><p>  p10b(9 downto 7):=pword(7 downto 5);p10b(6 downto 0):="0000000";</p><p>  IF CLRN='0' THEN TMP1:="0000000000";tmp2:=p10b;</p><p>

103、  ELSE IF CLK'EVENT AND CLK='1' THEN</p><p>  IF TMP1="1111111111" THEN TMP1:="0000000000";--標準波</p><p>  ELSE TMP1:=TMP1+1+f5b;END IF;</p><p>  IF T

104、MP1<"0111111111"THEN F<='1';</p><p>  ELSE F<='0';END IF;</p><p>  IF TMP2="1111111111" THEN TMP2:="0000000000";--調相</p><p>  

105、ELSE TMP2:=TMP2+1+f5b;END IF;</p><p>  IF TMP2<"0111111111"THEN p<='1';</p><p>  ELSE p<='0';END IF;</p><p><b>  END IF;</b></p>

106、<p><b>  END IF;</b></p><p>  END PROCESS;</p><p>  PROCESS(CLK,F,p)</p><p><b>  BEGIN</b></p><p>  IF CLK'EVENT AND CLK='1'

107、THEN</p><p>  IF F='1' THEN q1<="1111111111";--高電平</p><p>  ELSE q1<="0000000000";---低電平</p><p><b>  END IF;</b></p><p>  

108、IF p='1' THEN q2<="1111111111";</p><p>  ELSE q2<="0000000000";</p><p><b>  END IF;</b></p><p><b>  end if;</b></p>

109、<p>  POUT3<=q1*SS;--標準波</p><p>  FOUT3<=q2*SS;--調相波</p><p>  END PROCESS;</p><p><b>  END A;</b></p><p><b>  程序附錄4</b></p>&l

110、t;p>  LIBRARY IEEE;</p><p>  use ieee.std_logic_1164.all;</p><p>  use ieee.std_logic_unsigned.all;</p><p>  ENTITY dds4 IS --鋸齒波 </p><p>  PORT(

111、clk,clrn: in std_logic;</p><p>  ss:in std_logic_vector(3 downto 0);</p><p>  fword:in std_logic_vector(7downto 0);</p><p>  pword:in std_logic_vector(7 downto 0);</p><p&

112、gt;  fout4:out std_logic_vector(13 downto 0);</p><p>  pout4:out std_logic_vector(13 downto 0));</p><p><b>  end;</b></p><p>  ARCHITECTURE a OF dds4 IS</p><p

113、><b>  BEGIN</b></p><p>  PROCESS(CLK,clrn,fword,pword )</p><p>  variable tmp1,tmp2,p10b: std_logic_vector(9 downto 0);</p><p>  variable f5b:std_logic_vector(4 downt

114、o 0);</p><p><b>  begin</b></p><p>  f5b(4 downto 2):=fword(7 downto 5);f5b(1 downto 0):="00";</p><p>  p10b(9 downto 7):=pword(7 downto 5);p10b(6 downto 0):=&

115、quot;0000000";</p><p>  if clrn='0' then tmp1:="0000000000";tmp2:=p10b;--復位</p><p>  elsif clk'event and clk='1' then</p><p>  if tmp1>"11

116、00000000" then tmp1:="0000000000";</p><p>  else tmp1:=tmp1+1+f5b; end if; --增加</p><p>  if tmp2>"1100000000" then tmp2:="0000000000";--調相</p><

117、p>  else tmp2:=tmp2+1+f5b; end if; --增加</p><p><b>  end if;</b></p><p>  fout4<=tmp2*ss; --調相波</p><p>  pout4<=tmp1*ss; --標準波</p><p>  end process

118、;</p><p><b>  end a;</b></p><p><b>  程序附錄5</b></p><p>  library ieee;</p><p>  use ieee.std_logic_1164.all;</p><p>  use ieee.std_l

119、ogic_unsigned.all;</p><p>  entity dds is ---主程序設為頂層文件</p><p>  port(clk_h,clrn_h: in std_logic;</p><p>  sel:in std_logic_vector(1 downto 0);</p><p&

120、gt;  ss_h:in std_logic_vector(3 downto 0);</p><p>  fword_h:in std_logic_vector(7 downto 0);</p><p>  pword_h:in std_logic_vector(7 downto 0);</p><p>  fout_h:out std_logic_vector(1

121、3 downto 0);</p><p>  pout_h:out std_logic_vector(13 downto 0));</p><p><b>  end;</b></p><p>  architecture one of dds is</p><p>  component dds1

122、 --正弦</p><p>  port(clk: in std_logic;</p><p>  ss:in std_logic_vector(3 downto 0);</p><p>  fword:in std_logic_vector(7 downto 0);</p><p>  pword:in std_logic_vect

溫馨提示

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

評論

0/150

提交評論