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

下載本文檔

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

文檔簡介

1、<p>  數(shù)字系統(tǒng)課程設(shè)計報告</p><p>  課題名稱:自動售郵票機(jī)</p><p><b>  功能介紹</b></p><p>  機(jī)器有3個投幣按鍵,代表3種硬幣輸入(1元,5角和1 角)。每按一鍵,表示投入一枚硬幣,購票者可選擇的郵票面值有1元和5角兩種,每次售出1 枚郵票。</p><p> 

2、 購票者投幣后,按動確認(rèn)鍵,機(jī)器將發(fā)出郵票和找零硬幣,若所投金額不足則發(fā)出“欠資”指示。</p><p>  郵票面值(1元,5 角)也各用一個按鍵代表,按動某個鍵,表示選購某種面值的郵票同時可安排兩只發(fā)光二極管指示所選的面值。</p><p>  投入的總金額用兩只數(shù)碼管顯示。其顯示的數(shù)字應(yīng)隨著硬幣的投入或找出而變化。</p><p>  機(jī)器有兩個輸出孔(這里用

3、兩個發(fā)光二極管代表),一個輸出郵票,一個輸出找回的硬幣。</p><p>  欠資信號和拒收信號可用發(fā)光二極管或其它方法表示,兩種信號應(yīng)有所區(qū)別。</p><p><b>  原理概述</b></p><p>  任何復(fù)雜的數(shù)字系統(tǒng)最終都可以分解成基本門電路和寄存器電路單元,根據(jù)這個思路,在采用VHDL語言進(jìn)行數(shù)字系統(tǒng)設(shè)計過程中,也可以將設(shè)計目

4、標(biāo)進(jìn)行設(shè)計,在各層次上分別設(shè)計;或者將目標(biāo)分解成一些模塊,各模塊同時進(jìn)行設(shè)計,最后進(jìn)行組合聯(lián)調(diào),并在不同的層次上進(jìn)行仿真驗證,即使發(fā)現(xiàn)錯誤并加以糾正。</p><p>  我們在設(shè)計自動售郵票機(jī)時,根據(jù)系統(tǒng)結(jié)構(gòu)將其分為三個模塊(選票模塊、計數(shù)模塊、結(jié)果模塊),經(jīng)過分析,要實(shí)現(xiàn)自動售郵,首先,要讓機(jī)器接受一個“所需何種郵票”的信號來對系統(tǒng)進(jìn)行初始化,即為計數(shù)器置數(shù),為此我們設(shè)計了第一個模塊——選票模塊;其次,用戶應(yīng)

5、該開始投幣,機(jī)器應(yīng)根據(jù)用戶的不同的投幣信號做出不同的計數(shù)響應(yīng),為此我們設(shè)計了第二個模塊——計數(shù)模塊;最后,當(dāng)用戶發(fā)出投幣結(jié)束信號時,機(jī)器要根據(jù)用戶最終的投幣情況做出出票、找零、或是警告等響應(yīng)信號,來完成整個售郵過程,為此我們設(shè)計最后一個模塊——結(jié)果模塊。</p><p>  之后,我們對各個模塊同時進(jìn)行了設(shè)計,分別編譯,仿真驗證,定義具體的模塊端口,再組合成一個系統(tǒng),各模塊通過一些信號進(jìn)行相互驅(qū)動,實(shí)現(xiàn)電路功能。

6、</p><p><b>  設(shè)計過程</b></p><p><b>  模塊劃分</b></p><p>  根據(jù)原理分析可知,我們將電路分成三個模塊:選票模塊,計數(shù)模塊,結(jié)果模塊。</p><p><b>  模塊設(shè)計</b></p><p>&l

7、t;b>  選票模塊</b></p><p>  LIBRARY IEEE;</p><p>  USE IEEE.STD_LOGIC_1164.ALL;</p><p>  USE IEEE.STD_LOGIC_ARITH.ALL;</p><p>  ENTITY stamp_seller IS</p>&

