基于FPGAad數(shù)據(jù)采集存儲(chǔ)處理報(bào)告(含Verilog源代碼)_第1頁(yè)
基于FPGAad數(shù)據(jù)采集存儲(chǔ)處理報(bào)告(含Verilog源代碼)_第2頁(yè)
基于FPGAad數(shù)據(jù)采集存儲(chǔ)處理報(bào)告(含Verilog源代碼)_第3頁(yè)
基于FPGAad數(shù)據(jù)采集存儲(chǔ)處理報(bào)告(含Verilog源代碼)_第4頁(yè)
基于FPGAad數(shù)據(jù)采集存儲(chǔ)處理報(bào)告(含Verilog源代碼)_第5頁(yè)
已閱讀5頁(yè),還剩39頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、基于FPGAAD數(shù)據(jù)采集存儲(chǔ)處理項(xiàng)目報(bào)告(XILINXALTEARA都可用)組員:華、文、杰一、實(shí)驗(yàn)?zāi)康谋敬螌?shí)驗(yàn)利用Basys2開發(fā)板完成一個(gè)開發(fā)小項(xiàng)目,即開發(fā)AD數(shù)據(jù)采集存儲(chǔ)處理系統(tǒng),旨在掌握FPGA開發(fā)基本方法以及鍛煉解決開發(fā)過程中出現(xiàn)問題的能力。二、關(guān)鍵詞Basys2、FPGA、AD轉(zhuǎn)換、RAM、串口通信、MATLAB處理三、方案設(shè)計(jì)要實(shí)現(xiàn)本次項(xiàng)目,首先確定器件,其次根據(jù)器件時(shí)序?qū)懗瞿K的使用程序,最后綜合成一個(gè)工程,然后進(jìn)行仿真,上板實(shí)驗(yàn)。本次實(shí)驗(yàn)的器件:32M8位模數(shù)轉(zhuǎn)換器、Basys2開發(fā)板、串口轉(zhuǎn)RS232cp2102模塊、基于三極管的電平轉(zhuǎn)換電路。選擇好器件后,根據(jù)器件的時(shí)序完

2、成模塊的代碼書寫。寫好AD模塊、串口通信模塊后,現(xiàn)在就需要處理采樣速率與串口通訊速率不匹配的問題了。根據(jù)香農(nóng)采樣定理,采樣頻率得高于信號(hào)頻率的兩倍才能完成信號(hào)復(fù)現(xiàn),我們這里使用25M的高速采樣頻率,而串口dps9600傳送一個(gè)位104us明顯比采樣慢許多。所以這里需要解決速率不匹配的問題。我們想到可以利用FPGA的RAM先存儲(chǔ)采樣來的數(shù)據(jù),然后再提取數(shù)據(jù)經(jīng)過串口通信送至PC經(jīng)由MATLAB處理。本次小項(xiàng)目最為關(guān)鍵的是控制好采樣與串口通信的時(shí)序問題。關(guān)于時(shí)序的控制,留到模塊介紹里面說明方案小結(jié):本次實(shí)驗(yàn)基于片內(nèi)RAM存儲(chǔ)AD采樣過來的數(shù)據(jù),然后待采樣完成后提取數(shù)據(jù)串口通信至PC,最后經(jīng)由matl

3、ab處理。四、模塊介紹1.Verilog開發(fā)程序介紹如下給出基于QuartusII繪制出的BlockDiagram圖,涵蓋了所有的模塊以及模塊之間的連線。圖4.1綜合模塊圖如下給出程序目錄(txt格式):clk.txt,j EIMCDN.tort,.RAM.txt,TOP.txtUARLtxt2017/12/13 12:44文本文特1 KB2017/12/12 21:06文本文檔3 KB2017/12/12 2H05文本文樗1 KB2017/12/12 21:04文本文拮2 KB2017/12/12 21:05文本文檔3 KB現(xiàn)在分別介紹各個(gè)模塊的端口以及功能AD外設(shè):電路圖、實(shí)物圖、接口七*

4、芝H«sE-W懵口iwt”嗎izh.2*"g«*ismujYw-:*AS,fEW.不用-«W,ILMi-KiHM>W<lr'1r速哂如Mt隹1DCDM2a*5V4tLQfiCM£i?*nnJDtffib1DAIK單RM»CWi.t«坤DAM!OftM11MlO31HU皿1BBS0(MUKg1A1$1An11Hn即捌ACIfitfcU即加垢用電雨州春整批M嫄用acamsADD&4配!1皿S如族止IffiSJ7即南鑿塞也此制他329JDOKACUM33U割這個(gè)外設(shè)提供最大32M采樣速率,包括一個(gè)模擬信

