vhdl課程設(shè)計--簡易數(shù)字頻率計_第1頁
已閱讀1頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  目 錄</b></p><p><b>  1 引言1</b></p><p>  1.1 EDA介紹1</p><p>  1.2 任務(wù)說明1</p><p><b>  2 系統(tǒng)設(shè)計2</b></p><p>

2、;<b>  2.1系統(tǒng)概述2</b></p><p>  2.2 系統(tǒng)原理2</p><p>  2.3 系統(tǒng)封裝圖3</p><p><b>  3 程序設(shè)計4</b></p><p>  3.1系統(tǒng)結(jié)構(gòu)示意圖4</p><p>  3.2 分頻程序4<

3、/p><p>  3.2.1 分頻程序原理4</p><p>  3.2.2 分頻程序仿真5</p><p>  3.3 位選程序6</p><p>  3.3.1 位選程序原理6</p><p>  3.3.2 位選程序仿真7</p><p>  3.4 時鐘程序8</p>

4、<p>  3.4.1 時鐘程序原理8</p><p>  3.4.2 時鐘程序仿真9</p><p>  3.5 計數(shù)程序9</p><p>  3.5.1 計數(shù)程序原理9</p><p>  3.5.2 計數(shù)程序仿真11</p><p>  3.6 BCD碼轉(zhuǎn)換11</p>

5、<p>  3.6.1 BCD碼轉(zhuǎn)換原理11</p><p>  3.6.2 BCD碼程序仿真13</p><p>  3.7頂層文件14</p><p>  3.7.1 頂層文件介紹及仿真14</p><p>  3.7.2硬件調(diào)試15</p><p><b>  4 總結(jié)17<

6、/b></p><p><b>  參考文獻18</b></p><p><b>  附錄19</b></p><p><b>  1 引言</b></p><p><b>  1.1 EDA介紹</b></p><p>

7、  EDA是電子設(shè)計自動化(Electronic Design Automation)的縮寫,在20世紀(jì)60年代中期從計算機輔助設(shè)計(CAD)、計算機輔助制造(CAM)、計算機輔助測試(CAT)和計算機輔助工程(CAE)的概念發(fā)展而來的。EDA技術(shù)就是以計算機為工具,設(shè)計者在EDA軟件平臺上,用硬件描述語言HDL完成設(shè)計文件,然后由計算機自動地完成邏輯編譯、化簡、分割、綜合、優(yōu)化、布局、布線和仿真,直至對于特定目標(biāo)芯片的適配編譯、邏輯映

8、射和編程下載等工作。</p><p><b>  1.2 任務(wù)說明</b></p><p>  簡易數(shù)字頻率計是用數(shù)字顯示被測信號頻率的儀器,被測信號可以是正弦波,方波或其它周期性變化的信號。如配以適當(dāng)?shù)膫鞲衅?,可以對多種物理量進行測試,比如機械振動的頻率,轉(zhuǎn)速,聲音的頻率等。其具有高速、精確、可靠、抗干擾性強和現(xiàn)場可編程等優(yōu)點。因此,數(shù)字頻率計是一種應(yīng)用很廣泛的儀器

9、 。</p><p>  本次EDA課程設(shè)計題目為簡易數(shù)字頻率計設(shè)計,實現(xiàn)對于1HZ-10MHZ的方波信號進行測量。該頻率計包括4個不同的檔位,具有記憶功能和總體的復(fù)位功能。需要利用VHDL(硬件描述語言)通過Quartus II編程軟件進行程序的編寫和調(diào)試、仿真。并將程序下載到硬件上進行實際觀測。</p><p><b>  2 系統(tǒng)設(shè)計</b></p>

10、<p><b>  2.1系統(tǒng)概述</b></p><p>  本設(shè)計基于可編程邏輯器件FPGA,使用VHDL進行設(shè)計、綜合、仿真以及實現(xiàn)。通過編程,根據(jù)選擇的檔位對輸入的方波信號進行頻率的測量,并且顯示在四位七段數(shù)碼管上,當(dāng)數(shù)值溢出時進行報警指示。</p><p><b>  2.2 系統(tǒng)原理</b></p><

11、;p>  本設(shè)計共分成五個子模塊程序:分頻(fpq)程序、位選(wxq)程序、時鐘(szq)程序、計數(shù)(jsq)程序、BCD轉(zhuǎn)換(bcd)程序。通過五個模塊相互配合實現(xiàn)簡易數(shù)字頻率計的功能。</p><p>  各模塊間的連接關(guān)系如下所示:</p><p>  系統(tǒng)原理為:待測的方波信號首先通過分頻模塊,進行10/100/1000分頻,產(chǎn)生10倍/100倍/1000倍及原待測信號共四

