【正文】
when selstation = 選擇出站名 State=000。 Tout=39。039。 Mout=0000。 MoneyInputAlarm=39。039。 tmoney:=0。 pmoney:=0。 rmoney:=0。 初始化清零 case station is 共16站,0代表本站,110站票價2元,1115站為4元 when 0000 = Tp:=0。 when 0001 = Tp:=2。 when 0010 = Tp:=2。 when 0011 = Tp:=2。 when 0100 = Tp:=2。 when 0101 = Tp:=2。 when 0110 = Tp:=2。 when 0111 = Tp:=2。 when 1000 = Tp:=2。 when 1001 = Tp:=2。 when 1010 = Tp:=2。 when 1011 = Tp:=4。 when 1100 = Tp:=4。 when 1101 = Tp:=4。 when 1110 = Tp:=4。 when 1111 = Tp:=4。 when others =null。 end case。 if Tp/=0 then next_state := selticket。 選站結(jié)束,進(jìn)入選票狀態(tài) else next_state := selstation。 未選站,停留在選站狀態(tài) end if 。 when selticket = 選擇票數(shù) State=001。 if (Cancelkey=39。139。) then next_state:=selstation。 選票期間取消操作,回到選站狀態(tài) else case Tn is when 01 = tmoney := tmoney+ 1*Tp。 計算票價 num:=1。 when 10 = tmoney := tmoney+ 2*Tp。 num:=2。 when 11 = tmoney := tmoney+ 3*Tp。 num:=3。 最多購3張票 when others =null。 end case。 if tmoney /=0 then next_state := inputcoin。 選票結(jié)束,進(jìn)入投幣狀態(tài) else next_state := selticket。 未選票,停留在選票狀態(tài) end if 。 end if。 when inputcoin = 進(jìn)行投幣 State=010。 case Lettuce is 投入紙幣 when 0001 = 1元 pmoney := pmoney+1。 when 0010 = 2元 pmoney := pmoney+2。 when 0101 = 5元 pmoney := pmoney+5。 when 1010 = 10元 pmoney := pmoney+10。 when others =null。 連續(xù)投幣,并進(jìn)行累加 end case。 case Coin is 投入硬幣 when 01 = 5角 half:=half+1。 if(half=2)then pmoney:=pmoney+1。 half:=0。 end if。 when 10 = 1元 pmoney:=pmoney+1。 when others=null。 連續(xù)投幣,并進(jìn)行累加 end case。 if (Cancelkey=39。139。) then 投幣期間取消操作,退還所投錢幣 MoneyInputAlarm=39。039。 rmoney:=pmoney。 next_state:=givechange。 else if (pmoneytmoney)then 比較投幣總額與車票總額 MoneyInputAlarm =39。139。 next_state :=inputcoin。 投幣不足,繼續(xù)進(jìn)入投幣狀態(tài) else MoneyInputAlarm=39。039。 next_state :=ticketout。 投幣足夠,進(jìn)入出票狀態(tài) end if 。 end if。 when ticketout = 出票 State=011。 case num is when 0 =null。 when 1 = Tout =39。139。 num :=num1。 when 2 = num :=num1。 Tout =39。139。 when 3 = num := num1。 Tout =39。139。 每個時鐘周期出一張票 end case。 if (num=0)then rmoney :=pmoneytmoney。 next_state :=givechange。 出票結(jié)束,余額找出 else next_state :=ticketout。 繼續(xù)出票 end if 。 when givechange = 余額找出,按從大到小原則退錢(10元,5元,2元,1元,5角) State=100。 Tout=39。039。 en:=39。039。 if(rmoney=10)then 10元 rmoney:=rmoney10。 Mout =1010。 elsif(rmoney=5)then 5元 rmoney:=rmoney5。 Mout=0101。 elsif(rmoney=2)then 2元 rmoney:=rmoney2。 Mout=0010。 elsif(rmoney=1)then 1元 rmoney:=rmoney1。 Mout=0001。 elsif(rmoney=0)then if(half=1)then 5角 Mout=1111。 else Mout=0000。 end if。 en:=39。139。 余額找出結(jié)束標(biāo)志 end if 。 if en=39。139。 then – 找零結(jié)束,回到選站狀態(tài) next_state :=selstation。 tmoney:=0。 pmoney:=0。 else next_state := givechange。 繼續(xù)找零 end if 。 when others = 其他任何情況,均回到選站狀態(tài) next_state := selstation。 end case 。 end if。 end if。 end process。 end behave。參考文獻(xiàn)[1]辛春艷,VHDL硬件描述語言.北京國防工業(yè)出版社.20021[2].現(xiàn)代電子技術(shù).20015[3].北京航空航天大學(xué)出版社. 1998[4].北京清華大學(xué)出版社.20048[5]姜立東. VHDL語言程序設(shè)計及應(yīng)用(第2版).北京郵電大學(xué)出版社.20046[6]張 原.可編程邏輯器件設(shè)計及應(yīng)用.機械工業(yè)出版社.2003 [7]劉寶琴.ALTERA 可編程邏輯器件及其應(yīng)用[M].北京清華大學(xué)出版社.1995 [8]曾繁泰.VHDL程序設(shè)計,第一版.清華大學(xué)出版社.2000[9]候伯亨,顧新.VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計.西安電子科技大學(xué)出版社.修訂版.[10]林敏,方穎立.VHDL數(shù)字系統(tǒng)設(shè)計與高層次綜合.電子工業(yè)出版社.20021[11]甘歷.VHDL應(yīng)用與開發(fā)實踐.科學(xué)出版社.20035[12]“As EDA Tool Complexity Grows, So Do Users39。 Education Needs”, Electronic Design,Vol49[13]“Harness The Power of VHDL for PLD Design”, Electronic Design,1994致謝 在本次畢業(yè)設(shè)計過程中,我的導(dǎo)師陳平老師對于我的論文設(shè)計提出了寶貴的意見和輔導(dǎo)。他對于VHDL領(lǐng)域的認(rèn)識,對工作的認(rèn)真負(fù)責(zé)的態(tài)度,對困難敢于克服的精神,都給了我很大的幫助,支持我一直完成了自己的畢業(yè)設(shè)計。在此我要表達(dá)自己由衷的感謝。謝謝老師的關(guān)懷和支持! 此外我還對于幫助我的同學(xué),支持我的家人表示自己的謝意!他們的支持是我能夠完成畢業(yè)設(shè)計的力量源泉之一。謝謝大家!