eda課程設(shè)計(jì)--出租車計(jì)費(fèi)器_第1頁(yè)
已閱讀1頁(yè),還剩20頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p><b>  課程設(shè)計(jì)報(bào)告</b></p><p>  課程名稱:VHDL語(yǔ)言與EDA課程設(shè)計(jì)</p><p>  設(shè)計(jì)題目: 出租車計(jì)費(fèi)器 </p><p>  系 別: 通信與控制工程系 </p><p>  專 業(yè):

2、 電子信息工程 </p><p>  班 級(jí): </p><p>  學(xué)生姓名: </p><p>  學(xué) 號(hào): </

3、p><p>  起止日期: </p><p>  指導(dǎo)教師: </p><p>  教研室主任: </p><p><b>  摘 要&l

4、t;/b></p><p>  本文介紹了一種采用單片F(xiàn)PGA芯片進(jìn)行出租車計(jì)費(fèi)器的設(shè)計(jì)方法,主要闡述如何使用新興的EDA器件取代傳統(tǒng)的電子設(shè)計(jì)方法,利用FPGA的可編程性,簡(jiǎn)潔而又多變的設(shè)計(jì)方法,縮短了研發(fā)周期,同時(shí)使出租車計(jì)費(fèi)器體積更小功能更強(qiáng)大。本設(shè)計(jì)實(shí)現(xiàn)了出租車計(jì)費(fèi)器所需的一些基本功能,計(jì)費(fèi)包括起步價(jià)、行車?yán)锍逃?jì)費(fèi)、等待時(shí)間計(jì)費(fèi),同時(shí)考慮到出租車行業(yè)的一些特殊性,更注重了把一些新的思路加入到設(shè)計(jì)中。

5、主要包括采用了FPGA芯片,使用VHDL語(yǔ)言進(jìn)行編程,使其具有了更強(qiáng)的移植性,更加利于產(chǎn)品升級(jí)。</p><p>  關(guān)鍵詞:VHDL;計(jì)費(fèi)器;QuartusⅡ;FPGA</p><p><b>  目 錄</b></p><p><b>  設(shè)計(jì)要求1</b></p><p>  1、方案論證

6、與對(duì)比1</p><p><b>  1.1、方案一1</b></p><p><b>  1.2、方案二2</b></p><p>  1.3、方案對(duì)比與選擇3</p><p>  2、主要模塊設(shè)計(jì)3</p><p>  2.1、速度模塊3</p>

7、<p>  2.2、計(jì)程模塊3</p><p>  2.3、計(jì)時(shí)模塊4</p><p>  2.4、計(jì)費(fèi)模塊4</p><p>  2.5、整體框圖5</p><p><b>  3、仿真結(jié)果5</b></p><p>  3.1、速度模塊仿真5</p>&l

8、t;p>  3.2計(jì)程模塊仿真6</p><p>  3.3計(jì)時(shí)模塊仿真6</p><p>  3.4 計(jì)費(fèi)模塊仿真7</p><p>  3.5、整體仿真7</p><p>  4、 整體電路圖8</p><p>  5、引腳鎖定及測(cè)試8</p><p><b> 

9、 6、致謝9</b></p><p>  7、詳細(xì)儀器清單10</p><p><b>  參考文獻(xiàn)11</b></p><p><b>  附錄12</b></p><p><b>  出租車計(jì)費(fèi)器</b></p><p><

10、b>  設(shè)計(jì)要求</b></p><p>  計(jì)費(fèi)標(biāo)準(zhǔn)為武漢起步3元,車行3公里后為1.4元/公里,當(dāng)計(jì)費(fèi)達(dá)到20元后,每公里加收50%的車費(fèi),車停止每3分鐘增加0.7元。車費(fèi)顯示出來(lái),有一位小數(shù)。</p><p><b>  1、方案論證與對(duì)比</b></p><p><b>  1.1、方案一</b>

11、</p><p>  如圖1所示,方案一包含運(yùn)算控制模塊、分頻器、顯示模塊這三大部分。</p><p>  圖1 方案一系統(tǒng)框圖</p><p>  運(yùn)算控制器模塊將其他兩個(gè)進(jìn)行連接,是本次設(shè)計(jì)的核心。它包含計(jì)程器、計(jì)時(shí)器、計(jì)價(jià)器,同時(shí)還有讀取外部的撥碼開(kāi)關(guān)控制信號(hào),提供當(dāng)前顯示信號(hào)與顯示位選信號(hào),從而周期性交替顯示計(jì)價(jià)/計(jì)時(shí)信息、等時(shí)信息。</p>

