版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 數(shù)字系統(tǒng)課程設(shè)計(jì)報(bào)告</p><p> 課題名稱(chēng):自動(dòng)售郵票機(jī)</p><p><b> 功能介紹</b></p><p> 機(jī)器有3個(gè)投幣按鍵,代表3種硬幣輸入(1元,5角和1 角)。每按一鍵,表示投入一枚硬幣,購(gòu)票者可選擇的郵票面值有1元和5角兩種,每次售出1 枚郵票。</p><p>
2、 購(gòu)票者投幣后,按動(dòng)確認(rèn)鍵,機(jī)器將發(fā)出郵票和找零硬幣,若所投金額不足則發(fā)出“欠資”指示。</p><p> 郵票面值(1元,5 角)也各用一個(gè)按鍵代表,按動(dòng)某個(gè)鍵,表示選購(gòu)某種面值的郵票同時(shí)可安排兩只發(fā)光二極管指示所選的面值。</p><p> 投入的總金額用兩只數(shù)碼管顯示。其顯示的數(shù)字應(yīng)隨著硬幣的投入或找出而變化。</p><p> 機(jī)器有兩個(gè)輸出孔(這里用
3、兩個(gè)發(fā)光二極管代表),一個(gè)輸出郵票,一個(gè)輸出找回的硬幣。</p><p> 欠資信號(hào)和拒收信號(hào)可用發(fā)光二極管或其它方法表示,兩種信號(hào)應(yīng)有所區(qū)別。</p><p><b> 原理概述</b></p><p> 任何復(fù)雜的數(shù)字系統(tǒng)最終都可以分解成基本門(mén)電路和寄存器電路單元,根據(jù)這個(gè)思路,在采用VHDL語(yǔ)言進(jìn)行數(shù)字系統(tǒng)設(shè)計(jì)過(guò)程中,也可以將設(shè)計(jì)目
4、標(biāo)進(jìn)行設(shè)計(jì),在各層次上分別設(shè)計(jì);或者將目標(biāo)分解成一些模塊,各模塊同時(shí)進(jìn)行設(shè)計(jì),最后進(jìn)行組合聯(lián)調(diào),并在不同的層次上進(jìn)行仿真驗(yàn)證,即使發(fā)現(xiàn)錯(cuò)誤并加以糾正。</p><p> 我們?cè)谠O(shè)計(jì)自動(dòng)售郵票機(jī)時(shí),根據(jù)系統(tǒng)結(jié)構(gòu)將其分為三個(gè)模塊(選票模塊、計(jì)數(shù)模塊、結(jié)果模塊),經(jīng)過(guò)分析,要實(shí)現(xiàn)自動(dòng)售郵,首先,要讓機(jī)器接受一個(gè)“所需何種郵票”的信號(hào)來(lái)對(duì)系統(tǒng)進(jìn)行初始化,即為計(jì)數(shù)器置數(shù),為此我們?cè)O(shè)計(jì)了第一個(gè)模塊——選票模塊;其次,用戶應(yīng)
5、該開(kāi)始投幣,機(jī)器應(yīng)根據(jù)用戶的不同的投幣信號(hào)做出不同的計(jì)數(shù)響應(yīng),為此我們?cè)O(shè)計(jì)了第二個(gè)模塊——計(jì)數(shù)模塊;最后,當(dāng)用戶發(fā)出投幣結(jié)束信號(hào)時(shí),機(jī)器要根據(jù)用戶最終的投幣情況做出出票、找零、或是警告等響應(yīng)信號(hào),來(lái)完成整個(gè)售郵過(guò)程,為此我們?cè)O(shè)計(jì)最后一個(gè)模塊——結(jié)果模塊。</p><p> 之后,我們對(duì)各個(gè)模塊同時(shí)進(jìn)行了設(shè)計(jì),分別編譯,仿真驗(yàn)證,定義具體的模塊端口,再組合成一個(gè)系統(tǒng),各模塊通過(guò)一些信號(hào)進(jìn)行相互驅(qū)動(dòng),實(shí)現(xiàn)電路功能。
6、</p><p><b> 設(shè)計(jì)過(guò)程</b></p><p><b> 模塊劃分</b></p><p> 根據(jù)原理分析可知,我們將電路分成三個(gè)模塊:選票模塊,計(jì)數(shù)模塊,結(jié)果模塊。</p><p><b> 模塊設(shè)計(jì)</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> 計(jì)數(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軟件分別對(duì)各個(gè)模塊進(jìn)行仿真
42、,通過(guò)對(duì)波形的觀察,不斷糾錯(cuò)并對(duì)已有程序進(jìn)行修改,知道波形仿真正確為止。(具體波形將文件夾中所附的相關(guān)的max+plus文件)</p><p><b> 組合電路并仿真</b></p><p><b> 波形仿真見(jiàn)相關(guān)附件</b></p><p><b> 使用說(shuō)明</b></p>
43、<p> 下面是使用此自動(dòng)售郵票機(jī)的幾種情況及說(shuō)明:</p><p><b> 購(gòu)買(mǎi)5角錢(qián)郵票</b></p><p> 按下sel_5按鈕,選擇購(gòu)買(mǎi)5角錢(qián)的郵票。</p><p> 此時(shí),如果投入5角錢(qián)硬幣,并按確認(rèn),則stamp為高電平,出郵票;</p><p> 如果投入1元硬幣,并按確認(rèn),則
44、charge和stamp同時(shí)為高,在出郵票的同時(shí)找零 錢(qián)。</p><p><b> 2)購(gòu)買(mǎi)1元錢(qián)郵票</b></p><p> 按下sel_1按鈕,選擇購(gòu)買(mǎi)1元錢(qián)的郵票。</p><p> 此時(shí),如果投入5角錢(qián)硬幣,并按確認(rèn),則warn出高電平,與它連接的燈led燈亮,表示沒(méi)有投入足夠的錢(qián);</p><
45、p> 如果兩次投入5角錢(qián)硬幣,并按確認(rèn),則stamp出高電平,出郵票;</p><p> 如果投入1元錢(qián)硬幣,并按確認(rèn),則stamp出高電平,出郵票。</p><p> 如果在使用時(shí)按下cancel鍵,則重新投幣。</p><p> 問(wèn)題解決與設(shè)計(jì)技巧總結(jié)</p><p> 數(shù)字課程設(shè)計(jì)牽涉到一種新的硬件計(jì)算機(jī)語(yǔ)言的運(yùn)用,設(shè)計(jì)
46、過(guò)程中也遇到了很多語(yǔ)言描述的問(wèn)題,這里就不再贅述了。</p><p><b> 分模塊</b></p><p> 對(duì)于自動(dòng)售郵票機(jī)的設(shè)計(jì),我們?cè)臼窍胗靡粋€(gè)模塊完全實(shí)現(xiàn)的,但在編程的過(guò)程中,我們發(fā)現(xiàn)這種方案不但編程繁瑣,而且編譯根本無(wú)法通過(guò),仿真也無(wú)法實(shí)現(xiàn),最后我們采取層次化的設(shè)計(jì),將整個(gè)系統(tǒng)分成三個(gè)模塊,分別編程,編譯以及仿真,最后將模塊互相連接,相互驅(qū)動(dòng),最后
47、得出正確的輸出結(jié)果。</p><p> 如何讀取開(kāi)關(guān)脈沖信號(hào)</p><p> 在設(shè)計(jì)過(guò)程中我們發(fā)現(xiàn),開(kāi)關(guān)輸入信號(hào)僅僅是一種脈沖信號(hào),只在按鍵的瞬間實(shí)現(xiàn)一次跳變,之后就無(wú)法檢測(cè)到信號(hào)的變化,這樣要求系統(tǒng)同時(shí)檢測(cè)到所有開(kāi)關(guān)輸入信號(hào)幾乎是不可能的,編譯常常會(huì)提示時(shí)鐘信號(hào)太復(fù)雜,為解決這一問(wèn)題,我們引入統(tǒng)一的時(shí)鐘信號(hào)CLK,以時(shí)鐘的上升沿為系統(tǒng)刷新時(shí)刻,以此來(lái)監(jiān)測(cè)各開(kāi)關(guān)的狀態(tài),然后對(duì)開(kāi)關(guān)的輸
48、入,做出的相應(yīng)的系統(tǒng)響應(yīng)。</p><p> 如何處理數(shù)據(jù)加載的延時(shí)問(wèn)題</p><p> 設(shè)計(jì)過(guò)程中,通過(guò)分塊仿真,發(fā)現(xiàn)計(jì)數(shù)器的置數(shù)要晚一個(gè)時(shí)鐘,如果這段時(shí)間內(nèi),如果系統(tǒng)處于計(jì)數(shù)狀態(tài),那么可能在沒(méi)有成功置數(shù)的情況下,就會(huì)進(jìn)入計(jì)數(shù)環(huán)節(jié),導(dǎo)致系統(tǒng)輸出出錯(cuò),此時(shí),我們考慮在數(shù)據(jù)加載的過(guò)程中,插入一段時(shí)間的延時(shí),讓系統(tǒng)處于等待狀態(tài),而不進(jìn)入計(jì)數(shù)狀態(tài),等數(shù)據(jù)加載完成后再開(kāi)關(guān)的計(jì)數(shù)信號(hào)(具體實(shí)現(xiàn)
49、方案見(jiàn)報(bào)告中的程序)。</p><p> 如何合理安排if條件的判斷的順序</p><p> 仔細(xì)看看我們?cè)O(shè)計(jì)中所編的程序可以發(fā)現(xiàn)里面充滿了if語(yǔ)句的運(yùn)用,通過(guò)if——elsif——else——end if的結(jié)構(gòu),讓系統(tǒng)很有條理的對(duì)不同的情況作出不同的正確響應(yīng),對(duì)于較為復(fù)雜的情況還可以運(yùn)用if中嵌套if的結(jié)構(gòu)進(jìn)行判斷,在運(yùn)用if語(yǔ)句的過(guò)程中,一定要合理安排條件判斷的順序,否則系統(tǒng)在判別
50、時(shí)容易遇到無(wú)法判斷的矛盾,以致出錯(cuò)。</p><p> 正確利用信號(hào)量實(shí)現(xiàn)反饋與控制</p><p> 應(yīng)為我們的設(shè)計(jì)通過(guò)模塊化實(shí)現(xiàn),每個(gè)模塊又分許多過(guò)程并行響應(yīng),所以過(guò)程與過(guò)程之間,模塊與模塊之間的信號(hào)傳遞十分重要,在設(shè)計(jì)中,我們?cè)O(shè)計(jì)了很多的信號(hào)量(向量)如:數(shù)碼管的高低位輸出就有中間信號(hào)A、B進(jìn)行傳輸,還設(shè)置了一些數(shù)值變量,如模塊二中的number,通過(guò)對(duì)其的不停賦值,實(shí)現(xiàn)了計(jì)數(shù)器
51、的置數(shù),及不同步長(zhǎng)的計(jì)數(shù)模式;同時(shí),利用一些信號(hào)量,也可以實(shí)現(xiàn)反饋,及時(shí)的通知其它并行過(guò)程應(yīng)該切換到什么模式下繼續(xù)工作,以便控制系統(tǒng)的工作順序和節(jié)奏。</p><p><b> 參考文獻(xiàn)</b></p><p> 楊恒 盧飛成 《FPGA/VHDL快速工程實(shí)踐入門(mén)與提高》 北京航空航天大學(xué)出版社</p><p> 王振宏
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)字系統(tǒng)課程設(shè)計(jì)報(bào)告--自動(dòng)售郵票機(jī)
- 集成電路eda的課程設(shè)計(jì)-- 自動(dòng)售郵票機(jī)的設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---自動(dòng)打系統(tǒng)
- 單片機(jī)課程設(shè)計(jì)--自動(dòng)滴灌系統(tǒng)設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)-數(shù)字秒表系統(tǒng)設(shè)計(jì)
- 數(shù)字錄音機(jī)課程設(shè)計(jì)
- plc課程設(shè)計(jì)---全自動(dòng)洗衣機(jī)系統(tǒng)
- atm機(jī)課程設(shè)計(jì)--atm自動(dòng)粗取款系統(tǒng)
- 銀行atm自動(dòng)取款機(jī)系統(tǒng)課程設(shè)計(jì)
- 數(shù)字錄音機(jī)課程設(shè)計(jì)
- 自動(dòng)滾動(dòng)廣告機(jī)課程設(shè)計(jì)
- 自動(dòng)洗碗機(jī)課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)之自動(dòng)打鈴系統(tǒng)
- 銀行atm自動(dòng)取款機(jī)系統(tǒng)課程設(shè)計(jì)
- 課程設(shè)計(jì)報(bào)告---atm自動(dòng)提款機(jī)系統(tǒng)
- 自動(dòng)繞線機(jī)課程設(shè)計(jì)
- 自動(dòng)洗碗機(jī)課程設(shè)計(jì)
- 基于單片機(jī)自動(dòng)取款機(jī)系統(tǒng)課程設(shè)計(jì)
- 自動(dòng)鏈條編結(jié)機(jī)課程設(shè)計(jì)
- 自動(dòng)洗衣機(jī)課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論