5、號(hào)輸入和一個(gè)采樣時(shí)鐘輸入以及八個(gè)數(shù)字信號(hào)輸出。在每個(gè)采樣時(shí)鐘的上升沿輸出相應(yīng)的采樣數(shù)字信號(hào)。Basys2開發(fā)板:串口通訊模塊外設(shè):這個(gè)模塊旨在把Basys2輸出的LVTTL轉(zhuǎn)換成RS232的負(fù)邏輯高電平,實(shí)現(xiàn)串口與PC的通信。它有五個(gè)引腳:GND、3.3V、5V、TXD、RXD。在使用中,只使用RXD和GND0需要注意的是,倘若GND不與FPGA串口的GND連接,那么用口輸出的電平,此模塊無法識(shí)別,這就是數(shù)字地需要共地的重要性。這里的RXD接Basys的串口輸出C6(這是分配的tx輸出管腳)。接線當(dāng)然用杜邦線的公母線連接。TOP模塊:moduleTEST(inputclk)/50Minputr

6、st_n,/復(fù)位input7:0datain,"AD輸入outputclk_25M,outputtx串口);TOP模塊命名為TEST是當(dāng)時(shí)自己寫的非最終版程序用來測(cè)試正確性,最后測(cè)試正確后也沒修改過來,但是對(duì)仿真沒影響。clk是系統(tǒng)時(shí)鐘輸入,用來作為全局時(shí)鐘并且為調(diào)用后面四個(gè)子模塊提供時(shí)鐘基礎(chǔ),設(shè)置為50Mrst_n是系統(tǒng)復(fù)位設(shè)置,復(fù)位到初始狀態(tài),這里大家都熟悉,不用多說input7:0datain是AD外設(shè)的8位數(shù)字信號(hào)輸入,這個(gè)數(shù)字信號(hào)隨著AD采樣時(shí)鐘(clk_25M)變化,在后面CLK模塊里面會(huì)說明。outputclk_25M為調(diào)用CLK模塊后輸出的AD采樣時(shí)鐘,這個(gè)輸出用來接

7、AD外設(shè)的時(shí)鐘輸入,提供采樣時(shí)鐘。outputtx為調(diào)用uart模塊后,與PC通信的“橋梁”,即攜帶數(shù)據(jù)的信號(hào)吧。CLK模塊:modulead_2clk(inputelk,系統(tǒng)時(shí)鐘50Mhzinputreset_n,/M&-衽電*有效,復(fù)位時(shí)時(shí)鐘都低outputregclk_25M,用于AD采棒的頻率outputregclk_dps9600用于串口逋信的頻率):這里模塊名字設(shè)置為AD_2CLK,旨在表明輸出兩個(gè)CLK,用來AD采樣和串口通信。inputclk為系統(tǒng)時(shí)鐘50Mhz。Inputreset_n為系統(tǒng)復(fù)位,低電平有效。Outputregclk_25M為AD采樣時(shí)鐘,之前做過說明

8、。Outputregdps9600為輸出給uart模塊的時(shí)鐘。ENCON模塊:racdulead_ncon(inputwr_c1k,寫時(shí)鐘輸入inputrd_clk,/7讀肝鐘輸入inputrst_n,真位信號(hào),低電平有效outputregwren,寫使能輸出outputreg8:0wraddress,寫地址輸出outputregrden,讀使能輸出outputreg8:0rdaddress,/讀地址輸出outputrugwrsig門串發(fā)送信號(hào)輸出);這個(gè)模塊是整個(gè)程序的控制核心,下面介紹端口說明。Inputwr_clk為寫時(shí)鐘輸入,這里我們接的當(dāng)然就是AD寫入的時(shí)鐘CLK_25M,這里的寫速

9、率要和采樣速率匹配才可以保證采樣再存儲(chǔ)的正確性。Inputrd_clk為讀時(shí)鐘輸入,這里接dps9600,符合串口協(xié)議。Inputrst_n為系統(tǒng)復(fù)位,低電平有效。Outputregwren為寫使能輸出,當(dāng)wren為高時(shí),寫有效,即表明AD的八位數(shù)字信號(hào)寫進(jìn)RAMoOutputreg8:0wraddress為寫地址,寫地址在寫時(shí)鐘下降沿完成加一,保證每次寫完后都是新的地址存儲(chǔ)數(shù)據(jù)保證了ram能夠存儲(chǔ)512個(gè)正確數(shù)據(jù)。Outputregrden為讀使能輸出,當(dāng)rden為高時(shí),讀有效,即表明RAM里面對(duì)應(yīng)地址的信號(hào)讀出。Outputreg8:0rdaddress為讀地址,在每個(gè)讀信號(hào)的下降沿完成加

