版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)字系統(tǒng)課程設(shè)計報告--自動售郵票機(jī)
- 集成電路eda的課程設(shè)計-- 自動售郵票機(jī)的設(shè)計
- 單片機(jī)課程設(shè)計---自動打系統(tǒng)
- 單片機(jī)課程設(shè)計--自動滴灌系統(tǒng)設(shè)計
- 單片機(jī)課程設(shè)計-數(shù)字秒表系統(tǒng)設(shè)計
- 數(shù)字錄音機(jī)課程設(shè)計
- plc課程設(shè)計---全自動洗衣機(jī)系統(tǒng)
- atm機(jī)課程設(shè)計--atm自動粗取款系統(tǒng)
- 銀行atm自動取款機(jī)系統(tǒng)課程設(shè)計
- 數(shù)字錄音機(jī)課程設(shè)計
- 自動滾動廣告機(jī)課程設(shè)計
- 自動洗碗機(jī)課程設(shè)計
- 單片機(jī)課程設(shè)計之自動打鈴系統(tǒng)
- 銀行atm自動取款機(jī)系統(tǒng)課程設(shè)計
- 課程設(shè)計報告---atm自動提款機(jī)系統(tǒng)
- 自動繞線機(jī)課程設(shè)計
- 自動洗碗機(jī)課程設(shè)計
- 基于單片機(jī)自動取款機(jī)系統(tǒng)課程設(shè)計
- 自動鏈條編結(jié)機(jī)課程設(shè)計
- 自動洗衣機(jī)課程設(shè)計
評論
0/150
提交評論