8、lt;p><b>  PORT(</b></p><p>  sel_1: in std_logic;</p><p>  sel_5: in std_logic;</p><p>  clk: in std_logic;</p><p>  cancel: in std_logic;</p>

9、<p>  sta_1: out std_logic;</p><p>  sta_5: out std_logic</p><p><b>  );</b></p><p>  end stamp_seller;</p><p>  ARCHITECTURE rtl OF stamp_seller I

10、S</p><p>  SIGNAL a:std_logic;</p><p>  SIGNAL b:std_logic;</p><p><b>  BEGIN</b></p><p>  process(sel_1,sel_5,cancel,clk)</p><p><b>  be

11、gin</b></p><p>  IF(clk'EVENT AND clk='1') THEN</p><p>  IF(sel_1='1') THEN</p><p><b>  A<='1';</b></p><p>  ELSIF(sel_

12、5='1')THEN</p><p><b>  B<='1';</b></p><p>  ELSIF(CANCEL='1')THEN</p><p><b>  A<='0';</b></p><p><b>

13、  B<='0';</b></p><p><b>  END IF;</b></p><p><b>  END IF;</b></p><p>  END PROCESS;</p><p>  sta_1 <= a;</p><p>

14、;  sta_5 <= b;</p><p><b>  END rtl;</b></p><p><b>  計數(shù)模塊</b></p><p>  LIBRARY IEEE;</p><p>  USE IEEE.STD_LOGIC_1164.ALL;</p><p>

15、;  ENTITY COUNTER IS</p><p><b>  PORT(</b></p><p>  i: in std_logic;</p><p>  j: in std_logic;</p><p>  k: in std_logic;</p><p>

16、  clk: in std_logic;</p><p>  S1: IN STD_LOGIC;</p><p>  S2: IN STD_LOGIC;</p><p>  high: out std_logic_vector(7 downto 0);</p><p>  low: out std_logic_

17、vector(7 downto 0)</p><p><b>  );</b></p><p>  END COUNTER;</p><p>  ARCHITECTURE BEHAV OF COUNTER IS</p><p>  SIGNAL N:STD_LOGIC_VECTOR(3 DOWNTO 0);</p&

18、gt;<p>  SIGNAL A:std_logic_vector(7 DOWNTO 0);</p><p>  SIGNAL B:std_logic_vector(7 DOWNTO 0);</p><p>  SIGNAL X:STD_LOGIC;</p><p><b>  BEGIN</b></p><