12、<p>  計(jì)程器、計(jì)時(shí)器、計(jì)價(jià)器根據(jù)位選信號(hào),輸出相應(yīng)數(shù)據(jù)的當(dāng)前選中數(shù)字,由頂層模塊根據(jù)顯示數(shù)據(jù)類型變換信號(hào)進(jìn)行選擇,傳輸給顯示模塊。</p><p>  實(shí)驗(yàn)箱的時(shí)鐘信號(hào)為20MHz方波,由分頻器分為10Hz的計(jì)時(shí)信號(hào)(一個(gè)周期代表現(xiàn)實(shí)中的1s)、10Hz的計(jì)程信號(hào)(一個(gè)周期代表現(xiàn)實(shí)中的10m)、500Hz的數(shù)碼管掃描信號(hào)(掃描頻率62.5Hz)、0.2Hz的顯示數(shù)據(jù)類型變換信號(hào)(變化周期5s)。&

13、lt;/p><p>  顯示模塊由實(shí)驗(yàn)箱上的3/8譯碼器、五個(gè)LED燈構(gòu)成狀態(tài)的指示燈、程序編寫的一個(gè)七段數(shù)碼管譯碼器(因顯示需要,原有字形“E”征用改為“—”,字形"F"改為“ ”)組成。</p><p><b>  1.2、方案二</b></p><p>  方案二流程介紹:分析系統(tǒng)設(shè)計(jì)要求不難得知,整個(gè)出租車計(jì)費(fèi)系統(tǒng)按功能

14、主要分為速度模塊、計(jì)程模塊、計(jì)時(shí)模塊和計(jì)費(fèi)模塊,其系統(tǒng)結(jié)構(gòu)圖如圖2所示。</p><p>  圖2 方案二系統(tǒng)結(jié)構(gòu)圖</p><p>  系統(tǒng)接收到reset信號(hào)后,總費(fèi)用變?yōu)?元,同時(shí)其他計(jì)數(shù)器、寄存器等全部清零。</p><p>  系統(tǒng)接收到start信號(hào)后,首先把部分寄存器賦值,總費(fèi)用不變,單價(jià)price寄存器通過(guò)對(duì)總費(fèi)用的判斷后賦為3元。其他寄存器和計(jì)數(shù)器

15、等繼續(xù)保持為0。</p><p>  速度模塊:通過(guò)對(duì)速度信號(hào)sp的判斷,決定變量kinside的值。Kinside即是行進(jìn)100m所需要的時(shí)鐘周期數(shù),然后每行進(jìn)100m,則產(chǎn)生一個(gè)脈沖clkout。</p><p>  計(jì)程模塊:由于一個(gè)clkout信號(hào)代表行進(jìn)100m,故通過(guò)對(duì)clkout計(jì)數(shù),可以獲得共行進(jìn)的距離kmcount。</p><p>  計(jì)時(shí)模塊:

16、在汽車啟動(dòng)后,當(dāng)遇到顧客等人或紅燈時(shí),出租車采用計(jì)時(shí)收費(fèi)的方式。通過(guò)對(duì)速度信號(hào)sp的判斷決定是否開(kāi)始記錄時(shí)間。當(dāng)sp=0時(shí),開(kāi)始記錄時(shí)間。當(dāng)時(shí)間達(dá)到足夠長(zhǎng)時(shí)產(chǎn)生timecount脈沖,并重新計(jì)時(shí)。一個(gè)timecount脈沖相當(dāng)于等待的時(shí)間達(dá)到了時(shí)間計(jì)費(fèi)的長(zhǎng)度。這里選擇系統(tǒng)時(shí)鐘頻率為500Hz,180s即計(jì)數(shù)值為9000。</p><p>  計(jì)費(fèi)模塊由兩個(gè)進(jìn)程組成。其中,一個(gè)進(jìn)程根據(jù)條件對(duì)enable和price

17、賦值:當(dāng)記錄的距離達(dá)到3公里后enable變?yōu)?,開(kāi)始進(jìn)行每公里收費(fèi),當(dāng)總費(fèi)用大于20元后,則單價(jià)price由原來(lái)的1.4元每公里變成2.1元每公里;第二個(gè)進(jìn)程在每個(gè)時(shí)鐘周期判斷timeout和clkout的值。當(dāng)其為1時(shí),則在總費(fèi)用上加上相應(yīng)的費(fèi)用。</p><p>  1.3、方案對(duì)比與選擇</p><p>  方案一和方案二雖然基本上都能實(shí)現(xiàn)本次課程設(shè)計(jì)的要求,但方案一通過(guò)分頻器分成

