版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 計(jì)算機(jī)課程設(shè)計(jì)論文</b></p><p> 題 目: 基于FPGA的漏磁檢測電路設(shè)計(jì)</p><p> 學(xué) 院: 測試與光電工程學(xué)院 </p><p> 專業(yè)名稱: 電子科學(xué)與技術(shù)</p><p>
2、班級學(xué)號: </p><p> 學(xué)生姓名: </p><p> 指導(dǎo)教師: </p><p><b> 二零一二年六月 </b></p><p> 基于FPGA漏磁檢測電路設(shè)計(jì)</
3、p><p> 摘要: 鐵磁材料缺陷的漏磁檢測是一種有效的無損檢測技術(shù),能夠在不影響和破壞材料的屬性的情況下,完成對設(shè)備和材料存在的缺陷檢測。它在提高生產(chǎn)安全性、防止事故的發(fā)生、減小經(jīng)濟(jì)損失中發(fā)揮非常重要的作用。傳統(tǒng)的集成電路設(shè)計(jì)中,傳感器的控制通常由MCU(以C51單片機(jī)為代表)來完成。以往的傳感器,其精度比較低,采樣周期較長,MCU尚且可以勝任。但是隨著對檢測速度、精度的要求越來越高,檢測過程會產(chǎn)生非常大的數(shù)據(jù),
4、處理和保存這些數(shù)據(jù)就超出了MCU的能力,因此很有必要對檢測技術(shù)進(jìn)行改進(jìn)。</p><p> FPGA(Field-Programmable Gate Array現(xiàn)場可編程門陣列)具有高速、高集成度和在線可編程等優(yōu)點(diǎn),在設(shè)計(jì)過程中具有極大的靈活性和可靠性,本設(shè)計(jì)中采用Altera 公司的Cyclone ii系列EP2C5T144C8N。</p><p> 本次設(shè)計(jì)根據(jù)漏磁檢測原理,設(shè)計(jì)了
5、基于FPGA的漏磁檢測硬件電路控制模塊,克服傳統(tǒng)的以MCU作為控制器帶來的采樣速度和效率上的瓶頸。這些模塊主要包括磁場信號采集、通道選擇、模數(shù)轉(zhuǎn)換、串口通信等4個模塊。其中磁場信號采集利用霍爾傳感器UGN3503,通道選擇用CD4052BE實(shí)現(xiàn),模數(shù)轉(zhuǎn)換用ADC0809實(shí)現(xiàn);串口通信模塊實(shí)現(xiàn)FPGA與PC機(jī)通信。在設(shè)計(jì)過程中,用VHDL語言來編寫總體控制部分實(shí)現(xiàn)對各模塊的控制,包括控制通道選擇的地址信號、控制模數(shù)轉(zhuǎn)換的開始與停止及控制F
6、PGA的串口發(fā)送。從QUARTUS II軟件仿真結(jié)果可以看出,F(xiàn)PGA作為總體控制模塊,能夠?qū)崿F(xiàn)數(shù)據(jù)的實(shí)時(shí)采集,體現(xiàn)了其對外圍電路的良好控制性。從調(diào)試結(jié)果可以得出,基于FPGA的漏磁檢測系統(tǒng)及控制具備相當(dāng)?shù)目尚行约皩?shí)用性。</p><p> 關(guān)鍵字:漏磁檢測 FPGA 信號采集 串口通信</p><p><b> 目 錄</b></p&g
7、t;<p><b> 1 引言3</b></p><p> 2 系統(tǒng)的軟件設(shè)計(jì)3</p><p> 2.1 設(shè)計(jì)平臺Quartus II4</p><p> 2.2 通道選擇控制模塊4</p><p> 2.3 A/D轉(zhuǎn)換控制模塊5</p><p>
8、 2.4 串口通信模塊6</p><p> 2.5 分頻與倍頻模塊8</p><p> 3 仿真與調(diào)試9</p><p> 3.1 FPGA調(diào)試簡介9</p><p> 3.2 通道選擇控制模塊仿真及調(diào)試9</p><p> 3.3 A/D轉(zhuǎn)換控制模塊仿真及調(diào)試10</p>
9、;<p> 3.4 串口通信模塊仿真及調(diào)試11</p><p> 3.5 頂層設(shè)計(jì)仿真及調(diào)試12</p><p> 4 設(shè)計(jì)結(jié)果與總結(jié)13</p><p> 4.1 結(jié)果與總結(jié)13</p><p><b> 參考文獻(xiàn)14</b></p><p><
10、b> 致謝14</b></p><p><b> 1.引言</b></p><p> 管道作為一種經(jīng)濟(jì)、高效而安全的物料傳輸手段,在石油化工及天然氣等產(chǎn)業(yè)中具有不可替代的作用。但鐵磁性油氣輸送管道因長時(shí)間的腐蝕、磨損及意外的機(jī)械損傷等原因會形成機(jī)械裂紋和腐蝕穿孔等各種缺陷。如果不能及時(shí)發(fā)現(xiàn)、修理這些缺陷,將導(dǎo)致輸送效率降低、輸送介質(zhì)泄露等惡性
11、事故。因此研究高效、經(jīng)濟(jì)可行的管道長距離無損檢測技術(shù)及研發(fā)高精度在線管道漏磁檢測系統(tǒng)具有極大的現(xiàn)實(shí)意義和經(jīng)濟(jì)效益。 </p><p> 管道檢測技術(shù)的研究已有近四十年歷史,它是一個涉及多學(xué)科領(lǐng)域的研究項(xiàng)目,具有大量的理論研究問題和大量的工程技術(shù)問題。六十年代初,美英率先將無損檢測技術(shù)(NDT)應(yīng)用于清管器(PIG)上,將原來用于清管作業(yè)的PIG改進(jìn)為具有信息采集、處理、存儲等功能的智能檢測PIG。隨后,各國
12、先后研制出漏磁型、超聲型、渦流型的智能檢測PIG。目前應(yīng)用于管道無損檢測的方法包括有超聲檢測、射線檢測、渦流檢測、漏磁檢測及滲透檢測,這五種方法就是人們常說的五大常規(guī)無損檢測技術(shù)。除此以外,還包括有微波檢測技術(shù)、激光檢測技術(shù)、紅外檢測技術(shù)等非常規(guī)檢測手段,在這些方法中漏磁檢測技術(shù)是應(yīng)用最廣泛、技術(shù)最成熟的鐵磁性管道缺陷檢測技術(shù),它適于多種傳輸介質(zhì),對鐵損失等最常見的管道缺陷有非常好的檢測效果。</p><p>&
13、lt;b> 2 系統(tǒng)的軟件設(shè)計(jì)</b></p><p> 2.1 設(shè)計(jì)平臺Quartus II</p><p> FPGA中軟件設(shè)計(jì)的平臺是Altera公司的Quartus II開發(fā)系統(tǒng),Quartus II是綜合性的PLD開發(fā)軟件,支持原理圖,各種硬件描述語言以及多種設(shè)計(jì)輸入形式,自身帶有綜合器和仿真器,可以完成從硬件設(shè)計(jì),軟件設(shè)計(jì),仿真到硬件配置的完整設(shè)計(jì)流程。
14、Quartus II同時(shí)支持Altera公司的IP核,包含了各種宏功能模塊庫,使用戶可以直接利用已經(jīng)經(jīng)過編譯的成熟模塊,如本設(shè)計(jì)中用到的雙口RAM模塊,簡化了設(shè)計(jì)中的復(fù)雜性,并且可以縮短設(shè)計(jì)的周期。Quartus II的設(shè)計(jì)輸入方法有很多種,可以靈活的運(yùn)用,主要方法有三種,簡要介紹如下:第一種方法就是原理圖輸入法,這種方法是最為直接的方法,由用Quartus II提供的各種原理圖庫進(jìn)行設(shè)計(jì)輸入。為提高效率,采用這種方法輸入的時(shí)候應(yīng)采用自
15、頂向下邏輯分塊,即把大規(guī)模的電路劃分成若干小塊的方法。一般如果對系統(tǒng)了解很深,并且系統(tǒng)速率的要求較高,或這系統(tǒng)中如果時(shí)間特性要求較高,就可以采用這種方法。原理圖輸入的缺點(diǎn)雖然仿真容易但是效率很低,但是這樣的方法便于信號觀察以及電路的調(diào)整,看起來也很直觀。第二種方法就是硬件描述語言輸入:Quartus II</p><p> 2.2通道選擇控制模塊</p><p> 本次設(shè)計(jì)的漏磁檢測系
16、統(tǒng)在實(shí)際應(yīng)用時(shí)運(yùn)用到的傳感器量很大,管道軸向和徑向一般都要放置傳感器。比如說100個傳感器的話我們就可以用8個十六選一和1個八選一的數(shù)據(jù)選擇器,這樣就需要通道選擇控制信號去與這些芯片的地址信號相連,從而選中100個傳感器。但是考慮到實(shí)驗(yàn)室條件和成本,我只用了四個霍爾傳感器,但還是需要通道選擇控制模塊去選中傳感器。系統(tǒng)每隔0.2ms采樣一個傳感器,所以通道選擇模塊輸出的地址信號的周期為0.2ms(頻率為5khz)。而系統(tǒng)用到的EP2C5T
17、144C8芯片的系統(tǒng)時(shí)鐘為50Mhz,因此需要系統(tǒng)將時(shí)鐘分頻處理。最終得到了實(shí)現(xiàn)目標(biāo)要求的代碼。部分代碼如下所示:</p><p> --designed by G_XW the address block</p><p> entity address is </p><p><b> port(</b></p>&l
18、t;p> clk:in std_logic;</p><p> address_signal:out std_logic_vector(1 downto 0));</p><p><b> end ;</b></p><p> architecture one of address is </p><p>
19、<b> begin</b></p><p> process(clk)</p><p> variable q :integer range 0 to 3;</p><p><b> begin</b></p><p> if clk'event and clk='1
20、39; then </p><p> if(q=3) then </p><p><b> q:=0;</b></p><p> else q:=q+1;</p><p><b> end if;</b></p><p><b> end if;</
21、b></p><p> address_signal<=conv_std_logic_vector(q,2);</p><p> end process;</p><p> 2.3 A/D轉(zhuǎn)換控制模塊</p><p> ADC0809采樣原理比較簡單:首先我們給START一個有效的上升沿使0809復(fù)位,接著給它一個下降沿,
22、隨后狀態(tài)信號EOC隨即變成低電平。此時(shí)、進(jìn)入轉(zhuǎn)換狀態(tài),周期約為100µs。轉(zhuǎn)換結(jié)束后,EOC變?yōu)楦唠娖?,指示A/D轉(zhuǎn)換結(jié)束,結(jié)果數(shù)據(jù)已存入鎖存器,此時(shí)外部可以控制OE由低電平變?yōu)楦唠娖剑M(jìn)入有效輸出階段。下圖是ADC0809的采樣狀態(tài)圖。</p><p> 圖3.1 ADC0809采樣狀態(tài)圖</p><p> 由狀態(tài)圖我們可以發(fā)現(xiàn),運(yùn)用狀態(tài)機(jī)來控制ADC0809模塊無疑是最佳
23、選擇。其核心代碼如下:</p><p> --designed by G_XW</p><p> CASE current_state IS</p><p> WHEN st0=>ALE<='0';START<='0';LOCK<='1';OE<='0';next_s
24、tate<=st1; </p><p> WHEN st1=>ALE<='1';START<='1';LOCK<='1';OE<='0';next_state<=st2; </p><p> WHEN st2=>ALE<='0';START<=
25、39;0';LOCK<='0';OE<='0';</p><p> IF (EOC='1') THEN next_state<=st3; </p><p> ELSE next_state<=st2; </p><p><b> END IF;</b>&l
26、t;/p><p> WHEN st3=>ALE<='0';START<='0';LOCK<='0';OE<='1';next_state<=st4; </p><p> WHEN st4=>ALE<='0';START<='0';LOCK&l
27、t;='1';OE<='1';next_state<=st0; </p><p> WHEN OTHERS=>next_state<=st0;</p><p><b> END CASE;</b></p><p> END PROCESS COM;</p><p&
28、gt; REG: PROCESS(CLK)</p><p><b> BEGIN</b></p><p> IF(CLK'EVENT AND CLK='1') THEN current_state<=next_state;</p><p><b> END IF;</b></p&
29、gt;<p> END PROCESS REG;</p><p> LATCH1: PROCESS(LOCK) </p><p><b> BEGIN</b></p><p> IF LOCK='1' AND LOCK'EVENT THEN DOUT<=REG_0;</p>&l
30、t;p><b> END IF;</b></p><p> END PROCESS LATCH1;</p><p> END behav;</p><p> 由于ADC0809采用通用串口通信方式。此種通信方式比較簡單,并且 FPGA的IO口也支持此種通信協(xié)議。因此ADC0809在與FPGA通信時(shí),無需再對IO口進(jìn)行編程,它的數(shù)據(jù)
31、總線可以直接與FPGA的IO口連接,進(jìn)行數(shù)據(jù)交換。</p><p><b> 2.4串口通信模塊</b></p><p> 異步串行通信要求的傳輸線少,可靠性高,傳輸距離遠(yuǎn),被廣泛應(yīng)用于微機(jī)和外設(shè)的數(shù)據(jù)交換。實(shí)現(xiàn)串口通信主要需要完成兩部分工作:將串口電平轉(zhuǎn)換為設(shè)備電路板的工作電平,即實(shí)現(xiàn)RS-232電平和TTL/CMOS電平的轉(zhuǎn)換;接收并且檢驗(yàn)串行的數(shù)據(jù),將數(shù)據(jù)變
32、成并行的并提供給處理器處理。</p><p> 實(shí)現(xiàn)RS-232電平和TTL/CMOS電平轉(zhuǎn)換可以用接口芯片來實(shí)現(xiàn),實(shí)現(xiàn)數(shù)據(jù)的串行到并行轉(zhuǎn)換用的是UART,它們是實(shí)現(xiàn)串行通信必不可少的兩個部分。雖然目前大部分處理器芯片中都集成了UART,但是一般FPGA芯片卻沒有這個特點(diǎn),所以使用FPGA作為處理器可以有兩個選擇,第一個選擇是使用UART芯片進(jìn)行串并轉(zhuǎn)換,第二個選擇是在FPGA內(nèi)部實(shí)現(xiàn)UART功能。</p
33、><p> 異步串行通訊是一幀一幀進(jìn)行傳輸,幀與幀之間的間隙不固定,間隙處用空閑位(高電平)填補(bǔ),每幀傳輸總是以邏輯"(低電平)狀態(tài)的起始位開始,停止位結(jié)束。信息傳輸可隨時(shí)地或間斷地進(jìn)行,不受時(shí)間的限制。因此,異步通訊簡單、靈活,對同步時(shí)鐘要求可低些。異步通訊方式規(guī)定了傳輸格式,都以相同的幀格式傳送。每幀信息由起始位、數(shù)據(jù)位、奇偶校驗(yàn)位和停止位組成。幀與幀之間用高電平分開。根據(jù)串行通信的協(xié)議,發(fā)送串行數(shù)據(jù)
34、一般是:1個起始位,1個數(shù)據(jù)位,1個或多個停止位,這樣,發(fā)送起始位以后表明傳輸開始。傳送與接受的雙方設(shè)定好同樣的傳輸位數(shù),直到1個數(shù)據(jù)位送完以后,送停止位。此時(shí)我們便可以開始針對FPGA和上位機(jī)進(jìn)行編程。</p><p><b> 部分代碼如下所示:</b></p><p> --designed by G_XW</p><p> arc
35、hitecture behavior of transfer is</p><p> type state_type is (xidle,xstart,xwait,xshift); --狀態(tài)機(jī)</p><p> signal state : state_type:=xidle;</p><p> signal txds : st
36、d_logic; </p><p> signal tx_reg:std_logic_vector(9 downto 0); --輸出數(shù)據(jù)</p><p><b> begin</b></p><p> --tx_reg<='1'& txbuf & '0
37、';</p><p> tx_reg<="1011110010";</p><p> process(bclk,reset,w_en,txbuf)</p><p> variable cnt16:integer range 0 to 3:=0; --計(jì)數(shù)器,用來發(fā)送</p><
38、;p> variable bitcnt: integer range 0 to 9 :=0; --控制發(fā)送位數(shù)</p><p><b> begin</b></p><p> if rising_edge(bclk) then</p><p> if reset='0' then<
39、/p><p> state<=xidle; --異步初始化,狀態(tài)機(jī)設(shè)置為空閑狀態(tài)</p><p> txds<='1'; --輸出初始化是1</p><p><b> else </b></p><p&
40、gt; case state is</p><p> when xidle =></p><p> if w_en='1' then --開始發(fā)送信號觸發(fā)</p><p> state<=xstart; --跳轉(zhuǎn)到發(fā)送初始位狀態(tài)</p>
41、<p><b> else </b></p><p> state<=xidle;</p><p><b> end if;</b></p><p> when xstart =></p><p> if cnt16=2 then --計(jì)數(shù)
42、器到16就狀態(tài)跳轉(zhuǎn)到輸出狀態(tài)</p><p> state<=xshift;</p><p><b> cnt16:=0;</b></p><p><b> else</b></p><p> cnt16:=cnt16+1;</p><p> state<
43、;=xstart;</p><p><b> end if;</b></p><p> txds<='0'; --開始位輸出</p><p> when xwait=> </p><p> i
44、f cnt16 =3 then --計(jì)數(shù)器計(jì)數(shù)到15跳轉(zhuǎn)到下一狀態(tài)</p><p> if bitcnt=10 then --如果輸出8位完成,就轉(zhuǎn)到結(jié)束傳輸狀態(tài)</p><p> state<=xidle;</p><p> bitcnt:=0;</p><p><b> cnt16:
45、=0;</b></p><p><b> else</b></p><p> state<=xshift; --如果還沒有輸出8位,那么跳轉(zhuǎn)到輸出狀態(tài)</p><p><b> end if;</b></p><p> cnt16 :=0;</p><p
46、><b> else </b></p><p> cnt16:=cnt16+1;</p><p> state<=xwait;</p><p><b> end if;</b></p><p> when xshift=></p><p> tx
47、ds<=tx_reg(bitcnt); bitcnt:=bitcnt+1; --輸出數(shù)據(jù)位的序號自動加1</p><p> state<=xwait; --轉(zhuǎn)到保持?jǐn)?shù)據(jù)的狀態(tài)</p><p> when oth
48、ers => --容錯設(shè)計(jì),其他情況一律跳轉(zhuǎn)到空閑狀態(tài)</p><p> state<=xidle;</p><p><b> end case;</b></p><p><b> end if;</b></p><p><b> end if;&
49、lt;/b></p><p> txd<=txds; --輸出數(shù)據(jù)</p><p> end process;</p><p> end behavior;</p><p><b> 2.5分頻模塊</b></p><p&
50、gt; 前面所介紹的通道選擇控制、A/D轉(zhuǎn)換控制、串口通信模塊所需的時(shí)鐘都需要將系統(tǒng)時(shí)鐘50Mhz進(jìn)行分頻,分別是10000分頻、100分頻、1250分頻。因?yàn)榉诸l原理是一樣,所以這里只給出100分頻模塊的部分代碼,其它分頻不再贅述了。</p><p> --designed by G_XW the fenpin100 block</p><p> architecture one
51、of fenpin100 is </p><p> constant m:integer:=50;</p><p><b> begin</b></p><p> process(clk_in)</p><p> variable count:integer range 0 to 99;</p
52、><p><b> begin</b></p><p> if(clk_in'event and clk_in='1')then</p><p> if(count=99)then </p><p><b> count:=0;</b></p><p&
53、gt;<b> else</b></p><p> count:=count+1;</p><p><b> end if;</b></p><p> if(count<m)then</p><p> clk_out<='0';</p><p
54、><b> else</b></p><p> clk_out<='1';</p><p><b> end if;</b></p><p><b> end if;</b></p><p> end process;</p>
55、<p><b> 3 仿真與調(diào)試</b></p><p> 3.1 FPGA調(diào)試簡介</p><p> 在FPGA硬件語言設(shè)計(jì)完成之后需要對其進(jìn)行仿真與調(diào)試,成功之后才能制板。在這里用到的調(diào)試工具為Altera公司自己推出的Quartus II,該軟件集FPGA設(shè)計(jì),仿真,調(diào)試于一體。仿真采用嵌入在軟件中的SignalTap II。在FPGA的仿真中
56、進(jìn)行功能仿真有兩種激勵的輸入方式,一種是傳統(tǒng)的波形輸入,另一種則是使用Testbench。后者是指驗(yàn)證平臺,它通過編寫代碼,對輸入產(chǎn)生預(yù)定的激勵,然后有選擇的觀察輸出,并可以驗(yàn)證輸出是否符合設(shè)計(jì)要求。在本次設(shè)計(jì)中我們采用傳統(tǒng)的波形輸入法對系統(tǒng)各模塊,包括頂層模塊進(jìn)行仿真。并通過仿真來驗(yàn)證我們在第三節(jié)所設(shè)計(jì)模塊的正確性。</p><p> 3.2 通道選擇控制模塊仿真及調(diào)試</p><p>
57、; 將3.2節(jié)所設(shè)計(jì)的模塊代碼通過Quartus II軟件進(jìn)行編譯,順利通過編譯后生成模塊圖。模塊圖如圖3.1所示,</p><p> 圖3.1通道選擇控制模塊</p><p> 其仿真結(jié)果如圖3.2所示:</p><p> 圖3.2通道選擇控制模塊仿真結(jié)果</p><p> 由圖3.2可知,clk為系統(tǒng)時(shí)鐘經(jīng)5000分頻后的時(shí)鐘信
58、號,address[1..0]為地址信號輸出,它輸出給通道選擇芯片hcf4052的連個地址信號管腳。從圖中可以看到,地址信號address以0.1ms的周期依次輸出0、1、2、3,使得hcf4052可以周期性地選中四個傳感器。由此我們可以判斷,通道選擇控制模塊設(shè)計(jì)成功。</p><p> 3.3 A/D轉(zhuǎn)換控制模塊仿真及調(diào)試</p><p> 將3.3節(jié)所設(shè)計(jì)的模塊代碼通過Quart
59、us II軟件進(jìn)行編譯,順利通過編譯后生成模塊圖。模塊圖如圖3.3所示。</p><p> 圖3.3 ADC0809模塊</p><p> 仿真結(jié)果如下圖所示: </p><p> 圖3.4 ADC0809仿真結(jié)果</p><p> 由仿真圖形我們可以看到:clk為ADC0809工作時(shí)序,通過對系統(tǒng)時(shí)鐘分頻得到。在第一個時(shí)鐘上升沿
60、ALE和START變?yōu)楦唠娖?,此時(shí)ADC0809將地址信號鎖存,并且將復(fù)位。第二個上升沿時(shí)ALE和START變?yōu)榈碗娖剑藭r(shí)ADC0809開始模數(shù)轉(zhuǎn)換,同時(shí)檢測EOC的狀態(tài),當(dāng)其為高電平時(shí)表示轉(zhuǎn)換結(jié)束,所以在第三次和第四次上升沿OE均輸出高電平,第四個上升沿時(shí)ADC0809將轉(zhuǎn)換好的數(shù)據(jù)傳給fpga,因此我們看到這時(shí)DOUT為71H。綜上所述,A/D轉(zhuǎn)換控制模塊設(shè)計(jì)成功。</p><p> 3.4串口通信模塊仿
61、真及調(diào)試</p><p> 將3.4節(jié)所設(shè)計(jì)的模塊代碼通過Quartus II軟件進(jìn)行編譯,順利通過編譯后生成模塊圖。模塊圖如圖3.4所示。 </p><p> 圖3.4串口通信模塊</p><p> 圖中bclk為串口發(fā)送數(shù)據(jù)的時(shí)鐘信號,需要對系統(tǒng)時(shí)鐘進(jìn)行倍頻再分頻得到。由通信協(xié)議我們知道:下位機(jī)頻率與上位機(jī)波特率要對應(yīng)。由于漏磁檢測系統(tǒng)一般數(shù)據(jù)量大,所以上
62、位機(jī)設(shè)置的波特率為56000bps,故fpga串口發(fā)送的頻率為56000。串口通信本系統(tǒng)串口通信只用到了發(fā)送功能,因此為了檢驗(yàn)程序的正確與否,我們在程序中先發(fā)常數(shù),然后發(fā)給pc,借助串口調(diào)試助手進(jìn)行調(diào)試。</p><p> 3.5 頂層設(shè)計(jì)仿真及調(diào)試</p><p> 系統(tǒng)頂層設(shè)計(jì)圖如下所示</p><p> 圖3.6頂層設(shè)計(jì)示意圖</p>&l
63、t;p> 在Quartus II中將前面介紹過的通道選擇控制模塊、A/D轉(zhuǎn)換控制模塊、串口通信模塊、分頻與倍頻模塊結(jié)合起來,用原理圖的輸入方法設(shè)計(jì)出了頂層原理圖。最后我們將設(shè)計(jì)好的頂層綜合編譯,通過下載器下載到目標(biāo)板上,經(jīng)測試表明,本次設(shè)計(jì)所設(shè)定的要求基本得以實(shí)現(xiàn)。綜合器綜合的結(jié)果如圖3.7所示。從中我們可以看出,系統(tǒng)占用的IO口不多,而底層的邏輯門電路占用的也不大,這表明我們的設(shè)計(jì)還較合理。</p><p&
64、gt; 圖3.7頂層設(shè)計(jì)綜合結(jié)果</p><p><b> 5設(shè)計(jì)結(jié)果與總結(jié)</b></p><p><b> 5.1結(jié)果與總結(jié)</b></p><p> 通過Altera數(shù)據(jù)手冊提供的關(guān)于Quartusll JTAG配置步驟將編譯并且仿真好的程序代碼文件通過JTAG接口燒寫進(jìn)FPGA的SRAM中.這里不是先將程序
65、燒寫迸配置芯片EPCS4,目的是為了防止程序不能達(dá)到預(yù)期的目的時(shí),方便在線調(diào)試(CPLD具有帶電擦寫功能,因此CPLD同樣具備此優(yōu)勢)。FPGA的優(yōu)點(diǎn)就是更改程序代碼后可以實(shí)時(shí)地下載給FPGA觀察運(yùn)行情況。經(jīng)過幾次調(diào)試后修改,終于得到了讓我們比較滿意的結(jié)果。前面說道過,這個實(shí)驗(yàn)如果能在一根有缺陷的管道中進(jìn)行,那么就能看到某個位置的曲線與周圍曲線有明顯不同,技術(shù)人員就能分析出管道的缺陷在哪。并且隨著科技的發(fā)展,新傳感器的發(fā)明,新技術(shù)的應(yīng)用
66、,在漏磁檢測上,也一定會有新的創(chuàng)新出現(xiàn)。因此本次設(shè)計(jì)存在著相當(dāng)?shù)那熬?。在做?jì)算機(jī)課程設(shè)計(jì)的過程中,必須做到有一個大綱,做到各個模塊的功能的實(shí)現(xiàn),這樣才容易實(shí)現(xiàn)整個的功能的實(shí)現(xiàn)。</p><p><b> 參考文獻(xiàn)</b></p><p> [1].蔣奇,王太勇.鋼管漏磁檢測信號的時(shí)頻分析[J].機(jī)電設(shè)備,2002(2):16-20.</p><
67、p> [2].邢燕好.基于FPGA的漏磁檢測系統(tǒng)設(shè)計(jì)[D].沈陽:沈陽工業(yè)大學(xué),2005.</p><p> [3].廖超平.EDA技術(shù)與VHDL實(shí)用教程[M]。北京:高等教育出版社,2007.</p><p> [4].李莉,路而紅.電子設(shè)計(jì)自動化(EDA)[D].北京:中國電力出版社,2009.</p><p> [5].林敏,方穎立.VHDL數(shù)字
68、系統(tǒng)設(shè)計(jì)與高層次組合[M].北京:電子工業(yè)出版社,2002.</p><p><b> 致謝</b></p><p> 經(jīng)過幾個星期的學(xué)習(xí),與組員的討論,終于在此完成了計(jì)算機(jī)課程設(shè)計(jì)。由于自己以前接觸過VHDL硬件描述語言,所以相對來說容易一些。但是依然要感謝我的指導(dǎo)老師柴老師,組員以及各位同學(xué)的幫助。如果沒有他們的幫助,我不可能完成的這么快,也不可能考慮的如現(xiàn)在
69、全面。在這里首先我要感謝柴明鋼老師,他的認(rèn)真教導(dǎo),他的耐心鼓勵,他的認(rèn)真負(fù)責(zé),都使我感覺到這幾周受益匪淺,在以后的學(xué)習(xí)和生活中,他都是我的榜樣。</p><p> 其次,我也必須謝謝王鵬同學(xué)的幫助,他給予了我們的模塊思想與思路。還有吳青云同學(xué),他是一個虛心接受別人建議的組員,我們合作很愉快,希望以后還有一起做課程設(shè)計(jì)或?qū)W習(xí)的機(jī)會。他們之中有的比我有經(jīng)驗(yàn),懂得比我多,當(dāng)碰到難題我們就一起討論,有不懂的地方他們也是
70、不遺余力地教我。所以非常感謝這些人的幫助,以使得我掌握了更多的知識,我也將再接再厲,不辜負(fù)給的期望。</p><p><b> 附錄——源程序代碼</b></p><p> 1.Transfer模塊</p><p> --這段程序是串口通信的發(fā)送部分</p><p> --時(shí)鐘頻率是串口通信波特率的15倍<
71、/p><p> --計(jì)數(shù)器計(jì)數(shù)滿16才進(jìn)行下一位的輸出</p><p> --數(shù)據(jù)輸出變化占一個周期,保持?jǐn)?shù)據(jù)占14個周</p><p> library IEEE;</p><p> use IEEE.STD_LOGIC_1164.ALL;</p><p> use IEEE.STD_LOGIC_ARITH.A
72、LL;</p><p> use IEEE.STD_LOGIC_UNSIGNED.ALL;</p><p> entity transfer is</p><p> PORT( txbuf:in std_logic_vector(7 downto 0); --發(fā)送十六進(jìn)制代碼</p><p> bclk:in std_logic;&
73、lt;/p><p> reset:in std_logic; --復(fù)位</p><p> w_en:in std_logic; --發(fā)送使能</p><p> txd:out std_logic); --發(fā)送端</p><p> end
74、 transfer;</p><p> architecture behavior of transfer is</p><p> type state_type is (xidle,xstart,xwait,xshift); --狀態(tài)機(jī)</p><p> signal state : state_type:=xidle;</p><p&
75、gt; signal txds : std_logic; </p><p> signal tx_reg:std_logic_vector(9 downto 0); --輸出數(shù)據(jù)</p><p><b> begin</b></p><p> --tx_reg<='1'&am
76、p; txbuf & '0';</p><p> tx_reg<="1011110010";</p><p> process(bclk,reset,w_en,txbuf)</p><p> variable cnt16:integer range 0 to 3:=0; --計(jì)數(shù)器,用來發(fā)送<
77、/p><p> variable bitcnt: integer range 0 to 9 :=0; --控制發(fā)送位數(shù)</p><p><b> begin</b></p><p> if rising_edge(bclk) then</p><p> if reset='0' then</
78、p><p> state<=xidle; --異步初始化,狀態(tài)機(jī)設(shè)置為空閑狀態(tài)</p><p> txds<='1'; --輸出初始化是1</p><p><b> else </b></p&
79、gt;<p> case state is</p><p> when xidle =></p><p> if w_en='1' then --開始發(fā)送信號觸發(fā)</p><p> state<=xstart; --跳轉(zhuǎn)到發(fā)送初始位狀態(tài)<
80、/p><p><b> else </b></p><p> state<=xidle;</p><p><b> end if;</b></p><p> when xstart =></p><p> if cnt16=2 then
81、 --計(jì)數(shù)器到16就狀態(tài)跳轉(zhuǎn)到輸出狀態(tài)</p><p> state<=xshift;</p><p><b> cnt16:=0;</b></p><p><b> else</b></p><p> cnt16:=cnt16+1;</p><
82、;p> state<=xstart;</p><p><b> end if;</b></p><p> txds<='0'; --開始位輸出</p><p> when xwait=> </p&g
83、t;<p> if cnt16 =3 then --計(jì)數(shù)器計(jì)數(shù)到15跳轉(zhuǎn)到下一狀態(tài)</p><p> if bitcnt=10 then --如果輸出8位完成,就轉(zhuǎn)到結(jié)束傳輸狀態(tài)</p><p> state<=xidle;</p><p> bitcnt:=0;</p&
84、gt;<p><b> cnt16:=0;</b></p><p><b> else</b></p><p> state<=xshift; --如果還沒有輸出8位,那么跳轉(zhuǎn)到輸出狀態(tài)</p><p><b> end if;</b>
85、;</p><p> cnt16 :=0;</p><p><b> else </b></p><p> cnt16:=cnt16+1;</p><p> state<=xwait;</p><p><b> end if;</b></p>&
86、lt;p> when xshift=></p><p> txds<=tx_reg(bitcnt); --數(shù)據(jù)位輸出,只有這個狀態(tài)決定輸出,然后跳轉(zhuǎn)狀態(tài)保持?jǐn)?shù)據(jù)位</p><p> bitcnt:=bitcnt+1; --輸出數(shù)據(jù)位的序號自動加1</p><p>
87、 state<=xwait; --轉(zhuǎn)到保持?jǐn)?shù)據(jù)的狀態(tài)</p><p> when others => --容錯設(shè)計(jì),其他情況一律跳轉(zhuǎn)到空閑狀態(tài)</p><p> state<=xidle;</p><p><b> end
88、 case;</b></p><p><b> end if;</b></p><p><b> end if;</b></p><p> txd<=txds; --輸出數(shù)據(jù)</p><p> end proces
89、s;</p><p> end behavior;</p><p> 2.fenpin500模塊</p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> entity fenpin500 is</p><p
90、><b> port(</b></p><p> clk_in:in std_logic;</p><p> clk_out:out std_logic</p><p><b> );</b></p><p> end fenpin500;</p><p>
91、 architecture one of fenpin500 is --if system clock is60MHz,THEN 1250fenpin</p><p> constant m:integer:=625;</p><p><b> begin</b></p><p> process(clk_in)</p>
92、<p> variable count:integer range 0 to 1249;</p><p><b> begin</b></p><p> if(clk_in'event and clk_in='1')then</p><p> if(count=1249)then </p>
93、;<p><b> count:=0;</b></p><p><b> else</b></p><p> count:=count+1;</p><p><b> end if;</b></p><p> if(count<m)then<
94、/p><p> clk_out<='0';</p><p><b> else</b></p><p> clk_out<='1';</p><p><b> end if;</b></p><p><b> end
95、 if;</b></p><p> end process;</p><p><b> end one;</b></p><p> 3.fenpin100模塊</p><p> library ieee;</p><p> use ieee.std_logic_1164.al
96、l;</p><p> entity fenpin100 is</p><p><b> port(</b></p><p> clk_in:in std_logic;</p><p> clk_out:out std_logic</p><p><b> );</b&g
97、t;</p><p> end fenpin100;</p><p> architecture one of fenpin100 is --after fen pin ,the period is 2us(500khz) </p><p> constant m:integer:=50;</p><p><b&
98、gt; begin</b></p><p> process(clk_in)</p><p> variable count:integer range 0 to 99;--if system clock is 20MHz,then 20000 fenpin</p><p><b> begin</b></p>
99、<p> if(clk_in'event and clk_in='1')then</p><p> if(count=99)then </p><p><b> count:=0;</b></p><p><b> else</b></p><p> c
100、ount:=count+1;</p><p><b> end if;</b></p><p> if(count<m)then</p><p> clk_out<='0';</p><p><b> else</b></p><p>
101、clk_out<='1';</p><p><b> end if;</b></p><p><b> end if;</b></p><p> end process;</p><p><b> end one;</b></p>&
102、lt;p> 4.fenpin模塊</p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> entity fenpin is</p><p><b> port(</b></p><p> clk_
103、in:in std_logic;</p><p> clk_out:out std_logic);</p><p> end fenpin;</p><p> architecture one of fenpin is --after fen pin ,the period is 0.2ms(5khz) </p><p&g
104、t; constant m:integer:=5000;</p><p><b> begin</b></p><p> process(clk_in)</p><p> variable count:integer range 0 to 9999;--if system clock is 20MHz,then 20000 fenpin
105、</p><p><b> begin</b></p><p> if(clk_in'event and clk_in='1')then</p><p> if(count=9999)then </p><p><b> count:=0;</b></p>
106、<p><b> else</b></p><p> count:=count+1;</p><p><b> end if;</b></p><p> if(count<m)then</p><p> clk_out<='0';</p>
107、;<p><b> else</b></p><p> clk_out<='1';</p><p><b> end if;</b></p><p><b> end if;</b></p><p> end process;<
108、;/p><p><b> end one;</b></p><p> 5.address模塊</p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_arith.all;
109、</p><p> entity address is </p><p><b> port(</b></p><p> clk:in std_logic;</p><p> address_signal:out std_logic_vector(1 downto 0));</p><p>
110、;<b> end ;</b></p><p> architecture one of address is </p><p><b> begin</b></p><p> process(clk)</p><p> variable q :integer range 0 to 3;&
111、lt;/p><p><b> begin</b></p><p> if clk'event and clk='1' then </p><p> if(q=3) then </p><p><b> q:=0;</b></p><p> els
112、e q:=q+1;</p><p><b> end if;</b></p><p><b> end if;</b></p><p> address_signal<=conv_std_logic_vector(q,2);</p><p> end process;</p>
113、;<p><b> end one ;</b></p><p> 6.AD_CTRL模塊</p><p> LIBRARY IEEE;</p><p> USE IEEE.STD_LOGIC_1164.ALL;</p><p> USE IEEE.STD_LOGIC_UNSIGNED.ALL;&l
114、t;/p><p> ENTITY AD_CTRL IS</p><p><b> PORT(</b></p><p> CLK,EOC:IN STD_LOGIC;</p><p> D:IN STD_LOGIC_VECTOR(7 DOWNTO 0);</p><p> ALE,START,O
115、E:OUT STD_LOGIC;</p><p> DOUT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));</p><p> END AD_CTRL;</p><p> ARCHITECTURE behav OF AD_CTRL IS</p><p> TYPE states is (st0,st1,st2,s
116、t3,st4); </p><p> SIGNAL current_state,next_state:states:=st0; </p><p> SIGNAL LOCK:STD_LOGIC;</p><p> SIGNAL REG_0:STD_LOGIC_VECTOR(7 DOWNTO 0);</p><p><b> B
117、EGIN</b></p><p><b> REG_0<=D;</b></p><p> COM: PROCESS(current_state,EOC) </p><p><b> BEGIN</b></p><p> CASE current_state IS</
118、p><p> WHEN st0=>ALE<='0';START<='0';LOCK<='1';OE<='0';next_state<=st1; </p><p> WHEN st1=>ALE<='1';START<='1';LOCK<=
119、'1';OE<='0';next_state<=st2; </p><p> WHEN st2=>ALE<='0';START<='0';LOCK<='0';OE<='0';</p><p> IF (EOC='1') THEN ne
120、xt_state<=st3; </p><p> ELSE next_state<=st2; </p><p><b> END IF;</b></p><p> WHEN st3=>ALE<='0';START<='0';LOCK<='0';OE&l
121、t;='1';next_state<=st4; </p><p> WHEN st4=>ALE<='0';START<='0';LOCK<='1';OE<='1';next_state<=st0; </p><p> WHEN OTHERS=>next_sta
122、te<=st0;</p><p><b> END CASE;</b></p><p> END PROCESS COM;</p><p> REG: PROCESS(CLK)</p><p><b> BEGIN</b></p><p> IF(CLK
123、9;EVENT AND CLK='1') THEN current_state<=next_state;</p><p><b> END IF;</b></p><p> END PROCESS REG;</p><p> LATCH1: PROCESS(LOCK) </p><p><
124、;b> BEGIN</b></p><p> IF LOCK='1' AND LOCK'EVENT THEN DOUT<=REG_0;</p><p><b> END IF;</b></p><p> END PROCESS LATCH1;</p><p> E
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 計(jì)算機(jī)課程設(shè)計(jì)報(bào)告
- 計(jì)算機(jī)課程設(shè)計(jì)
- 微型計(jì)算機(jī)課程設(shè)計(jì)報(bào)告
- vf計(jì)算機(jī)課程設(shè)計(jì)
- 計(jì)算機(jī)課程設(shè)計(jì)---冒泡排序
- 計(jì)算機(jī)課程設(shè)計(jì)----銷售管理系統(tǒng)
- 計(jì)算機(jī)課程設(shè)計(jì)--人事管理系統(tǒng)
- 基于fpga的樂曲演奏電路設(shè)計(jì)課程設(shè)計(jì)
- 計(jì)算機(jī)課程設(shè)計(jì)----實(shí)用網(wǎng)絡(luò)考試系統(tǒng)
- 計(jì)算機(jī)課程設(shè)計(jì)——水箱水位控制系統(tǒng)設(shè)計(jì)
- 電加熱爐計(jì)算機(jī)溫度測控系統(tǒng)設(shè)計(jì)-計(jì)算機(jī)課程設(shè)計(jì)
- 計(jì)算機(jī)課程設(shè)計(jì)--交通燈模擬控制
- 中學(xué)計(jì)算機(jī)課程的教學(xué)設(shè)計(jì)
- 計(jì)算機(jī)課程設(shè)計(jì)-----電子政務(wù)網(wǎng)站的設(shè)計(jì)
- 微型計(jì)算機(jī)課程設(shè)計(jì)--數(shù)據(jù)采集系統(tǒng)
- 計(jì)算機(jī)課程設(shè)計(jì)報(bào)告---網(wǎng)上書店訂單管理子系統(tǒng)
- 流量檢測電路設(shè)計(jì)課程設(shè)計(jì)
- 微型計(jì)算機(jī)課程設(shè)計(jì)---數(shù)字錄音機(jī)
- 計(jì)算機(jī)硬件課程設(shè)計(jì)報(bào)告---簡單計(jì)算機(jī)的設(shè)計(jì)
- 計(jì)算機(jī)課程分析
評論
0/150
提交評論