版權(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"®2(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- eda課程設(shè)計(jì)--出租車計(jì)費(fèi)器
- eda課程設(shè)計(jì)--- 出租車計(jì)費(fèi)器
- eda課程設(shè)計(jì)---出租車計(jì)費(fèi)器設(shè)計(jì)
- eda 課程設(shè)計(jì)--出租車計(jì)費(fèi)器設(shè)計(jì)
- eda課程設(shè)計(jì)——出租車計(jì)費(fèi)器設(shè)計(jì)
- eda課程設(shè)計(jì)--出租車自動(dòng)計(jì)費(fèi)器
- eda課程設(shè)計(jì)---出租車計(jì)費(fèi)器系統(tǒng)
- eda課程設(shè)計(jì)--出租車計(jì)費(fèi)器的設(shè)計(jì)
- eda課程設(shè)計(jì)--出租車計(jì)費(fèi)器的設(shè)計(jì)
- eda出租車計(jì)費(fèi)器
- eda技術(shù)課程設(shè)計(jì)--出租車計(jì)費(fèi)器
- 出租車計(jì)費(fèi)器課程設(shè)計(jì)報(bào)告
- 出租車自動(dòng)計(jì)費(fèi)器課程設(shè)計(jì)
- 出租車計(jì)費(fèi)器課程設(shè)計(jì)報(bào)告
- 課程設(shè)計(jì)-出租車自動(dòng)計(jì)費(fèi)器設(shè)計(jì)
- 出租車計(jì)費(fèi)器數(shù)字電子課程設(shè)計(jì)
- 出租車自動(dòng)計(jì)費(fèi)器設(shè)計(jì)課程設(shè)計(jì)
- 出租車自動(dòng)計(jì)費(fèi)器設(shè)計(jì)課程設(shè)計(jì)
- 基于eda技術(shù)出租車計(jì)費(fèi)器設(shè)計(jì)樣本
- 數(shù)電課程設(shè)計(jì)-出租車自動(dòng)計(jì)費(fèi)器
評(píng)論
0/150
提交評(píng)論