18、的數(shù)個(gè)輸入信號(hào)來(lái)進(jìn)行出租車計(jì)費(fèi)器的仿真,使系統(tǒng)變得復(fù)雜且對(duì)費(fèi)用的計(jì)算不能達(dá)到課程設(shè)計(jì)對(duì)價(jià)格變化的要求。而方案二則通過(guò)一個(gè)速度模塊和一個(gè)時(shí)間模塊達(dá)到對(duì)速度和時(shí)間控制,從而使速度可調(diào)且實(shí)現(xiàn)等待計(jì)費(fèi)。再通過(guò)計(jì)費(fèi)模塊的反饋使公里單價(jià)隨總費(fèi)用變化從而達(dá)到總體的要求。通過(guò)比較可知方案二簡(jiǎn)單明了且調(diào)節(jié)速度控制里程的變化快慢,易于控制顯示,再結(jié)合實(shí)驗(yàn)室的設(shè)備。綜合考慮,最終選擇了方案二。</p><p><b>  2

19、、主要模塊設(shè)計(jì)</b></p><p><b>  2.1、速度模塊</b></p><p>  速度模塊首先根據(jù)start信號(hào)判斷是否開(kāi)始計(jì)費(fèi),然后根據(jù)輸入的速度檔位sp[2..0]的判斷,確定行駛100m所需要的時(shí)鐘數(shù),每前進(jìn)100m,輸出一個(gè)clkout信號(hào)。同時(shí)由cnt對(duì)clk進(jìn)行計(jì)數(shù),當(dāng)cnt等于kinside時(shí),把clkout信號(hào)置1,cnt清

20、0。其模塊框圖如圖3。</p><p><b>  圖3 速度模塊框圖</b></p><p><b>  2.2、計(jì)程模塊</b></p><p>  此模塊主要用于記錄行進(jìn)的距離,其模塊框圖如圖4所示。通過(guò)對(duì)clkout信號(hào)的計(jì)數(shù),可以計(jì)算行駛的距離kmcount。一個(gè)clkout脈沖相當(dāng)于行進(jìn)100m所以只要記錄cl

21、kout的脈沖數(shù)目即可確定共行進(jìn)的距離。Kmcount1為十分位,kmcount2為個(gè)位,kmcount3為十位,分別為十進(jìn)制數(shù)。</p><p><b>  圖4 計(jì)程模塊框圖</b></p><p><b>  2.3、計(jì)時(shí)模塊</b></p><p>  速度模塊主要用于計(jì)時(shí)收費(fèi),記錄計(jì)程車速度為0的時(shí)間(如等待紅燈

22、),其模塊框圖如圖5所示。通過(guò)對(duì)sp信號(hào)的判斷,當(dāng)sp=0,開(kāi)始記錄時(shí)間。當(dāng)時(shí)間達(dá)到足夠長(zhǎng)時(shí),產(chǎn)生timecount脈沖,并重新計(jì)時(shí)。</p><p><b>  圖5 計(jì)時(shí)模塊框圖</b></p><p><b>  2.4、計(jì)費(fèi)模塊</b></p><p>  計(jì)費(fèi)模塊如圖6所示,可分為kmmoney1和kmmoney

23、2兩個(gè)進(jìn)程。</p><p>  Kmmoney1用于產(chǎn)生enable和price信號(hào)。當(dāng)記錄距離達(dá)到3km后,enable信號(hào)為1,開(kāi)始進(jìn)行每公里收費(fèi)。當(dāng)總費(fèi)用大于20元后,單價(jià)price由原來(lái)的1.4元變成2.1元,用作計(jì)時(shí)收費(fèi)。通過(guò)對(duì)sp信號(hào)的判斷,當(dāng)sp=0,開(kāi)始記錄時(shí)間。當(dāng)時(shí)間達(dá)到足夠長(zhǎng)時(shí),產(chǎn)生timecount脈沖,并重新計(jì)時(shí)。</p><p>  Kmmoney2用于判斷ti