12、路方波信號。然后將四路信號送入位選功能模塊,通過四個輸入開關(guān)對該四路方波的選擇。位選模塊所選擇的方波信號送入計數(shù)模塊后,與輸入的系統(tǒng)基準(zhǔn)時鐘clk配合,計數(shù)得到輸入方波的信號頻率,最后送入bcd轉(zhuǎn)換模塊,將四位十進制數(shù)據(jù)轉(zhuǎn)化成四組4位BCD碼。本設(shè)計具有記憶功能,在測量過程中不刷新數(shù)據(jù),等數(shù)據(jù)測量過程結(jié)束后才顯示測量的頻率值,并保存到下一次測量結(jié)束,此頻率計有整體異步復(fù)位功能。</p><p><b>

13、  2.3 系統(tǒng)封裝圖</b></p><p>  系統(tǒng)封裝圖如圖2所示,其中shuru為待測試的方波輸入端,clk為系統(tǒng)時鐘頻率輸入端,rst為復(fù)位端,ginp為頻率計乘1檔端,sinp為頻率計乘10檔,sinp為頻率計乘100檔,binp為頻率計乘1000檔。gout,sout,bout,qout分別為四路檔位對應(yīng)的標(biāo)志位,通過四個LED燈點亮實現(xiàn),cc為超量程警告位,通過一個LED燈閃爍實現(xiàn)。g

14、w,sw,bw,qw分別輸出四位BCD碼,并通過數(shù)碼管顯示,分別表示千位,百位,十位,個位。當(dāng)系統(tǒng)工作時,四個數(shù)碼管所顯示數(shù)據(jù)乘以檔位即使所測量的方波的頻率。</p><p><b>  3 程序設(shè)計</b></p><p>  3.1系統(tǒng)結(jié)構(gòu)示意圖</p><p><b>  3.2 分頻程序</b></p>

15、<p>  3.2.1 分頻程序原理</p><p>  該部分程序中使用process,其中敏感信號列表中為shuru,即待測方波信號。系統(tǒng)備有×1檔,×10檔,×100檔,×1000檔,即需對待測方波進行10倍,100倍,1000倍的分頻,通過定義三個變量,以待測方波為時鐘進行計數(shù),則需要程序中計數(shù)器計分別計數(shù)到5,50,500時對四路輸出信號進行邏輯非運

16、算。</p><p><b>  分頻程序代碼:</b></p><p>  library ieee;</p><p>  use ieee.std_logic_1164.all;</p><p>  entity fpq is</p><p>  port(shuru:in std_logic

17、;</p><p>  ao,bo,co,do:buffer std_logic);</p><p><b>  end fpq;</b></p><p>  architecture bhv of fpq is</p><p><b>  begin</b></p><p>

18、;  ao<=shuru;</p><p>  process(shuru)</p><p>  variable nu,nu1,nu2:integer range 0 to 1000:=0;</p><p><b>  begin</b></p><p>  if(shuru 'event and shu

19、ru ='1')then</p><p>  nu:=nu+1;nu1:=nu1+1;nu2:=nu2+1;</p><p>  if(nu=5)then</p><p>  bo<=not bo;</p><p><b>  nu:=0;</b></p><p><b

20、>  end if;</b></p><p>  if(nu1=50)then</p><p>  co<=not co;</p><p><b>  nu1:=0;</b></p><p><b>  end if;</b></p><p>  if

21、(nu2=500)then</p><p>  do<=not do;</p><p><b>  nu2:=0;</b></p><p><b>  end if;</b></p><p><b>  end if;</b></p><p>  

22、end process;</p><p><b>  end bhv;</b></p><p>  該程序封裝圖如下圖所示:</p><p>  3.2.2 分頻程序仿真</p><p>  該部分程序仿真波形如下圖5所示:</p><p>  分頻程序仿真參數(shù)設(shè)定shuru1為輸入的預(yù)測方波信號

23、,ao,bo,co,do為四個輸出信號,分別為對輸入shuru1進行分頻后以及本來方波信號,由圖中可以看出ao頻率與fb1頻率相同,bo頻率為fb1頻率的1/10,co頻率為fb1頻率的1/100,do頻率為fb1頻率的1/1000。</p><p><b>  3.3 位選程序</b></p><p>  3.3.1 位選程序原理</p><p&

24、gt;  該部分程序包含復(fù)位端rst,四個輸入信號ai,bi,ci,di分別接分頻程序的四路分頻后的方波信號,通過四個開關(guān)控制端k1,k2,k3,k4分別選擇輸出信號的選擇,例如若k1為高電平,則fb0等于ai的輸入信號。位選程序與分頻程序公共構(gòu)成頻率計四個檔位測量功能。</p><p><b>  位選程序代碼:</b></p><p>  library ieee

25、;</p><p>  use ieee.std_logic_1164.all;</p><p>  entity wxq is</p><p>  port(ai,bi,ci,di,rst:in std_logic;</p><p>  ginp,sinp,binp,qinp:in std_logic;</p><p&g

26、t;  gout,sout,bout,qout:out std_logic;</p><p>  shuru0:out std_logic);</p><p><b>  end wxq;</b></p><p>  architecture bhv of wxq is</p><p><b>  begin

