




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 數(shù)字電路與邏輯設(shè)計(jì)實(shí)驗(yàn)報(bào)告2012年數(shù)字電路與邏輯設(shè)計(jì)實(shí)驗(yàn)報(bào)告題目:簡(jiǎn)易地鐵自動(dòng)售票系統(tǒng)學(xué) 院:信息與通信工程學(xué)院班 級(jí):2010211122姓 名: 陳大文學(xué) 號(hào):10210332班內(nèi)序號(hào):05指導(dǎo)教師:袁東明 老師摘 要: VHDL 語言對(duì)于復(fù)雜的數(shù)字系統(tǒng)的設(shè)計(jì),它有獨(dú)特的作用。它的硬件描述能力強(qiáng),能輕易的描述出硬件的結(jié)構(gòu)和功能。這種語言的應(yīng)用至少意味著兩種重大的改變:電路的設(shè)計(jì)可以通過文字描述的方式完成;電子電路可以當(dāng)作文件一樣來存儲(chǔ)。隨著現(xiàn)代技術(shù)的發(fā)展,這種語言的效益與作用日益明顯,每年均能夠以超過 30的速度快速成長(zhǎng)。這次課程設(shè)計(jì)就是利用 VHDL 語言設(shè)計(jì)地鐵售票系統(tǒng)的核心功能
2、QuartusII軟件作為發(fā)平臺(tái),設(shè)計(jì)城市地鐵售票系統(tǒng)程序并進(jìn)行仿真。使其實(shí)現(xiàn)選票種、選擇張數(shù)、出票、找零等功能。關(guān)鍵詞: 地鐵,售票,VHDL 語言,QuartusIIAbstract: VHDL language is used to describe the behavior and structure of electronic systems but isparticularly suited as a language to describe the structure and behavior of digital electronichardware designs. The
3、application of it means two changes: electro circuitdesign can be done by the kind of file description. and electro circuit canbe stored as a file.It is used to lower the cost and reduce the design cycle.It can supply designers needs easily. With the development of moderntechnology it grows more tha
4、n 30 every year.The Graduation Project just simulate tickedsales system of metro use VHDL language and it under the platform of Quartus II. The functions style select, numbers select ,ticket out ,bids all will be showing in the emulator.Key word: Subway,ticked sales,VHDL,QuartusII目錄一實(shí)驗(yàn)任務(wù)要求11基本要求12.
5、提高要求1二系統(tǒng)設(shè)計(jì)11.設(shè)計(jì)思路12.系統(tǒng)總體框圖23.分模塊設(shè)計(jì)6三仿真波形及波形分析91.a)系統(tǒng)復(fù)位92.b)選擇車票種類103.c)選擇車票數(shù)量114.d)-f)投幣125.g)系統(tǒng)自動(dòng)出票146.h)系統(tǒng)自動(dòng)找零157.i)再次購(gòu)買158.j)取消操作169.k)整個(gè)購(gòu)票過程結(jié)束16四源程序171主程序SubwayAutoTicketSellSystem.vhd1722k分頻模塊div_2k.vhd303500k分頻模塊div_500k.vhd324投幣按鍵防抖模塊keyin.vhd34五功能說明351.a)系統(tǒng)復(fù)位352.b)選擇車票種類363.c)選擇車票數(shù)量374.d)-f)
6、投幣385.g)系統(tǒng)自動(dòng)出票406.h)系統(tǒng)自動(dòng)找零417.i)再次購(gòu)買428.j)取消操作439.k)整個(gè)購(gòu)票過程結(jié)束43六元器件清單及資源利用情況441a).數(shù)碼管442b).LED燈453c).撥碼開關(guān)454d).按鈕465e).管腳47七故障及問題分析471數(shù)碼管顯示472按鍵防抖47八總結(jié)與結(jié)論481主程序SubwayAutoTicketSellSystem.vhd482鳴謝49一、實(shí)驗(yàn)任務(wù)要求設(shè)計(jì)制作一個(gè)簡(jiǎn)易地鐵自動(dòng)售票系統(tǒng)?;疽螅篴) 地鐵票價(jià)統(tǒng)一為每張兩元,只能投入幣值為五元的人民幣進(jìn)行購(gòu)票。b) 能夠開機(jī)自檢,檢驗(yàn)顯示器件正常。c) 通過按鍵開關(guān)BTN輸入購(gòu)票張數(shù)和投入的
7、人民幣張數(shù)并恰當(dāng)顯示相應(yīng)信息。d) 設(shè)置適當(dāng)?shù)穆曇籼崾净蝻@示提示表示取票和找零。e) 一次購(gòu)票成功后系統(tǒng)能夠恰當(dāng)?shù)剞D(zhuǎn)入下一次購(gòu)票等待狀態(tài)。f) 系統(tǒng)能夠復(fù)位。提高要求:將投幣種類增加為1元、5元和10元三種。二、 系統(tǒng)設(shè)計(jì)2、 設(shè)計(jì)思路a) 購(gòu)買車票時(shí),乘客按“開始購(gòu)票”按鈕開始購(gòu)票;接著,選擇車票的種類,即單價(jià),分2元、4元、6元;選擇購(gòu)票數(shù)量,一次購(gòu)票數(shù)限制在3張以內(nèi),選擇1張、2張、3張;然后,進(jìn)入投幣階段,投入錢幣,投入的錢幣設(shè)計(jì)為1元、5元、10元幣種;當(dāng)投入的錢幣達(dá)到所需金額時(shí),系統(tǒng)進(jìn)入出票以及找零狀態(tài),售票機(jī)自動(dòng)出票,并自動(dòng)找出余額;然后,再次點(diǎn)擊“開始購(gòu)票”進(jìn)行另一次購(gòu)票。b)
8、 選擇出站口或投幣過程中,乘客都可以按“取消”按鈕取消該次交易。選擇出站口的過程中,若按“取消”按鈕,則售票機(jī)直接進(jìn)入到找零狀態(tài);投幣過程中,若按“取消”,則售票機(jī)將乘客已經(jīng)投入的錢幣全部退出,即進(jìn)入找零狀態(tài),。c) 客人一次只能選擇一個(gè)車票種類。3種票類型用3位二進(jìn)制向量編碼表示,即001表示選擇2元車票,010表示選擇2元車票,100選擇2元車票。實(shí)驗(yàn)之前設(shè)計(jì)的是3種票類型用2位二進(jìn)制碼表示,因?yàn)榭紤]到仿真及下載到實(shí)驗(yàn)板模擬的方便,遂將之改為3位,使之每一個(gè)類型用一個(gè)按鍵控制。d) 票機(jī)的進(jìn)幣口可識(shí)別三種紙幣,仿照c)中模式,擬用長(zhǎng)度為3的二進(jìn)制表示。乘客可以連續(xù)多次投入錢幣,并且可以以任
9、意順序投入。紙幣最多可以投入27元。e) 用5位二進(jìn)制數(shù)表示5個(gè)狀態(tài),分別是狀態(tài)程序標(biāo)示代表狀態(tài)00001Selstyle等待選擇票種狀態(tài)00010Selticket等待選擇購(gòu)票數(shù)量狀態(tài)00100Inputmoney等待放入錢幣狀態(tài)01000Ticketout出票狀態(tài)10000Givechagne找零狀態(tài)3、 系統(tǒng)總體框圖圖1圖2圖3圖4圖5圖64、 分模塊設(shè)計(jì)經(jīng)過分析, 本地鐵自動(dòng)售票系統(tǒng)的設(shè)計(jì)需要實(shí)現(xiàn)以下幾項(xiàng)主要功能: 票種選擇, 票數(shù)選擇, 投幣處理, 出票及余額找零.本系統(tǒng)可以采用模塊化設(shè)計(jì)和有限狀態(tài)機(jī)的設(shè)計(jì)方案來實(shí)現(xiàn)。 采用模塊化設(shè)計(jì)方法即從整個(gè)系統(tǒng)的功能出發(fā), 將系統(tǒng)的整體逐步分解
10、為若干個(gè)子系統(tǒng)和模塊,然后用VHDL語言對(duì)各個(gè)模塊進(jìn)行編程,最后形成頂層文件,在Quartus環(huán)境下進(jìn)行編譯與仿真,檢查所編程序是否運(yùn)行正確。如果出現(xiàn)錯(cuò)誤,需要進(jìn)行修改,直到完全通過為止。 采用模塊化設(shè)計(jì)的優(yōu)點(diǎn)在于:對(duì)設(shè)計(jì)的描述從上到下逐步由粗略到詳細(xì),符合常規(guī)的邏輯思維習(xí)慣。便于由多個(gè)設(shè)計(jì)者同時(shí)進(jìn)行設(shè)計(jì)從而加速整個(gè)項(xiàng)目的開發(fā)進(jìn)度;每個(gè)子模塊都能夠靈活使用綜合和實(shí)現(xiàn)工具獨(dú)立進(jìn)行優(yōu)化,從而達(dá)到更好的優(yōu)化結(jié)果;調(diào)試、更改某個(gè)子模塊時(shí),不會(huì)影響其他模塊的實(shí)現(xiàn)結(jié)果,保證了整個(gè)設(shè)計(jì)的穩(wěn)定性與可靠性。 有限狀態(tài)機(jī)(Finite State Machine,簡(jiǎn)稱FSM)是指輸出向量不僅依賴于當(dāng)前輸入向量,也
11、依賴于過去輸入向量序列的電路.一個(gè)有限狀態(tài)機(jī)電路由寄存器邏輯(時(shí)序邏輯)和組合邏輯組成. 有限狀態(tài)機(jī)是數(shù)字邏輯電路以及數(shù)字系統(tǒng)的重要組成部分,尤其應(yīng)用于數(shù)字系統(tǒng)核心部件的設(shè)計(jì),以實(shí)現(xiàn)高效率高可靠性的邏輯控制。一般有限狀態(tài)機(jī)的VHDL組成 :說明部分:主要是設(shè)計(jì)者使用TYPE語句定義新的數(shù)據(jù)類型,如: TYPE states IS (st0, st1, st2, st3, st4, st5); SIGNAL present_state, next_state: states;主控時(shí)序邏輯部分:任務(wù)是負(fù)責(zé)狀態(tài)機(jī)運(yùn)轉(zhuǎn)和在外部時(shí)鐘驅(qū)動(dòng)下實(shí)現(xiàn)內(nèi)部狀態(tài)轉(zhuǎn)換的進(jìn)程。時(shí)序進(jìn)程的實(shí)質(zhì)是一組觸發(fā)器,因此,該進(jìn)程中
12、往往也包括一些清零或置位的輸入控制信號(hào),如Reset信號(hào)。 主控組合邏輯部分:任務(wù)是根據(jù)狀態(tài)機(jī)外部輸入的狀態(tài)控制信號(hào)(包括來自外部的和狀態(tài)機(jī)內(nèi)部的非進(jìn)程的信號(hào))和當(dāng)前的狀態(tài)值current_state來確定下一狀態(tài)next_state的取值內(nèi)容,以及對(duì)外部或?qū)?nèi)部其他進(jìn)程輸出控制信號(hào)的內(nèi)容。 輔助邏輯部分:輔助邏輯部分主要是用于配合狀態(tài)機(jī)的主控組合邏輯和主控時(shí)序邏輯進(jìn)行工作,以完善和提高系統(tǒng)的性能。 無論與基于VHDL的其它設(shè)計(jì)方案相比,還是與可完成相似功能的CPU相比,狀態(tài)機(jī)都有其難以逾越的優(yōu)越性,它主要表現(xiàn)在以下幾方面: 由于狀態(tài)機(jī)的結(jié)構(gòu)模式相對(duì)簡(jiǎn)單,設(shè)計(jì)方案相對(duì)固定,特別是可以定義符號(hào)化
13、枚舉類型的狀態(tài),這一切都為VHDL綜合器盡可能發(fā)揮其強(qiáng)大的優(yōu)化功能提供了有利條件。而且,性能良好的綜合器都具備許多可控或不可控的專 門用于優(yōu)化狀態(tài)機(jī)的功能。 狀態(tài)機(jī)容易構(gòu)成性能良好的同步時(shí)序邏輯模塊,這對(duì)于對(duì)付大規(guī)模邏輯電路設(shè)計(jì)中令人深感棘手的競(jìng)爭(zhēng)冒險(xiǎn)現(xiàn)象無疑是一個(gè)上佳的選擇,加之綜合器對(duì)狀態(tài)機(jī)的特有的優(yōu)化功能,使的狀態(tài)機(jī)解決方案的優(yōu)越性更為突出。 狀態(tài)機(jī)的VHDL設(shè)計(jì)程序?qū)哟畏置?,結(jié)構(gòu)清晰,易讀易懂,易排錯(cuò)和修改。 在高速運(yùn)算和控制方面,狀態(tài)機(jī)更有其巨大的優(yōu)勢(shì)。由于在VHDL中,一個(gè)狀態(tài)機(jī)可以由多個(gè)進(jìn)程構(gòu)成,一個(gè)結(jié)構(gòu)體中可以包含多個(gè)狀態(tài)機(jī),而一個(gè)單獨(dú)的狀態(tài)機(jī)(或多個(gè)并行運(yùn)行的狀態(tài)機(jī))以順序方
14、式的所能完成的運(yùn)算和控制方面的工作與一個(gè)CPU類似。 就運(yùn)行速度而言,狀態(tài)機(jī)狀態(tài)變換周期只有一個(gè)時(shí)鐘周期,而且,由于在每一狀態(tài)中,狀態(tài)機(jī)可以完成許多并行的運(yùn)算和控制操作,所以,一個(gè)完整的控制程序,即使由多個(gè)并行的狀態(tài)機(jī)構(gòu)成,其狀態(tài)數(shù)也是十分有限的。因此有理由認(rèn)為,由狀態(tài)機(jī)構(gòu)成的硬件系統(tǒng)比CPU所能完成同樣功能的軟件系統(tǒng)的工作速度要高出兩個(gè)數(shù)量級(jí)。 就可靠性而言,狀態(tài)機(jī)的優(yōu)勢(shì)也是十分明顯的。首先是由于狀態(tài)機(jī)的設(shè)計(jì)中能使用各種無懈可擊的容錯(cuò)技術(shù);其次是當(dāng)狀態(tài)機(jī)進(jìn)入非法狀態(tài)并從中跳出所耗的時(shí)間十分短暫,通常只有2個(gè)時(shí)鐘周期,約數(shù)十個(gè)ns,尚不足以對(duì)系統(tǒng)的運(yùn)行構(gòu)成損害.應(yīng)用VHDL 設(shè)計(jì)狀態(tài)機(jī)的具體步
15、驟如下:(1)根據(jù)系統(tǒng)要求確定狀態(tài)數(shù)量、狀態(tài)轉(zhuǎn)移的條件和各狀態(tài)輸出信號(hào)的賦值,并畫出狀態(tài)轉(zhuǎn)移圖;(2)按照狀態(tài)轉(zhuǎn)移圖編寫狀態(tài)機(jī)的VHDL 設(shè)計(jì)程序;(3)利用EDA 工具對(duì)狀態(tài)機(jī)的功能進(jìn)行仿真驗(yàn)證。 經(jīng)過綜合比較,決定采用狀態(tài)機(jī)來實(shí)現(xiàn)本系統(tǒng)的設(shè)計(jì),這樣不僅思路很清楚而且可讀性也非常強(qiáng). 利用狀態(tài)機(jī)實(shí)現(xiàn)售票功能。 需要首先把整個(gè)系統(tǒng)的所有狀態(tài)都給羅列出來,然后實(shí)現(xiàn)每個(gè)狀態(tài)的內(nèi)容,最后再利用一些變量將各個(gè)狀態(tài)連接起來,實(shí)現(xiàn)整個(gè)系統(tǒng)的基本功能.Kinin模塊是用來防抖的,由于按鍵動(dòng)作的時(shí)刻和按下的時(shí)間長(zhǎng)短是隨機(jī)的。并且存在由開關(guān)簧片反彈導(dǎo)致的電平抖動(dòng),抖動(dòng)的時(shí)間一般小于20mS,因此必須為每個(gè)按鍵開
16、關(guān)設(shè)置一個(gè)消抖和同步電路,此電路可有多種形式。按一次鍵,只產(chǎn)生一個(gè)脈沖,脈沖寬度為防抖動(dòng)時(shí)鐘的脈寬。在投幣的時(shí)候,由于要多次投幣,多次按鍵,使之在按鍵的時(shí)候,每按一次,程序只會(huì)執(zhí)行一次。防抖動(dòng)時(shí)鐘的頻率為100HZ左右,接下來得為其設(shè)置一個(gè)分頻系數(shù)為500k的分頻。div_500k是系數(shù)為500k的分頻,為的是把實(shí)驗(yàn)板50mHz的頻率分為100Hz,使防抖電路正常工作。div_2k是系數(shù)為2k的分頻,為的是把實(shí)驗(yàn)板50mHz的頻率分為25000Hz,每個(gè)數(shù)碼管工作頻率到2000Hz左右。三、 仿真波形及波形分析a). 系統(tǒng)復(fù)位圖7系統(tǒng)復(fù)位, Restart='1';系統(tǒng)進(jìn)入第一
17、個(gè)狀態(tài)state=00001,系統(tǒng)所有數(shù)據(jù)清零,Selstyle,等待選擇票種狀態(tài),6個(gè)數(shù)碼管顯示000000;b). 選擇車票種類圖8選擇車票種類,style=“100“代表買單價(jià)為6元的車票,系統(tǒng)進(jìn)入第二個(gè)狀態(tài)state=00010,Selticket,等待選擇購(gòu)票數(shù)量狀態(tài),6個(gè)數(shù)碼管顯示600000;c). 選擇車票數(shù)量圖9選擇車票數(shù)量,Tnum=“100“代表購(gòu)票 3張,系統(tǒng)進(jìn)入第三個(gè)狀態(tài)state=00100, Inputmoney,等待放入錢幣狀態(tài),MoneyInputAlarm=1代表錢幣不足,6個(gè)數(shù)碼管顯示630000;d). 投入錢幣圖10投入錢幣,Money=”010”代表
18、投入 5元,錢幣不足,系統(tǒng)依舊停留在第三個(gè)狀態(tài)state=00100, MoneyInputAlarm=1代表錢幣不足,6個(gè)數(shù)碼管顯示630500,等待放入錢幣;e). 第二次投入錢幣圖11第二次投入錢幣,Money=”100”代表投入10元,但錢幣依舊不足(6*3=18>5+10=15),判斷Castmoney<Totalmoney,系統(tǒng)依舊停留在第三個(gè)狀態(tài)state=00100, MoneyInputAlarm=1代表錢幣不足,6個(gè)數(shù)碼管顯示631500,等待放入錢幣;f). 第三次投入錢幣圖12第三次投入錢幣,Money=“010“代表投入5元,錢幣足夠(6*3=18<
19、5+10+5=20),判斷Castmoney>Totalmoney,MoneyInputAlarm=0代表錢幣已足,系統(tǒng)進(jìn)入第四個(gè)狀態(tài), state=01000, Ticketout,出票狀態(tài);g). 系統(tǒng)自動(dòng)出票系統(tǒng)自動(dòng)出票,Tout=1顯示在3個(gè)周期代表出票3張,系統(tǒng)進(jìn)入第五個(gè)狀態(tài), state=10000,Givechagne,找零狀態(tài)。h). 系統(tǒng)自動(dòng)找零系統(tǒng)自動(dòng)找零,Mout0=1持續(xù)兩個(gè)周期代表檢測(cè)restmoney>1,依次找出2張1元的紙幣,找零結(jié)束,6個(gè)數(shù)碼管顯示632032,State=”10000”代表狀態(tài)停留在找零階段。i).再次購(gòu)買圖13之后, Rebuy
20、=1,代表再次購(gòu)票,進(jìn)入第一個(gè)狀態(tài)state=00001,系統(tǒng)數(shù)據(jù)清零,Selstyle,等待選擇票種狀態(tài),6個(gè)數(shù)碼管顯示000000;j). 取消操作圖14在c),d),e)之后,如果想取消交易,cancelkey=1,系統(tǒng)進(jìn)入找零狀態(tài),如,在d)之后取消,自動(dòng)找零,Mout1=1代表檢測(cè)到restmoney>5,找出一張5元的紙幣,找零結(jié)束,6個(gè)數(shù)碼管顯示630505;k). 整個(gè)購(gòu)票過程結(jié)束。四、 源程序1.主程序SubwayAutoTicketSellSystem.vhd-File Name : SubwayAutoTicketSellSystem.vhd-Description
21、 : Achieve the function of auto ticket selling-Limition : None-System : Vhdl9.0-Soft : Quartus2-9.0-Author : ChenDawen-Revision : Version 1.0 ,2012-10-31-library ieee;use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity SubwayAutoTicketSellSystem is port( Restart:in std_logic; - 系統(tǒng)復(fù)位
22、信號(hào) Rebuy:in std_logic; -開始購(gòu)票操作 Clk:in std_logic; - 系統(tǒng)時(shí)鐘 Cancelkey: in std_logic; - 取消操作鍵 Style: in std_logic_vector(2 downto 0); - 車票種類 Tnum:in std_logic_vector(2 downto 0); - 所購(gòu)票數(shù) Money: in std_logic_vector(2 downto 0); -投幣口 MoneyInputAlarm:out std_logic; - 投幣不足報(bào)警信號(hào) Tout:out std_logic; - 出票 Mout:ou
23、t std_logic_vector(1 downto 0); - 余額找出 State:out std_logic_vector(4 downto 0);- 系統(tǒng)狀態(tài)指示- beep:out std_logic; -蜂鳴器信號(hào) SG:out std_logic_vector(6 downto 0); -段碼 BT:out std_logic_vector(5 downto 0) -位碼 ); end SubwayAutoTicketSellSystem;architecture behave of SubwayAutoTicketSellSystem iscomponent div_2K -
24、引入div_2k分頻模塊 port(clk_in: in std_logic; clk_out: out std_logic);end component;component div_500K -引入div_500k分頻模塊 port(clk_in2: in std_logic; clk_out2: out std_logic);end component; component keyin -引入keyin防抖模塊 port(clk_in1:in std_logic; reset:in std_logic; resetn:out std_logic);end component;type TT
25、 is (selstyle,selticket,inputmoney,ticketout,givechange) ; - 定義系統(tǒng)轉(zhuǎn)換狀態(tài) (等待選擇票種狀態(tài), 等待選擇購(gòu)票數(shù)量狀態(tài), 等待放入錢幣狀態(tài), 出票狀態(tài), 找零狀態(tài))signal clk_tmp:std_logic;-臨時(shí)時(shí)鐘signal clk_tmp2:std_logic;-臨時(shí)時(shí)鐘2signal CNT6:INTEGER RANGE 0 TO 5;signal A:INTEGER RANGE 0 TO 5;signal Tstyle:std_logic_vector(6 downto 0);-車票單價(jià)顯示signal Tnum
26、ber:std_logic_vector(6 downto 0); -車票數(shù)量顯示signal Minput1:std_logic_vector(6 downto 0); -投入金額十位顯示signal Minput2:std_logic_vector(6 downto 0); -投入金額個(gè)位顯示signal Minput:std_logic_vector(4 downto 0); -投入金額計(jì)數(shù)signal Toutnum0:std_logic_vector(6 downto 0); -出票數(shù)量顯示signal Toutnum:std_logic_vector(1 downto 0); -出
27、票數(shù)量計(jì)數(shù)signal Changeout0:std_logic_vector(6 downto 0); -輸出零錢數(shù)顯示signal Changeout:std_logic_vector(3 downto 0); -輸出零錢數(shù)量計(jì)數(shù)signal Moneyn:std_logic_vector(2 downto 0); -防抖之后實(shí)際投幣輸入 beginu1:div_2k port map(clk_in=>CLK,clk_out=>clk_tmp); -各種映射u2:div_500k port map(clk_in2=>CLK,clk_out2=>clk_tmp2);
28、u4:keyin port map(clk_in1=>CLK_tmp2,reset=>money(0),resetn=>moneyn(0);u5:keyin port map(clk_in1=>clk_tmp2,reset=>money(1),resetn=>moneyn(1);u6:keyin port map(clk_in1=>clk_tmp2,reset=>money(2),resetn=>moneyn(2);-以下為數(shù)碼管顯示程序模塊-process(CNT6) begin case CNT6 is -3線至6線譯碼器 when 0
29、 => BT <= "011111" ; A <= 0 ; -A為位碼 when 1 => BT <= "101111" ; A <= 1 ; when 2 => BT <= "110111" ; A <= 2 ; when 3 => BT <= "111011" ; A <= 3 ; when 4 => BT <= "111101" ; A <= 4 ; when 5 => BT <= &qu
30、ot;111110" ; A <= 5 ; when others => NULL ; end case ; end process;process(clk_tmp)beginif clk_tmp'event and clk_tmp= '1' then -實(shí)現(xiàn)模6計(jì)數(shù)器 if CNT6 = 5 then CNT6 <= 0;else CNT6 <= CNT6+1;end if; end if; end process;process(A) begin case A is -實(shí)現(xiàn)數(shù)碼管的顯示功能 when 0 => SG <=
31、 Tstyle ; when 1 => SG <= Tnumber ; when 2 => SG <= Minput1 ; when 3 => SG <= Minput2 ; when 4 => SG <= Toutnum0 ; when 5 => SG <= Changeout0 ;when others => NULL ; end case ; end process; process(Minput) -投入金額數(shù)碼管顯示begincase Minput iswhen "11011" => Minp
32、ut1 <="1101101"Minput2 <="1110000"-27when "11010" => Minput1 <="1101101"Minput2 <="1011111"-26when "11001" => Minput1 <="1101101"Minput2 <="1011011"-25when "11000" => Minput1 <=&qu
33、ot;1101101"Minput2 <="0110011"-24when "10111" => Minput1 <="1101101"Minput2 <="1111001"-23when "10110" => Minput1 <="1101101"Minput2 <="1101101"-22when "10101" => Minput1 <="1101101&q
34、uot;Minput2 <="0110000"-21when "10100" => Minput1 <="1101101"Minput2 <="1111110"-20when "10011" => Minput1 <="0110000"Minput2 <="1111011"-19when "10010" => Minput1 <="0110000"Minput2
35、<="1111111"-18when "10001" => Minput1 <="0110000"Minput2 <="1110000"-17when "10000" => Minput1 <="0110000"Minput2 <="1011111"-16when "01111" => Minput1 <="0110000"Minput2 <="1
36、011011"-15when "01110" => Minput1 <="0110000"Minput2 <="0110011"-14when "01101" => Minput1 <="0110000"Minput2 <="1111001"-13when "01100" => Minput1 <="1111110"Minput2 <="1101101"
37、-12when "01011" => Minput1 <="0110000"Minput2 <="0110000"-11when "01010" => Minput1 <="0110000"Minput2 <="1111110"-10when "01001" => Minput1 <="1111110"Minput2 <="1111011"-09when &quo
38、t;01000" => Minput1 <="1111110"Minput2 <="1111111"-08when "00111" => Minput1 <="1111110"Minput2 <="1110000"-07when "00110" => Minput1 <="1111110"Minput2 <="1011111"-06when "00101"
39、; => Minput1 <="1111110"Minput2 <="1011011"-05when "00100" => Minput1 <="1111110"Minput2 <="0110011"-04when "00011" => Minput1 <="1111110"Minput2 <="1111001"-03when "00010" => Minp
40、ut1 <="1111110"Minput2 <="1101101"-02when "00001" => Minput1 <="1111110"Minput2 <="0110000"-01when "00000" => Minput1 <="1111110"Minput2 <="1111110"-00when others => null ;end case;end process;
41、 process(Changeout) -找零金額數(shù)碼管顯示begincase Changeout iswhen "1001" => Changeout0 <="1111011"-09when "1000" => Changeout0 <="1111111"-08when "0111" => Changeout0 <="1110000"-07when "0110" => Changeout0 <="
42、1011111"-06when "0101" => Changeout0 <="1011011"-05when "0100" => Changeout0 <="0110011"-04when "0011" => Changeout0 <="1111001"-03when "0010" => Changeout0 <="1101101"-02when "0001"
43、; => Changeout0 <="0110000"-01when "0000" => Changeout0 <="1111110"-00when others => null ;end case;end process; process(Toutnum) -出票數(shù)量數(shù)碼管顯示begincase Toutnum iswhen "11" => Toutnum0 <="1111001"-03when "10" => Toutnum
44、0 <="1101101"-02when "01" => Toutnum0 <="0110000"-01when "00" => Toutnum0 <="1111110"-00when others => null ;end case;end process;-以上為數(shù)碼管顯示程序模塊- process(clk_tmp,restart) -下載時(shí)候所用時(shí)鐘頻率 -process(clk,restart) -仿真時(shí)候所用時(shí)鐘頻率 variable next_st
45、ate: TT; variable Tm: integer range 0 to 6; - 車票單價(jià) variable totalmoney,castmoney,restmoney: integer range 0 to 27; - 車票總額,投幣總額,找零總額variable num : integer range 0 to 3; - 所購(gòu)票數(shù) variable empty:std_logic; - 找零結(jié)束標(biāo)志 beginif (clk_tmp 'event and clk_tmp='1') then -下載時(shí)候所用時(shí)鐘頻率 - if (clk_tmp 'e
46、vent and clk_tmp='1') then-仿真時(shí)候所用時(shí)鐘頻率 State<="00001" -系統(tǒng)等待狀態(tài) if Restart='1' then-以下為系統(tǒng)復(fù)位初始化- Tout<='0' Mout<="00" MoneyInputAlarm<='0' totalmoney:=0; castmoney:=0; restmoney:=0; Tstyle <="1111110" -數(shù)碼管顯示0 Tnumber <="
47、;1111110" -數(shù)碼管顯示0 Minput<="00000" -數(shù)碼管顯示0 Toutnum<="00" -數(shù)碼管顯示0 Changeout<="0000" ; -數(shù)碼管顯示0-以上為系統(tǒng)復(fù)位初始化- next_state:=selstyle; - 系統(tǒng)復(fù)位,回到初始選站狀態(tài) else case next_state is when selstyle => - 選擇出票種 case style is - 共3種車票類型 when "000" => Tm:=0; Tsty
48、le <="1111110" - 000代表未選擇 when "001" => Tm:=2;Tstyle <="1101101" -001代表選擇單價(jià)2元車票 when "010" => Tm:=4;Tstyle <="0110011" -010代表選擇單價(jià)2元車票 when "100" => Tm:=6; Tstyle <="1011111" -100代表選擇單價(jià)2元車票 when others =>nul
49、l;end case; if Tm/=0 then next_state := selticket; - 選票種結(jié)束,進(jìn)入選票數(shù)狀態(tài) elsenext_state := selstyle; - 未選票種,停留在選票種狀態(tài) end if ; when selticket => - 選擇票數(shù)State<="00010" -等待選擇購(gòu)票數(shù)量狀態(tài) if (Cancelkey='1') then next_state:=givechange;- 選票期間取消操作,直接進(jìn)入找零狀態(tài) else case Tnum is when "001"
50、 => -001代表選擇1張車票 totalmoney := totalmoney+ 1*Tm; - 計(jì)算票價(jià) num:=1; Tnumber <="0110000" -數(shù)碼管顯示1when "010" => -010代表選擇2張車票 totalmoney := totalmoney+ 2*Tm; num:=2; Tnumber <="1101101" -數(shù)碼管顯示2when "100" => -100代表選擇3張車票 totalmoney := totalmoney+ 3*Tm; n
51、um:=3; - 最多購(gòu)3張票 Tnumber <="1111001" -數(shù)碼管顯示3 when others =>null; end case; if totalmoney /=0 then next_state := inputmoney; - 選票結(jié)束,進(jìn)入投幣狀態(tài) elsenext_state := selticket; - 未選票,停留在選票狀態(tài) end if ; end if; when inputmoney => - 進(jìn)行投幣State<="00100" -等待放入錢幣狀態(tài)if Moneyn(0)='1
52、9; then -下載時(shí)所用投幣按鍵1元- if Money(0)='1' then -仿真時(shí)所用投幣按鍵1元castmoney := castmoney+1; -投幣錢數(shù)計(jì)數(shù)增加1Minput<=minput+"00001" -投幣數(shù)碼管顯示增加1elsif Moneyn(1)='1' then -下載時(shí)所用投幣按鍵5元- elsif Money(1)='1' then -仿真時(shí)所用投幣按鍵5元castmoney := castmoney+5; -投幣錢數(shù)計(jì)數(shù)增加5Minput<=minput+"001
53、01" -投幣數(shù)碼管顯示增加5 elsif Moneyn(2)='1' then -下載時(shí)所用投幣按鍵10元- elsif Money(2)='1' then -仿真時(shí)所用投幣按鍵10元castmoney := castmoney+10;-投幣錢數(shù)計(jì)數(shù)增加10Minput<=minput+"01010" -投幣數(shù)碼管顯示增加10 - 連續(xù)投幣,并進(jìn)行累加 end if; if (Cancelkey='1') then - 投幣期間取消操作,直接進(jìn)入找零狀態(tài)退還所投錢幣 MoneyInputAlarm<=&
54、#39;0' restmoney:=castmoney; next_state:=givechange; elseif (castmoney<totalmoney)then - 比較投幣總額與車票總額 MoneyInputAlarm <='1' -投幣不足警報(bào)亮next_state :=inputmoney; - 投幣不足,繼續(xù)進(jìn)入投幣狀態(tài) else MoneyInputAlarm<='0' -投幣不足警報(bào)滅next_state :=ticketout; - 投幣足夠,進(jìn)入出票狀態(tài) end if ; end if; when ticketout => - 出票 State<="01000" -等待出票狀態(tài) case num is when 0 =>null; when 1 => Tout <=
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 共同股權(quán)投資合同范本
- 關(guān)于續(xù)簽監(jiān)控合同范本
- 涼皮店用工合同范例
- 事業(yè)單位勞務(wù)合同范本3篇
- 公司考核合同范本
- 下班無償保潔合同范本
- 入股銷售合同范本
- 北京貸款合同范本
- 農(nóng)業(yè)設(shè)備運(yùn)輸合同范例
- 公司簽承攬合同范本
- 《養(yǎng)老保險(xiǎn)的理念》課件
- LY/T 3400-2024荒漠與荒漠化防治術(shù)語
- 2024-2025學(xué)年第二學(xué)期英語教研組工作計(jì)劃
- 2025年往年教師職稱考試試題
- 山東省海洋知識(shí)競(jìng)賽(初中組)考試題庫500題(含答案)
- 服務(wù)行業(yè)人力資源薪酬體系管理與優(yōu)化
- 《蔚來發(fā)展》課件
- 幼兒園開學(xué)前的廚房人員培訓(xùn)
- 《幼兒教育政策與法規(guī)》教案-單元6 幼兒園的工作人員
- 虛擬制片技術(shù)在VRAR應(yīng)用中的角色建模與渲染-洞察分析
- 2024年山東商務(wù)職業(yè)學(xué)院高職單招語文歷年參考題庫含答案解析
評(píng)論
0/150
提交評(píng)論