版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 畢業(yè)設(shè)計(論文)</b></p><p> 題 目: 基于FPGA的自動售貨</p><p> 機控制系統(tǒng)設(shè)計 </p><p> 專 業(yè): 應(yīng)用電子技術(shù)</p><p> 班 級: </p><p> 學(xué)
2、號: 39號</p><p> 姓 名: </p><p> 指導(dǎo)老師: </p><p><b> 二〇一三年五月</b></p><p><b> 論 文 摘 要</b></p><p> 隨著電子技術(shù)
3、的發(fā)展,當今數(shù)字系統(tǒng)的設(shè)計正朝著速度快,容量大,體積小,重量輕的方向發(fā)展,推動該潮流迅猛發(fā)展的引擎就是日趨進步和完善的ASIC設(shè)計技術(shù),AISC芯片具有價格低,體積小,可靠性高等優(yōu)點,目前在電子產(chǎn)品中已有廣泛的應(yīng)用,VHDL是一種用來描述數(shù)字邏輯系統(tǒng)的“編程語言”,它通過對硬件行為的直接描述來實現(xiàn)對硬件的物理實現(xiàn),代表了當今硬件設(shè)計的發(fā)展方向。</p><p> 本文是在VHDL的基礎(chǔ)上對自動售貨機進行設(shè)計來實
4、現(xiàn)其基本功能的,采用了Altera的開發(fā)軟件Quarts II。通過在該軟件平臺上進行數(shù)字電路設(shè)計和仿真的方法,闡述了VHDL(Very High Speed Integrated Circuit Hardware Description Language)超高速集成電路硬件描述語言的一些特點及語法結(jié)構(gòu),介紹了自動售貨機的基本原理、系統(tǒng)組成和主要功能,并分析討論了用VHDL語言開發(fā)自動售貨機系統(tǒng)的設(shè)計流程。本設(shè)計采用VHDL硬件描述語言
5、編程的設(shè)計方法設(shè)計系統(tǒng)核心電路的硬件程序,在Quartus II軟件平臺上進行編譯和仿真。 </p><p> 文章首先簡述了自動售貨機系統(tǒng)的意義和發(fā)展現(xiàn)狀以及VHDL語言的特點,然后介紹了自動售貨機的設(shè)計要求、設(shè)計思路,并給出了總體設(shè)計框圖,通過分析設(shè)計寫出VHDL程序源代碼,將代碼在Quartus II軟件平臺上進行編譯仿真,波形基本符合設(shè)計要求。最終完成的自動售貨機系統(tǒng)具有商品選擇,投幣處理、
6、出貨找零、異常退幣等主要功能,整個系統(tǒng)的開發(fā)體現(xiàn)了在Quartus II軟件平臺上用VHDL設(shè)計數(shù)字控制系統(tǒng)的實用性。</p><p> 關(guān)鍵詞:自動售貨機,硬件描述語言VHDL, Quarts II,F(xiàn)PGA</p><p><b> Abstract</b></p><p> With the development of elect
7、ronic technology, today's digital system design is moving fast, large capacity, small size, light weight and direction of development, and promote the rapid development of the trend is increasingly the engine of prog
8、ress and improvement of the ASIC design techniques, AISC chip has a low price, small size, high reliability, and is currently in electronic products has been widely used, VHDL is a digital logic system used to describe t
9、he "programming language", which ac</p><p> This article is based on the VHDL design for vending machines to achieve its basic functions, using Altera's development software Quarts II. By the
10、software platform for the digital circuit design and simulation method, elaborated VHDL (Very High Speed ??Integrated Circuit Hardware Description Language) high-speed integrated circuit hardware description language, so
11、me characteristics and grammatical structures introduced the basic principles of automatic vending machine , system components and m</p><p> The article first outlines the vending machine system development
12、 status as well as the meaning and characteristics of the VHDL language, then introduces the vending machine design requirements, design ideas, and gives the overall design diagram, through analysis and design to write V
13、HDL source code , the code in the Quartus II software platforms compiled simulation, waveform basically meet the design requirements. The finished product selection system has a vending machine, coin handling, shipp</
14、p><p> Key Words: Vending machines, VHDL, FPGA, The Quartus II</p><p><b> 目錄</b></p><p><b> 論 文 摘 要Ⅰ</b></p><p> AbstractⅡ</p><p&g
15、t;<b> 第1章 緒論1</b></p><p> 1.1題目背景與選題意義:1</p><p> 1.2設(shè)計方案比較與選擇:2</p><p> 1.3自動售貨機控制電路的性能要求:2</p><p> 第二章 自動售貨機控制電路總體設(shè)計3</p><p> 第三章
16、 自動售貨機控制電路各模塊信號分析5</p><p> 1.主分頻器模塊5</p><p> 2.主控制器模塊6</p><p> 3.選擇定時模塊6</p><p> 4.商品金額計算模塊6</p><p> 5.給錢處理模塊7</p><p> 6.找零出貨模塊7
17、</p><p> 第四章 自動售貨機控制電路的算法狀態(tài)機圖描述8</p><p> 1.主控制器模塊8</p><p> 1.1商品種類選擇控制狀態(tài)機圖8</p><p> 1.2.商品數(shù)量選擇控制狀態(tài)機圖8</p><p> 1.3.啟動/取消控制算法狀態(tài)機圖描述12</p>&l
18、t;p> 2. 選擇定時模塊12</p><p> 第五章 自動售貨機控制電路各模塊仿真結(jié)果及分析15</p><p> 1.主分頻器模塊仿真波形:15</p><p> 2.主控制器模塊仿真波形:15</p><p> 3.選擇的定時模塊仿真波形:16</p><p> 4.商品金額計算仿
19、真波形:16</p><p> 5.給錢處理模塊仿真波形:16</p><p> 6.找零出貨模塊仿真波形:17</p><p> 7.頂層模塊仿真波形:17</p><p> 第六章 自動售貨機控制電路的具體VHDL描述18</p><p> 1.主分頻器模塊18</p><
20、p> 2.主控制器模塊19</p><p> 3.選擇的定時模塊23</p><p> 4,商品金額計算模塊25</p><p> 5,給錢處理模塊27</p><p> 6,找零出貨模塊28</p><p><b> 7頂層文件29</b></p>&
21、lt;p><b> 結(jié)束語32</b></p><p><b> 致謝33</b></p><p><b> 參考文獻33</b></p><p><b> 第1章 緒論</b></p><p> 1.1題目背景與選題意義:<
22、/p><p> 隨著電子技術(shù)的發(fā)展,當今數(shù)字系統(tǒng)的設(shè)計正朝著速度快,容量大,體積小,重量輕的方向發(fā)展,推動該潮流迅猛發(fā)展的引擎就是日趨進步和完善的ASIC設(shè)計技術(shù)。本數(shù)字系統(tǒng)的設(shè)計可以直接面向用戶需求,根據(jù)系統(tǒng)的行為和功能要求,自上至下地逐層完成相應(yīng)的描述,綜合,優(yōu)化,仿真與驗證,直到生成器件。上述設(shè)計過程除了系統(tǒng)行為和功能描述以外,其余所有的設(shè)計過程幾乎都可以用計算機來自動地完成,也就是人們所謂的電子設(shè)計自動化,
23、這樣大大地縮短了系統(tǒng)的設(shè)計周期,以適應(yīng)當今品種多,批量小的電子市場的需求,提高產(chǎn)品的競爭能力。</p><p> VHDL是一種用來描述數(shù)字邏輯系統(tǒng)的“編程語言”,它通過對硬件行為的直接描述來實現(xiàn)對硬件的物理實現(xiàn),代表了當今硬件設(shè)計的發(fā)展方向。</p><p> 第一,VHDL功能強大,靈活性強:VHDL具有功能強大的語言結(jié)構(gòu),可用簡潔明確的代碼描述來進行復(fù)雜控制邏輯的設(shè)計,并且它為了
24、有效控制設(shè)計的實現(xiàn),它還具有多層次的設(shè)計描述功能,支持設(shè)計庫和可重復(fù)使用的元件生成,它還支持階層設(shè)計,并提供模塊設(shè)計的創(chuàng)建,VHDL是一種設(shè)計,模擬,綜合的標準硬件描述語言。</p><p> 第二,VHDL不依賴于器件設(shè)計:VHDL允許設(shè)計者生成一個設(shè)計,而并不需要首先選擇一個用來實現(xiàn)設(shè)計的器件,對于同一個設(shè)計描述,可以采用多種不同的器件結(jié)構(gòu)來實現(xiàn)其功能,若需要對設(shè)計進行資源利用和性能方面的優(yōu)化,也并不是要求
25、設(shè)計者非常熟悉器件的結(jié)構(gòu)才行。</p><p> 第三,VHDL可移植性:VHDL的可移植性允許設(shè)計者對需要綜合的設(shè)計描述進行模擬,在綜合前對一個數(shù)千門的設(shè)計描述進行模擬,可以節(jié)約設(shè)計者可觀的時間,在這時發(fā)現(xiàn)設(shè)計上的瑕疵,就能夠在設(shè)計之前給予糾正,因為VHDL是一個標準語言,故VHDL的設(shè)計 描述可以被不同的工具所支持,可以從一個模擬工具移植到另一個模擬工具,從一個綜合工具移植到另一個綜合工具,從一個工作平臺移
26、植到另一個工作平臺去執(zhí)行。</p><p> 第四,VHDL性能評估能力:非依賴器件的設(shè)計和可移植能力允許設(shè)計者采用不同的器件結(jié)構(gòu)和不同的綜合工具來評估設(shè)計,在設(shè)計者開始設(shè)計之前,無需了解將采用何種器件,設(shè)計者可以進行一個完整的設(shè)計描述,并且對其進行綜合,生成選定的器件結(jié)構(gòu)的邏輯功能,然后評估結(jié)果,選用最合適你設(shè)計需求的器件,為了衡量綜合的質(zhì)量,同樣可以用不同的綜合工具所得到的綜合結(jié)果來進行分析和評估。<
27、/p><p> 第五,VHDL開發(fā)的產(chǎn)品上市時間快,成本低:VHDL語言的設(shè)計將大大提高數(shù)字單片化的設(shè)計實現(xiàn)速度,它使設(shè)計描述快捷,方便,使設(shè)計的快速復(fù)制簡便易行,VHDL和可編程邏輯的組合作為一類強有力的現(xiàn)場集成設(shè)計方式,將為設(shè)計者產(chǎn)品的上市帶來創(chuàng)紀錄的速度。</p><p> 鑒于VHDL具有以上諸多優(yōu)點,只要開發(fā)者具備一定的高級語言程序設(shè)計基礎(chǔ),擁有Pascal、C等計算機高級語言的
28、基礎(chǔ),同時又了解一些基本數(shù)字電路的設(shè)計方法,在此基礎(chǔ)上來學(xué)習(xí)VHDL程序設(shè)計應(yīng)該是比較容易的,可以輕松地掌握VHDL使硬件工作軟件化?,F(xiàn)代電子系統(tǒng)設(shè)計人員應(yīng)該把VHDL語言作為一種基礎(chǔ)知識來學(xué)習(xí),并要求能夠熟練地使用EDA的設(shè)計工具。</p><p> 1.2設(shè)計方案比較與選擇:</p><p> 本文是在VHDL的基礎(chǔ)上對自動售貨機進行設(shè)計來實現(xiàn)其基本功能的。由于以往的設(shè)計主要是通過
29、兩種方式:通過數(shù)字電路和模擬電路設(shè)計、基于單片機的設(shè)計。第一種方式的缺點既所設(shè)計的整體電路規(guī)模較大,所用的器件較多,造成故障率高,導(dǎo)致計價器不夠準確;而基于單片機的設(shè)計,雖然其有著開發(fā)及制作成本低,能較大程度的利用資源,但其外圍電路較多,且調(diào)試復(fù)雜,抗干擾能力差,且對設(shè)計者的要求比較高,設(shè)計者對軟硬件都必須非常熟悉,由于主要是軟件運作,容易出錯,造成系統(tǒng)不穩(wěn)定,可能會出現(xiàn)投入錢幣卻不出售貨物的情況,導(dǎo)致計價器不夠準確;而本文采用VHDL
30、硬件描述語言將所有器件集成在一塊芯片上,體積大大減小的同時還提高了穩(wěn)定性,并且可應(yīng)用EDA軟件仿真,調(diào)試,易于進行功能擴展,外圍電路較少,采用硬件邏輯電路實現(xiàn),其最大的優(yōu)點是穩(wěn)定性好,抗干擾能力強,非常適合作為自動售貨機系統(tǒng)的控制核心,所以選擇用VHDL來對自動售貨機進行設(shè)計來實現(xiàn)其控制功能。</p><p> 1.3自動售貨機控制電路的性能要求:</p><p> 1.自動售貨機能出
31、售三種不同單價的貨物,并且能對商品數(shù)量進行1,2,3個/瓶選擇。</p><p> 2.自動售貨機給出30秒的選擇時間,時間倒計時到系統(tǒng)進入停止狀態(tài),放棄購買操作。</p><p> 3.系統(tǒng)上電復(fù)位后默認選擇商品1,數(shù)量1,通過商品種類選擇按鍵和商品數(shù)量選擇按鍵來滿足購買需要。每按一次按鍵轉(zhuǎn)換一次,可多次進行循環(huán)選擇。當購買結(jié)束后,自動返回初始設(shè)定狀態(tài),等待再次啟動。</p&g
32、t;<p> 4. 通過啟動/取消復(fù)合按鍵,來啟動購買和取消購買,每按一次狀態(tài)轉(zhuǎn)換一次。</p><p> 5. 能識別1元,5元,10元紙幣(本系統(tǒng)希望一次性投入大于選擇商品金額的紙幣,不給連續(xù)投幣的機會)。</p><p> 第二章 自動售貨機控制電路總體設(shè)計</p><p> 根據(jù)上述對自動售貨機控制電路的性能要求,可以畫出自動售貨機總
33、體結(jié)構(gòu)框圖和系統(tǒng)操作流程圖,見下圖。該控制器由六大模塊組成:</p><p> 主分頻器模塊(sysclk_div):產(chǎn)生秒信號,用于選擇的倒計時,當?shù)褂嫊r時間到,系統(tǒng)認為放棄選擇操作,使系統(tǒng)能自動復(fù)位;只有在倒計時未到之內(nèi)的選擇有效。</p><p> 主控制器模塊(main_control):它是自動售貨機的主控制電路,控制商品種類選擇,商品數(shù)量選擇,啟動/取消操作,和確認購買操作
34、,以及對其它模塊的工作控制。</p><p> 選擇的定時模塊(timer_count):用于選擇倒計時時間計算,當啟動系統(tǒng)時,到計時開始計時,當取消或確認購買時,倒計時終止并且計時值清零,等待再次啟動,又初始倒計時。</p><p> 商品金額計算模塊(money_count):根據(jù)對商品的種類和數(shù)量的選擇,計算出商品的總金額,它是在倒計時未到,系統(tǒng)啟動并且確認購買的條件下工作的。&
35、lt;/p><p> 給錢處理模塊(give_money):處理顧客投入的金額,它也是在倒計時未到,系統(tǒng)啟動并且確認購買的條件下工作的。</p><p> 找零出貨模塊(change_deliver):在對商品的實際金額和顧客投入的金額比較,判斷投入金額是否大于商品實際金額后,若大于則出貨并找零;若小于則推出顧客投入的金額。</p><p> 自動售貨機控制電路的
36、結(jié)構(gòu)框圖:</p><p> 自動售貨機總體結(jié)構(gòu)框圖</p><p> 自動售貨機操作流程:系統(tǒng)先上電進入初始化狀態(tài),當顧客啟動系統(tǒng)及開始購買時,系統(tǒng)進入倒計時選擇商品狀態(tài),選擇商品種類和商品數(shù)量,當對商品選擇好了確認購買以后,系統(tǒng)進入投幣狀態(tài),之后系統(tǒng)進入比較幣價狀態(tài),及將顧客投入的金額與商品實際的金額進行比較,當大于商品價格時,系統(tǒng)進入出貨商品狀態(tài),同時找零和退幣;當小于商品價格時
37、,系統(tǒng)直接進入找零,退幣狀態(tài),退出顧客已投入的金額,之后系統(tǒng)結(jié)束自動購買等待系統(tǒng)再次啟動。</p><p><b> :</b></p><p><b> 系統(tǒng)操作流程圖</b></p><p> 第三章 自動售貨機控制電路各模塊信號分析</p><p><b> 1.主分頻器模
38、塊</b></p><p> 主分頻器用來產(chǎn)生1秒的時鐘供主控制器使用,本設(shè)計使用民用的石英晶體,其振蕩頻率為76.8kHz。這樣主分頻器的分頻系數(shù)為76800,現(xiàn)采用4個分頻器構(gòu)成主分頻器的分頻電路,分別是一個256分頻器,2個10分頻器和一個3分頻器,主分頻器結(jié)構(gòu)如下:</p><p><b> 2.主控制器模塊</b></p>&l
39、t;p> 主控制器的功能是根據(jù)各輸入按鍵的狀態(tài),輸出對應(yīng)的控制信號,控制選擇定時模塊,商品金額計算模塊,給錢處理模塊和找零出貨模塊的工作。主控制器的輸入信號和輸出信號如上述的結(jié)構(gòu)框圖,分別敘述如下:</p><p><b> ?。?)輸入信號:</b></p><p> reset:上電復(fù)位輸入;</p><p> sysclk:系
40、統(tǒng)時鐘輸入;</p><p> start_cancel:啟動與取消按鍵輸入;</p><p> quantity_sel:商品數(shù)量選擇按鍵輸入;</p><p> type_sel:商品種類選擇按鍵輸入;</p><p> timer_down:選擇定時到信號輸入。</p><p><b> ?。?
41、)輸出信號:</b></p><p> start_out:啟動與取消同步信號輸出;</p><p> type1_out:商品種類1的選擇信號輸出;</p><p> type2_out:商品種類2的選擇信號輸出;</p><p> type3_out:商品種類3的選擇信號輸出;</p><p>
42、 quan1_out:商品數(shù)量1的選擇信號輸出;</p><p> quan1_out:商品數(shù)量2的選擇信號輸出;</p><p> quan1_out:商品數(shù)量3的選擇信號輸出;</p><p><b> 3.選擇定時模塊</b></p><p> 選擇定時模塊的功能是根據(jù)主控制器送來的start_in啟動與
43、取消信號,啟動與取消定時,</p><p> 這個時間用與商品種類與數(shù)量的選擇倒計時,當?shù)褂嫊r時間到系統(tǒng)復(fù)位及默認顧客放棄選購商品,且當?shù)褂嫊r到后其它的模塊不工作,如不用商品金額計算,給錢處理和找零出貨。</p><p><b> (1)輸入信號:</b></p><p> clk:秒脈沖輸入信號;</p><p>
44、; sysclk:系統(tǒng)時鐘輸入信號;</p><p> start_in:啟動與取消定時輸入信號;</p><p> ok_buy:確認購買商品按鍵輸入信號。</p><p><b> ?。?)輸出信號:</b></p><p> timer_down_out:選擇倒計時到輸出信號。</p><
45、;p> 4.商品金額計算模塊</p><p> 商品金額計算模塊是根據(jù)主控制器輸出的商品種類和商品數(shù)量信號,來計算選購商品的總金額,其輸入和輸出信號分別如下:</p><p><b> ?。?)輸入信號:</b></p><p> ok_buy:確定購買商品按鍵輸入信號;</p><p> reset:復(fù)位
46、信號;</p><p> sysclk:系統(tǒng)時鐘輸入信號;</p><p> start_in:啟動與取消操作信號;</p><p> timer_down:選擇倒計時到輸入信號;</p><p> type1_in:商品種類1的輸入信號;</p><p> type2_in:商品種類2的輸入信號;</
47、p><p> type3_in:商品種類1的輸入信號;</p><p> quan1_in:商品數(shù)量1的輸入信號;</p><p> quan2_in:商品數(shù)量2的輸入信號;</p><p> quan3_in:商品數(shù)量3的輸入信號。.</p><p><b> (2)輸出信號:</b>&l
48、t;/p><p> money_1:選擇商品總金額輸出信號。</p><p><b> 5.給錢處理模塊</b></p><p> 給錢處理模塊主要是根據(jù)顧客在確認購買商品后,計算并輸出顧客投入的總金額,其輸入和輸出信號分別如下:</p><p><b> ?。?)輸入信號:</b></p&
49、gt;<p> reset:復(fù)位信號;</p><p> sysclk:系統(tǒng)時鐘輸入信號;</p><p> start_in:啟動與取消操作信號;</p><p> timer_down:選擇倒計時到輸入信號;</p><p> ok_buy:確定購買商品按鍵輸入信號;</p><p> g
50、ive_1yuan:1元紙幣輸入信號;</p><p> give_5yuan:5元紙幣輸入信號;</p><p> give_10yuan:10元紙幣輸入信號;</p><p><b> ?。?)輸出信號:</b></p><p> money_2:顧客投入的紙幣金額輸出信號。</p><p&
51、gt;<b> 6.找零出貨模塊</b></p><p> 找零出貨是對顧客投入的金額與選購商品金額比較后的找零出貨動作,其輸入和輸出信號分別如下:</p><p><b> (1)輸入信號:</b></p><p> reset:復(fù)位信號;</p><p> sysclk:系統(tǒng)時鐘輸入信
52、號;</p><p> start_in:啟動與取消操作信號;</p><p> timer_down:選擇倒計時到輸入信號;</p><p> ok_buy:確定購買商品按鍵輸入信號;</p><p> money_1:選擇商品總金額輸入信號;</p><p> money_2:顧客投入的紙幣金額輸入信號。
53、</p><p><b> ?。?)輸出信號:</b></p><p> deliver:出貨信號;</p><p> change:找零金額輸出信號。</p><p> 第四章 自動售貨機控制電路的算法狀態(tài)機圖描述</p><p> 由系統(tǒng)的分析可知,自動售貨機控制電路主要是控制電路和計
54、數(shù)電路,因此直接用算法狀態(tài)機圖描述比較簡潔。</p><p> 本次設(shè)計的自動售貨機能銷售3種不同單價的商品,且能對商品的數(shù)量進行1,2,3的選擇,這樣主控制器共有9種狀態(tài),如果用這9種狀態(tài)的算法狀態(tài)機圖來描述,則其狀態(tài)轉(zhuǎn)換將會變得復(fù)雜而難以處理,當考慮到商品種類和商品數(shù)量的選擇是相對獨立的,沒有很強的關(guān)聯(lián)性,因此,可以用3個算法狀態(tài)機圖來描述。</p><p><b> 1
55、.主控制器模塊</b></p><p> 1.1商品種類選擇控制狀態(tài)機圖</p><p> 系統(tǒng)復(fù)位后進入默認的商品種類1狀態(tài),并輸出默認狀態(tài)的控制信號set_type1,并判斷定時倒計時信號timer_down是否有效,如果有效,則表明放棄繼續(xù)購買,set_type1置0回到系統(tǒng)默認狀態(tài);如果無效則判斷商品種類選擇按鍵是否按下,如果未按下,則仍處在默認狀態(tài),如果已按下,則
56、進入商品種類2狀態(tài)及set_type2置1。通過類似的操作和判斷,該狀態(tài)機可在商品1,商品2,商品3三種狀態(tài)下循環(huán)選擇和工作,并送出相應(yīng)的狀態(tài)信號,具體的VHDL代碼框圖如下圖中的圖(一)。</p><p> 1.2.商品數(shù)量選擇控制狀態(tài)機圖</p><p> 商品數(shù)量選擇控制狀態(tài)機圖如上所示,其結(jié)構(gòu)與商品種類選擇控制狀態(tài)機圖一致,所不同的僅僅是狀態(tài)名,狀態(tài)輸出信號和引起狀態(tài)轉(zhuǎn)換的按鍵
57、信號,VHDL代碼框圖如圖(二)。</p><p> 1.3.啟動/取消控制算法狀態(tài)機圖描述</p><p> 本設(shè)計的自動售貨系統(tǒng)用了一個多功能啟動/取消按鍵,來啟動系統(tǒng)和在購買過程中隨時取消的操作,如此系統(tǒng)有2種工作狀態(tài):取消狀態(tài)(停止狀態(tài))和啟動狀態(tài),系統(tǒng)復(fù)位是進入停止狀態(tài),當start_cancel按鍵按下時,狀態(tài)轉(zhuǎn)移至啟動狀態(tài),并輸出啟動控制信號start_out。再按下st
58、art_cancel鍵時,是取消購買操作,系統(tǒng)又回到停止狀態(tài),這樣可以人為的進行系統(tǒng)的取消購買行為,具體VHDL代碼程序框圖如啟動/取消多功能按鍵流程圖。</p><p> 啟動/取消多功能按鍵流程圖</p><p><b> 2. 選擇定時模塊</b></p><p> 選擇定時模塊有23種狀態(tài):停止狀態(tài)(IDLE),和計時狀態(tài)(INC
59、COUNT),VHDL代碼框圖如倒計時程序框圖。</p><p> 系統(tǒng)復(fù)位后就進入停止狀態(tài)(IDLE),在停止狀態(tài)下不斷判斷啟動信號start_in是否為1,如果為1,則表明啟動鍵已按下,定時器開始工作,轉(zhuǎn)移的下一個狀態(tài)為計數(shù)狀態(tài);否則仍停留在停止狀態(tài)。</p><p> 在計數(shù)狀態(tài)(INCCOUNT)下,先要判斷啟動信號是否仍為1,因為啟動/取消按鍵是一個多功能按鈕,按一次狀態(tài)轉(zhuǎn)換
60、一次,如果復(fù)位后按一下啟動/取消按鍵,使start_in=1,則定時器開始計數(shù)。如果再按一次啟動/取消按鍵,使start_in=0,則定時器處于等待再次啟動狀態(tài)。</p><p> 系統(tǒng)中確認按鍵也能影響定時器的計數(shù),所以也要判斷它的狀態(tài),當確認后,定時器計數(shù)值清零,定時器也回到等待再次啟動狀態(tài)。</p><p> 在計數(shù)狀態(tài)下,如果start_in=1,接著判斷秒clk_1s上升沿是
61、否到來,如果未到來,則仍停留在計數(shù)狀態(tài),若秒時鐘的上升沿已到來,則秒計數(shù)器就進行減1倒計時操作,接著判斷時間是否減到了0,如果到0了則發(fā)出倒計時時間到信號(timer_down),如果沒減到0則仍處于計數(shù)狀態(tài)。</p><p><b> 倒計時程序框圖</b></p><p> 通過以上對VHDL代碼框圖的分析,更加容易的完成了VHDL代碼的編寫,后面的的幾個模塊
62、由于程序比較簡單,只要看看VHDL代碼就能看出它的程序框圖的流程,所以這里就沒有在畫其他模塊的VHDL代碼框圖,具體分析見VHDL代碼。</p><p> 第五章 自動售貨機控制電路各模塊仿真結(jié)果及分析</p><p> 1.主分頻器模塊仿真波形:</p><p> 通過對系統(tǒng)時鐘的計數(shù)來分頻,每一位相當于一個2分頻,div1[7]為2的8次方分頻,div2[
63、3]為2的4次方分頻,系統(tǒng)中當div2[3]中計到10時清零,所以div2[3]實際完成的是10分頻,同理div3[3]也為10分頻,div4[1]為2的2次方分頻,系統(tǒng)中div4[1]中計到3時清零,所以div4[1]實際完成的是3分頻,通過這樣的分頻便得到了秒信號。</p><p> 2.主控制器模塊仿真波形:</p><p> Type_sel為商品種類選擇按鍵,復(fù)位時系統(tǒng)默認t
64、ype1及type1_out為高電平,type_sel每按一次種類的選擇轉(zhuǎn)換一次;quantity_sel為商品數(shù)量選擇,它的分析與type_sel一致;start_out為啟動/取消同步輸出信號,當啟動時start_out輸出高電平,當取消時start_out輸出低電平;timer_down為倒計時時間,時間到系統(tǒng)復(fù)位,等待再次啟動。</p><p> 3.選擇的定時模塊仿真波形:</p>&l
65、t;p> 系統(tǒng)啟動時及start_in為高電平時,倒計時開始計數(shù),當確認購買時及ok_buy為高電平時計數(shù)值清零,系統(tǒng)從新開始倒計時,這里以計時4秒來替代30秒的選擇倒計時,方便仿真。</p><p> 4.商品金額計算仿真波形:</p><p> 系統(tǒng)在啟動狀態(tài),倒計時未到且確認購買時,根據(jù)顧客對商品的選擇,計算出商品的金額,這里type1的單價為1元,type2的單價為2元
66、,type3的單價為3元;quan1指選擇一個商品,quan2指選擇2個商品,quan3指選擇3個商品。單價*商品數(shù)量即為商品總金額。</p><p> 5.給錢處理模塊仿真波形:</p><p> 系統(tǒng)在啟動狀態(tài),倒計時未到且確認購買時,系統(tǒng)根據(jù)輸入的投幣信號,輸出顧客投入的金額。這里give_1yuan指顧客投入的是1元,give_5yuan指顧客投入的是5元,give_10yua
67、n指顧客投入的是10元,這樣就能識別1元,5元和10的紙幣。</p><p> 6.找零出貨模塊仿真波形:</p><p> 系統(tǒng)在啟動狀態(tài),倒計時未到且確認購買時,系統(tǒng)將商品的實際金額和顧客投入的金額進行比較,當顧客投入的金額大于商品實際金額時,系統(tǒng)找出相應(yīng)的錢數(shù)并出貨;當小于時,系統(tǒng)退出顧客已投入的錢數(shù)。</p><p> 7.頂層模塊仿真波形:</
68、p><p> Start_cancel啟動系統(tǒng),倒計時開始計時,顧客在此期間選擇商品種類及type_sel按鍵輸入,和商品數(shù)量選擇及quantity_sel按鍵輸入,它們的狀態(tài)均為每按一次狀態(tài)轉(zhuǎn)換一次,商品選擇好了,確認購買及ok_buy為高電平后,顧客投幣,系統(tǒng)比較后進行找零和出貨操作。</p><p> 第六章 自動售貨機控制電路的具體VHDL描述</p><p&g
69、t;<b> 1.主分頻器模塊</b></p><p> LIBRARYIEEE;</p><p> USEIEEE.STD_LOGIC_1164.ALL;</p><p> USE IEEE.STD_LOGIC_UNSIGNED.ALL;</p><p> ENTITY sysclk_div IS<
70、/p><p> PORT(sysclk:IN STD_LOGIC;</p><p> clk :OUT STD_LOGIC);</p><p> END ENTITY sysclk_div;</p><p> ARCHITECTURE rtl OF sysclk_div IS</p><p> SIGNAL
71、div1:STD_LOGIC_VECTOR(7 DOWNTO 0);</p><p> SIGNAL div2:STD_LOGIC_VECTOR(3 DOWNTO 0);</p><p> SIGNAL div3:STD_LOGIC_VECTOR(3 DOWNTO 0);</p><p> SIGNAL div4:STD_LOGIC_VECTOR(1 DOWN
72、TO 0);</p><p> SIGNAL clk1,clk2,clk3:std_logic;</p><p><b> BEGIN</b></p><p> div_256:PROCESS(sysclk)IS</p><p><b> BEGIN</b></p><p
73、> IF(sysclk'EVENT AND sysclk='1')THEN</p><p> div1<=div1+1;</p><p><b> END IF;</b></p><p> END PROCESS;</p><p> clk1<=div1(7);<
74、/p><p> div10:PROCESS(clk1)IS</p><p><b> BEGIN</b></p><p> IF(clk1'EVENT AND clk1='1')THEN</p><p> IF(div2="1001")THEN</p><
75、;p> div2<="0000";</p><p><b> ELSE</b></p><p> div2<=div2+1;</p><p><b> END IF;</b></p><p><b> END IF;</b><
76、;/p><p> END PROCESS;</p><p> clk2<=div2(3);</p><p> div_10:PROCESS(clk2)IS</p><p><b> BEGIN</b></p><p> IF(clk2'EVENT AND clk2='1
77、')THEN</p><p> IF(div3="1001")THEN</p><p> div3<="0000";</p><p><b> ELSE</b></p><p> div3<=div3+1;</p><p><
78、;b> END IF;</b></p><p><b> END IF;</b></p><p> END PROCESS;</p><p> clk3<=div3(3);</p><p> div_3:PROCESS(clk3)IS</p><p><b&
79、gt; BEGIN</b></p><p> IF(clk3'EVENT AND clk3='1')THEN</p><p> IF(div4="10")THEN</p><p> div4<="00";</p><p><b> ELSE&
80、lt;/b></p><p> div4<=div4+1;</p><p><b> END IF;</b></p><p><b> END IF;</b></p><p> END PROCESS;</p><p> clk<=div4(1);
81、</p><p> END ARCHITECTURE rtl;</p><p><b> 2.主控制器模塊</b></p><p> LIBRARYIEEE;</p><p> USEIEEE.STD_LOGIC_1164.ALL;</p><p> USE IEEE.STD_LOG
82、IC_UNSIGNED.ALL;</p><p> USE IEEE.STD_LOGIC_ARITH.ALL;</p><p> ENTITY main_control IS</p><p> PORT(reset,sysclk,start_cancel,type_sel,quantity_sel,timer_down:IN STD_LOGIC;</p&
83、gt;<p> type1_out,type2_out,type3_out,start_out:OUT STD_LOGIC;</p><p> quan1_out,quan2_out,quan3_out:OUT STD_LOGIC);</p><p> END ENTITY;</p><p> ARCHITECTURE rtl OF main_
84、control IS</p><p> TYPE state1TYPE IS(s_type1,s_type2,s_type3);</p><p> TYPE state2TYPE IS(s_quan1,s_quan2,s_quan3);</p><p> TYPE state3TYPE IS(s_start,s_cancel);</p><
85、p> SIGNAL state1,nextstate1:state1TYPE;</p><p> SIGNAL state2,nextstate2:state2TYPE;</p><p> SIGNAL state3,nextstate3:state3TYPE;</p><p> SIGNAL start_cancel_rising,start_can
86、cel_dlayed,setstart,clrstart:STD_LOGIC;</p><p> SIGNAL type_sel_dlayed,typesel_rising,quantity_sel_dlayed,quantitysel_rising:STD_LOGIC;</p><p> SIGNAL timer_down_rising,timer_down_dlayed:STD_L
87、OGIC;</p><p> SIGNAL set_type1,set_type2,set_type3,start,set_quan1,set_quan2,set_quan3:STD_LOGIC;</p><p><b> BEGIN</b></p><p> typesel_rising<=type_sel AND (NOT ty
88、pe_sel_dlayed);</p><p> quantitysel_rising<=quantity_sel AND (NOT quantity_sel_dlayed);</p><p> start_cancel_rising<=start_cancel AND (NOT start_cancel_dlayed);</p><p> tim
89、er_down_rising<=timer_down AND (NOT timer_down_dlayed);</p><p> type_ctr:PROCESS(typesel_rising,state1,timer_down)IS</p><p><b> BEGIN</b></p><p> set_type1<=
90、9;0';set_type2<='0';set_type3<='0';</p><p> CASE state1 IS</p><p> WHEN s_type1=>set_type1<='1';</p><p> IF(timer_down='1')THEN se
91、t_type1<='0';nextstate1<=s_type1;</p><p> ELSIF(typesel_rising='0')THEN nextstate1<=s_type1;</p><p><b> ELSE</b></p><p> set_type1<='0
92、';nextstate1<=s_type2;</p><p><b> END IF;</b></p><p> WHEN s_type2=>set_type2<='1';</p><p> IF(timer_down='1')THEN set_type2<='0
93、39;;nextstate1<=s_type1;</p><p> ELSIF(typesel_rising='0')THEN nextstate1<=s_type2;</p><p><b> ELSE</b></p><p> set_type2<='0';nextstate1<
94、=s_type3;</p><p><b> END IF;</b></p><p> WHEN s_type3=>set_type3<='1';</p><p> IF(timer_down='1')THEN set_type3<='0';nextstate1<=s
95、_type1;</p><p> ELSIF(typesel_rising='0')THEN nextstate1<=s_type3;</p><p><b> ELSE</b></p><p> set_type3<='0';nextstate1<=s_type1;</p>
96、<p><b> END IF;</b></p><p><b> END CASE;</b></p><p> END PROCESS;</p><p> quantity_ctr:PROCESS(quantitysel_rising,state2,timer_down)IS</p>&
97、lt;p><b> BEGIN</b></p><p> set_quan1<='0';set_quan2<='0';set_quan3<='0';</p><p> CASE state2 IS</p><p> WHEN s_quan1=>set_quan
98、1<='1';</p><p> IF(timer_down='1')THEN set_quan1<='0';nextstate2<=s_quan1;</p><p> ELSIF(quantitysel_rising='0')THEN nextstate2<=s_quan1;</p>
99、<p><b> ELSE</b></p><p> set_quan1<='0';nextstate2<=s_quan2;</p><p><b> END IF;</b></p><p> WHEN s_quan2=>set_quan2<='1'
100、;;</p><p> IF(timer_down='1')THEN set_quan2<='0';nextstate2<=s_quan1;</p><p> ELSIF(quantitysel_rising='0')THEN nextstate2<=s_quan2;</p><p><b&
101、gt; ELSE</b></p><p> set_quan2<='0';nextstate2<=s_quan3;</p><p><b> END IF;</b></p><p> WHEN s_quan3=>set_quan3<='1';</p>&l
102、t;p> IF(timer_down='1')THEN set_quan3<='0';nextstate2<=s_quan1;</p><p> ELSIF(quantitysel_rising='0')THEN nextstate2<=s_quan3;</p><p><b> ELSE</b&
103、gt;</p><p> set_quan3<='0';nextstate2<=s_quan1;</p><p><b> END IF;</b></p><p><b> END CASE;</b></p><p> END PROCESS;</p>
104、<p> start_ctr:PROCESS(start_cancel_rising,state3,timer_down)IS</p><p><b> BEGIN</b></p><p> setstart<='0';clrstart<='0';</p><p> CASE s
105、tate3 IS</p><p> WHEN s_cancel=></p><p> IF(start_cancel_rising='1')THEN nextstate3<=s_start;setstart<='1';</p><p><b> ELSE</b></p>&l
106、t;p> nextstate3<=s_cancel;clrstart<='1';</p><p><b> END IF;</b></p><p> WHEN s_start=></p><p> IF(timer_down_rising='1')THEN clrstart<
107、='1';nextstate3<=s_cancel;</p><p> ELSIF(start_cancel_rising='1')THEN nextstate3<=s_cancel;clrstart<='1';</p><p><b> ELSE</b></p><p>
108、 nextstate3<=s_start;</p><p><b> END IF;</b></p><p><b> END CASE;</b></p><p> END PROCESS;</p><p> main_control_update:PROCESS(reset,sysc
109、lk,timer_down_rising)IS</p><p><b> BEGIN</b></p><p> IF(reset='0')THEN</p><p> state1<=s_type1;state2<=s_quan1;state3<=s_cancel;</p><p>
110、 ELSIF(sysclk'EVENT AND sysclk='1')THEN</p><p> state1<=nextstate1;state2<=nextstate2;state3<=nextstate3;</p><p> IF(set_type1='1')THEN type1_out<='1';
111、ELSE type1_out<='0';END IF;</p><p> IF(set_type2='1')THEN type2_out<='1';ELSE type2_out<='0';END IF;</p><p> IF(set_type3='1')THEN type3_out<
112、;='1';ELSE type3_out<='0';END IF;</p><p> IF(set_quan1='1')THEN quan1_out<='1';ELSE quan1_out<='0';END IF;</p><p> IF(set_quan2='1')THE
113、N quan2_out<='1';ELSE quan2_out<='0';END IF;</p><p> IF(set_quan3='1')THEN quan3_out<='1';ELSE quan3_out<='0';END IF;</p><p> IF(timer_down_
114、rising='1')THEN start_out<='0';</p><p> ELSIF(clrstart='1')THEN start_out<='0';</p><p> ELSIF(setstart='1')THEN start_out<='1';</p&g
115、t;<p><b> END IF;</b></p><p> type_sel_dlayed<=type_sel;</p><p> quantity_sel_dlayed<=quantity_sel;</p><p> start_cancel_dlayed<=start_cancel;</p&
116、gt;<p> timer_down_dlayed<=timer_down;</p><p><b> END IF;</b></p><p> END PROCESS;</p><p> END ARCHITECTURE rtl;</p><p><b> 3.選擇的定時模塊&l
117、t;/b></p><p> LIBRARYIEEE;</p><p> USEIEEE.STD_LOGIC_1164.ALL;</p><p> USE IEEE.STD_LOGIC_UNSIGNED.ALL;</p><p> USE IEEE.STD_LOGIC_ARITH.ALL;</p><p&
118、gt; ENTITY timer_count IS</p><p> PORT(reset,sysclk,clk,start_in,ok_buy:IN STD_LOGIC;</p><p> timer_down_out:OUT STD_LOGIC);</p><p> END ENTITY;</p><p> ARCHITECTU
119、RE rtl OF timer_count IS</p><p> TYPE stateTYPE IS(idle,incount);</p><p> SIGNAL state,nextstate:stateTYPE;</p><p> SIGNAL count_inc,count_clr,setdown,clrdown:STD_LOGIC;</p>
120、;<p> SIGNAL timer_down,ok_buy_rising,ok_buy_dlayed:STD_LOGIC;</p><p> SIGNAL count,count_u:STD_LOGIC_VECTOR(3 DOWNTO 0);</p><p> SIGNAL timerdown_rising,timerdown_dlayed,clk_rising,cl
121、k_dlayed:STD_LOGIC;</p><p><b> BEGIN</b></p><p> timerdown_rising<=timer_down AND (NOT timerdown_dlayed);</p><p> ok_buy_rising<=ok_buy AND (NOT ok_buy_dlayed);
122、</p><p> clk_rising<=clk AND (NOT clk_dlayed);</p><p> count1:PROCESS(clk_rising,state,start_in,count,ok_buy_rising)IS</p><p><b> BEGIN</b></p><p> s
123、etdown<='0';clrdown<='0';count_inc<='0';count_clr<='0';</p><p> CASE state IS</p><p> WHEN idle=>clrdown<='1';count_clr<='1'
124、;;</p><p> IF(start_in='1' AND timerdown_rising='0')THEN </p><p> nextstate<=incount;</p><p><b> ELSE </b></p><p> nextstate<=idle
溫馨提示
- 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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 自動售貨機畢業(yè)論文
- 自動售貨機畢業(yè)論文
- 畢業(yè)論文自動售貨機
- 自動售貨機的vhdl實現(xiàn)
- 畢業(yè)論文自動售貨機的系統(tǒng)設(shè)計
- 自動售貨機畢業(yè)論文--動售貨機plc控制系統(tǒng)背景概述
- plc簡單自動售貨機畢業(yè)論文
- 畢業(yè)論文----自動售貨機的plc系統(tǒng)設(shè)計
- 自動售貨機plc設(shè)計畢業(yè)論文
- 自動售貨機plc控制系統(tǒng)-畢業(yè)論文
- 畢業(yè)論文--自動售貨機控制系統(tǒng)的設(shè)計
- 基于plc的自動售貨機畢業(yè)論文
- 基于vhdl的自動售貨機設(shè)計
- plc自動售貨機設(shè)計畢業(yè)論文
- 畢業(yè)論文范文——plc自動售貨機
- 自動售貨機plc控制系統(tǒng)設(shè)計畢業(yè)論文
- 自動售貨機plc控制系統(tǒng)設(shè)計畢業(yè)論文
- 自動售貨機plc控制系統(tǒng)設(shè)計-畢業(yè)論文
- 畢業(yè)論文自動售貨機plc控制系統(tǒng)設(shè)計
- 畢業(yè)論文---智能自動售貨機系統(tǒng)電路設(shè)計
評論
0/150
提交評論