24、mecount和clkout的值,當(dāng)其為1時(shí),總費(fèi)用加1。最終輸出為總費(fèi)用。</p><p><b>  圖6 計(jì)費(fèi)模塊框圖</b></p><p><b>  2.5、整體框圖</b></p><p>  從上述設(shè)計(jì)方案中我們可以大致得到出租車計(jì)費(fèi)器的系統(tǒng)框圖,如圖7所示。其中clk為輸入時(shí)鐘脈沖,時(shí)鐘上升沿有效;res

25、et為復(fù)位信號(hào),start為開(kāi)始計(jì)費(fèi)信號(hào),stop為停止計(jì)費(fèi)信號(hào),均高電平有效;SP[2..0]表示出租車狀態(tài)(停止或不同形式速度);kmcnt和count信號(hào)則分別輸出出租車行駛的里程和花費(fèi)。</p><p>  圖7 出租車計(jì)費(fèi)器系統(tǒng)框圖</p><p><b>  3、仿真結(jié)果</b></p><p>  3.1、速度模塊仿真</p

26、><p>  速度模塊的仿真波形圖如圖8所示。該模塊根據(jù)出租車所處的運(yùn)行狀態(tài)和不同的形式速度,對(duì)相應(yīng)數(shù)目的時(shí)鐘周期進(jìn)行計(jì)數(shù),車每行駛100m時(shí)輸出信號(hào)clkout輸出高電平。</p><p>  圖8 速度模塊仿真波形圖</p><p><b>  3.2計(jì)程模塊仿真</b></p><p>  計(jì)程模塊的仿真波形如圖9所示

27、。圖中,當(dāng)reset信號(hào)有效時(shí),系統(tǒng)復(fù)位清零;否則,對(duì)輸入信號(hào)clkout進(jìn)行十進(jìn)制計(jì)數(shù)。</p><p>  圖9計(jì)程模塊仿真波形圖</p><p><b>  3.3計(jì)時(shí)模塊仿真</b></p><p>  計(jì)時(shí)模塊的仿真波形圖如圖10所示。預(yù)設(shè)9000個(gè)時(shí)鐘周期為180s,對(duì)時(shí)鐘周期進(jìn)行計(jì)數(shù),每計(jì)9000個(gè)時(shí)鐘周期輸出高電平,指示計(jì)時(shí)18

28、0秒。</p><p>  圖10 計(jì)時(shí)模塊仿真波形圖</p><p>  3.4 計(jì)費(fèi)模塊仿真</p><p>  計(jì)費(fèi)模塊的仿真波形圖如圖11所示。當(dāng)reset信號(hào)有效時(shí),系統(tǒng)復(fù)位清零;否則,當(dāng)計(jì)時(shí)計(jì)費(fèi)信號(hào)timecount和計(jì)程計(jì)費(fèi)信號(hào)clkout為高電平時(shí),按照一定計(jì)費(fèi)規(guī)則進(jìn)行計(jì)費(fèi)。</p><p>  圖11計(jì)費(fèi)模塊仿真功能圖&l

29、t;/p><p><b>  3.5、整體仿真 </b></p><p>  對(duì)電路整體進(jìn)行仿真,得出如下仿真波形圖12。圖中,當(dāng)復(fù)位信號(hào)reset為高電平時(shí),系統(tǒng)所有寄存器、計(jì)數(shù)器都清零;當(dāng)開(kāi)始計(jì)費(fèi)信號(hào)start信號(hào)有效時(shí),計(jì)費(fèi)器開(kāi)始計(jì)費(fèi),根據(jù)出租車行駛的速度sp[2..0]的取值計(jì)算所用花費(fèi)和行駛里程;當(dāng)停止計(jì)費(fèi)信號(hào)有效時(shí),計(jì)費(fèi)器停止工作。</p>&l

30、t;p><b>  圖12整體仿真圖</b></p><p>  綜上所述,本設(shè)計(jì)的出租車計(jì)費(fèi)器完全符合系統(tǒng)設(shè)計(jì)的要求,實(shí)現(xiàn)了出租車計(jì)費(fèi)器所需的各項(xiàng)基本功能。</p><p><b>  4、 整體電路圖</b></p><p>  整體RTL電路如圖13。硬件電路由CycloneⅡ電路板組成,clk為時(shí)鐘周期信號(hào),