19、p>  PROCESS(clk,S1,S2)</p><p><b>  begin</b></p><p>  IF(clk'EVENT AND clk='1') THEN</p><p>  IF(S1='1')THEN</p><p>  N <= "1

20、010";</p><p>  ELSIF(S2='1')THEN</p><p>  N <= "0101";</p><p>  ELSE N<="0000";</p><p><b>  END IF;</b></p>&l

21、t;p><b>  END IF;</b></p><p>  END PROCESS;</p><p>  PROCESS(N,clk)</p><p>  VARIABLE number: INTEGER RANGE -10 TO 10;</p><p>  variable cnt: integer rang

22、e 0 to 20;</p><p><b>  BEGIN</b></p><p>  IF(clk'event and clk='1')then</p><p>  IF(x='1') THEN</p><p>  IF(i='1') THEN </p&g

23、t;<p>  number:=number-1;</p><p>  ELSIF(j='1') THEN</p><p>  number:=number-5;</p><p>  ELSIF(k='1') THEN</p><p>  number:=number-10;</p>

24、<p>  ELSIF number=10 THEN</p><p>  A <="00000110";</p><p>  ELSIF number<0 THEN</p><p>  A <="01000000";</p><p>  number:=0-number;&

25、lt;/p><p>  ELSIF number<10 and number>0 then</p><p><b>  x <= '1';</b></p><p>  elsif number=0 then</p><p>  A <="00111111";<

26、/p><p><b>  END IF;</b></p><p><b>  ELSE</b></p><p><b>  CASE N IS</b></p><p>  WHEN "1010"=> number:=10;</p><p

27、>  WHEN "0101"=> number:=5;</p><p>  WHEN OTHERS=> number:=0;</p><p><b>  END CASE;</b></p><p>  if cnt<20 then</p><p>  cnt:=cnt+1;&l

28、t;/p><p>  else cnt:=0;</p><p><b>  x<='1';</b></p><p><b>  end if;</b></p><p><b>  END IF;</b></p><p><b>

29、;  END IF;</b></p><p>  CASE number IS</p><p>  WHEN 0=> B <="00111111";</p><p>  WHEN 1=> B <="00000110"; </p><p>  WHEN 2

30、=> B <="01011011";</p><p>  WHEN 3=> B <="01001111"; </p><p>  WHEN 4=> B <="01100110"; </p><p>  WHEN 5=> B <=

31、"01101101"; </p><p>  WHEN 6=> B <="01111101"; </p><p>  WHEN 7=> B <="00100111"; </p><p>  WHEN 8=> B <=&quo

32、t;01111111"; </p><p>  WHEN 9=> B <="01101111";</p><p>  WHEN 10=> B <="00111111";</p><p>  WHEN OTHERS => B <="01110110"

33、;; </p><p><b>  END CASE;</b></p><p>  END process;</p><p>  high <= A;</p><p>  low <= B;</p><p>  END BEHAV;</p&

34、gt;<p><b>  結(jié)果模塊</b></p><p>  library ieee;</p><p>  use ieee.std_logic_1164.all;</p><p>  entity warn is</p><p><b>  port(</b></p>

35、<p>  repay: in std_logic;</p><p>  clk: in std_logic;</p><p>  h: in std_logic_vector(7 downto 0);</p><p>  l: in std_logic_vector(7 downto 0);</p><

36、p>  charge: out std_logic;</p><p>  stamp: out std_logic;</p><p>  warn: out std_logic</p><p><b>  );</b></p><p><b>  end warn;</b></p&

37、gt;<p>  architecture cnt of warn is</p><p>  signal s:std_logic;</p><p><b>  begin</b></p><p>  process(h,l,repay,clk)</p><p><b>  begin</b

38、></p><p>  if(clk'event and clk='1')then</p><p>  if(repay='1')then</p><p>  IF h="01000000" THEN</p><p><b>  s <='1';

39、</b></p><p>  charge <='1';</p><p>  ELSIF (h/="00000110" AND l="00111111") THEN</p><p><b>  s <='1';</b></p><

40、p><b>  ELSE</b></p><p>  warn <='1';</p><p><b>  END IF;</b></p><p><b>  end if;</b></p><p><b>  end if;</b&g

41、t;</p><p>  stamp <= s;</p><p>  end process;</p><p><b>  END cnt;</b></p><p><b>  分塊編譯并仿真</b></p><p>  利用MAX +PLUS軟件分別對各個模塊進(jìn)行仿真

42、,通過對波形的觀察,不斷糾錯并對已有程序進(jìn)行修改,知道波形仿真正確為止。(具體波形將文件夾中所附的相關(guān)的max+plus文件)</p><p><b>  組合電路并仿真</b></p><p><b>  波形仿真見相關(guān)附件</b></p><p><b>  使用說明</b></p>

43、<p>  下面是使用此自動售郵票機(jī)的幾種情況及說明:</p><p><b>  購買5角錢郵票</b></p><p>  按下sel_5按鈕,選擇購買5角錢的郵票。</p><p>  此時,如果投入5角錢硬幣,并按確認(rèn),則stamp為高電平,出郵票;</p><p>  如果投入1元硬幣,并按確認(rèn),則

44、charge和stamp同時為高,在出郵票的同時找零 錢。</p><p><b>  2)購買1元錢郵票</b></p><p>  按下sel_1按鈕,選擇購買1元錢的郵票。</p><p>  此時,如果投入5角錢硬幣,并按確認(rèn),則warn出高電平,與它連接的燈led燈亮,表示沒有投入足夠的錢;</p><

45、p>  如果兩次投入5角錢硬幣,并按確認(rèn),則stamp出高電平,出郵票;</p><p>  如果投入1元錢硬幣,并按確認(rèn),則stamp出高電平,出郵票。</p><p>  如果在使用時按下cancel鍵,則重新投幣。</p><p>  問題解決與設(shè)計技巧總結(jié)</p><p>  數(shù)字課程設(shè)計牽涉到一種新的硬件計算機(jī)語言的運(yùn)用,設(shè)計

46、過程中也遇到了很多語言描述的問題,這里就不再贅述了。</p><p><b>  分模塊</b></p><p>  對于自動售郵票機(jī)的設(shè)計,我們原本是想用一個模塊完全實(shí)現(xiàn)的,但在編程的過程中,我們發(fā)現(xiàn)這種方案不但編程繁瑣,而且編譯根本無法通過,仿真也無法實(shí)現(xiàn),最后我們采取層次化的設(shè)計,將整個系統(tǒng)分成三個模塊,分別編程,編譯以及仿真,最后將模塊互相連接,相互驅(qū)動,最后

47、得出正確的輸出結(jié)果。</p><p>  如何讀取開關(guān)脈沖信號</p><p>  在設(shè)計過程中我們發(fā)現(xiàn),開關(guān)輸入信號僅僅是一種脈沖信號,只在按鍵的瞬間實(shí)現(xiàn)一次跳變,之后就無法檢測到信號的變化,這樣要求系統(tǒng)同時檢測到所有開關(guān)輸入信號幾乎是不可能的,編譯常常會提示時鐘信號太復(fù)雜,為解決這一問題,我們引入統(tǒng)一的時鐘信號CLK,以時鐘的上升沿為系統(tǒng)刷新時刻,以此來監(jiān)測各開關(guān)的狀態(tài),然后對開關(guān)的輸

48、入,做出的相應(yīng)的系統(tǒng)響應(yīng)。</p><p>  如何處理數(shù)據(jù)加載的延時問題</p><p>  設(shè)計過程中,通過分塊仿真,發(fā)現(xiàn)計數(shù)器的置數(shù)要晚一個時鐘,如果這段時間內(nèi),如果系統(tǒng)處于計數(shù)狀態(tài),那么可能在沒有成功置數(shù)的情況下,就會進(jìn)入計數(shù)環(huán)節(jié),導(dǎo)致系統(tǒng)輸出出錯,此時,我們考慮在數(shù)據(jù)加載的過程中,插入一段時間的延時,讓系統(tǒng)處于等待狀態(tài),而不進(jìn)入計數(shù)狀態(tài),等數(shù)據(jù)加載完成后再開關(guān)的計數(shù)信號(具體實(shí)現(xiàn)

49、方案見報告中的程序)。</p><p>  如何合理安排if條件的判斷的順序</p><p>  仔細(xì)看看我們設(shè)計中所編的程序可以發(fā)現(xiàn)里面充滿了if語句的運(yùn)用,通過if——elsif——else——end if的結(jié)構(gòu),讓系統(tǒng)很有條理的對不同的情況作出不同的正確響應(yīng),對于較為復(fù)雜的情況還可以運(yùn)用if中嵌套if的結(jié)構(gòu)進(jìn)行判斷,在運(yùn)用if語句的過程中,一定要合理安排條件判斷的順序,否則系統(tǒng)在判別

50、時容易遇到無法判斷的矛盾,以致出錯。</p><p>  正確利用信號量實(shí)現(xiàn)反饋與控制</p><p>  應(yīng)為我們的設(shè)計通過模塊化實(shí)現(xiàn),每個模塊又分許多過程并行響應(yīng),所以過程與過程之間,模塊與模塊之間的信號傳遞十分重要,在設(shè)計中,我們設(shè)計了很多的信號量(向量)如:數(shù)碼管的高低位輸出就有中間信號A、B進(jìn)行傳輸,還設(shè)置了一些數(shù)值變量,如模塊二中的number,通過對其的不停賦值,實(shí)現(xiàn)了計數(shù)器

51、的置數(shù),及不同步長的計數(shù)模式;同時,利用一些信號量,也可以實(shí)現(xiàn)反饋,及時的通知其它并行過程應(yīng)該切換到什么模式下繼續(xù)工作,以便控制系統(tǒng)的工作順序和節(jié)奏。</p><p><b>  參考文獻(xiàn)</b></p><p>  楊恒 盧飛成 《FPGA/VHDL快速工程實(shí)踐入門與提高》 北京航空航天大學(xué)出版社</p><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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論