10、一,保證每次讀完一個(gè)數(shù)據(jù)后地址指向新的內(nèi)容,保證讀出的512個(gè)數(shù)據(jù)的正確性。Outputregwrsig為發(fā)送給串口的發(fā)送信號(hào),上升沿有效。每一上升沿使串口開始發(fā)送送到串口的數(shù)據(jù)給PCoRAM模塊:mocule ram( input inputinput uren, input rden, inputinputinput 8:0.output 7:0.wr_clk,采集時(shí)鐘rd_clk,串口逋訊時(shí)專"寫使能讀使能7:0datain,采集數(shù)據(jù)入_8:0lwraddress,寫地址rdaddress,讀地址dataoutInputwr_clk為RAM的寫時(shí)鐘,上升沿有效在相應(yīng)地址寫入數(shù)據(jù)

11、。Inputwren為RAM寫使能信號(hào),高電平有效,有效時(shí)配合wraddress和wrclk進(jìn)行寫操作Input8:0wraddress為寫地址,在每個(gè)wr時(shí)鐘下降沿完成加一操作,確保每次寫入的地址正確性。Inputrd_clk為RAM的讀時(shí)鐘,上升沿有效,在相應(yīng)的地址讀出數(shù)據(jù)。Input8:0rdaddress為讀地址,同寫地址功能。Inputrden,同wren。Outputdataout是讀出的數(shù)據(jù),送至UART模塊通信給PCUART模塊:modulead_uart(inputelk,時(shí)鐘inputrst_n,/復(fù)位input7:0datain,/數(shù)據(jù)入inputwrsig,output

12、-regidle"/是否空閑高為線路忙,低為線路空閑outputtx);Inputclk為CLK模塊的clk_dps9600,用于配合這個(gè)模塊打成波特率為9600的串口輸出。Input 7:0datain接RAM模塊的數(shù)據(jù)輸出Inputrst_n為復(fù)位,低電平有效。Inputwrsig上升沿有效,開啟用口發(fā)送,接ENCON模塊wrsig。Outputregidle為串口工作狀態(tài)說明,為高表明正在發(fā)送數(shù)據(jù)。Outputtx為發(fā)送的串口信號(hào),接至上面的串口通訊外設(shè)模塊RXD介紹完所有模塊后,現(xiàn)在給出仿真波形以及testbench的設(shè)置。TOP程序以及子程序調(diào)用:1 g9151617IS

13、19202223 W425262723293。313233343s363733394041444546 4?4事49ElrnjOdulE1EEIfwireclfcdpsSfiOO;田ad2CKuL(wirewren;wire:jvraddress;w2工匕二;.:dadd工u白臺(tái);wirer-den;wirewrsxg;adenconu2,v_clk(elk_25M>,寫時(shí)鐘輸入.xd_clk(clk:_dps9fi00)F/讀時(shí)鐘輸入工區(qū)t_n(工呂jn),,J復(fù)位信骨,低電平有效.wren(wren>,/寫使能輸出.wraddresa(vraddresat/寫地址輸出,iden

14、(rden1,讀使熊輸出.zrdaddress(XdaddX-essf/讀地址輸出,wi:3ig(wT5i9)/7串口電送信管輸出wire dataau.t;EJrairtu3(.vt:elk(elk2SMJ,rd_clfc(clk:_dp5960Q)f.vren(wren,.xden(rden.dataiatdataln)«.wraddress(wraddress)呆簟時(shí)鐘“串口通訊時(shí)鐘“萼?!白x便能采集敷據(jù)人,行地址,xdaddresfidaoldres,/讀地址.dataout口u七)Haduarru4(.elk(elkdps96001r/UART?時(shí)鐘,柒用c:lkdps96

15、00,ifiAD之CLK模塊.Tat;_n(rsv_n)f/7復(fù)位信號(hào)-datain(dataoutj口D送過來的魏字信旨twrsigwrsig),發(fā)送命令,上升沿有效,icileff"線路狀態(tài)指示,高忙,低閑登讀皴提信號(hào)L);edmoduleTestbench*tinijescale二ns/二psruoduleTESTwigtat();/consvanta/generaJLpurposeregistersregeaclivec;/tuwtvccxqjjuput工。gNmu丁亨工藝qelk;regxstn;工ugf:.daraxn;/wixswirewireclk_25M;Z/ass

16、zgn5T.at;eiiieiL.3ifany)TEST11(.clk(clk!,*rflC_n(T3T_n)t.darain(datem),C1K_25M(C1X_25M),.vx(tx!_)二initialEJbeQin匚:IX口;rstn=0;danain=1'd二二一:#二0二i5t_n1;Lendalwayst10beginclk=clkjLendendraodule對(duì)應(yīng)的仿真波形:可見,CLK25M輸出正確可見,tx的輸出也滿足設(shè)計(jì)的10101010B然后驗(yàn)證每個(gè)位的時(shí)間,大概為104us,滿足通信要求仿真通過。2.Matlab處理程序介紹:程序:clccleardata=

17、textreadCC:UsersacerDesktopRecl70923163333,txt1;ap=hex2dec(data);plot(ap):串口調(diào)試小助手軟件以及工作界面: Com Avista nt.exe2017/1/1421:50起用程序186KB看空接收區(qū)接收區(qū)停it顯示*自動(dòng)清空斤十六進(jìn)制顯示接收文件.保存數(shù)據(jù)|更改路徑|CICOMDATN009999S93399S99393明369399睥9999能963699因99即999899999899999838比399698比399998如9993S99399S89999S899999999999998蜘9999邪加9899S95

18、899SS5899S9999999998為999999為999999989998鴕99999899999999999fi9099999fi90998781SO8090SO8090SO8090aoSO808080608090806060ao6060ao6060ao6060aoao6060aoao6060aoao6060aoeoGOao60GO060GOao806030303D6030303D606080eoSO80eoSO80eoSO8080eoSO8C30eoSO8C30eo8080eo8080eo8080eo8080soeo808C90eo808090eo60006000929093兜999

19、9999999999699999996999999圈9999999999999999983899999E9899999998999339999990999999993993993999939939999399羽9H9399999399999399羽999399融999999融999999999999999899999999999999999899999S9999gg99©99998S9939®808131soeo808C?Feo808C80eo8080eoeo8Ceoeo0099999999999999999999999999999999999999999999999999

20、9999999999999999933999999999997C81明606080ao606080ao6060ao60aoao60aoao60aoao3060GOSO3060GOSO30608080608080608080608080806080SO306080SO3D60i6080808080808080808080soeo808C80eo808C80eo8080eoeo8Ceoeo8Ceoeo8C806080808060808080608080ao8080ao8080ao80808080809C9898999999gg999999999999999999999999999999999999

21、999999清空重鎮(zhèn)發(fā)法區(qū)F自動(dòng)發(fā)送手動(dòng)發(fā)送|r十六遏制發(fā)陞自動(dòng)發(fā)送聊向5碎;選擇發(fā)送文件11還沒有選擇文件然文件洞ISTATUS:C0H3OptMd960UNontB1的:905g:U計(jì)數(shù)清零.退出這個(gè)程序提取串口通信至PC的數(shù)據(jù)(經(jīng)由串口調(diào)試小助手輸出),然后將十六進(jìn)制轉(zhuǎn)換成十進(jìn)制最后繪圖輸出。五、關(guān)鍵問題分析處理我們小組在代碼編寫編譯過程、仿真過程以及上板過程中出了不少錯(cuò)誤,但最終都及時(shí)糾正了。在這個(gè)發(fā)現(xiàn)問題與解決問題的兩周里,我們小組對(duì)出現(xiàn)的部分問題做了分析與記錄有些還自行設(shè)計(jì)了實(shí)驗(yàn)驗(yàn)證。如下列出了一些關(guān)鍵問題的分析處理。I:模塊的購(gòu)置問題與電平是否兼容的處理我們的小項(xiàng)目設(shè)計(jì)到兩個(gè)外設(shè)

22、,一個(gè)是AD轉(zhuǎn)換模塊一個(gè)是串口轉(zhuǎn)RS232通信模塊。在購(gòu)置模塊時(shí)需要考慮引腳電平是否與FPGA電平(我們這里使用的是LVTTL3.3V引腳電平)兼容,所需要的引腳空間Basys2是否有足夠的提供,還需要考慮成本以及模塊的時(shí)序問題。本實(shí)驗(yàn)過程中,我們購(gòu)置了兼容LVTTL八位AD轉(zhuǎn)換模塊和兼容TTL的串口通信模塊。成本很低,串口模塊加上AD模塊在幾十塊以內(nèi)。網(wǎng)購(gòu)的模塊到了之后,我們開始測(cè)試各模塊的電平值。經(jīng)測(cè)試,AD輸出高3.34V低0V,符合LVTTL3.3V電平邏輯經(jīng)測(cè)試,串口模塊txd輸出高5v,低0V?;谶@里,我們通過串口txd接自己的rxd實(shí)現(xiàn)了串口模塊是否損壞的測(cè)試,測(cè)試通過,串口是

23、好的。由于在測(cè)量電平時(shí),我們沒有完成上板工作,所以我們只好假設(shè)串口模塊rxd需要接TTL5V邏輯才可正常工作,因此我們組利用兩個(gè)三極管搭建了一個(gè)電平轉(zhuǎn)換電路,實(shí)現(xiàn)了電平轉(zhuǎn)換。其實(shí)到后面的上板工作之后,發(fā)現(xiàn)3.3V的輸出接到RXD,也能正常工作。n:源代碼的借鑒與部分時(shí)序代碼設(shè)計(jì)問題我們程序需要Verilog串口通信模塊,為了節(jié)省時(shí)間,我們?cè)诰W(wǎng)上尋找了若干串口通信例程,在掌握了例程的原理后,我們自行又編寫了自己的串口模塊和分時(shí)模塊還有存儲(chǔ)模塊以及時(shí)序控制模塊。其中,最為困難的是采集速率和通信速率不匹配怎么解決的問題。我們采取利用ram存儲(chǔ)并且提取數(shù)據(jù)以及設(shè)計(jì)了合理的存儲(chǔ)提取時(shí)序控制模塊解決這個(gè)問

24、題。然而其中困難重重,由于網(wǎng)上資源有限,對(duì)ISEramip核理解不夠,我們花了很多時(shí)間思考怎么實(shí)現(xiàn)這個(gè)速率匹配。最終利用ram語(yǔ)句構(gòu)成的模塊實(shí)現(xiàn)了ram存取功能。之后時(shí)序控制也順利設(shè)計(jì)出來。m:分模塊調(diào)試在完成了各個(gè)模塊的基本書寫后,分模塊調(diào)試是必須的,不然當(dāng)各個(gè)模塊整合到主程序之后除了問題,都不好分析。這里的調(diào)試當(dāng)然還是基于testbench的仿真調(diào)試。iv:子程序直接的銜接在主程序里調(diào)用子程序的過程中,我們出現(xiàn)了變量格式不匹配的問題,即上個(gè)子程序的輸出需要用wire型去構(gòu)成下個(gè)子程序的輸入。而最開始,缺少經(jīng)驗(yàn)的我們用的是reg型變量來銜接子程序。仔細(xì)想想兩個(gè)變量類型就知道,子程序就當(dāng)作是一

25、個(gè)黑盒子,只有輸入輸出,輸出的變量類型就是wire型。在這個(gè)變量類型的選擇上,我們組在這里跌了大坑,不過最終還是成功解決。順利完成編譯工作。v:主程序里子程序的分塊調(diào)試完成編譯工作之后,并不代表仿真就可以通過。我們組就遇到了這樣的問題。我們?cè)趖estbench里設(shè)計(jì)了7:0datain的激勵(lì)輸入,結(jié)果得到的tx輸出既有高阻態(tài)也有紅線不確定值輸出。簡(jiǎn)而言之,仿真出錯(cuò)。所以我們開始在主程序里面執(zhí)行程序的分塊調(diào)試??紤]到我們程序的時(shí)序邏輯。我們由輸入一個(gè)個(gè)分塊仿真一直到最后輸出。即先在主程序仿真CLK模塊,注釋掉其他模塊并做做適當(dāng)修改(比如在主module里面添加時(shí)鐘輸出),驗(yàn)證好CLK模塊之后,再

26、在主程序里面仿真CLK+ENCON模塊,然后再方向很CLK+ENCON+RAM模塊,最后在全部仿真。經(jīng)過上述主程序里的分塊調(diào)試,我們成功完成了軟件仿真工作。VI:串口調(diào)試軟件的熟悉我們的項(xiàng)目需要利用到一個(gè)軟件,串口調(diào)試小助手。這個(gè)軟件我們不是很熟悉,我們自己?jiǎn)为?dú)設(shè)計(jì)了一個(gè)串口通信工程,并且利用我們購(gòu)置的串口通信模塊完成這個(gè)熟悉過程。主要是通過修改數(shù)據(jù)長(zhǎng)度、校驗(yàn)選擇、停止位長(zhǎng)度,來熟悉他們之間的通信協(xié)議。最終大家都對(duì)這個(gè)軟件的應(yīng)用有了深入了解。W:上板調(diào)試我們組花了兩個(gè)下午和三個(gè)晚上在南一樓完成調(diào)試工作,期間出了諸多問題。但是我們冷靜的分析問題,并且根據(jù)問題的現(xiàn)象給出做出假設(shè),并給出試探性的解決

27、方案。這樣一步一步,大概處理了七八個(gè)問題之后,我們上板終于通過了。Vffl:最重要的數(shù)字地共地問題這是本次上板實(shí)驗(yàn)過程中,出現(xiàn)的最大的問題!為什么要共地?因?yàn)槲覀冃枰粋€(gè)標(biāo)準(zhǔn)去衡量數(shù)字電路中的高電平到底有多高。我們實(shí)驗(yàn)有三個(gè)地:BASYS2FPGAPMODio地、串口模塊地、AD模塊地(也就是給AD模塊供電的電源地,這里使用的是實(shí)驗(yàn)室的電源)。第一個(gè)晚上的調(diào)試過程中,PMOD地和串口模塊地沒接,僅僅有一個(gè)AD地,結(jié)果導(dǎo)致PC上串口調(diào)試小助手只能一次接受到512個(gè)00數(shù)據(jù)(這里我們?cè)O(shè)計(jì)的一次采集512個(gè)數(shù)據(jù)),表明我們的軟件模塊并沒出錯(cuò),出錯(cuò)的是硬件連線。我們冷靜分析,在第二個(gè)晚上的實(shí)驗(yàn)中,把P

28、MOD地與AD地共在一起,發(fā)現(xiàn)不能接受到512個(gè)數(shù)據(jù)了,只能隨機(jī)的不可控的接到諸如FFFE這樣的錯(cuò)誤數(shù)據(jù),而且只能接收到一兩個(gè)數(shù)據(jù)。出了這樣的問題,大家都手足無措。第三天晚上也就是項(xiàng)目提交的前一天晚上,我們把三個(gè)地全部接在一起。興奮的發(fā)現(xiàn),通過!可見,共地在數(shù)字電路中是多么重要。六、結(jié)果與分析如下是在實(shí)驗(yàn)室驗(yàn)收時(shí)的一張圖:寫在前面:本實(shí)驗(yàn)采樣時(shí)鐘25M,AD是八位而且輸出幅度可調(diào),每次采樣512個(gè)數(shù)據(jù)。故每次采樣的總時(shí)長(zhǎng):512*40ns20000ns=20us,f=50khz也就是說信號(hào)為50khz能夠采集一個(gè)周期,信號(hào)為100KHz能夠采集兩個(gè)周期測(cè)量結(jié)果:sin50KHZ:squ50KH

29、Z:Tri50KHZ4figure 1Xfigure1文件(D箱CD查看也插入工具桌面窗口也褶助回日Q端0白要/總IU圖IR2001B0160140120100B0604020001002003004OQ500600文件(D箱CD查看也插入工具桌面窗口也褶助國(guó))口呂Q端41、白蒙/-01。圖|,R200iao160140120100BO6040200010020034)040Q500600Squ150KHZTri150KHZsin500KHZ:SinIMHZ:Sin5MHZ:結(jié)果分析:信號(hào)源VPP都是2.9V,基于上面的AD轉(zhuǎn)換的算法介紹,我們簡(jiǎn)單計(jì)算一下每個(gè)波形最高點(diǎn)對(duì)應(yīng)的十進(jìn)制數(shù):(2.9

30、/5+1)/2*255=201而我們采樣出來的一般在180左右。為什么?因?yàn)槲覀冋f過,這個(gè)AD采樣器有控制采樣輸出幅度的功能。如果要實(shí)現(xiàn)準(zhǔn)確電壓復(fù)現(xiàn),可以再通過一個(gè)轉(zhuǎn)換算法即可。根據(jù)上述三種波形以及不同頻率的波形展示,可以看出,我們基本上完成了項(xiàng)目功能。但是在5M赫茲時(shí),輸出波形躁動(dòng)很大,研究發(fā)現(xiàn),是因?yàn)樾盘?hào)發(fā)生器的穩(wěn)定性原因?qū)е隆?實(shí)驗(yàn)室信號(hào)發(fā)生器在5Mhz時(shí)穩(wěn)定性很低)七、總結(jié)經(jīng)過本次小項(xiàng)目,我們大家經(jīng)歷了很多。從立項(xiàng)到方案設(shè)計(jì)、模塊購(gòu)置、代碼書寫調(diào)試、仿真調(diào)試上板測(cè)試等等,大家一起在宿舍與南一實(shí)驗(yàn)室直接奔波多次,才完成這個(gè)項(xiàng)目,其中的辛苦不易溢于言表。這個(gè)項(xiàng)目,網(wǎng)上基本上找不到完整源代碼

31、,所以我們自行設(shè)計(jì)了除了串口之外的全部代碼,這很好的鍛煉了我們的應(yīng)用知識(shí)的能力。在項(xiàng)目工作中,我們知道了發(fā)現(xiàn)問題的重要性,清楚的認(rèn)識(shí)到如何設(shè)計(jì)實(shí)驗(yàn)如何設(shè)計(jì)方案卻解決問題更為重要。我們團(tuán)結(jié)協(xié)作大家一起燒腦思考的奮斗經(jīng)歷更是難忘的。附錄:源代碼/moduleTEST(inputclk,/50Minputrst_n,/復(fù)位input7:0datain,/AD輸入outputclk_25M,outputtx/串口);wireclk_dps9600;ad_2clku1(.clk(clk),/系統(tǒng)時(shí)鐘50Mhz.reset_n(rst_n),/復(fù)位,低電平有效,復(fù)位時(shí)時(shí)鐘都低.clk_25M(clk_25

32、M),/用于AD采樣的頻率.clk_dps9600(clk_dps9600)/用于串口通信的頻率);wirewren;wire8:0wraddress;wire8:0rdaddress;wirerden;wirewrsig;ad_enconu2(.wr_clk(clk_25M),/寫時(shí)鐘輸入.rd_clk(clk_dps9600),/讀時(shí)鐘輸入.rst_n(rst_n),/復(fù)位信號(hào),低電平有效.wren(wren),/寫使能輸出.wraddress(wraddress),/寫地址輸出.rden(rden),/讀使能輸出.rdaddress(rdaddress),/讀地址輸出.wrsig(wrs

33、ig) / 串口發(fā)送信號(hào)輸出/ 采集時(shí)鐘/ 串口通訊時(shí)鐘/ 寫使能/ 讀使能/ 采集數(shù)據(jù)入/ 寫地址/ 讀地址模塊.clk(clk_dps9600), /UART時(shí)鐘,采用 clk_dps9600, 調(diào)用 AD_2CLK);wire7:0dataout;ramu3(.wr_clk(clk_25M),.rd_clk(clk_dps9600),.wren(wren),.rden(rden),.datain(datain),.wraddress(wraddress),.rdaddress(rdaddress),.dataout(dataout);ad_uartu4(.rst_n(rst_n),/復(fù)位

34、信號(hào).datain(dataout),/AD送過來的數(shù)字信號(hào).wrsig(wrsig),/發(fā)送命令,上升沿有效.idle(),/線路狀態(tài)指示,高忙,低閑.tx(tx)/發(fā)送數(shù)據(jù)信號(hào));endmodule/modulead_2clk(inputclk,/系統(tǒng)時(shí)鐘50Mhzinputreset_n,/復(fù)位,低電平有效,復(fù)位時(shí)時(shí)鐘都低outputregclk_25M,/用于AD采樣的頻率outputregclk_dps9600/用于串口通信的頻率);reg1:0cnt_1;reg15:0cnt_2;/2分頻always(posedgeclkornegedgereset_n)beginif(!rese

35、t_n)begincnt_1<=2'b0;clk_25M<=1'b0;endelsebeginif(cnt_1=2'd0)beginclk_25M<=1'b1;cnt_1<=cnt_1+2'd1;end/1-21elseif(cnt_1=2'd1)beginclk_25M<=1'd0;cnt_1<=2'b0;end/03-0elsecnt_1<=cnt_1+1'b1;endendalways(posedgeclkornegedgereset_n)beginif(!reset_n)b

36、egincnt_2<=2'b0;clk_dps9600<=1'b0;endelsebeginif(cnt_2=16'd162)beginclk_dps9600<=1'b1;cnt_2<=cnt_2+16'd1;endelseif(cnt_2=16'd325)beginclk_dps9600<=1'b0;cnt_2<=16'd0;endelsecnt_2<=cnt_2+16'd1;endendendmodule/modulead_encon(inputwr_clk,/寫時(shí)鐘輸入inp

37、utrd_clk,/讀時(shí)鐘輸入inputrst_n,/復(fù)位信號(hào),低電平有效outputregwren,/寫使能輸出outputreg8:0wraddress,/寫地址輸出outputregrden,/讀使能輸出outputreg8:0rdaddress,/讀地址輸出outputregwrsig/串口發(fā)送信號(hào)輸出);/計(jì)數(shù)器reg10:0cnt;/大計(jì)數(shù)器reg10:0wr_cnt;/分-讀計(jì)數(shù)器reg10:0rd_cnt;/分-寫計(jì)數(shù)器/計(jì)數(shù)器寫部分always(posedgewr_clkornegedgerst_n)/這部分先按自然時(shí)間累增beginif(!rst_n)wr_cnt<=

38、11'd0;elseif(wr_cnt<11'd1024)wr_cnt<=wr_cnt+11'd1;elsewr_cnt<=wr_cnt;end/計(jì)數(shù)器讀部分使寫計(jì)數(shù)器在讀計(jì)數(shù)器533后,完成自加/完成wrsig需要再來個(gè)計(jì)數(shù)器reg7:0wrsig_cnt;regflag;always(posedgerd_clkornegedgerst_n)beginif(!rst_n)beginrd_cnt<=11'd533;wrsig_cnt<=8'd0;endelseif(rd_cnt=11'd1045)rd_cnt<