31、由試驗(yàn)箱產(chǎn)生,start/stop是啟動(dòng)停止按鍵電路,reset為自動(dòng)清零電路。電源又AD-DC開(kāi)關(guān)電源供電。</p><p>  圖13 整體RTL門電路</p><p><b>  5、引腳鎖定及測(cè)試</b></p><p>  如圖14所示,對(duì)系統(tǒng)的各個(gè)引腳進(jìn)行鎖定,并在Cyclone型可編程數(shù)字實(shí)現(xiàn)系統(tǒng)上實(shí)現(xiàn)了該控制。該數(shù)字實(shí)現(xiàn)系統(tǒng)分成

32、兩部分,一是FPGA的下載板,它主要包括所使用的芯片、RS-232接頭、接腳轉(zhuǎn)換插槽等;另一部分是I/O實(shí)驗(yàn)板,它主要包括顯示、脈沖輸出等。出租車計(jì)費(fèi)器的各部分利用數(shù)字實(shí)驗(yàn)系統(tǒng)所附的RS-232連接線將計(jì)算機(jī)中的VHDL代碼設(shè)計(jì)的內(nèi)容燒錄到該實(shí)驗(yàn)系統(tǒng)的EPC2C35F672C8芯片中進(jìn)行測(cè)試,測(cè)試結(jié)果基本實(shí)現(xiàn)了總費(fèi)用=起費(fèi)用+(里程-3km)×里程單價(jià)+等待時(shí)間×等待單價(jià)的出租車計(jì)費(fèi)模式。</p>&l

33、t;p><b>  圖14各引腳鎖定</b></p><p><b>  6、致謝</b></p><p>  對(duì)于此次課程設(shè)計(jì),首先我得誠(chéng)摯的感謝我的指導(dǎo)老師,從設(shè)計(jì)、整改及論文的定稿過(guò)程中,自始至終都傾注著老師的心血。老師以嚴(yán)謹(jǐn)?shù)闹螌W(xué)之道、寬厚仁慈的胸懷、積極樂(lè)觀的生活態(tài)度,兢兢業(yè)業(yè)的工作作風(fēng)為我樹(shù)立了學(xué)習(xí)的典范,他們的教誨與鞭策將激勵(lì)

34、我在學(xué)習(xí)和生活的道路上勵(lì)精圖治,開(kāi)拓創(chuàng)新。他們淵博的知識(shí)、開(kāi)闊的視野和敏銳的思維給了我深深的啟迪。我真誠(chéng)地謝謝老師們的指導(dǎo)和關(guān)懷。</p><p><b>  7、詳細(xì)儀器清單</b></p><p><b>  參考文獻(xiàn)</b></p><p>  [1] 馮占嶺.數(shù)字電壓表及數(shù)字多用表檢測(cè)技術(shù).中國(guó)計(jì)量出版社.2003

35、.2-47</p><p>  [2] ALTERA公司.VDHL語(yǔ)言[M].北京:清華大學(xué)出版社.1998.91-103</p><p>  [3] 宋萬(wàn)杰,羅豐,吳順君.CPLD技術(shù)應(yīng)用及其應(yīng)用[M].西安電子科技大學(xué)出版社.1999.56-62</p><p>  [4] 張昌凡,龍永紅,彭濤.可編程邏輯器件及VHDL設(shè)計(jì)技術(shù).廣州:華南工學(xué)院出版社,2001

36、.68-92</p><p>  [5] 江國(guó)強(qiáng).EDA技術(shù)與應(yīng)用[M].電子工業(yè)出版社.310-312</p><p>  [6] 潘松,黃繼業(yè).EDA技術(shù)與VHDL[M].清華大學(xué)出版社.220-228</p><p>  [7] 甘登岱,田富鵬,朱利娜.EDA培訓(xùn)教程[M].機(jī)械工業(yè)出版社.215-220</p><p>  [8] 鄧

37、元慶,關(guān)宇,徐志平.數(shù)字電路與邏輯設(shè)計(jì)[M].電子工業(yè)出版社.189-192</p><p>  [9] 延明,張霖華.數(shù)字電路EDA入門[M].北京郵電大學(xué)出版社.195-200</p><p><b>  附錄</b></p><p><b>  VHDL程序</b></p><p><b

38、>  Speed模塊</b></p><p>  library ieee; </p><p>  use ieee.std_logic_1164.all;</p><p>  use ieee.std_logic_unsigned.all;</p><p>  entity speed is</p>

39、;<p>  port( </p><p>  clk :in std_logic;</p><p>  reset:in std_logic;</p><p>  start:in std_logic;</p><p>  stop :in std_logic;</p><

40、;p>  sp :in std_logic_vector(2 downto 0);</p><p>  clkout:out std_logic</p><p><b>  );</b></p><p>  end speed;</p><p>  architecture rtl of speed is<

