2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩20頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論