數(shù)字系統(tǒng)課程設計報告--自動售郵票機_第1頁
已閱讀1頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  計算機硬件設計實訓</b></p><p><b>  報 告</b></p><p>  題目: 自動售郵票機 </p><p>  班級 </p><p>  學號 <

2、;/p><p>  姓名 </p><p><b>  自動售郵票機</b></p><p><b>  實訓的目的及意義</b></p><p><b> ?。ㄒ唬嵱柕哪康?lt;/b></p><p>  1、熟練掌握模擬電路、

3、數(shù)字邏輯電路的設計、分析、仿真及調(diào)試的方法。</p><p>  2、掌握使用EDA(電子設計自動化)工具設計模擬電路、數(shù)字電路的方法,了解系統(tǒng)設計的全過程。 </p><p>  熟練掌握Quartus2軟件的基本操作及繪制原理圖和進行電路仿真的一般方法。</p><p>  通過對系統(tǒng)電路設計與制作,進一步鞏固所學的理論知識,提高分析問題和解決問題的能力。&l

4、t;/p><p>  學會應用數(shù)字電路課程的理論知識獨立完成一個課程設計。</p><p>  能夠通過設計掌握獨立分析和解決實際問題的能力。</p><p>  通過設計掌握數(shù)字電路設計和制作的一般方法。</p><p>  學會使用和查找設計有關的書籍和資料。 </p><p>  通過對實際電路的方案的分析比較、設計

5、計算、元件選取、安裝調(diào)試環(huán)節(jié),初步掌握簡單實用電路的分析方法和工程設計。</p><p>  學會撰寫課程設計總結報告,培養(yǎng)嚴肅認真的工作作風和嚴謹?shù)目茖W態(tài)度。</p><p>  11、通過此次實訓,引導學生提高和培養(yǎng)自身創(chuàng)新能力,為后續(xù)課程的學習,畢業(yè)設計制作以及畢業(yè)后的工作打下堅實的基礎。</p><p><b> ?。ǘ?、實訓的意義</b&

6、gt;</p><p>  VHDL語言是一種用于電路設計的高級語言。VHDL翻譯成中文就是超高速集成電路硬件描述語言,主要是應用在數(shù)字電路的設計中。除了含有許多具有硬件特征的語句外,VHDL的語言形式、描述風格以及語法是十分類似于一般的計算機高級語言。EDA技術就是以計算機為工具,設計者在EDA軟件平臺上,用硬件描述語言VHDL完成設計文件,然后由計算機自動地完成邏輯編譯、化簡、分割、綜合、優(yōu)化、布局、布線和仿

7、真,直至對于特定目標芯片的適配編譯、邏輯映射和編程下載等工作。EDA技術的出現(xiàn),極大地提高了電路設計的效率和可操作性,減輕了設計者的勞動強度。 本次實訓將運用VHDL設計一款自動售郵票機,培養(yǎng)EDA操作技巧。</p><p><b>  二、實訓題目分析</b></p><p>  本次實訓我的小組選擇的實訓題目為:自動售郵票機。一下是我對這個題目的分析:設計一個自動

8、售郵票機,用開關電平信號模擬投幣過程,每次投一枚硬幣,但可以連續(xù)投入數(shù)枚硬幣。機器能自動識別硬幣金額,最大為1元,最小為5角。設定票價為2.5元,每次售一張票。購票時先投入硬幣,當投入的硬幣總金額達到或超過票的面值時,機器發(fā)出指示,這時可以按取票鍵取出票。如果所投硬幣超過票的面值,則會提示找零錢,取完票后按找零鍵,則可以取出零錢。</p><p><b>  系統(tǒng)框圖如下:</b></

9、p><p><b>  三、設計原理及思想</b></p><p><b>  (一)設計分析 </b></p><p>  此設計問題可分為幣值輸入相加模塊、主控模塊和幣值顯示模塊幾部分。</p><p>  在幣值輸入相加模塊中,用兩個開關電平輸入按鈕分別代表兩種硬幣輸入,one表示1元,

10、half表示5角,每按一次,表示投入一枚硬幣。設置5角和1元輸入計數(shù)電路,并設置控制電路,由5角和1元輸入的次數(shù)控制十進制加法器的加數(shù)A和被加數(shù)B,使輸入的幣值實時相加。用兩位數(shù)碼管顯示當前的投入幣值,顯示的幣值為x元x角,幣值輸入相加模塊狀態(tài)表如下所示。</p><p><b>  表3.1模塊狀態(tài)表</b></p><p>  在主模塊中,設置一個復位信號rese