41、;/p><p><b>  begin</b></p><p>  process(clk,reset,start,stop,sp) </p><p>  type state_type is(s0,s1); </p><p>  variable s_state:state_type; </p

42、><p>  variable cnt:integer range 0 to 28;</p><p>  variable kinside:integer range 0 to 30;</p><p><b>  begin</b></p><p>  case sp is </p><

43、p>  when"000"=>kinside:=0; </p><p>  when"001"=>kinside:=28; </p><p>  when"010"=>kinside:=24; </p><p>  when"011"

44、=>kinside:=20;</p><p>  when"100"=>kinside:=16;</p><p>  when"101"=>kinside:=12;</p><p>  when"110"=>kinside:=8;</p><

45、;p>  when"111"=>kinside:=4;</p><p><b>  end case;</b></p><p>  if reset='1'then</p><p>  s_state:=s0;</p><p>  elsif clk'

46、;event and clk='1'then</p><p>  case s_state is</p><p><b>  when s0=></b></p><p><b>  cnt:=0;</b></p><p>  clkout<='0';&

47、lt;/p><p>  if start='1'then</p><p>  s_state:=s1;</p><p><b>  else</b></p><p>  s_state:=s0;</p><p><b>  end if;</b></p>

48、;<p><b>  when s1=></b></p><p>  clkout<='0';</p><p>  if stop='1'then</p><p>  s_state:=s0;</p><p>  elsif sp="000"

49、;then</p><p>  s_state:=s1;</p><p>  elsif cnt=kinside then</p><p><b>  cnt:=0;</b></p><p>  clkout<='1';</p><p>  s_state:=s1;<

50、;/p><p><b>  else</b></p><p>  cnt:=cnt+1;</p><p>  s_state:=s1;</p><p><b>  end if;</b></p><p><b>  end case;</b></p&g

51、t;<p><b>  end if;</b></p><p>  end process;</p><p><b>  end rtl;</b></p><p><b>  Times模塊</b></p><p>  library ieee;

52、</p><p>  use ieee.std_logic_1164.all;</p><p>  use ieee.std_logic_unsigned.all;</p><p>  entity times is</p><p>  port( </p><p>  clk

53、 :in std_logic;</p><p>  reset:in std_logic;</p><p>  start:in std_logic;</p><p>  stop :in std_logic;</p><p>  sp :in std_logic_vector(2 downto 0);</p><p&

54、gt;  timecount:out std_logic</p><p><b>  );</b></p><p>  end times;</p><p>  architecture rtl of times is</p><p><b>  begin</b></p><p

55、>  process(reset,clk,sp,stop,start)</p><p>  type state_type is(t0,t1,t2);</p><p>  variable t_state:state_type;</p><p>  variable waittime:integer range 0 to 9000;</p>