39、=rd_cnt;elseif(wrsig_cnt=8'd255)begin/等待讀出操作完成后,繼續(xù)下一次讀,255是一個(gè)比較合理的數(shù)rd_cnt<=rd_cnt+11'd1;wrsig_cnt<=8'd0;flag<=1'd1;endelsebeginflag<=1'd0;wrsig_cnt<=wrsig_cnt+8'd1;end/計(jì)數(shù)器分配always(*)beginif(!rst_n)cnt<=11'd0;elseif(wr_cnt<=11'd533)cnt<=wr_cnt;e

40、lsecnt<=rd_cnt;end/寫使能always(posedgewr_clkornegedgerst_n)beginif(!rst_n)wren<=1'd0;elseif(cnt<11'd11)/0-10=0wren<=1'b0;elseif(cnt>11'd10&&cnt<11'd523)/11-522=1wren<=1'b1;elseif(cnt>11'd522)/523-=0wren<=1'b0;end/讀使能always(posedgerd_cl

41、kornegedgerst_n)beginif(!rst_n)rden<=1'd0;elseif(cnt<=11'd533)/0-533=0rden<=1'b0;elseif(cnt<11'd1045)/534-1045=1rden<=1'b1;else/1046-=0rden<=1'b0;end/寫地址,在寫信號(hào)激發(fā)時(shí),每個(gè)時(shí)鐘下降沿加一,初始定位0,復(fù)位后也為0;always(negedgewr_clkornegedgerst_n)beginif(!rst_n)wraddress<=9'd0;