11、t,用于中止交易(系統(tǒng)復位)。設置一個取票信號ok,一個郵票給出信號tout,tout接LED顯示,燈亮則表示可以取票,否則取票鍵無效,按ok鍵取票,燈滅。設置一個取零錢信號charge,一個零錢輸出信號mout,mout顯示高電平,燈亮則表示有零錢,按charge取零錢,燈滅。</p><p>  主控模塊中是一個狀態(tài)機,當幣值等于2.5元時,有郵票給出,不找零錢;當幣值為3.0元時,有郵票給出,找零錢;其余情

12、況下,既無票給出,也不找零錢。</p><p>  圖3.2自動售郵票機硬件系統(tǒng)框圖</p><p>  (二)狀態(tài)轉換圖  </p><p>  由狀態(tài)轉換表可知,當系統(tǒng)狀態(tài)為S0時,若投入一枚五角硬幣時,進入S1狀態(tài);若投入一枚一元硬幣時,進入S2狀態(tài)。當系統(tǒng)為S1狀態(tài)時,若投入一枚五角硬幣,進入S2狀態(tài);若投入一枚一元硬幣,進入S3狀態(tài),當

13、系統(tǒng)進入S2狀態(tài)時,若投入一枚五角硬幣,進入S3狀態(tài);若投入一枚一元硬幣,進入S4狀態(tài),當系統(tǒng)進入S4狀態(tài)時,若投入一枚五角硬幣,進入S0狀態(tài),同時顯示有郵票信號輸出,即tout為1;若投入一枚一元硬幣,進入S1狀態(tài),同時顯示有郵票和找零錢信號輸出,即tout為1,mout為1。因此,電路的狀態(tài)數(shù)M=5己足夠。故可畫出如下圖所示的狀態(tài)轉換圖。</p><p>  圖3.3 狀態(tài)轉換圖</p>

14、<p><b> ?。ㄈ顟B(tài)轉換表</b></p><p>  取投幣信號為輸入邏輯變量。投入一枚一元硬幣時用A=1表示,未投時A=0。投入一枚五角硬幣用B=1表示,未投入時B=0。給出郵票和找錢為二個輸出變量,分別用Y、Z表示。給出郵票時Y=1,不給出郵票時Y=0;找回一枚五角硬幣時Z=1,不找時Z=0。  假定通過傳感器產(chǎn)生的投幣信號(A=1或B=1)

15、在電路轉入新狀態(tài)的同時也隨之消失,否則將被誤認為一次投幣信號。  設未投幣前電路的初始狀態(tài)為S0 ,投入五角硬幣以后為S1 ,投入一元硬幣(包括投一枚一元硬幣和兩枚五角硬幣人情況)以后為S2 ,以此類推,投入一元五角硬幣以后為S3 ,投入兩元硬幣以后為S4 。因為這樣工作中不會出現(xiàn)AB=11的情況,所以與之對應的S。 Y、Z均作約束項處理。繪制狀態(tài)轉換表如下

16、:</p><p>  表3.4 狀態(tài)轉換表</p><p><b>  四、程序設計</b></p><p><b> ?。ㄒ唬┚帉懺创a</b></p><p>  本次實訓我主要是負責編寫源代碼部分,平時對VHDL語言的練習不是特別多,我會通過這次實訓,鍛煉并提高的的編寫程序的能力,這也是我選擇

17、負責本次實訓編寫源代碼的原因。</p><p>  我們討論了一下定義了系統(tǒng)的輸入/輸出端口信號,考慮顧客只有4種操作行為,即投幣、選擇、確定與取消,所以定義以下系統(tǒng)輸入信號。</p><p>  1、entity定義</p><p>  Reset:系統(tǒng)內(nèi)部設置給其他顧客重新操作的復位信號;</p><p>  Clk: 由外接信號發(fā)射器提

18、供1024b/s的系統(tǒng)時鐘信號;</p><p>  Ok buy: 購買確認的按鍵信號;</p><p>  One: 投入1元硬幣的動作按鍵;</p><p>  Half: 投入5角硬幣的動作按鍵;</p><p>  ML: 采用了buffer std_logic_vector(3 downto 0) 數(shù)組進行編寫,顯示投入金額數(shù)碼顯

19、示的高4位,使顯示的內(nèi)容更加直觀。</p><p>  ML: 采用了buffer std_logic_vector(3 downto 0) 數(shù)組進行編寫,投入金額數(shù)碼顯示的低4位,使顯示的內(nèi)容更加直觀。</p><p>  Mout: 高電平代表推出硬幣;</p><p>  Tout: 高電平顯示郵票已出貨;</p><p>  Char