27、</b></p><p>  process(rst, ginp,sinp,binp,qinp, gout,sout,bout,qout)</p><p><b>  begin</b></p><p>  if(rst='1')then</p><p>  gout<='0&#

28、39;;sout<='0';bout<='0';qout<='0';</p><p>  shuru0<='0';</p><p>  elsif(ginp='1')then</p><p>  gout<='1';sout<='

29、;0';bout<='0';qout<='0';</p><p>  shuru0<=ai;</p><p>  elsif(sinp='1')then</p><p>  gout<='0';sout<='1';bout<='0

30、9;;qout<='0'; </p><p>  shuru0<=bi;</p><p>  elsif(binp='1')then</p><p>  gout<='0';sout<='0';bout<='1';qout<='0&#

31、39;;</p><p>  shuru0<=ci;</p><p>  elsif(qinp='1')then</p><p>  gout<='0';sout<='0';bout<='0';qout<='1';</p><p> 

32、 shuru0<=di;</p><p><b>  end if;</b></p><p>  end process;</p><p><b>  end bhv;</b></p><p>  位選程序封裝圖如下圖所示:</p><p>  封裝圖中輸入信號ai,b

33、i,ci,di為四路分頻后的方波信號,ginp、binp、binp、qinp這四檔開關(guān)選擇輸入信號,該程序中復(fù)位端rst為高電平時,將ginp、binp、binp、qinp四個開關(guān)控制端對應(yīng)的輸出信號gout、sout、bout、qout分別置零,在硬件電路中用四個LED燈的亮滅表示,測量時必須有且僅有一個燈點亮,否則為違規(guī)操作,測量數(shù)據(jù)錯誤。</p><p>  3.3.2 位選程序仿真</p>

34、<p>  該部分程序仿真波形如下圖7所示:</p><p>  由仿真圖中可以看出,輸入信號其中qinp為高電平,ginp、binp、binp皆為低電平,則相對應(yīng)的輸出信號qout為高電平,shuru0波形與第4路輸入信號di相同。復(fù)位信號在前端有一正脈沖,即當(dāng)為高電平時,所有的輸出信號皆為低電平。此后,sinp為高電平而其它3檔為低電平時,輸出信號sout為高電平,shuru0波形與第2路輸入信號b

35、i相同。</p><p><b>  3.4 時鐘程序</b></p><p>  3.4.1 時鐘程序原理</p><p>  該部分程序是為實現(xiàn)得到0.5Hz的系統(tǒng)基準(zhǔn)時鐘(高低電平各為1秒),用以對待測方波頻率的計數(shù)測量。由于硬件中系統(tǒng)時鐘頻率并不能鎖定0.5Hz,則需要對輸入的時鐘頻率進行分頻,本系統(tǒng)中選擇硬件中時鐘clk2引腳的8Hz

36、時鐘,則需要對其進行16倍的分頻。</p><p><b>  時鐘程序代碼:</b></p><p>  library ieee;</p><p>  use ieee.std_logic_1164.all;</p><p>  entity szq is</p><p>  generic

37、(v:integer:=8);</p><p>  port(clki:in std_logic;</p><p>  clko:buffer std_logic);</p><p><b>  end szq;</b></p><p>  architecture bhv of szq is</p>&l

38、t;p><b>  begin </b></p><p>  process(clki)</p><p>  variable count:integer range 0 to v;</p><p><b>  begin</b></p><p>  if(clki'event and

39、 clki='1')then</p><p>  count:=count+1;</p><p>  if(count=v)then</p><p>  clko<=not clko;</p><p><b>  count:=0;</b></p><p><b>

40、  end if;</b></p><p><b>  end if;</b></p><p>  end process;</p><p><b>  end bhv;</b></p><p>  時鐘程序封裝如圖8所示:</p><p>  圖中輸入信號clk

41、i為系統(tǒng)時鐘頻率,clko為輸出信號,作為計數(shù)程序的基準(zhǔn)時鐘。該時鐘程序仍為一個分頻程序,系統(tǒng)時鐘頻率作為進程中敏感信號列表的值,當(dāng)定義的計數(shù)變量計數(shù)到8時對輸出clko進行邏輯非運算,并將變量置零,從而得到0.5Hz的時鐘信號。此部分為計數(shù)部分輸入時鐘信號,作為頻率測量的基準(zhǔn)信號。</p><p>  3.4.2 時鐘程序仿真</p><p>  程序仿真波形如下圖9所示:</p&

42、gt;<p>  其中輸入信號clki為系統(tǒng)的時鐘信號,輸出信號clko為分頻后得到的時鐘信號,由上圖中可以看出,clko的頻率為clki的1/16。因為系統(tǒng)輸入時鐘頻率選為8Hz,則clko時鐘頻率則為0.5Hz。</p><p><b>  3.5 計數(shù)程序</b></p><p>  3.5.1 計數(shù)程序原理</p><p>