42、elseif(wren)wraddress<=wraddress+9'd1;elsewraddress<=wraddress;end/讀地址和串口發(fā)送信號(hào),在讀信號(hào)激發(fā)時(shí),而且falg信號(hào)出現(xiàn)時(shí),地址加一,信號(hào)為1初始定位0,復(fù)位后也為0;always(negedgerd_clkornegedgerst_n)beginif(!rst_n)rdaddress<=9'd0;elseif(rden&&flag)beginrdaddress<=rdaddress+9'd1;wrsig<=1'd1;endelsebeginrd

43、address<=rdaddress;wrsig<=1'd0;endendendmodule/moduleram(inputwr_clk,/采集時(shí)鐘inputrd_clk,/串口通訊時(shí)鐘inputwren,/寫使能inputrden,/讀使能input7:0datain,/采集數(shù)據(jù)入input8:0wraddress,/寫地址input8:0rdaddress,/讀地址output7:0dataout);reg7:0RAM2*9:0;reg8:0rdaddress_reg;always(posedgewr_clk)beginif(wren)beginRAMwraddress

44、<=datain;endendalways(posedgerd_clk)beginif(rden)beginrdaddress_reg<=rdaddress;endendassigndataout=RAMrdaddress_reg;endmodule/modulead_uart(inputclk,/時(shí)鐘inputrst_n,/復(fù)位input7:0datain,/數(shù)據(jù)入inputwrsig,/outputregidle,/是否空閑高為線路忙,低為線路空閑outputtx);regsend;/數(shù)據(jù)發(fā)送什么的,高電平有效regwrsigbuf,wrsigrise;regpresult;/

45、1代表八個(gè)數(shù)據(jù)里面1的個(gè)數(shù)為奇數(shù),0代表為偶數(shù)reg7:0cnt;/16時(shí)鐘一個(gè)二進(jìn)制,1+8+1+1=168parameterparitymode=1'b0;/檢測(cè)發(fā)送命令的上升沿/always(posedgeclk)beginwrsigbuf<=wrsig;/Q(N)與Q(N+1)wrsigrise<=(wrsigbuf)&wrsig;end/啟動(dòng)串口發(fā)送程序/always(posedgeclk)beginif(wrsigrise&(idle)/如果發(fā)送命令有效,而且線路空閑,那么啟動(dòng)新的數(shù)據(jù)發(fā)送進(jìn)程send=1'd1;elseif(cnt=16'd168)/一幀數(shù)據(jù)發(fā)送完畢,(1+8+1+0.5)x16=168send=1'd0;end/串口發(fā)送程序,16時(shí)鐘1bit數(shù)據(jù)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論