20、ge: 用戶已取出零錢按鍵;</p><p>  Ok: 用戶已取出取郵票按鍵;</p><p>  2、architecture內(nèi)容</p><p>  本實訓根據(jù)之前的分析,我一共定義了5中狀態(tài),分別為a,b,c,d,e五種狀態(tài),他們分別代表著未投幣前電路的初始狀態(tài),投入五角硬幣以后的狀態(tài),投入一元硬幣(包括投一枚一元硬幣和兩枚五角硬幣人情況)以后的狀態(tài),,投

21、入一元五角硬幣以后的狀態(tài),投入兩元硬幣以后的狀態(tài),和一個money信號量。</p><p>  程序的開始,我先判斷是否按下了RESET按鍵,若按下則一切清零。若沒有按下RESET則開始用CASE語句來判斷money信號量的狀態(tài)。</p><p>  Money信號量為a狀態(tài)時,若投入一枚五角硬幣時,進入b狀態(tài);若投入一枚一元硬幣時,進入c狀態(tài)。</p><p> 

22、 Money信號量為b狀態(tài)時,若投入一枚五角硬幣,進入c狀態(tài);若投入一枚一元硬幣,進入d狀態(tài)。</p><p>  Money信號量為c狀態(tài)時,若投入一枚五角硬幣,進入d狀態(tài);若投入一枚一元硬幣,進入d狀態(tài)。</p><p>  Money信號量為d狀態(tài)時,若投入一枚五角硬幣,進入e狀態(tài);若投入一枚一元硬幣,進入a狀態(tài),同時顯示有郵票信號輸出,即tout為高電平。</p>&

23、lt;p>  Money信號量為e狀態(tài)時,若投入一枚五角硬幣,進入S0狀態(tài),同時顯示有郵票信號輸出,即tout為高電平;若投入一枚一元硬幣,進入S1狀態(tài),同時顯示有郵票和找零錢信號輸出,即tout為高電平,mout為高電平。</p><p>  如果MH=0010,ML=0101時,說明投入的金額和郵票的價值相等,那么同時按鍵OK已按下表示已取走郵票,即OK<=‘1’,則MH=0000,ML=0000

24、,顯示有郵票輸出變?yōu)榈碗娖剑碩out<=’0’。 如果MH=0011,ML=0000時,說明投入的金額大于郵票的價值,那么同時按鍵OK已按下表示已取走郵票,即OK<=‘1’,則MH=0000,ML=0101,顯示有郵票輸出變?yōu)榈碗娖?,即Tout<=’0’, 顯示有零錢輸出變?yōu)楦唠娖?,即Mout<=’1’。 如果MH=0011,ML=0000時,說明投入的金額大于郵票的價值,那么同時按鍵OK已按下表示已取走郵票,

25、即OK<=‘1’,并且按鍵Charge已按下表示已取走零錢即Charge為高電平,則MH=0000,ML=0000,顯示有郵票輸出變?yōu)榈碗娖剑碩out<=’0’, 顯示有零錢輸出變?yōu)榈碗娖?,即Mout<=’0’。</p><p><b>  (二)時序仿真</b></p><p>  本次實訓我主要負責時序仿真部分設定one,half與reset三

26、個系統(tǒng)輸入信號,可觀察到系統(tǒng)輸出信號tout,mout與輸出全局信號ok與cancel的波形,ok與charge信號用來維持ok與charge按鍵操作的狀態(tài)。</p><p><b>  1、新建VWF文件</b></p><p>  2、確定仿真時間和網(wǎng)絡寬度</p><p>  我設置的ENDTIME為500MS,GRIDSIZE為10MS

27、</p><p>  3、導入輸入輸出信號量并設置輸入信號</p><p>  為了測試每一種情況我采用了如下的輸入方法:</p><p>  第一次:分別放入5個五角硬幣,預計結果,結果應該為有郵票輸出,但是沒有找零輸出。</p><p>  第二次:分別放入4個五角硬幣,1個一元硬幣,預計結果,結果應該為有郵票輸出,而且有找零輸出。<

28、;/p><p>  第三次:分別放入3個五角硬幣,1個一元硬幣,預計結果,結果應該為有郵票輸出,但是沒有找零輸出。</p><p>  第四次:分別放入2個五角硬幣,2個一元硬幣,預計結果,結果應該為有郵票輸出,并且有找零輸出。</p><p>  第五次:分別放入1個五角硬幣,2個一元硬幣,預計結果,結果應該為有郵票輸出,但是沒有找零輸出。</p>&l

