![EDA實驗報告頻率計及DDS_第1頁](http://file4.renrendoc.com/view/7dd26c0d45727e13c15b2f4c8db0a2b7/7dd26c0d45727e13c15b2f4c8db0a2b71.gif)
![EDA實驗報告頻率計及DDS_第2頁](http://file4.renrendoc.com/view/7dd26c0d45727e13c15b2f4c8db0a2b7/7dd26c0d45727e13c15b2f4c8db0a2b72.gif)
![EDA實驗報告頻率計及DDS_第3頁](http://file4.renrendoc.com/view/7dd26c0d45727e13c15b2f4c8db0a2b7/7dd26c0d45727e13c15b2f4c8db0a2b73.gif)
![EDA實驗報告頻率計及DDS_第4頁](http://file4.renrendoc.com/view/7dd26c0d45727e13c15b2f4c8db0a2b7/7dd26c0d45727e13c15b2f4c8db0a2b74.gif)
![EDA實驗報告頻率計及DDS_第5頁](http://file4.renrendoc.com/view/7dd26c0d45727e13c15b2f4c8db0a2b7/7dd26c0d45727e13c15b2f4c8db0a2b75.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
PAGEPAGE9EDA實驗II信號源、頻率計的設(shè)計姓名:葉爽班級:08042100學(xué)號:0804210147指導(dǎo)教師:花漢兵蔣立平摘要本實驗利用ALTERA公司的CYCLONE系列硬件平臺和QUARTUSⅡ軟件平臺,對Cyclone系列的EP1C12Q240C8芯片進(jìn)行設(shè)計,實現(xiàn)了一個簡單的正弦波,三角波及調(diào)幅波信號源和頻率計。關(guān)鍵字:FPGAQURATUSⅡ數(shù)字鐘VHDLInthisexperiment,weusethehardwareplatformofcycloneproducedbyALTERAandthesoftwareplatformwhichcalledquartusII.Wedesignasimplesinewaveandtrianglewaveandamplitude-modulationwavegeneratoronthechipofep1c12q240c8ofcycloneseries.Keyword:FPGAQURATUSⅡVHDL,SignalGenerator.實驗?zāi)康腜4實驗要求P4實驗步驟及設(shè)計過程P4編譯下載P13經(jīng)驗總結(jié)P13一.實驗?zāi)康?。熟悉QUARTEUS-Ⅱ軟件的使用方法,和實現(xiàn)FPGA電路設(shè)計的一般流程。了解VHDL語言編程。了解基本的自頂向下模塊化設(shè)計思想。二.實驗要求。1.利用DDS的方案,產(chǎn)生一個正弦波輸出,頻率可控。2.利用DDS產(chǎn)生調(diào)制信號和載波信號,并根據(jù)所學(xué)的高頻電子線路知識產(chǎn)生標(biāo)準(zhǔn)調(diào)幅波。3.設(shè)計一個數(shù)字頻率計,能夠?qū)㈩l率顯示在數(shù)碼管上。三、實驗步驟及設(shè)計過程。1.DDS信號發(fā)生模塊(半周期數(shù)據(jù),正弦波,三角波)(模塊名:)DDS其實質(zhì)是以基準(zhǔn)頻率源(系統(tǒng)時鐘)對相位進(jìn)行等間隔的采樣。由圖見,DDS由相位累加器和波形存儲器(即,ROM查詢表)構(gòu)成的數(shù)控振蕩器(NCO_NumericallyControlledOscillators)、數(shù)模轉(zhuǎn)換器(DAC)組成。在每一個時鐘周期,N位相位累加器與其反饋值進(jìn)行累加,其結(jié)果的高L位作為查詢表的地址,然后從ROM中讀出相應(yīng)的幅度值送到DAC。再由DAC將其轉(zhuǎn)換成為階梯模擬波形,最后由具有內(nèi)插作用的LPF將其平滑為連續(xù)的正弦波形作為輸出。因此,通過改變頻率控制字K就可以改變輸出頻率。DDS模塊中,遇到的第一個問題就是如何產(chǎn)生有符號數(shù)的ROM。在實驗指導(dǎo)手冊里提供的都是產(chǎn)生無符號數(shù)的計算機(jī)程序,但是由于后面涉及到調(diào)幅波中的相乘運算,使用無符號數(shù)的話會非常麻煩,因此第一步必須做出有符號數(shù)的ROM出來。產(chǎn)生有符號數(shù)的C++程序如下。其中加下劃線的部分就是有符號數(shù)和無符號數(shù)的程序區(qū)別所在。#include"iostream.h"#include"stdio.h"#include"math.h"intmain(intargc,char*argv[]){ inti; doubles; for(i=0;i<2048;i++) { s=sin(atan(1)*8*i/4096); printf("%d:%x;\n",i,(int)(s*511)); } return0;}相位累加器,寄存器均由VHDL語言編寫,比較簡單,此處只給出源程序,略去分析。libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityphase_adderisport(k:instd_logic_vector(11downto0);clk:instd_logic;en:instd_logic;reset:instd_logic;out1:outstd_logic_vector(11downto0));endentityphase_adder;architectureartofphase_adderissignaltemp:std_logic_vector(11downto0);beginprocess(clk,en,reset)beginifreset='1'thentemp<="000000000000";elseifclk'eventandclk='1'thenifen='1'thentemp<=temp+k;endif;endif;endif;out1<=temp;endprocess;endarchitecture;==================================libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityreg11isport(clk:instd_logic;d:instd_logic_vector(11downto0);q:outstd_logic_vector(10downto0));endreg11;architectureartofreg11issignaltemp:std_logic_vector(11downto0);beginprocess(clk)beginif(clk'eventandclk='1')thenif(d<"100000000000")thentemp<=d;elsetemp<=("111111111111"-d);endif;endif;endprocess;q<=(temp(10)&temp(9)&temp(8)&temp(7)&temp(6)&temp(5)&temp(4)&temp(3)&temp(2)&temp(1)&temp(0));endart;======================================在本次實驗中,為了節(jié)約存儲空間,我的ROM里只存儲了半周期數(shù)據(jù)。但如果按照正弦函數(shù)的前半周期來保存的話,后半周期會涉及到符號位的轉(zhuǎn)換,比較麻煩,因此我選擇保存了余弦函數(shù)的前半周期數(shù)據(jù)。對于送進(jìn)來的頻率控制字K,如果在0-PI之間,那么不做變換,直接輸出,如果在PI-2PI之間,那么輸出2PI-K,即關(guān)于PI做了一個對稱變換,由正弦波的對稱性知,這樣不會改變波形。分析寄存器的代碼就可以發(fā)現(xiàn),寄存器是12位地址輸入,卻只有11位地址輸出,就是因為做了一次對稱變換,接口寬度縮減了一半。對于三角波,其核心就是改變ROM的內(nèi)容,也就是產(chǎn)生MIF文件的計算機(jī)程序需要修改一下。我直接定義了一個周期為2PI,幅度為2的三角波函數(shù)TRIANGLE.那么MAIN函數(shù)中只要把SIN改為TRIANGLE就可以了。程序如下。#include"iostream.h"#include"stdio.h"#include"math.h"doubletriangle(doublex){ if(0<=x&&x<=4*atan(1)) return((2*atan(1))-x)/(2*atan(1)); elsereturn(triangle(8*atan(1)-x));}intmain(intargc,char*argv[]){ inti; doubles; for(i=0;i<2048;i++) { s=triangle(atan(1)*8*i/4096); printf("%d:%x;\n",i,(int)(s*511)); } return0;}對于反相功能,其實就是在寄存器之前加一個反相模塊就可以了。VHDL如下。libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityphase_reverseisport(en,clk:instd_logic;phase_ctrl:instd_logic_Vector(11downto0);dout:outstd_logic_vector(11downto0));endphase_reverse;architecturebehofphase_reverseissignaltemp:std_logic_vector(11downto0);beginprocess(clk)beginifclk'eventandclk='1'thenifen='1'thentemp<=phase_ctrl+"100000000000";elsetemp<=phase_ctrl;endif;endif;endprocess;dout<=temp;endarchitecture;============================================仔細(xì)分析一下,就是當(dāng)反相開關(guān)打開以后,相位控制字統(tǒng)一加上2048,正好是半個周期,因此反相。完整的DDS模塊完整的DDS(反相)模塊DDS模塊封裝,KCUSTOM是自定義的頻率控制字,CLK為時鐘輸入,DAIN為輸出的正弦波信號。2.調(diào)幅波模塊根據(jù)已學(xué)過的高頻電子線路知識知道調(diào)幅波的表達(dá)式如下:F考慮到這當(dāng)中用到大量的運算,如果一個一個單獨定制乘法加法模塊較為繁瑣,因此直接使用VHDL語言編寫,簡潔明了。VHDL代碼如下。libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;useieee.std_logic_arith.all;entitytestisgeneric(ma:integer:=7);port(clk:instd_logic;sig:insigned(9downto0);carry:insigned(9downto0);amwave:outsigned(9downto0));endtest;architecturebehoftestissignals:signed(3downto0);signalt:signed(23downto0);begins<=conv_signed(ma,4);process(clk)beginifclk'eventandclk='1'thent<=(s*sig+3577)*carry;amwave<=t(22downto13);endif;endprocess;endbeh;========================================在這當(dāng)中最難理解的莫過于3577這個數(shù)了。在十進(jìn)制中,我們加上的是1。之前接觸的一直是10進(jìn)制,沒有仔細(xì)思考這個1的含義?,F(xiàn)在換成2進(jìn)制,當(dāng)然不能加上二進(jìn)制的1,而要換成別的。十進(jìn)制當(dāng)中,這個1是調(diào)制度M的最大值與正弦函數(shù)的最大值1相乘的結(jié)果。而在二進(jìn)制中,調(diào)制度用四位有符號數(shù)表示,最大為7,正弦函數(shù)用10位有符號二進(jìn)制數(shù)表示,最大值為511。因此,相乘后結(jié)果就是3577。用它來替換原來十進(jìn)制中的1,才能得出正確的結(jié)果。如圖所示為AM模塊的原理圖3.頻率計模塊頻率計的原理有兩種,一種是計數(shù)式測量,一種是周期式測量。前者對與頻率較高的信號測量較為準(zhǔn)確,后者對于頻率較低的信號測量較為準(zhǔn)確??紤]到我們要測量的信號頻率都很高,因此選擇前者。我設(shè)計的頻率計有4個量程,×1,×10,×100,×1000。原理很簡單,例如×1檔來說,只要給一個1HZ脈沖,通過計數(shù)器計算出在脈沖時間內(nèi)信號上升沿的個數(shù)就可以了,也就是把信號的符號位接在計數(shù)器的CLK端。TIMER模塊為定時電路,控制計數(shù)的停止與開始,送到T_CON模塊后,由該模塊發(fā)出使能信號。CNT4*10模塊為計數(shù)模塊,DISPREG為顯示寄存器,使得示數(shù)不至于變化的太快。4.基準(zhǔn)頻率源模塊由于頻率計模塊中涉及到需要產(chǎn)生精確的基準(zhǔn)頻率,因此需要對系統(tǒng)48M頻率進(jìn)行分頻。對48分解質(zhì)因數(shù)可知,需要2,3,5分頻。2,3分頻的模塊在數(shù)字鐘里已有。5分頻的原理和3分頻非常類似,同樣是利用把PQ變量錯開半周期,不同的是判斷語句不一樣,而且在5分頻里PQ要變?yōu)槿皇噶?,否則沒有足夠多的狀態(tài)數(shù)來產(chǎn)生分頻效果。libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityFP5isport(clk:instd_logic;clkout:outstd_logic);endFP5;architecturertlofFP5issignalp,q:std_logic_vector(2downto0);beginprocess(clk)beginif(clk'eventandclk='1')thenifp="100"thenp<="000";elsep<=p+1;endif;endif;endprocess;process(clk)beginif(clk'eventandclk='0')thenifq="100"thenq<="000";elseq<=q+1;endif;endif;endprocess;clkout<='1'when(p(2)='0'andq(2)='0'and(p(1)='0'orp(0)='0'))else'0';endrtl;====================================================5.AD轉(zhuǎn)換(未完成)我在周二的時候就已經(jīng)做完了所有的基本功能,然后開始思考如何加上一些附加功能。我首先考慮的就是,我的頻率計能不能測量一個外部的信號的頻率。由于板子內(nèi)部全部是數(shù)字信號,因此外部的模擬信號進(jìn)來必須要經(jīng)過AD轉(zhuǎn)換。將外部的信號接在板子上的SGIN引腳處,對ADC做適當(dāng)?shù)脑O(shè)定,在ADC的8個輸出腳上就會產(chǎn)生相應(yīng)的數(shù)字信號。于是我在接完線以后嘗試使用SIGNALTAP邏輯分析儀來捕捉ADC的輸出信號,但是很遺憾,嘗試了一個下午,ADC輸出口出來的數(shù)字信號始終無規(guī)律,而按照理論它應(yīng)該是正弦波。更換實驗臺也無果。這個問題曾經(jīng)在去年的華為杯比賽時出現(xiàn)過,我們?yōu)榱诉@個問題調(diào)試了整整一天,直至最后才解決。不過我已經(jīng)記不清當(dāng)時是如何解決的了,當(dāng)時做的報告上也沒有寫這方面的內(nèi)容。所以,以后寫報告的時候一定要有經(jīng)驗總結(jié)的內(nèi)容,把實驗中遇到的所有問題都記錄下來。6.相位測量(未完成)相位測量的原理也是比較簡單的。對于兩個用DDS產(chǎn)生的正弦波信號,只需取出他們同一時刻的頻率控制字的差值,計算其差值,再換算成相位,送到顯示電路顯示即可。但是很遺憾的是,我在接入相位測量電路以后,頻率計的示數(shù)錯誤。在之前的調(diào)試過程中曾經(jīng)出現(xiàn)過這樣的狀況,我知道是時鐘信號太多,互相之間有干擾的原因,但是在我盡全力把所有的多余的高頻率時鐘去掉以后,問題仍然沒有解決。由于時間已經(jīng)到快驗收的時間了,所以不得已只能使用做相位測量之前的備份版去驗收,這個功能沒有能夠出現(xiàn)在最后的驗收作品中。7.動態(tài)顯示電路動態(tài)顯示電路主要目的就是顯示頻率計的示數(shù)。與之前數(shù)字鐘的設(shè)計幾乎完全一致,只不過此次是4位數(shù)碼管而已,所以對上次的電路略加修改就可以了。8.顯示切換電路由于要在正弦調(diào)幅波,三角調(diào)幅波,反相波三者之間切換,所以我自己寫了個簡單的數(shù)據(jù)選擇器來實現(xiàn)切換功能。libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;ENTITYMUX42ISPORT(CLK,SW2,SW3:INSTD_LOGIC;SIGIN,AMWAVEIN,SIG_ORI,SIG_REV,TRI_SIG,TRI_MOD:STD_LOGIC_vECTOR(9DOWNTO0);DA1IN,DA2IN:OUTSTD_LOGIC_VECTOR(9DOWNTO0));ENDMUX42;ARCHITECTUREBEHOFMUX42ISSIGNALTEMP1,TEMP2:STD_LOGIC_VECTOR(9DOWNTO0);BEGINPROCESS(CLK)BEGINIFCLK'EVENTANDCLK='1'THENIFSW2='1'THENTEMP1<=SIG_ORI;TEMP2<=SIG_REV;ELSIFSW3='1'THENTEMP1<=SIGIN;TEMP2<=AMWAVEIN;ELSETEMP1<=TRI_SIG;TEMP2<=TRI_MOD;ENDIF;ENDIF;ENDPROCESS;DA1IN<=TEMP1;DA2IN<=TEMP2;ENDBEH;===========================================10.其它總圖內(nèi)還有很多其它的小模塊比如常數(shù)模塊等,比較簡單,用VHDL寫也就是幾行的工作量,在此略去。11.總圖編譯下載首先進(jìn)行引腳的設(shè)置,先對最終的xianshi電路進(jìn)行編譯,然后點Assignments->Pins,然后按書后附錄配置引腳。配置完再點Assignments->Settings設(shè)置其余管腳,然后再編譯,點下載按鈕,再點HardwareSetup將平臺改為ByteBlaster[LPT1],再點START即可。實驗總結(jié)和感受。1.我在實驗中遇到過的比較大的困難。1)頻率計示數(shù)錯誤。其實這個問題的解決純粹是經(jīng)驗了,因為單單去排查頻率計和顯示電路都沒有任何問題。我只是聯(lián)想到做電子鐘的時候有一次因為多引了一個1000HZ的OUTPUT出來并且沒有鎖定任何端口,結(jié)果直接導(dǎo)致鐘走時不穩(wěn)定。所以我懷疑是不是還是這方面的問題。我把所有多余的時鐘信號全部刪掉以后,問題解決。所以SIMPLEISBEST是永恒不變的真理,在實現(xiàn)同樣的功能的情況下,結(jié)構(gòu)簡單意味著高可靠性!不僅是電路,現(xiàn)在的機(jī)械設(shè)計都有回歸簡單的趨勢,都是一個道理,簡單的東西維護(hù)成本低,故障率小。尤其是我電路里多出來的時鐘這樣多余的東西,更是不應(yīng)當(dāng)保留。2)調(diào)幅波波形不對。某天下午我一直都在折騰調(diào)幅波公式里的1換算成2進(jìn)制到底是多少。由于我進(jìn)度比較快,也沒有別人可以求助,于是我從差不多從12位2進(jìn)制的0一直試到111111111111,幾乎見過了所有的錯誤波形,沒有一個是對的。所有的波形都基本上都是由調(diào)幅波做某種變換而來,都很像,但都不對。晚上回去靜下心來翻了一會高頻書,終于弄懂了,覺得應(yīng)該是7×511。第二天上機(jī)一試,果然成功了。所以我覺得以后做實驗千萬不能急于求成,看到東西近在眼前卻搞不定就急躁,亂來。我要是下午就翻翻書,也許下午就搞出來了,不用等晚上了。所以做實驗的時候心態(tài)要好。2.我在繪制原理圖過程中的經(jīng)驗總結(jié)1.使用VHDL代碼寫模塊時,保存的VHD文件的名字最好和代碼里ENTITY后的實體名保持一致,否則在你寫了多個相似模塊以后,QUARTUS很有可能張冠李戴,在你雙擊了這個模塊以后它卻打開了另一個VHD文件,不注意的話很容易出錯。2.連線要簡潔。這個感受是我在做電子鐘的時候就體會到的。對于那些密密麻麻的端口連接,直接用信號名就可以,簡潔明了。3.對于從書上看來的源代碼的原理一定要弄懂。我之前電子鐘里面的3分頻代碼是從書上看來的,當(dāng)時我對它的原理不是太清楚。后來偶然的機(jī)會我用仿真的方法仔細(xì)觀察了一下波形,一目了然,弄清了它的原理。于是本次實驗中需要5分頻的時候我就能很順利的在源代碼的基礎(chǔ)上改一下就產(chǎn)生了5分頻。直接抄代碼的話,一旦電路出現(xiàn)任何問題,根本都不知道從哪下手。4.關(guān)于創(chuàng)新設(shè)計。這次實驗我的進(jìn)度比較快,所以我有比較充裕的時間來思考一些附加功能。從實用的角度出發(fā),我首先想到的就是,我能不能測量一個外部進(jìn)來的正弦信號的頻率,老是測量板子里面產(chǎ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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年合伙企業(yè)策劃干股加入?yún)f(xié)議書格式
- 2025年典范個人土地交易合同模板
- 2025年雙方自愿離婚協(xié)議書模板(兩個孩子)
- 2025年化工公司員工合同書
- 2025年企業(yè)園區(qū)租賃合同策劃樣本
- 2025年甲方與協(xié)作單位合同范文
- 2025年辦公設(shè)備維修保養(yǎng)服務(wù)合同范本
- 2025年土地使用權(quán)出讓合同樣本
- 2025年招投標(biāo)流程中合同風(fēng)險防范與控制實踐
- 2025年供應(yīng)鏈協(xié)作協(xié)議樣本
- 課題申報參考:生活服務(wù)數(shù)字化轉(zhuǎn)型下社區(qū)生活圈建設(shè)理念、模式與路徑研究
- 人教版數(shù)學(xué)八年級下冊 第16章 二次根式 單元測試(含答案)
- 甘肅省民航機(jī)場集團(tuán)招聘筆試沖刺題2025
- 心理學(xué)基礎(chǔ)知識考試參考題庫500題(含答案)
- 北師大版小學(xué)三年級數(shù)學(xué)下冊全冊教案
- DCMM練習(xí)題練習(xí)試題
- 《工業(yè)化建筑施工階段碳排放計算標(biāo)準(zhǔn)》
- 四級人工智能訓(xùn)練師(中級)職業(yè)技能等級認(rèn)定考試題及答案
- GB/T 33761-2024綠色產(chǎn)品評價通則
- 地下停車場充電樁技術(shù)方案建議書
- 幼兒園設(shè)施設(shè)備安全教育
評論
0/150
提交評論