43、;  該部分為本次課程簡易頻率計系統(tǒng)設(shè)計的核心部分,此處程序?qū)崿F(xiàn)對于方波頻率的測量。需要說明的是,此處所得到的測量結(jié)果為頻率計選擇檔位后的值,即輸出的頻率需要乘以檔位,最終所得到數(shù)據(jù)才為所測量方波的頻率值。</p><p>  程序中以0.5Hz頻率的時鐘信號為基準(zhǔn)脈沖,設(shè)置在一變量n,當(dāng)時鐘脈沖為高電平時對輸入的方波上升沿進行計數(shù),當(dāng)時鐘脈沖為地電平時,計數(shù)結(jié)束,并輸出。由于要求不能數(shù)碼顯示不能有變化的過程。&

44、lt;/p><p>  這里定義一個變量m,當(dāng)時鐘脈沖為高電平時將計數(shù)值即n的值賦給m,當(dāng)時鐘脈沖為低電平時,將m值送入輸出信號q,由于下一個m送入時需要時鐘脈沖進入下一個地電平,借此達到輸出q值一直不變的要求.</p><p><b>  計數(shù)程序代碼:</b></p><p>  library ieee;</p><p&g

45、t;  use ieee.std_logic_1164.all;</p><p>  entity jsq is</p><p>  port(shuru,clk:in std_logic;</p><p>  cc:out std_logic;</p><p>  q:out integer range 0 to 10000);</p

46、><p><b>  end jsq;</b></p><p>  architecture bhv of jsq is</p><p><b>  begin</b></p><p>  process(shuru,clk)</p><p>  variable n:integ

47、er range 0 to 10000;</p><p>  variable m:integer range 0 to 10000;</p><p><b>  begin</b></p><p>  if(clk'stable)then</p><p>  if(shuru 'event and sh

48、uru ='1')then</p><p><b>  n:=n+1;</b></p><p><b>  m:=n;</b></p><p>  if(n>9999 or n=0)then</p><p><b>  cc<='1';</

49、b></p><p><b>  q<=0;</b></p><p><b>  end if;</b></p><p><b>  end if;</b></p><p><b>  end if;</b></p><p&

50、gt;  if(clk='0')then</p><p><b>  q<=m;</b></p><p><b>  n:=0;</b></p><p><b>  cc<='0';</b></p><p><b>  en

51、d if;</b></p><p>  end process;</p><p><b>  end bhv;</b></p><p>  程序封裝如下圖3-7所示:</p><p>  封裝圖中shuru為經(jīng)過選檔后的方波信號,clk為0.5Hz的計數(shù)基準(zhǔn)時鐘信號。輸出信號cc為超量程警告,q為計數(shù)得到頻率

52、數(shù)值。計數(shù)程序中包含了系統(tǒng)對于測量數(shù)據(jù)超量程的處理,當(dāng)計數(shù)值超過9999時,cc就會出現(xiàn)高低電平脈沖的持續(xù)變換,硬件中鎖一LED燈,將顯示不斷閃爍。此時為超量程,數(shù)碼管顯示值為錯誤量。</p><p>  3.5.2 計數(shù)程序仿真</p><p>  計數(shù)程序仿真波形如下圖11所示:</p><p>  由于仿真所限,此處并未使用0.5Hz時鐘信號作為輸入時鐘信號。

53、圖中clk時鐘頻率為0.2MHz,shuru為頻率為100MHz,可以看出,shuru為clk頻率的500倍,由于只有當(dāng)clk為高電平時計數(shù),所以得到計數(shù)結(jié)果q值為250。同理,若clk頻率為0.5Hz,則其高電平持續(xù)時間即為1s,所得到的計數(shù)結(jié)果250極為shuru信號相應(yīng)頻率值,即此時輸入方波頻率為250Hz。</p><p>  此仿真圖中并未顯示超過量程現(xiàn)象,此功能將在頂層文件中說明。</p>

54、<p>  3.6 BCD碼轉(zhuǎn)換</p><p>  3.6.1 BCD碼轉(zhuǎn)換原理</p><p>  由于計數(shù)程序輸出結(jié)果為0到10000范圍內(nèi)的整型數(shù)據(jù),若想通過模式5鎖定引腳,并在四個數(shù)碼管上顯示,則需要首先對其進行BCD碼的轉(zhuǎn)換。該部分程序中也包括系統(tǒng)復(fù)位功能的實現(xiàn)。程序中分別設(shè)置三個常量a,b,c其值分別為1000,100,10。首先將輸入整形數(shù)據(jù)qi除以a,即10