29、t;p>  第六次:分別放入3個一元硬幣,預計結果,結果應該為有郵票輸出,并且有找零輸出。</p><p>  第七次:我先放入1個五角硬幣,然后按下RESET按鍵,預計結果,一切清零。</p><p>  五、調(diào)試過程中遇到的問題及解決方法</p><p>  本次調(diào)試過程總體來講進行的比較順利,但是還是遇到了一點問題:</p><p&g

30、t;  問題1:編譯錯誤,程序沒有問題,提示entity不存在。</p><p>  解決方法:這時我發(fā)現(xiàn),由于我的馬虎,我的文件名稱和ENTITY不相同,我馬上改正過來,程序才順利編譯。</p><p>  問題2:在初期我們?yōu)榱撕喕悸罚瑳]有設定ok 和charge 兩個信號量,但是當進行仿真的時候,出現(xiàn)了這樣一個問題:一旦投入的錢數(shù)達到了郵票的價錢,那么每有一個時鐘脈沖,那么都會出一

31、個郵票,只能通過每次都按下復位按鍵,來進行清零,這樣既不方便,又不能是使用者有更好的體驗。</p><p>  解決方法:我們新加入了ok 和 charge 兩個信號量。當ok 按鍵按下,系統(tǒng)自動扣除一張郵票的價錢并且tout變?yōu)?,當charge 按鍵按下,扣除已經(jīng)取走的零錢的價錢并且mout變?yōu)?。</p><p><b>  六、結果與分析</b></p&

32、gt;<p>  本次實訓的輸出信號量為mh顯示用戶投放的元數(shù),ml顯示用戶投放的角數(shù),tout為有郵票輸出,mout為有零錢輸出。本次實訓的結果描述如下:若投入的錢數(shù)不超過郵票價值,則輸出mout為0,tout為0,還要繼續(xù)投入硬幣;若投入的錢數(shù)正好為郵票的價值時,則輸出的mout為0,tout為1,需要取出郵票;若投入的錢數(shù)大于郵票的價值時,則輸出的mout為1,tout為1,需要取出郵票以及取出找出的零錢;若我按下了

33、清零鍵reset,則系統(tǒng)清零 mh為0,ml為0,mout為0,tout 為0。</p><p>  以下是我們小組仿真出來的結果:</p><p>  圖6.2 時序仿真結果圖(1)</p><p>  圖6.3 時序仿真結果圖(2)</p><p>  圖6.1 時序仿真結果圖(3)</p><p>  圖6.4

34、時序仿真結果圖(4)</p><p>  如圖可以看出,分析的結果和仿真的結果完全一致。</p><p><b>  七、收獲與體會</b></p><p>  雖然實訓僅僅進行了兩個星期就匆匆的結束了,但在這兩個星期中收獲還是很多的。實訓的目的是要把學過的東西拿出來用這一個星期的實訓中不僅用了而且對于quartus2軟件的使用也更加的得心應手

35、,,我設計并完成了自動售郵票機的設計,并用Quartus仿真出了波形圖。該自動售郵票機有識別硬幣、顯示余額、總額余額的計算、找零、出貨、復位等功能,能夠計本達到人們的使用要求。</p><p>  這次實訓提高了我們的動手能力、理論聯(lián)系實際的能力、發(fā)現(xiàn)問題分析問題解決問題的能力。實訓只要你認真做了都是對自己能力一次很大的提高。</p><p>  在試訓中我們遇到了很多的問題。為了解決這些

36、問題我們都在的想辦法通過各種渠道尋找解決問題的方法。上網(wǎng)查資料、問同學、圖書館查資料、問老師、自己想辦法,其實最有效的方法還是自己去想那樣學到的東西才會更加的深刻記得時間也是最長的,他人的幫助當然是很好的,但只是暫時的要想真正的學到東西還是要靠自己去想辦法。不能一有問題就希望要他人幫忙,一定自己先好好想想實在解決不了的再去問老師找同學。</p><p>  這是一次有意義的EDA實驗設計課題,也是一次綜合性很強的

37、實驗,通過這次實驗課題設計,不僅加深了我們對EDA設計思路的理解,更重要的是對VHDL語言以及其中的狀態(tài)機的設計與應用有了更進一步的了解,使我們的設計思路有了進一步的提高,而且進一步的回顧并鞏固了以前所學的知識。也讓我們嘗到一步步將問題克服收獲到成功的喜悅,堅定了我們克服困難解決問題的意志,在這一次實驗中,我們小組也充分發(fā)揮了小組的力量,認識到合作的精神所在,通過集體的合作,培養(yǎng)了我們每個人實際動手、分析問題、解決問題的能力,讓我們每個