56、;<p><b>  begin</b></p><p>  if reset='1'then </p><p>  t_state:=t0;</p><p>  elsif(clk'event and clk='1')then</p><p>  

57、case t_state is</p><p><b>  when t0=></b></p><p>  waittime:=0;</p><p>  timecount<='0';</p><p>  if start='1'then</p>&l

58、t;p>  t_state:=t1;</p><p><b>  else</b></p><p>  t_state:=t0;</p><p><b>  end if;</b></p><p><b>  when t1=></b></p><

59、;p>  if sp="000"then</p><p>  t_state:=t2;</p><p><b>  else</b></p><p>  waittime:=0;</p><p>  t_state:=t1;</p><p><b>  end

60、if;</b></p><p><b>  when t2=></b></p><p>  waittime:=waittime+1;</p><p>  timecount<='0';</p><p>  if waittime=9000 then</p>&l

61、t;p>  timecount<='1'; </p><p>  waittime:=0;</p><p>  elsif stop='1'then</p><p>  t_state:=t0;</p><p>  elsif sp="000"then</p>

62、<p>  t_state:=t2;</p><p><b>  else</b></p><p>  timecount<='0';</p><p>  t_state:=t1;</p><p><b>  end if;</b></p><p

63、><b>  end case;</b></p><p><b>  end if;</b></p><p>  end process;</p><p><b>  end rtl;</b></p><p>  Kilometers模塊</p><p

64、>  library ieee; </p><p>  use ieee.std_logic_1164.all;</p><p>  use ieee.std_logic_unsigned.all;</p><p>  entity kilometers is</p><p>  port(<

65、/p><p>  clkout,reset:in std_logic;</p><p>  kmcnt1:out std_logic_vector(3 downto 0);</p><p>  kmcnt2:out std_logic_vector(3 downto 0);</p><p>  kmcnt3:out std_logic_vecto

66、r(3 downto 0)</p><p><b>  );</b></p><p>  end kilometers;</p><p>  architecture rtl of kilometers is</p><p><b>  begin</b></p><p> 

67、 process(clkout,reset)</p><p>  variablekm_reg:std_logic_vector(11 downto 0);</p><p><b>  begin</b></p><p>  if reset='1'then</p><p> 

68、 km_reg:="000000000000";</p><p>  elsif clkout'event and clkout='1'then</p><p>  if km_reg(3 downto 0)="1001"then</p><p>  km_reg:=km_reg+"0

69、111";</p><p><b>  else</b></p><p>  km_reg(3 downto 0):=km_reg(3 downto 0)+"0001";</p><p><b>  end if;</b></p><p><b>  

70、end if;</b></p><p>  kmcnt1<=km_reg(3 downto 0);</p><p>  kmcnt2<=km_reg(7 downto 4);</p><p>  kmcnt3<=km_reg(11 downto 8);</p><p>  end process;</p&g

71、t;<p><b>  end rtl;</b></p><p><b>  Kmmoney模塊</b></p><p>  library ieee; </p><p>  use ieee.std_logic_1164.all;</p><p>  use ieee

72、.std_logic_unsigned.all;</p><p>  entity kmmoney is</p><p>  port( </p><p>  clk :in std_logic;</p><p>  reset :in std_logic;</p><p>

73、  timecount:in std_logic;</p><p>  clkout :in std_logic;</p><p>  kmcnt2 :in std_logic_vector(3 downto 0);</p><p>  kmcnt3 :in std_logic_vector(3 downto 0);</p><p>

74、  count1 :out std_logic_vector(3 downto 0);</p><p>  count2 :out std_logic_vector(3 downto 0);</p><p>  count3 :out std_logic_vector(3 downto 0)</p><p><b>  );</b><

75、;/p><p>  end kmmoney;</p><p>  architecture rtl of kmmoney is</p><p>  signal cash:std_logic_vector(11 downto 0);</p><p>  signal price:std_logic_vector(7downto 0);</p

76、><p>  signal enable:std_logic;</p><p><b>  begin</b></p><p>  kmmoney1:PROCESS(cash,kmcnt2)</p><p><b>  begin</b></p><p>  if cas

77、h>="001000000000"then</p><p>  price<="00100001";</p><p><b>  else</b></p><p>  price<="00010100";</p><p><b>  

78、end if;</b></p><p>  if(kmcnt2>="0011")OR(kmcnt3>="0001")then</p><p>  enable<='1';</p><p><b>  else</b></p><p> 

79、 enable<='0';</p><p><b>  end if;</b></p><p>  end process;</p><p>  kmmoney2:process(reset,clkout,clk,enable,price,kmcnt2)</p><p>  variable reg

80、2:std_logic_vector(11 downto 0);</p><p>  variable clkout_cnt:integer range 0 to 10;</p><p><b>  begin</b></p><p>  ifreset='1'then</p><p>  cash&l

81、t;="000000000011";</p><p>  elsif clk'event and clk='1'then</p><p>  if timecount='1'then</p><p>  reg2:=cash;</p><p>  if reg2(

82、3 downto 0)+"0111">"1001"then</p><p>  reg2(7 downto 0):=reg2(7 downto 0)+"00000111"+"00000110";</p><p>  if reg2(7 downto 4)>"1001"then&

83、lt;/p><p>  cash<=reg2+"000001100000";</p><p><b>  else</b></p><p>  cash<=reg2;</p><p><b>  end if;</b></p><p><b&

84、gt;  else</b></p><p>  cash<=reg2+"0111";</p><p><b>  end if;</b></p><p>  elsif clkout='1' and enable='1'then</p><p>  i

85、f clkout_cnt=9 then</p><p>  clkout_cnt:=0;</p><p>  reg2:=cash;</p><p>  if "0000"&reg2(3 downto 0)+price(3 downto 0)>"00001001"then</p><p>