55、00,得到所得數(shù)據(jù)即為千位數(shù)值x1,令qi減去x1乘以1000,極為qi中除去千位后剩余的三位數(shù)值,同理繼續(xù)進行算法,則能得到百位,十位,個位的數(shù)值,即將輸入的整型數(shù)據(jù)qi轉(zhuǎn)換成BCD碼完成。因為使用模式5,硬件中自帶譯碼功能,直接可用于數(shù)碼顯示。用四個數(shù)碼管分別表示千位,百位,十位,個位,再乘以相應(yīng)檔位,即可得到頻率計的測量數(shù)值。</p><p><b>  BCD轉(zhuǎn)換代碼:</b><

56、;/p><p>  library ieee;</p><p>  use ieee.std_logic_1164.all;</p><p>  use ieee.std_logic_signed.all;</p><p>  use ieee.std_logic_arith.all;</p><p>  entity b

57、cd is</p><p>  port(qi:in integer range 0 to 10000;</p><p>  rst:in std_logic;</p><p>  gw,sw,bw,qw:buffer std_logic_vector(3 downto 0));</p><p><b>  end bcd;<

58、/b></p><p>  architecture bhv of bcd is</p><p><b>  begin</b></p><p>  process(qi)</p><p>  constant a:integer:=1000;</p><p>  constant b:in

59、teger:=100;</p><p>  constant c:integer:=10;</p><p>  variable x1,x2,x3,x4,y,z:integer range 0 to 1000;</p><p><b>  begin</b></p><p>  if(rst='1')th

60、en</p><p>  x1:=0;x2:=0;x3:=0;x4:=0;</p><p><b>  else </b></p><p><b>  x1:=qi/a;</b></p><p>  y:=qi-x1*1000;</p><p><b>  x2:=

61、y/b;</b></p><p>  z:=y-x2*100;</p><p><b>  x3:=z/c;</b></p><p>  x4:=z-x3*10;</p><p><b>  end if;</b></p><p>  qw<=conv_st

62、d_logic_vector(x1,4);</p><p>  bw<=conv_std_logic_vector(x2,4);</p><p>  sw<=conv_std_logic_vector(x3,4);</p><p>  gw<=conv_std_logic_vector(x4,4);</p><p>  en

63、d process;</p><p><b>  end bhv;</b></p><p>  頻率計程序封裝圖如圖12所示:</p><p>  封裝圖中qi為經(jīng)過分頻后的方波計數(shù)得到的數(shù)據(jù),為0~9999范圍內(nèi)的整型數(shù)據(jù),qw、bw、sw、gw為四位BCD碼,分別表示十進制數(shù)的千位、百位、十位、個位的數(shù)值。程序中復(fù)位信號rst為高電平時,控

64、制四個輸出信號都為0,即四個數(shù)碼管都顯示0,達到復(fù)位功能。</p><p>  3.6.2 BCD碼程序仿真</p><p>  程序仿真圖如下圖13所示:</p><p>  程序仿真前輸入信號qi值分別設(shè)置了9999,8649,1234三個值,并設(shè)置1個rst的正脈沖。由上圖中可以看到,其中當(dāng)qi為9999時,各位輸出值組合為9999;當(dāng)復(fù)位信號rst為高電平時

65、,四個輸出信號值皆為0;當(dāng)qi值為8649時,四位輸出為8,6,4,9四個值。同樣,當(dāng)qi值為1234時,四位BCD,碼顯示1,2,3,4。 </p><p><b>  3.7頂層文件</b></p><p>  3.7.1 頂層文件介紹及仿真</p><p>  該程序分為五個部分,分別實現(xiàn)預(yù)定的功能,然后通過元件例化的方式,組合在一起,編

66、寫頂層文件,組合在一起,形成整個系統(tǒng),各功能相互配合以實現(xiàn)簡易頻率計的設(shè)計,封裝圖如圖14所示:</p><p>  頂層文件程序中設(shè)置一系列的信號,將五個部分的程序輸入輸出信號相對應(yīng)的連接起來,并與整個系統(tǒng)的封裝引腳相對應(yīng)。同時將五個程序分別編譯后生成的.vhd文件加載進來,然后進行編譯,仿真。</p><p>  圖15為頂層文件仿真圖:</p><p>  由

67、于仿真所限,此處并未按實際需要進行參數(shù)設(shè)定。其中,系統(tǒng)時鐘頻率clk設(shè)定為0.5MHz,預(yù)測試方波頻率值設(shè)定為100MHz,由圖中可以看出,此時頻率計使用binp檔進行測試,所得到的數(shù)據(jù)為16,該數(shù)據(jù)再乘以100得到的最后值1600才為仿真欲要得到的數(shù)據(jù)(注:由于輸入的系統(tǒng)時鐘頻率為0.5MHz ,而實際應(yīng)用的為8Hz,則系統(tǒng)時鐘和預(yù)測試方波頻率都縮小0.5M÷8=62500倍)。</p><p>  