38、人都受益匪淺!</p><p><b>  附錄:源程序清單</b></p><p><b>  --自動售郵票機</b></p><p><b>  --信號定義:</b></p><p>  --clk:時鐘信號;</p><p>  --reset

39、:系統(tǒng)復位清零;</p><p>  --half:5角硬幣模擬信號;</p><p>  --one:1元硬幣模擬信號;</p><p>  --mout:有找零錢輸出顯示;</p><p>  --tout:有郵票輸出信號;</p><p>  --charge:取零錢;</p><p>&

40、lt;b>  --ok:取郵票;</b></p><p>  --mh:投入金額數(shù)碼顯示的高4位;</p><p>  --ml:投入金額數(shù)碼顯示的低4位;</p><p>  library ieee;</p><p>  use ieee.std_logic_1164.all;</p><p> 

41、 use ieee.std_logic_unsigned.all;</p><p>  entity ticket is</p><p>  port(one,half,reset,clk,ok,charge:in std_logic;</p><p>  tout,mout:buffer std_logic;</p><p>  mh,ml

42、:buffer std_logic_vector(3 downto 0)</p><p><b>  );</b></p><p>  end ticket;</p><p>  architecture a_ticket of ticket is</p><p>  constant a:std_logic_vecto

43、r(2 downto 0):="000";</p><p>  constant b:std_logic_vector(2 downto 0):="001";</p><p>  constant c:std_logic_vector(2 downto 0):="010";</p><p>  consta

44、nt d:std_logic_vector(2 downto 0):="011";</p><p>  constant e:std_logic_vector(2 downto 0):="100";</p><p>  signal money:std_logic_vector(2 downto 0);</p><p><

45、;b>  begin</b></p><p>  process(clk,reset,half,one,ok,charge,mh,ml,tout,mout,money)</p><p><b>  begin</b></p><p>  if (clk'event and clk='1')then<

46、;/p><p>  if(reset='1')then</p><p>  tout<='0';mout<='0';money<=a;mh<="0000";ml<="0000";</p><p><b>  end if;</b>&

47、lt;/p><p>  case money is</p><p><b>  when a =></b></p><p>  if(half='1')then</p><p>  money<=b;mh<="0000";ml<="0101";&

48、lt;/p><p>  elsif(one='1')then</p><p>  money<=c;mh<="0001";ml<="0000";</p><p><b>  end if;</b></p><p><b>  when b =

49、></b></p><p>  if(half='1')then</p><p>  money<=c;mh<="0001";ml<="0000";</p><p>  elsif(one='1')then</p><p>  mone

50、y<=d;mh<="0001";ml<="0101";</p><p><b>  end if;</b></p><p><b>  when c =></b></p><p>  if(half='1')then</p>&l

51、t;p>  money<=d;mh<="0001";ml<="0101";</p><p>  elsif(one='1')then</p><p>  money<=e;mh<="0010";ml<="0000";</p><p&g

52、t;<b>  end if;</b></p><p><b>  when d =></b></p><p>  if(half='1')then</p><p>  money<=e;mh<="0010";ml<="0000";</p

53、><p>  elsif(one='1')then</p><p>  money<=a;mh<="0010";ml<="0101";mout<='0';tout<='1';</p><p><b>  end if;</b><

54、;/p><p><b>  when e =></b></p><p>  if(half='1')then</p><p>  money<=a;mh<="0010";ml<="0101";tout<='1';mout<='0

55、9;;</p><p>  elsif(one='1')then</p><p>  money<=a;mh<="0011";ml<="0000";tout<='1';mout<='1';</p><p><b>  end if;<

56、/b></p><p>  when others =>null;</p><p><b>  end case;</b></p><p>  if((mh="0010")and(ml="0101"))then</p><p>  if (ok='1')

57、then</p><p>  tout<='0';mout<='0';mh<="0000";ml<="0000";</p><p><b>  end if;</b></p><p><b>  end if;</b></

58、p><p>  if((mh="0011")and(ml="0000"))then</p><p>  if (ok='1')then</p><p>  tout<='0';mout<='1';mh<="0000";ml<="0

59、101";</p><p><b>  end if;</b></p><p><b>  end if;</b></p><p>  if((charge='1')and(mout='1'))then</p><p>  mout<='0&#

60、39;;mh<="0000";ml<="0000";</p><p><b>  end if;</b></p><p><b>  end if;</b></p><p>  end process;</p><p>  end a_ticket

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論