86、  reg2(7 downto 0):=</p><p>  reg2(7 downto 0)+"00000110"+price;</p><p>  if reg2(7 downto 4)>"1001"then</p><p>  cash<=reg2+"000001100000"

87、;;</p><p><b>  else</b></p><p>  cash<=reg2;</p><p><b>  end if;</b></p><p><b>  else</b></p><p>  cash<=reg2+pri

88、ce;</p><p><b>  end if;</b></p><p>  else--對(duì)時(shí)鐘計(jì)數(shù)</p><p>  clkout_cnt:=clkout_cnt+1;</p><p><b>  end if;</b></p><p><b>  end

89、if;</b></p><p><b>  end if;</b></p><p>  end process;</p><p>  count1<=cash(3 downto 0);</p><p>  count2<=cash(7 downto 4); </p><

90、p>  count3<=cash(11 downto 8);</p><p>  end rtl;</p><p><b>  TOP模塊</b></p><p>  library ieee;</p><p>  use ieee.std_logic_1164.all;</p>&

91、lt;p>  entity top is</p><p><b>  port(</b></p><p>  clk :in std_logic;</p><p>  reset :in std_logic;</p><p>  start :in std_logic;</p><p&

92、gt;  stop :in std_logic;</p><p>  sp :in std_logic_vector(2 downto 0);</p><p>  kmcnt1:out std_logic_vector(3 downto 0);</p><p>  kmcnt2:out std_logic_vector(3 downto 0);</p&g

93、t;<p>  kmcnt3:out std_logic_vector(3 downto 0);</p><p>  count1:out std_logic_vector(3 downto 0);</p><p>  count2:out std_logic_vector(3 downto 0);</p><p>  count3:out std_l

94、ogic_vector(3 downto 0)</p><p><b>  );</b></p><p><b>  end top;</b></p><p>  architecture rtl of top is</p><p>  component speed is</p>

95、<p><b>  port(</b></p><p>  clk :in std_logic;</p><p>  reset:in std_logic;</p><p>  start:in std_logic;</p><p>  stop :in std_logic;</p><

96、;p>  sp :in std_logic_vector(2 downto 0);</p><p>  clkout:out std_logic</p><p><b>  );</b></p><p>  end component speed;</p><p>  component times is

97、</p><p><b>  port(</b></p><p>  clk :in std_logic;</p><p>  reset:in std_logic;</p><p>  start:in std_logic;</p><p>  stop :in std_logic;<

98、/p><p>  sp :in std_logic_vector(2 downto 0);</p><p>  timecount:out std_logic</p><p><b>  );</b></p><p>  end component times;</p><p>  compone

99、nt kilometers is</p><p><b>  port(</b></p><p>  clkout,reset:in std_logic;</p><p>  kmcnt1:out std_logic_vector(3 downto 0);</p><p>  kmcnt2:out std_logic

100、_vector(3 downto 0);</p><p>  kmcnt3:out std_logic_vector(3 downto 0)</p><p><b>  );</b></p><p>  end component kilometers;</p><p>  component kmmoney is&

101、lt;/p><p><b>  port(</b></p><p>  clk :in std_logic;</p><p>  reset :in std_logic;</p><p>  timecount:in std_logic;</p><p>  clkout :in std_

102、logic;</p><p>  kmcnt2 :in std_logic_vector(3 downto 0);</p><p>  kmcnt3 :in std_logic_vector(3 downto 0);</p><p>  count1 :out std_logic_vector(3 downto 0);</p><p>

103、  count2 :out std_logic_vector(3 downto 0);</p><p>  count3 :out std_logic_vector(3 downto 0)</p><p><b>  );</b></p><p>  end component kmmoney;</p><p>  

104、signal clktmp :std_logic;</p><p>  signal timetmp:std_logic;</p><p>  signal kmtmp2 :std_logic_vector(3 downto 0);</p><p>  signal kmtmp3 :std_logic_vector(3 downto 0);</p>&

105、lt;p><b>  begin</b></p><p>  U1:speed PORT MAP(clk,reset,start,stop,sp,clktmp);</p><p>  U2:times PORT MAP(clk,reset,start,stop,sp,timetmp);</p><p>  U3:kilometers PO

106、RT MAP(clktmp,reset,kmcnt1,kmtmp2,kmtmp3);</p><p>  U4:kmmoney PORT MAP(clk,reset,timetmp,clktmp,kmtmp2,kmtmp3,count1,count2,count3);</p><p>  kmcnt2<=kmtmp2;</p><p>  kmcnt3<

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論