68、仿真時設(shè)定了復(fù)位參數(shù),由圖中可看出當(dāng)復(fù)位信號rst為高電平時,所有的輸出都會置零或變?yōu)榈碗娖?,可實現(xiàn)總體復(fù)位功能。</p><p>  該系統(tǒng)含有對于預(yù)測試頻率超量程的標(biāo)志,如下圖16所示:</p><p>  由于頻率計設(shè)計包括了四個檔位,其中乘1檔測試頻率范圍為1Hz~9999Hz,乘10檔測試頻率范圍為10Hz~99990Hz,乘100檔測試頻率范圍為100Hz~999900Hz,乘

69、1000檔測試頻率范圍為1000Hz~9999000Hz,所以相對應(yīng)的檔位,預(yù)測試的頻率一旦超過量程就會出現(xiàn)錯誤顯示。這里以乘1檔為例,仿真參數(shù)中g(shù)inp為高電平,系統(tǒng)時鐘信號clk頻率設(shè)定為0.05MHz,預(yù)測方波頻率設(shè)定為100MHz,則需程序中計數(shù)器計到16000,產(chǎn)生溢出,所示輸出信號cc會出現(xiàn)正脈沖信號,若硬件鎖定在一個LED燈引腳,則會不斷亮滅閃爍,以表示超量程,此時數(shù)碼管數(shù)據(jù)錯誤。</p><p>

70、<b>  3.7.2硬件調(diào)試</b></p><p>  頂層文件編譯仿真完成后對頂層文件程序中各個輸入輸出信號進行引腳鎖定,硬件試驗箱選用模式5,其中數(shù)碼管自帶譯碼功能。其中重要的一點是系統(tǒng)基準(zhǔn)時鐘引腳應(yīng)鎖定為clk2引腳,待測方波shuru鎖定右側(cè)clk0引腳。</p><p>  具體引腳鎖定如下圖17中所示:</p><p>  鎖定

71、引腳完成后,對程序再次進行編譯,然后下載到目標(biāo)芯片中,通過硬件測試,檢查頻率計的各項功能,包括1Hz~10MHz頻率測試,數(shù)據(jù)在四個數(shù)碼管上的顯示,頻率計檔位切換,系統(tǒng)復(fù)位功能,超量程報警等。</p><p><b>  4 總結(jié)</b></p><p>  此次EDA課程設(shè)計歷時兩周時間,我和伙伴兩人一組合作進行簡易數(shù)字頻率計系統(tǒng)的設(shè)計。程序的編寫我們采用元件例化的

72、形式,經(jīng)過思考和相互間的分析討論,將整個系統(tǒng)劃分五個功能模塊,彼此配合進行五個功能模塊設(shè)計和程序的編寫。其間,我們亦遇到許多問題,諸如整個系統(tǒng)核心模塊計數(shù)過程的實現(xiàn),時鐘頻率的設(shè)定,將整形數(shù)據(jù)轉(zhuǎn)換成BCD碼顯示的算法等等。另外,我們還對頻率計的自動換擋功能進行了探索,編制出了相應(yīng)的程序,然而我們又從實際的角度出發(fā),最終認(rèn)為手動換擋更符合人在實際使用時的習(xí)慣。</p><p>  經(jīng)過兩周時間的不懈努力和伙伴間契的

73、配合,我們終于完成預(yù)定的目的,完成整個簡易數(shù)字頻率計的設(shè)計。雖然其中遇到很多困難,很多問題,但在我們兩人相互支持和鼓勵下,都能夠得以順利的找到解決辦法或者改進的方法,并在合作中相互提高,彼此進步,在困難在中體會到合作的樂趣。</p><p>  EDA技術(shù)極大地提高了電路設(shè)計的效率和可操作性,減輕了設(shè)計者的勞動強度,是一門實際應(yīng)用很廣泛的技術(shù)。現(xiàn)在對EDA的概念或范疇用得很寬。包括在機械、電子、通信、航空航天、化

74、工、礦產(chǎn)、生物、醫(yī)學(xué)、軍事等各個領(lǐng)域,都有EDA的應(yīng)用。目前EDA技術(shù)已在各大公司、企事業(yè)單位和科研教學(xué)部門廣泛使用。例如在飛機制造過程中,從設(shè)計、性能測試及特性分析直到飛行模擬,都可能涉及到EDA技術(shù)。</p><p>  總而言之,這次EDA課程設(shè)計對我們理論學(xué)習(xí)和實踐能力的提高有十分重要的意義,幫助我鞏固了VHDL程序設(shè)計和數(shù)字電子技術(shù)知識,提高了我的自學(xué)能力與合作精神,這對我以后的學(xué)習(xí)與工作會很有很大的幫

75、助。</p><p><b>  參考文獻</b></p><p>  [1]Voknei A.Pedroni.《VHDL數(shù)字電路設(shè)計教程》.電子工業(yè)出版社,2008.5</p><p>  [2]潘松,黃繼業(yè).《EDA技術(shù)實用教程》(第二版).科學(xué)出版社,2005.2</p><p>  [3]焦素敏.《EDA應(yīng)用技術(shù)

