版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 北京郵電大學(xué)數(shù)字電路實(shí)驗(yàn)報(bào)告204班王旋-數(shù)字電路與邏輯設(shè)計(jì)實(shí)驗(yàn)簡(jiǎn)易自動(dòng)售貨機(jī) 學(xué)院: 電子工程學(xué)院 班號(hào): 2011211205 學(xué)號(hào): 2011210986 姓名: 班內(nèi)序號(hào):15 輔導(dǎo)老師:張?jiān)伱?時(shí)間:2013年11月一、設(shè)計(jì)課題的任務(wù)要求1、 實(shí)驗(yàn)?zāi)康?1)進(jìn)一步熟練掌握VHDL語(yǔ)言和Quartus軟件的使用; 2) 理解狀態(tài)機(jī)的工作原理和設(shè)計(jì)方法;2、實(shí)驗(yàn)內(nèi)容設(shè)計(jì)一個(gè)簡(jiǎn)易的自動(dòng)售貨機(jī),能夠完成錢數(shù)處理、找零、顯示、退幣等功能。3、基本要求 1)用 2 個(gè)數(shù)碼管(disp5,disp4)顯示錢數(shù),以元為單位。用3 個(gè)按鍵(btn0,btn1,btn2)分別表示一元、五元、十元,每按
2、一次按鍵,增加一次相應(yīng)的錢數(shù),上限99元。 2)再用 3 個(gè)按鍵(btn3,btn4,btn5)分別對(duì)應(yīng)3 種商品,其中,商品甲售價(jià)3 元、商品乙售價(jià)8 元、商品丙售價(jià)12 元; 3)買東西時(shí),先輸入錢幣,再按對(duì)應(yīng)的商品鍵。每按一次商品鍵,錢數(shù)要相應(yīng)地減少,同時(shí)有聲光(蜂鳴器或發(fā)光二極管)提示購(gòu)買成功。剩余錢數(shù)大于3 元可繼續(xù)按商品鍵再次購(gòu)買;當(dāng)剩余錢數(shù)少于3 元時(shí),表示錢數(shù)的數(shù)碼管disp5,disp4 顯示為零,同時(shí)用數(shù)碼管disp0 顯示退出的錢數(shù)。 4)買東西時(shí),按下商品鍵,若輸入的錢數(shù)少于商品的價(jià)格,表示錢數(shù)的數(shù)碼管 disp5,disp4 顯示為零,同時(shí)用數(shù)碼管(disp1、dis
3、p0)顯示退出的錢數(shù),并用蜂鳴器或發(fā)光二極管閃爍表示購(gòu)買失敗。 5)按下商品鍵時(shí),用數(shù)碼管disp2 表示當(dāng)前購(gòu)買的商品,1 代表商品甲,2 代表商品乙,3 代表商品丙。 6)用 btn7 做為退出功能鍵,退出鍵可以隨時(shí)按下,按下后,數(shù)碼管(disp5,disp4)顯示為零,同時(shí)數(shù)碼管(disp1、disp0)顯示退出的錢數(shù),表示結(jié)束購(gòu)買,錢款全部退出。4、提高要求: 1)用點(diǎn)陣設(shè)計(jì)顯示投幣動(dòng)畫、出貨動(dòng)畫,購(gòu)買成功/失敗動(dòng)畫; 2)允許隨時(shí)輸入錢幣,購(gòu)買時(shí),錢款不足有聲光報(bào)警并等待追加錢幣或選擇別的商品; 3)商品數(shù)量管理,有缺貨提示; 4)用點(diǎn)陣動(dòng)態(tài)顯示商品名稱和庫(kù)存數(shù)量等。 5)自擬其它功
4、能。二、設(shè)計(jì)思路及原理框圖1、原始設(shè)計(jì)思路及框圖(a)實(shí)驗(yàn)設(shè)計(jì)思路用戶可投入三種面值的錢,選擇相應(yīng)商品進(jìn)行購(gòu)買,若錢數(shù)足夠,二極管亮,商品調(diào)出;若錢數(shù)不夠,蜂鳴器響,商品不會(huì)調(diào)動(dòng),此時(shí)可繼續(xù)投幣,直到錢數(shù)夠了商品才會(huì)調(diào)出,期間若錢數(shù)小于等于3元,系統(tǒng)會(huì)退回錢幣,一次購(gòu)買結(jié)束。若任何一階段用戶點(diǎn)擊退出,系統(tǒng)也會(huì)退回錢幣,一次購(gòu)買結(jié)束。具體思路簡(jiǎn)述:投入錢(動(dòng)畫1),計(jì)數(shù),按鍵購(gòu)買。1、錢不夠(動(dòng)畫1),蜂鳴器,可繼續(xù)投錢 2、錢夠(動(dòng)畫2),二極管發(fā)光,減數(shù)值。每次減數(shù)值進(jìn)行計(jì)算,3時(shí),維持原狀態(tài)。按7退出,顯示退錢數(shù)(動(dòng)畫4),其他顯示為0,結(jié)束。(b)總體框圖112347568 圖1、總體設(shè)
5、計(jì)框圖如圖:1:Disp5 disp4 (數(shù)碼管組1) 投入的錢數(shù),上限99 2:Disp1 disp0 (數(shù)碼管組2) 退回的錢數(shù),上限99 3: Btn2 btn1 btn0 (按鈕)錢數(shù) 十元 五元 一元 4:Btn5 btn4 btn3 (按鈕)甲(3元)乙(8元)丙(12元)三種商品 5:蜂鳴器 6:發(fā)光二極管 7:Btn7 (按鈕)退出 8:點(diǎn)陣圖案(c)模塊劃分(簡(jiǎn)化,未標(biāo)蜂鳴器,二極管)如上圖所示,主要分為分頻模塊,控制模塊,點(diǎn)陣顯示模塊和數(shù)碼顯示模塊。1)分頻模塊:輸入50Mhz信號(hào)后分別分為clk_10(10hz),clk_50k(50khz)。其中,clk_10用來(lái)控制電
6、路基本運(yùn)算,clk_50k用于點(diǎn)陣及數(shù)碼管的刷新顯示。2)控制模塊:控制其他各個(gè)模塊,使功能能得到實(shí)現(xiàn)。3)點(diǎn)陣顯示模塊:對(duì)應(yīng)相應(yīng)的用戶操作顯示相應(yīng)點(diǎn)陣動(dòng)畫。4)數(shù)碼管顯示模塊:對(duì)輸入結(jié)果譯碼后在數(shù)碼管上進(jìn)行顯示。(d)控制流程圖(簡(jiǎn)化,未標(biāo)蜂鳴器、二極管) (e)狀態(tài)轉(zhuǎn)移圖錢不足退出退出退出錢足夠錢不足錢不足退出退出退出錢足夠錢不足Out_A2_L:出貨品,動(dòng)畫2Add_A1_S:投入錢,動(dòng)畫1Back_A3:退錢,動(dòng)畫3Exit:退出2、原始基本思路的補(bǔ)充或改進(jìn)(a)為實(shí)現(xiàn)提高要求,加上提取貨物這一模塊,這樣就會(huì)多一個(gè)狀態(tài),系統(tǒng)變?yōu)?個(gè)狀態(tài)。此時(shí)顯示貨物數(shù)目也需要數(shù)碼管,因而用disp3、
7、disp2來(lái)顯示數(shù)目。這樣原本顯示商品種類的數(shù)碼管會(huì)被占用,此時(shí)考慮將這兩個(gè)數(shù)碼管的顯示數(shù)值設(shè)成4項(xiàng)循環(huán)顯示。(b)同時(shí)循環(huán)顯示甲乙丙三種貨物數(shù)目需要加一個(gè)循環(huán)模塊。(c)為了使購(gòu)買過(guò)程操作錯(cuò)誤或其他情況導(dǎo)致退錢后,用戶可以繼續(xù)購(gòu)買,設(shè)定按btn7才完全退出。即第一次錯(cuò)誤或退出會(huì)到退錢的狀態(tài),再按一次btn7才是完全退出。一次錯(cuò)誤或退錢后再加入貨幣還可繼續(xù)與原貨幣累加并繼續(xù)購(gòu)買。最后所得各個(gè)模塊連接圖如下三、仿真波形及波形分析1、售貨機(jī)主程序模塊仿真分析說(shuō)明:clk:時(shí)鐘(上升沿有效)。e:退出。insert:進(jìn)貨。 a1:投入1元。a2:投入5元。a3:投入10元。 b1:購(gòu)買甲(3元)。b
8、2:購(gòu)買乙(8元)。b3:購(gòu)買丙(12元)。 c1,c2,c3分別表示甲、乙、丙三種商品剩余數(shù)量。(disp3與2顯示) change:剩余退回的錢數(shù)(disp1與0的顯示)。 money:售貨機(jī)中已投入錢數(shù)(disp5與4顯示)。 goodtype:購(gòu)買商品的種類。狀態(tài):s1:表示投幣成功。 s2:表示購(gòu)買成功。 s3:表示退錢。 s4:表示退出。 s5:表示缺貨。 (a)運(yùn)行開始,先進(jìn)貨。為迎合中國(guó)大眾的消費(fèi)心理需求,設(shè)定的是價(jià)格3元、8元、12元的貨物每次分別提貨數(shù)量30、20、10。第一次進(jìn)貨仿真如下,此時(shí)貨源充足,s5=0。注:由于加了防抖電路,所以在后一個(gè)時(shí)鐘上升沿到來(lái)時(shí),貨物數(shù)才
9、增加。具體語(yǔ)句如下頁(yè)所示。(b)按鍵進(jìn)行投幣和購(gòu)買,每次投幣,money數(shù)會(huì)相應(yīng)增加(狀態(tài)s1);每次購(gòu)買貨物,若購(gòu)買成功,則money減少、相應(yīng)貨物數(shù)減小、goodtype顯示商品種類,狀態(tài)為s2。當(dāng)選擇商品價(jià)格大于投入錢幣時(shí),系統(tǒng)退錢,money變?yōu)?,change變?yōu)樵璵oney數(shù),狀態(tài)變?yōu)閟3。(c)最大限額為99的限定。當(dāng)投入錢數(shù)會(huì)大于99時(shí),系統(tǒng)不接受該投幣。(d)剩余錢數(shù)小于3時(shí),系統(tǒng)退錢,money為0,change為原來(lái)money值。s2成功的同時(shí)到s3。(e)退出后系統(tǒng)退錢,需要退錢后再加錢還可以購(gòu)買的仿真。(f)缺貨提示,貨物為0時(shí),購(gòu)買不成功,狀態(tài)s5顯示缺貨。2、分頻
10、模塊仿真。 說(shuō)明:該模塊中實(shí)際分出了三個(gè)時(shí)鐘clk_1,clk_10,clk_50k。為了仿真的便捷性,此處只仿真一個(gè)簡(jiǎn)單5分頻,模塊程序中的三個(gè)clk與該仿真原理相同,代碼寫法也相同。3、循環(huán)模塊仿真。如下圖所示,此模塊可實(shí)現(xiàn)三個(gè)狀態(tài)的循環(huán)。4、數(shù)碼管顯示模塊仿真。說(shuō)明:clk:輸入時(shí)鐘。 m,n分別為:money和change。 c1、c2、c3分別為甲乙丙的數(shù)量。 cat控制六個(gè)數(shù)碼管哪個(gè)亮(低電平有效)。 X:正在亮的數(shù)碼管顯示的數(shù)值。 Goodtype:商品類型。4個(gè)狀態(tài),00時(shí)分別顯示甲乙丙商品數(shù);01、10、11時(shí)分別代表購(gòu)買的是甲或乙或丙。 t:4個(gè)循環(huán)狀態(tài),00,01,10分
11、別控制顯示甲乙丙的數(shù)量。11無(wú)顯示。(a)goodtype為00時(shí),受t的控制循環(huán)顯示甲乙丙的商品數(shù)。如下圖所示,x顯示的48,95為16,此時(shí)對(duì)應(yīng)狀態(tài)t3,表示其顯示c3的商品數(shù)。(b)如下圖所示,當(dāng)goodtype循環(huán)變化,對(duì)應(yīng)數(shù)碼管顯示商品種類121-3,109-2,48-1。(c)下面x顯示的為16、32、00,16、32、00,.即m,n,c1的值。此時(shí)goodtype為00,t為00(對(duì)應(yīng)c1)。5、點(diǎn)陣顯示模塊仿真。說(shuō)明:clk_1、clk_2:輸入時(shí)鐘。 s1、s2、s3、s4、s5:分別對(duì)應(yīng)投幣動(dòng)畫,出貨動(dòng)畫,錢數(shù)不足動(dòng)畫,成功退出動(dòng)畫和缺貨提示動(dòng)畫。 Col:動(dòng)畫或圖像的點(diǎn)
12、陣顯示。 Row:控制哪一排的點(diǎn)陣可以亮。 t:循環(huán)狀態(tài)。00:顯示甲,01:顯示乙,10:顯示丙。此處對(duì)循環(huán)顯示的甲乙丙和5動(dòng)畫中的一個(gè)動(dòng)畫進(jìn)行討論。(a)如下,當(dāng)s無(wú)明確狀態(tài),t循環(huán)變化時(shí)可循環(huán)顯示甲乙丙。下圖依次為兩個(gè)甲、兩個(gè)乙、兩個(gè)丙。形如下圖 (b)下圖為s1投錢時(shí)的動(dòng)畫。四、功能說(shuō)明 本實(shí)驗(yàn)最終完成了簡(jiǎn)易售貨機(jī)的設(shè)計(jì)任務(wù),成功下載并使用。 到目前為止,實(shí)驗(yàn)要求中的基本要求和提高要求都可實(shí)現(xiàn)。可以進(jìn)行隨時(shí)投幣和購(gòu)買,在錢數(shù)不夠或小于3時(shí)會(huì)退款。但此時(shí)系統(tǒng)并未退出,此時(shí)若投錢可繼續(xù)購(gòu)買。若按退出則系統(tǒng)會(huì)自動(dòng)退錢并退出。其中還有貨物管理,包括提貨、貨物數(shù)量顯示、缺貨提示。且各步操作都有相
13、應(yīng)的點(diǎn)陣動(dòng)畫顯示和蜂鳴器鳴響。 驗(yàn)收時(shí),未能考慮到的上限99元和沒(méi)有剩余數(shù)碼管顯示用戶所購(gòu)買的的貨物種類的問(wèn)題也得到了解決。這兩項(xiàng)在波形分析里有具體說(shuō)明。五、原件清單及資源利用情況1、使用元器件芯片EPM1270T144C5數(shù)碼管6個(gè)按鍵7個(gè)Led點(diǎn)陣8*8個(gè)單元蜂鳴器1個(gè)2、資源利用情況(a)資源利用情況概述 如上圖所示,總共利用的邏輯單元864個(gè),資源利用率68%;利用管教個(gè)數(shù)為39,占總數(shù)的34%。(b)優(yōu)化方法 本實(shí)驗(yàn)由于要實(shí)現(xiàn)的功能很多,所以在編程中進(jìn)行優(yōu)化顯得尤為重要。 1)化簡(jiǎn)設(shè)計(jì)方案中的邏輯結(jié)構(gòu),保證使用最簡(jiǎn)單的邏輯方案來(lái)編程。 2)優(yōu)化邏輯算法,保證使用最簡(jiǎn)單的算法來(lái)編程。例
14、如在對(duì)兩位十進(jìn)制數(shù)進(jìn)行譯碼時(shí),開始時(shí)用了冗長(zhǎng)的if語(yǔ)句對(duì)其十位數(shù)為多少的情況進(jìn)行了討論,然后再確定個(gè)位數(shù)。而簡(jiǎn)化后用兩個(gè)語(yǔ)句就可以實(shí)現(xiàn)。其中,(m/10)可確定十位數(shù)大小,(m mod 10)可確定個(gè)位數(shù)大小。這樣,少用了92個(gè)邏輯單元。 3)用并行設(shè)計(jì),將所用到的三個(gè)時(shí)鐘在一個(gè)模塊里進(jìn)行分頻。 4)對(duì)可以復(fù)用的單元進(jìn)行復(fù)用,例如對(duì)if語(yǔ)句進(jìn)行合并。 5)在不追求速度時(shí)可以在assignments中將optimization technique選項(xiàng)選為area,即面積優(yōu)先,在犧牲一定速度的情況下使用更少的面積。六、故障及問(wèn)題分析 1、對(duì)99的上限問(wèn)題的理解錯(cuò)誤問(wèn)題描述:開始時(shí)認(rèn)為上限的意思是數(shù)
15、碼管顯示數(shù)值不再變化,但是可繼續(xù)投幣,此時(shí)系統(tǒng)的記憶是正確的,只不過(guò)顯示是錯(cuò)誤的,這樣一來(lái)就可以增加購(gòu)買的次數(shù)。經(jīng)過(guò)老師的指正后,才想到這樣會(huì)讓用戶看不到錢數(shù)99后投入的真實(shí)錢數(shù)而給其造成困擾,使用戶界面不友好。解決辦法:將算法改成了如果即將投入的錢數(shù)會(huì)使投錢總值money99則不接受這次投幣。兩次對(duì)比仿真對(duì)比如下。圖a.money達(dá)到96后又投入10元,系統(tǒng)接受錢數(shù),money變?yōu)?06。圖b.money達(dá)到96后又投入10元,系統(tǒng)不接受錢數(shù),money保持96不變。2、商品購(gòu)買類型的顯示問(wèn)題描述:由于想實(shí)現(xiàn)提高要求中循環(huán)顯示甲乙丙的數(shù)量,而這個(gè)顯示會(huì)占用原本基本要求中顯示商品類型的數(shù)碼管。
16、而驗(yàn)收前時(shí)間緊迫,未能對(duì)程序進(jìn)行大的修改,因而暫時(shí)放棄了實(shí)現(xiàn)基本功能中顯示購(gòu)買商品的類型這一功能。解決辦法:之后又對(duì)程序進(jìn)行了修改,即通過(guò)添加循環(huán)狀態(tài)來(lái)實(shí)現(xiàn)這四項(xiàng)的成功顯示。修改后的代碼如下所示,其中g(shù)oodtype為“00”時(shí),循環(huán)顯示三種商品數(shù)量;goodtype為“01”“10”“11”時(shí)分別對(duì)應(yīng)三種貨物類型。3、錢數(shù)小于3系統(tǒng)退出導(dǎo)致無(wú)法再投幣問(wèn)題描述:在想實(shí)現(xiàn)功能隨時(shí)輸入貨幣時(shí),發(fā)現(xiàn)當(dāng)錢數(shù)小于3系統(tǒng)退錢退出時(shí),無(wú)法再投幣繼續(xù)購(gòu)買。解決辦法:不再將退錢和退出兩個(gè)狀態(tài)綁定在一起,即退錢后系統(tǒng)不會(huì)退出。若再投錢,當(dāng)前money為三項(xiàng)(剛投入的錢數(shù)、原money、原change)相加,而ch
17、ange值在每次投錢時(shí)賦“0”。這樣僅通過(guò)狀態(tài)轉(zhuǎn)移和投幣算法的細(xì)微修改就實(shí)現(xiàn)了這一功能。4、分頻方面的問(wèn)題問(wèn)題描述:關(guān)于分頻,開始是進(jìn)行了多次調(diào)試后決定將輸入的50Mhz頻率分成clk_10和clk_50k兩個(gè)時(shí)鐘頻率,后來(lái)需要甲乙丙的剩余數(shù)量循環(huán)顯示時(shí),發(fā)現(xiàn)這兩個(gè)分頻都不合適。解決辦法:再分頻模塊中增加了一個(gè)分頻clk_1,使循環(huán)顯示的圖像每1s刷新一次,也便于人眼觀察并捕捉顯示的信息。 5、兩位十進(jìn)制計(jì)數(shù)問(wèn)題描述:開始時(shí),在實(shí)現(xiàn)顯示兩位十進(jìn)制計(jì)數(shù)時(shí)遇到了瓶頸,不知道該如何更好地實(shí)現(xiàn)這一功能。解決辦法:首先將譯碼和顯示分開考慮,由于顯示很容易實(shí)現(xiàn),于是只考慮譯碼就可以了。最先想用的譯碼方法為
18、冗長(zhǎng)的if語(yǔ)句,該算法實(shí)現(xiàn)個(gè)位的顯示如下: (.) 以上算法需要對(duì)10位進(jìn)行分析才能得出個(gè)位數(shù)值。這樣3組兩位十進(jìn)制數(shù)的代碼長(zhǎng)度就非常兇殘。后來(lái)想到用mod函數(shù)簡(jiǎn)化,于是將個(gè)位的顯示用mod函數(shù)進(jìn)行了優(yōu)化。網(wǎng)上說(shuō)mod函數(shù)在“IEEE.NUMERIC_STD.all”庫(kù)中,后來(lái)發(fā)現(xiàn)不用這個(gè)庫(kù)也可以調(diào)用。6、防抖電路問(wèn)題描述:本來(lái)覺得防抖電路不一定能用上,仿真時(shí)沒(méi)有它也沒(méi)出現(xiàn)什么問(wèn)題,然 后在調(diào)板子的時(shí)候充分體會(huì)到了它的不可或缺性。解決辦法:由于再分一個(gè)模塊的話,需要修改的部分比較多,容易出現(xiàn)錯(cuò)誤。于是直接在主程序中進(jìn)行了語(yǔ)句的添加,在7個(gè)按鍵輸入上直接加了防抖,將程序經(jīng)過(guò)細(xì)微的修改就可達(dá)到預(yù)想
19、結(jié)果。六、總結(jié)和結(jié)論 本次實(shí)驗(yàn)使我們熟悉并掌握了數(shù)字系統(tǒng)設(shè)計(jì)的基本步驟,讓我們?cè)谟邢鄳?yīng)功能需求時(shí),能利用vhdl語(yǔ)言編寫相應(yīng)程序,用EDA技術(shù)下載到可編程邏輯器件上完成簡(jiǎn)單數(shù)字系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)。 通過(guò)這次實(shí)驗(yàn),我們能夠更加自如地使用vhdl進(jìn)行編程,將上學(xué)期學(xué)的簡(jiǎn)單電路的編程語(yǔ)言整合起來(lái),實(shí)現(xiàn)一整個(gè)系統(tǒng)完整的功能。實(shí)驗(yàn)中要有層次觀念和模塊觀念。這次實(shí)驗(yàn)加深了我們隊(duì)系統(tǒng)層次的理解,也讓我們感受到了分模塊編程的優(yōu)越性。它使編程變得有針對(duì)性,也更簡(jiǎn)單,同時(shí)也使得程序的修改和調(diào)試變得更加便捷。此外,分模塊編程結(jié)束后,在進(jìn)行系統(tǒng)整合時(shí)要有整體觀念,既要考慮整體又要協(xié)調(diào)部分之間的聯(lián)系。 可以說(shuō)這次實(shí)驗(yàn)給了
20、我們一個(gè)數(shù)字電路系統(tǒng)設(shè)計(jì)的方向,讓我們能通過(guò)自學(xué)和努力朝著那個(gè)方向?qū)崿F(xiàn)設(shè)計(jì)要求。通過(guò)實(shí)驗(yàn),我們擴(kuò)充了更多之前沒(méi)有教授的vhdl、數(shù)字電路設(shè)計(jì)等的相應(yīng)知識(shí)。編程是有趣的,有時(shí)又像是千絲萬(wàn)縷捉不到頭緒而讓人覺得焦躁。因此遇到問(wèn)題時(shí)一定要有耐心,多思考,將問(wèn)題一步步分解細(xì)化,逐個(gè)擊破??梢哉f(shuō)在實(shí)驗(yàn)過(guò)程中,興趣會(huì)驅(qū)動(dòng)我們,但是最后讓我們走完整個(gè)過(guò)程取得最后成功的諸多因素中,一定會(huì)有耐心細(xì)致的實(shí)驗(yàn)精神。 感謝這次實(shí)驗(yàn)?zāi)芙o我們提供這樣一個(gè)獨(dú)立思考、自主學(xué)習(xí)的機(jī)會(huì),同時(shí)也感謝老師在實(shí)驗(yàn)課中對(duì)我們的細(xì)心指導(dǎo)和嚴(yán)格要求,讓我們能真正地從實(shí)驗(yàn)中積累經(jīng)驗(yàn)、學(xué)到東西。七、附錄(源程序)1、主程序模塊library i
21、eee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity newseller isport(clk: in std_logic; -clk_10 a1,a2,a3:in std_logic; -input money 1,5 or 10yuan b1,b2,b3:in std_logic; -respect good1(jia),good2(yi),good3(bing) e:in std_logic; -exit insert:in std_logic; -input new goods money:out
22、integer range 0 to 99; -the amount of money input change:out integer range 0 to 99; -the amount of change goodstype:out std_logic_vector(1 downto 0); c1,c2,c3:out integer range 0 to 99; -the rest number of the goods s1,s2,s3,s4,s5:out std_logic); -s1:inputting money;s2:buying goodsend newseller; -s3
23、:back money;s4:exit;s5:goods are not enough architecture sell of newseller issignal a1true,a2true,a3true,b1true,b2true,b3true,etrue,inserttrue:std_logic;signal count:integer range 0 to 9;signal goodstypetmp:std_logic_vector(1 downto 0);beginp0:process(a1,a2,a3,b1,b2,b3,e,insert,clk)variable tmp11,tm
24、p12,tmp13,tmp14,q11,q12:std_logic;variable tmp21,tmp22,tmp23,tmp24,q21,q22:std_logic;variable tmp31,tmp32,tmp33,tmp34,q31,q32:std_logic;variable tmp41,tmp42,tmp43,tmp44,q41,q42:std_logic;variable tmp51,tmp52,tmp53,tmp54,q51,q52:std_logic;variable tmp61,tmp62,tmp63,tmp64,q61,q62:std_logic;variable tm
25、p71,tmp72,tmp73,tmp74,q71,q72:std_logic;variable tmp81,tmp82,tmp83,tmp84,q81,q82:std_logic;beginif clkevent and clk=1 then -avoid shaking tmp12:=tmp11;tmp11:=a1;q12:=q11;q11:=(tmp11 and tmp12); a1true=q11 and not(q12); tmp22:=tmp21;tmp21:=a2;q22:=q21;q21:=(tmp21 and tmp22); a2true=q21 and not(q22);
26、tmp32:=tmp31;tmp31:=a3;q32:=q31;q31:=(tmp31 and tmp32); a3true=q31 and not(q32); tmp42:=tmp41;tmp41:=b1;q42:=q41;q41:=(tmp41 and tmp42); b1true=q41 and not(q42); tmp52:=tmp51;tmp51:=b2;q52:=q51;q51:=(tmp51 and tmp52); b2true=q51 and not(q52); tmp62:=tmp61;tmp61:=b3;q62:=q61;q61:=(tmp61 and tmp62); b
27、3true=q61 and not(q62); tmp72:=tmp71;tmp71:=e;q72:=q71;q71:=(tmp71 and tmp72); etrue=q71 and not(q72); tmp82:=tmp81;tmp81:=insert;q82:=q81;q81:=(tmp81 and tmp82); inserttrue=q81 and not(q82); end if;end process p0;p1:process(a1true,a2true,a3true,b1true,b2true,b3true,etrue,inserttrue,clk)variable m,n
28、,x,y,z:integer range 0 to 99;beginif(clkevent and clk=1)then- if count=9 then goodstypetmp=00;count=0; -which goodtype has been chose else if (goodstypetmp=01 or goodstypetmp=10 or goodstypetmp=11)then count=count+1; else goodstypetmp=00; end if; end if; - if (inserttrue=1)then -input new goods x:=x
29、+30;y:=y+20;z:=z+10;s5=0;goodstype=00; -goods are enough else x:=x;y:=y;z:=z;goodstype=00; end if; if etrue=0 then s4=0; -not exit if(a1true=1)then m:=m+1+n;n:=0;s1=1; -input 1yuan elsif (a2true=1)then m:=m+5+n;n:=0;s1=1; -input 5yuan elsif (a3true=1)then m:=m+10+n;n:=0;s1=1; -input 10yuan - elsif (
30、b1true=1)then goodstypetmp=01; -buying b1 if(x=0)then s5=1; -goods are not enough else s55)then m:=m-3;x:=x-1;s22)then m:=m-3;x:=x-1;s2=1;n:=m;m:=0;s3=1;-money3,back money else n:=m;m:=0;s2=0;s3=1; -not succeed,back money end if; end if; elsif (b2true=1)then goodstypetmp=10; -buying b2 if(y=0)then s
31、5=1; -goods are not enough else s510)then m:=m-8;y:=y-1;s27)then m:=m-8;y:=y-1;s2=1;n:=m;m:=0;s3=1; -money3,back money else n:=m;m:=0;s3=1; -not succeed,back money end if; end if; elsif (b3true=1)then goodstypetmp=11; -buying b3 if(z=0)then s5=1; -goods are not enough else s514)then m:=m-12;z:=z-1;s
32、211)then m:=m-12;z:=z-1;s2=1;n:=m;m:=0;s3=1;-money3,back money else n:=m;m:=0;s3=1; -not succeed,back money end if; end if; - else m:=m;n:=n;s1=0;s2=0;s3=0;s4=0;s5=0;-stay end if; - else n:=m;m:=0;s4=1;goodstypetmp=00; end if; money=m;change=n;c1=x;c2=y;c3=z;goodstype=goodstypetmp;end if;end process
33、 p1;end sell;-2、分頻模塊library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity div isport(clk: in std_logic; -50Mhz clkout_50k:out std_logic; -50khz clkout_10: out std_logic; -10hz clkout_1: out std_logic); -1hzend div;architecture d1 of div issignal tmp0:integer range 0 to 999;
34、signal tmp1:integer range 0 to 4999999;signal tmp2:integer range 0 to 49999999;beginprocess(clk) begin if(clkevent and clk=1)then - if tmp0=999 then -clk_50k tmp0=0; else tmp0499 then clkout_50k=1; else clkout_50k=0; end if; - if tmp1=4999999 then -clk_10 tmp1=0; else tmp12499999 then clkout_10=1; e
35、lse clkout_10=0; end if; - if tmp2=49999999 then -clk_1 tmp2=0; else tmp224999999 then clkout_1=1; else clkout_1t=00;statet=01;statet=10;statecat=011111;state=t4;tens:=(m/10); -moneytens,disp5 if tens=0 then x=1111110; -0 elsif(tens=1)then x=0110000; -1 elsif(tens=2)then x=1101101; -2 elsif(tens=3)t
36、hen x=1111001; -3 elsif(tens=4)then x=0110011; -4 elsif(tens=5)then x=1011011; -5 elsif(tens=6)then x=1011111; -6 elsif(tens=7)then x=1110000; -7 elsif(tens=8)then x=1111111; -8 else xcat=101111;state=t3;uinits:=(m mod 10); -moneyunits,disp4 if(uinits=0)then x=1111110; -0 elsif(uinits=1)then x=01100
37、00; -1 elsif(uinits=2)then x=1101101; -2 elsif(uinits=3)then x=1111001; -3 elsif(uinits=4)then x=0110011; -4 elsif(uinits=5)then x=1011011; -5 elsif(uinits=6)then x=1011111; -6 elsif(uinits=7)then x=1110000; -7 elsif(uinits=8)then x=1111111; -8 else xcat=111101;state=t0; -changetens,disp1 if(n10)the
38、n x=1111110; -0 elsif(n20)then x=0110000; -1 elsif(n30)then x=1101101; -2 elsif(n40)then x=1111001; -3 elsif(n50)then x=0110011; -4 elsif(n60)then x=1011011; -5 elsif(n70)then x=1011111; -6 elsif(n80)then x=1110000; -7 elsif(n90)then x=1111111; -8 else xcat=111110;state=t5; -changeunits,disp0 uinits
39、:=(n mod 10); if(uinits=0)then x=1111110; -0 elsif(uinits=1)then x=0110000; -1 elsif(uinits=2)then x=1101101; -2 elsif(uinits=3)then x=1111001; -3 elsif(uinits=4)then x=0110011; -4 elsif(uinits=5)then x=1011011; -5 elsif(uinits=6)then x=1011111; -6 elsif(uinits=7)then x=1110000; -7 elsif(uinits=8)th
40、en x=1111111; -8 else xstatecat=110111; - if(t=00)then tmp:=c1; elsif(t=01)then tmp:=c2; else tmp:=c3;end if; if(tmp10)then x=1111110; -0 elsif(tmp20)then x=0110000; -1 elsif(tmp30)then x=1101101; -2 elsif(tmp40)then x=1111001; -3 elsif(tmp50)then x=0110011; -4 elsif(tmp60)then x=1011011; -5 elsif(t
41、mp70)then x=1011111; -6 elsif(tmp80)then x=1110000; -7 elsif(tmp90)then x=1111111; -8 else xcatcat=111011;state -be able to display the rest number of the 3 goods. if(t=00)then tmp:=c1; -display good1. elsif(t=01)then tmp:=c2; -display good2. else tmp:=c3;end if; -display good3. tens:=(tmp/10); -the
42、 tens digit if tens=0 then x=1111110; -0 elsif(tens=1)then x=0110000; -1 elsif(tens=2)then x=1101101; -2 elsif(tens=3)then x=1111001; -3 elsif(tens=4)then x=0110011; -4 elsif(tens=5)then x=1011011; -5 elsif(tens=6)then x=1011111; -6 elsif(tens=7)then x=1110000; -7 elsif(tens=8)then x=1111111; -8 els
43、e x=1111011;end if; -9 uinits:=(tmp mod 10); -the units digit if(uinits=0)then x=1111110; -0 elsif(uinits=1)then x=0110000; -1 elsif(uinits=2)then x=1101101; -2 elsif(uinits=3)then x=1111001; -3 elsif(uinits=4)then x=0110011; -4 elsif(uinits=5)then x=1011011; -5 elsif(uinits=6)then x=1011111; -6 els
44、if(uinits=7)then x=1110000; -7 elsif(uinits=8)then x=1111111; -8 else xxxxx=0000000; end case; end case;end if;end process;end xianshi;-5、點(diǎn)陣顯示模塊library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity dianzhenxianshi isport(clk_1: in std_logic; -clk_10 clk_2: in std_logic; -cl
45、k_50khz s1,s2,s3,s4,s5:in std_logic; -s1:inputting money;s2:buying goods;s3:back money;s4:exit;s5:goods are not enough t:in std_logic_vector(1 downto 0); -t:recycling to display the type of goods row:out std_logic_vector(7 downto 0); -which will be lighted col:out std_logic_vector(7 downto 0); -whic
46、h shape will be displayed beep:out std_logic); -beeps voice end dianzhenxianshi;architecture zhen of dianzhenxianshi is type state_type1 is(d0,d1,d2,d3,d4,d5,d6,d7);signal rowscan:state_type1;type state_type2 is(e0,e1,e2,e3,e4,e5,e6,e7,e8,e9);signal money:state_type2;type state_type3 is(f0,f1,f2,f3,
47、f4,f5,f6,f7,f8);signal goods:state_type3;type state_type4 is(g0,g1,g2,g3,g4,g5,g6,g7,g8);signal moremoney:state_type4;type state_type5 is(h0,h1,h2,h3,h4,h5,h6,h7,h8);signal thankyou:state_type5;type state_type6 is(i0,i1,i2,i3,i4,i5,i6,i7,i8);signal notenough:state_type6;signal workstate: std_logic_v
48、ector(2 downto 0);signal r1,r2,r3,r4,r5:std_logic;beginp1:process(clk_1,s1,s2,s3,s4,s5) -enable to recyclingbeginif(clk_1event and clk_1=1)then r1=s1;r2=s2;r3=s3;r4=s4;r5=s5; if(r1=0 and s1=1)then workstate=001;beep=1; elsif(r2=0 and s2=1)then workstate=010;beep=1; elsif(r3=0 and s3=1)then workstate
49、=011;beep=1; elsif(r4=0 and s4=1)then workstate=100;beep=1; elsif(r5=0 and s5=1)then workstate=101;beep=1; elsif(workstate=001 or workstate=010 or workstate=011 or workstate=100 or workstate=101)then workstate=workstate; else workstate=000;beepif workstate=001then money=e1;else moneymoneymoneymoneym
50、oneymoneymoneymoneymoneyworkstate=000;moneyif workstate=010then goods=f1;else goodsgoodsgoodsgoodsgoodsgoodsgoodsgoodsworkstate=000;goodsif workstate=011then moremoney=g1;else moremoneymoremoneymoremoneymoremoneymoremoneymoremoneymoremoneymoremoneyworkstate=000;moremoneyif workstate=100then thankyou
51、=h1;else thankyouthankyouthankyouthankyouthankyouthankyouthankyouthankyouworkstate=000;thankyouif workstate=101then notenough=i1;else notenoughnotenoughnotenoughnotenoughnotenoughnotenoughnotenoughnotenoughworkstate=000;notenoughif(t=00)then -the name of the goods case rowscan is when d7=row=0111111
52、1;col=01111110;rowscanrow=10111111;col=01011010;rowscanrow=11011111;col=01111110;rowscanrow=11101111;col=01011010;rowscanrow=11110111;col=01111110;rowscanrow=11111011;col=00011000;rowscanrow=11111101;col=00011000;rowscanrow=11111110;col=00011000;rowscanrow=01111111;col=01111110;rowscanrow=10111111;c
53、ol=00100000;rowscanrow=11011111;col=00010000;rowscanrow=11101111;col=00001000;rowscanrow=11110111;col=00000100;rowscanrow=11111011;col=01000010;rowscanrow=11111101;col=11111111;rowscanrow=11111110;col=00000000;rowscanrow=01111111;col=01111110;rowscanrow=10111111;col=00011000;rowscanrow=11011111;col=
54、11111111;rowscanrow=11101111;col=10011001;rowscanrow=11110111;col=10100101;rowscanrow=11111011;col=10000001;rowscanrow=11111101;col=11000001;rowscanrow=11111110;col=00000000;rowscancase money is -inputting money when e1=case rowscan is when d7=row=01111111;col=00000000;rowscanrow=10111111;col=000000
55、10;rowscanrow=11011111;col=00000010;rowscanrow=11101111;col=00000010;rowscanrow=11110111;col=00000010;rowscanrow=11111011;col=00000010;rowscanrow=11111101;col=00000010;rowscanrow=11111110;col=00000000;rowscancase rowscan is when d7=row=01111111;col=00000000;rowscanrow=10111111;col=00000110;rowscanro
56、w=11011111;col=00000110;rowscanrow=11101111;col=00000110;rowscanrow=11110111;col=00000110;rowscanrow=11111011;col=00000110;rowscanrow=11111101;col=00000110;rowscanrow=11111110;col=00000000;rowscancase rowscan is when d7=row=01111111;col=00000000;rowscanrow=10111111;col=00001110;rowscanrow=11011111;c
57、ol=00001110;rowscanrow=11101111;col=00001110;rowscanrow=11110111;col=00001110;rowscanrow=11111011;col=00001110;rowscanrow=11111101;col=00001110;rowscanrow=11111110;col=00001110;rowscancase rowscan iswhen d7=row=01111111;col=00000000;rowscanrow=10111111;col=00011110;rowscanrow=11011111;col=00011110;r
58、owscanrow=11101111;col=00011110;rowscanrow=11110111;col=00011110;rowscanrow=11111011;col=00011110;rowscanrow=11111101;col=00011110;rowscanrow=11111110;col=00000000;rowscancase rowscan iswhen d7=row=01111111;col=00000000;rowscanrow=10111111;col=00111110;rowscanrow=11011111;col=00111110;rowscanrow=111
59、01111;col=00111110;rowscanrow=11110111;col=00111110;rowscanrow=11111011;col=00111110;rowscanrow=11111101;col=00111110;rowscanrow=11111110;col=00000000;rowscancase rowscan iswhen d7=row=01111111;col=00000000;rowscanrow=10111111;col=01111110;rowscanrow=11011111;col=01111110;rowscanrow=11101111;col=011
60、11110;rowscanrow=11110111;col=01111110;rowscanrow=11111011;col=01111110;rowscanrow=11111101;col=01111110;rowscanrow=11111110;col=00000000;rowscancase rowscan iswhen d7=row=01111111;col=00000000;rowscanrow=10111111;col=01111110;rowscanrow=11011111;col=01111110;rowscanrow=11101111;col=01111110;rowscan
溫馨提示
- 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ù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 員工績(jī)效計(jì)劃培訓(xùn)課件
- 2025年水處理阻垢緩蝕劑HEDP項(xiàng)目合作計(jì)劃書
- 氣道護(hù)理的科研進(jìn)展
- 護(hù)理專業(yè)就業(yè)現(xiàn)狀分析
- 腎臟疾病護(hù)理指南
- 護(hù)理規(guī)培:基礎(chǔ)理論精講
- EMR術(shù)后早期活動(dòng)的好處
- 護(hù)理專業(yè)領(lǐng)導(dǎo)力培養(yǎng)
- 護(hù)理翻轉(zhuǎn)課堂:跨文化交流與溝通
- 跌倒風(fēng)險(xiǎn)識(shí)別與評(píng)估
- MES系統(tǒng)操作手冊(cè)完整版
- 單閉環(huán)不可逆直流調(diào)速系統(tǒng)實(shí)驗(yàn)
- 房間室內(nèi)空調(diào)系統(tǒng)試運(yùn)行調(diào)試記錄
- 關(guān)于快遞公司與菜鳥驛站合作協(xié)議
- 數(shù)字藏品(NFT)研究報(bào)告
- 電氣試驗(yàn)標(biāo)準(zhǔn)化作業(yè)指導(dǎo)書
- 六年級(jí)數(shù)學(xué) 計(jì)算能力分析
- 套管外光纜下井保護(hù)器
- 文物保護(hù)學(xué)概論課件ppt 第一章 文物與文物學(xué)
- 安全教育教案課程全集
- 飼料生產(chǎn)許可證試題
評(píng)論
0/150
提交評(píng)論