76、》.清華大學(xué)出版社,2002.4</p><p>  [4]劉延飛等.基于Altera FPGA/CPLD的電子系統(tǒng)設(shè)計及工程實踐.北京:人民郵電出版社,2009</p><p>  [5]王新.EDA技術(shù)與虛擬實驗.徐州:中國礦業(yè)大學(xué)出版社,2007</p><p><b>  附錄</b></p><p><b

77、>  頂層文件程序</b></p><p>  library ieee;</p><p>  use ieee.std_logic_1164.all;</p><p>  use ieee.std_logic_unsigned.all;</p><p>  entity plj is</p><p>

78、;  port(fb,clk,rst:in std_logic;</p><p>  k1,k2,k3,k4:in std_logic;</p><p>  g1,g2,g3,g4,g5:out std_logic;</p><p>  d1,d2,d3,d4:out std_logic_vector(3 downto 0));</p><p&g

79、t;<b>  end plj;</b></p><p>  architecture bhv of plj is</p><p>  signal h0,h1,h2,h3:std_logic;</p><p>  signal s0,s1,s2:std_logic;</p><p>  signal p0:intege

80、r range 0 to 10000;</p><p>  component fp is</p><p>  port(fb1:in std_logic;</p><p>  ao,bo,co,do:buffer std_logic);</p><p>  end component;</p><p>  compo

81、nent wx is</p><p>  port(ai,bi,ci,di,rst:in std_logic;</p><p>  k1,k2,k3,k4:in std_logic;</p><p>  g1,g2,g3,g4:out std_logic;</p><p>  fb0:out std_logic);</p>&l

82、t;p>  end component;</p><p>  component sz is</p><p>  port(clki:in std_logic;</p><p>  clko:buffer std_logic);</p><p>  end component;</p><p>  compone

83、nt js is</p><p>  port(fb,clk:in std_logic;</p><p>  g5:out std_logic;</p><p>  q:out integer range 0 to 10000);</p><p>  end component;</p><p>  component

84、 bcd is</p><p>  port(qi:in integer range 0 to 10000;</p><p>  rst:in std_logic;</p><p>  d1,d2,d3,d4:buffer std_logic_vector(3 downto 0));</p><p>  end component;</

85、p><p><b>  begin</b></p><p>  u1:fp port map(fb1=>fb,ao=>h0,bo=>h1,co=>h2,do=>h3);</p><p>  u2:wx port map(k1=>k1,k2=>k2,k3=>k3,k4=>k4,ai=>h0,

86、bi=>h1,ci=>h2,di=>h3,</p><p>  rst=>rst,fb0=>s0,g1=>g1,g2=>g2,g3=>g3,g4=>g4);</p><p>  u3:sz port map(clki=>clk,clko=>s1);</p><p>  u4:js port map(f

87、b=>s0,clk=>s1,g5=>g5,q=>p0);</p><p>  u5:bcd port map(qi=>p0,rst=>rst,d1=>d1,d2=>d2,d3=>d3,d4=>d4);</p><p><b>  end bhv;</b></p><p><b&g

88、t;  分頻程序u1:</b></p><p>  library ieee;</p><p>  use ieee.std_logic_1164.all;</p><p>  entity fp is</p><p>  port(fb1:in std_logic;</p><p>  ao,bo,co,

89、do:buffer std_logic);</p><p><b>  end fp;</b></p><p>  architecture bhv of fp is</p><p><b>  begin</b></p><p><b>  ao<=fb1;</b>&l

90、t;/p><p>  process(fb1)</p><p>  variable nu,nu1,nu2:integer range 0 to 1000:=0;</p><p><b>  begin</b></p><p>  if(fb1'event and fb1='1')then</p

91、><p>  nu:=nu+1;nu1:=nu1+1;nu2:=nu2+1;</p><p>  if(nu=5)then</p><p>  bo<=not bo;</p><p><b>  nu:=0;</b></p><p><b>  end if;</b><

92、;/p><p>  if(nu1=50)then</p><p>  co<=not co;</p><p><b>  nu1:=0;</b></p><p><b>  end if;</b></p><p>  if(nu2=500)then</p>&

93、lt;p>  do<=not do;</p><p><b>  nu2:=0;</b></p><p><b>  end if;</b></p><p><b>  end if;</b></p><p>  end process;</p>&l

94、t;p><b>  end bhv;</b></p><p><b>  位選程序u2:</b></p><p>  library ieee;</p><p>  use ieee.std_logic_1164.all;</p><p>  entity wx is</p>&

95、lt;p>  port(ai,bi,ci,di,rst:in std_logic;</p><p>  k1,k2,k3,k4:in std_logic;</p><p>  g1,g2,g3,g4:out std_logic;</p><p>  fb0:out std_logic);</p><p><b>  end w

96、x;</b></p><p>  architecture bhv of wx is</p><p><b>  begin </b></p><p>  process(rst,k1,k2,k3,k4,ai,bi,ci,di)</p><p><b>  begin</b></p

97、><p>  if(rst='1')then</p><p>  g1<='0';g2<='0';g3<='0';g4<='0';</p><p><b>  fb0<='0';</b></p><p&g

98、t;  elsif(k1='1')then</p><p>  g1<='1';g2<='0';g3<='0';g4<='0';</p><p><b>  fb0<=ai;</b></p><p>  elsif(k2='1&

99、#39;)then</p><p>  g1<='0';g2<='1';g3<='0';g4<='0'; </p><p><b>  fb0<=bi;</b></p><p>  elsif(k3='1')then</

100、p><p>  g1<='0';g2<='0';g3<='1';g4<='0';</p><p><b>  fb0<=ci;</b></p><p>  elsif(k4='1')then</p><p>  g1

101、<='0';g2<='0';g3<='0';g4<='1';</p><p><b>  fb0<=di;</b></p><p><b>  end if;</b></p><p>  end process;</p>

102、;<p><b>  end bhv;</b></p><p><b>  時鐘程序u3:</b></p><p>  library ieee;</p><p>  use ieee.std_logic_1164.all;</p><p>  entity sz is</p&g

103、t;<p>  generic (v:integer:=8);</p><p>  port(clki:in std_logic;</p><p>  clko:buffer std_logic);</p><p><b>  end sz;</b></p><p>  architecture bhv o

104、f sz is</p><p><b>  begin </b></p><p>  process(clki)</p><p>  variable count:integer range 0 to v;</p><p><b>  begin</b></p><p>  

105、if(clki'event and clki='1')then</p><p>  count:=count+1;</p><p>  if(count=v)then</p><p>  clko<=not clko;</p><p><b>  count:=0;</b></p>

106、;<p><b>  end if;</b></p><p><b>  end if;</b></p><p>  end process;</p><p><b>  end bhv;</b></p><p><b>  計數(shù)程序u4:</b&

107、gt;</p><p>  library ieee;</p><p>  use ieee.std_logic_1164.all;</p><p>  entity js is</p><p>  port(fb,clk:in std_logic;</p><p>  g5:out std_logic;</p&

108、gt;<p>  q:out integer range 0 to 10000);</p><p><b>  end js;</b></p><p>  architecture bhv of js is</p><p><b>  begin</b></p><p>  proce

109、ss(fb,clk)</p><p>  variable n:integer range 0 to 10000;</p><p>  variable m:integer range 0 to 10000;</p><p><b>  begin</b></p><p>  if(clk'stable)then

110、</p><p>  if(fb'event and fb='1')then</p><p><b>  n:=n+1;</b></p><p><b>  m:=n;</b></p><p>  if(n>9999 or n=0)then</p><

111、;p><b>  g5<='1';</b></p><p><b>  q<=0;</b></p><p><b>  end if;</b></p><p><b>  end if;</b></p><p><b

112、>  end if;</b></p><p>  if(clk='0')then</p><p><b>  q<=m;</b></p><p><b>  n:=0;</b></p><p><b>  g5<='0';<

113、;/b></p><p><b>  end if;</b></p><p>  end process;</p><p><b>  end bhv;</b></p><p><b>  BCD轉(zhuǎn)換u5:</b></p><p>  librar

114、y ieee;</p><p>  use ieee.std_logic_1164.all;</p><p>  use ieee.std_logic_signed.all;</p><p>  use ieee.std_logic_arith.all;</p><p>  entity bcd is</p><p>

115、  port(qi:in integer range 0 to 10000;</p><p>  rst:in std_logic;</p><p>  d1,d2,d3,d4:buffer std_logic_vector(3 downto 0));</p><p><b>  end bcd;</b></p><p>

116、;  architecture bhv of bcd is</p><p><b>  begin</b></p><p>  process(qi)</p><p>  constant a:integer:=1000;</p><p>  constant b:integer:=100;</p><

117、;p>  constant c:integer:=10;</p><p>  variable x1,x2,x3,x4,y,z:integer range 0 to 1000;</p><p><b>  begin</b></p><p>  if(rst='1')then</p><p>  x

118、1:=0;x2:=0;x3:=0;x4:=0;</p><p><b>  else </b></p><p><b>  x1:=qi/a;</b></p><p>  y:=qi-x1*1000;</p><p><b>  x2:=y/b;</b></p>

119、<p>  z:=y-x2*100;</p><p><b>  x3:=z/c;</b></p><p>  x4:=z-x3*10;</p><p><b>  end if;</b></p><p>  d1<=conv_std_logic_vector(x1,4);</

120、p><p>  d2<=conv_std_logic_vector(x2,4);</p><p>  d3<=conv_std_logic_vector(x3,4);</p><p>  d4<=conv_std_logic_vector(x4,4);</p><p>  end process;</p><

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論