版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> SOPC/EDA綜合課程設(shè)計(jì)報(bào)告設(shè)計(jì)題目:出租車計(jì)費(fèi)系統(tǒng)設(shè)計(jì)設(shè)計(jì)者: 學(xué)號(hào): </p><p><b> 班級(jí): </b></p><p> 指導(dǎo)老師時(shí)間 : </p><p><b> 目 錄</b></p><p><b&g
2、t; 摘要1</b></p><p> Abstract1</p><p><b> 第一章 引言2</b></p><p><b> 1.1課題背景2</b></p><p> 1.2本文的主要工作2</p><p> 第二章 FPGA、V
3、HDL介紹4</p><p> 2.1 FPGA現(xiàn)狀及發(fā)展4</p><p> 2.2 FPGA的結(jié)構(gòu)與特點(diǎn)4</p><p> 2.2.1 FPGA基本結(jié)構(gòu)5</p><p> 2.2.2 FPGA的特點(diǎn)6</p><p> 2.3 VHDL設(shè)計(jì)優(yōu)點(diǎn)6</p><p>
4、 第三章 出租車計(jì)費(fèi)器的設(shè)計(jì)7</p><p> 3.1出租車計(jì)費(fèi)器的總體設(shè)計(jì)7</p><p> 3.1.1出租車計(jì)費(fèi)標(biāo)準(zhǔn)7</p><p> 3.1.2 總體框架設(shè)計(jì)7</p><p> 3.2出租車計(jì)費(fèi)器主要模塊設(shè)計(jì)8</p><p> 3.2.1 速度模塊9</p><
5、p> 3.2.2 計(jì)程模塊9</p><p> 3.2.3 計(jì)時(shí)模塊10</p><p> 3.2.4 計(jì)費(fèi)模塊10</p><p> 第四章 整體電路設(shè)計(jì)11</p><p> 4.1 整體電路圖11</p><p> 4.2 電源電路12</p><p> 4
6、.3 啟動(dòng)/停止按鍵電路12</p><p> 4.4 自動(dòng)清零部分13</p><p> 第五章 系統(tǒng)仿真與下載實(shí)現(xiàn)13</p><p> 5.1 QuartusⅡ軟件介紹14</p><p> 5.1.1軟件特點(diǎn)14</p><p> 5.1.2 QuartusⅡ設(shè)計(jì)流程:14</p&g
7、t;<p> 5.2仿真結(jié)果15</p><p> 5.2.1整體仿真15</p><p> 5.2.2速度模塊仿真15</p><p> 5.2.3計(jì)程模塊仿真16</p><p> 5.2.4計(jì)時(shí)模塊仿真16</p><p> 5.2.5 計(jì)費(fèi)模塊仿真17</p>
8、<p> 5.3設(shè)計(jì)測(cè)試17</p><p> 第六章 總結(jié)及展望18</p><p><b> ·致謝19</b></p><p> ·主要參考文獻(xiàn)19</p><p> 基于FPGA的出租車計(jì)費(fèi)器設(shè)計(jì)</p><p> 摘要:隨著EDA技術(shù)
9、的高速發(fā)展,電子系統(tǒng)的設(shè)計(jì)技術(shù)和工具發(fā)生了深刻的變化,大規(guī)模可編程邏輯器件CPLD/FPGA的出現(xiàn),給設(shè)計(jì)人員帶來了很多方便。利用它進(jìn)行產(chǎn)品開發(fā),可以降低研發(fā)成本,縮短研發(fā)周期。本文介紹了一種采用FPGA芯片進(jìn)行出租車計(jì)費(fèi)器的設(shè)計(jì)方法,描述了研究該課題的意義和應(yīng)用價(jià)值;說明了Altera公司的FPGA結(jié)構(gòu)原理及其主要運(yùn)用;介紹了超高速集成電路硬件描述語言的主要功能和設(shè)計(jì);講解了出租車計(jì)費(fèi)器的系統(tǒng)原理和功能。本文主要采用了Altera公司
10、的可編程邏輯芯片EPC2C35F672C8為核心控制,并附加一定外圍電路組成出租車計(jì)費(fèi)器,使用目前流行的VHDL語言進(jìn)行設(shè)計(jì),具有移植性強(qiáng)的特點(diǎn),便于升級(jí)及可重復(fù)使用。利用QuartusⅡ6.0對(duì)所設(shè)計(jì)的出租車計(jì)費(fèi)器的VHDL代碼進(jìn)行仿真,并在FPGA數(shù)字實(shí)驗(yàn)系統(tǒng)上實(shí)現(xiàn)了該控制。</p><p> 關(guān)鍵字: FPGA, VHDL, QuartusⅡ, 出租車計(jì)費(fèi)器</p>&
11、lt;p><b> 出租車計(jì)費(fèi)器的設(shè)計(jì)</b></p><p> 1出租車計(jì)費(fèi)器的總體設(shè)計(jì)</p><p> 1.1出租車計(jì)費(fèi)標(biāo)準(zhǔn)</p><p> 車起步開始計(jì)費(fèi),首先顯示起步價(jià),起步費(fèi)為3.00元,車在行駛3km以內(nèi),只收起步價(jià)。車行駛超過3km后,每公里2元,車費(fèi)依次累加。當(dāng)總費(fèi)用達(dá)到或超過40元時(shí),每公里收費(fèi)4元。當(dāng)遇到紅
12、燈或客戶需要停車等待時(shí),則按時(shí)間計(jì)費(fèi),計(jì)費(fèi)單價(jià)為每20秒收費(fèi)1元。</p><p> 1.2 總體框架設(shè)計(jì)</p><p> 系統(tǒng)流程介紹:分析系統(tǒng)設(shè)計(jì)要求不難得知,整個(gè)出租車計(jì)費(fèi)系統(tǒng)按功能主要分為速度模塊、計(jì)程模塊、計(jì)時(shí)模塊和計(jì)費(fèi)模塊,其系統(tǒng)結(jié)構(gòu)圖如圖3-1所示。</p><p> 圖3-1 出租車計(jì)費(fèi)器系統(tǒng)結(jié)構(gòu)圖</p><p>
13、 系統(tǒng)接收到reset信號(hào)后,總費(fèi)用變?yōu)?元,同時(shí)其他計(jì)數(shù)器、寄存器等全部清零。</p><p> 系統(tǒng)接收到start信號(hào)后,首先把部分寄存器賦值,總費(fèi)用不變,單價(jià)price寄存器通過對(duì)總費(fèi)用的判斷后賦為2元。其他寄存器和計(jì)數(shù)器等繼續(xù)保持為0。</p><p> 速度模塊:通過對(duì)速度信號(hào)sp的判斷,決定變量kinside的值。Kinside即是行進(jìn)100m所需要的時(shí)鐘周期數(shù),然后每行
14、進(jìn)100m,則產(chǎn)生一個(gè)脈沖clkout。</p><p> 計(jì)程模塊:由于一個(gè)clkout信號(hào)代表行進(jìn)100m,故通過對(duì)clkout計(jì)數(shù),可以獲得共行進(jìn)的距離kmcount。</p><p> 計(jì)時(shí)模塊:在汽車啟動(dòng)后,當(dāng)遇到顧客等人或紅燈時(shí),出租車采用計(jì)時(shí)收費(fèi)的方式。通過對(duì)速度信號(hào)sp的判斷決定是否開始記錄時(shí)間。當(dāng)sp=0時(shí),開始記錄時(shí)間。當(dāng)時(shí)間達(dá)到足夠長(zhǎng)時(shí)產(chǎn)生timecount脈沖,
15、并重新計(jì)時(shí)。一個(gè)timecount脈沖相當(dāng)于等待的時(shí)間達(dá)到了時(shí)間計(jì)費(fèi)的長(zhǎng)度。這里選擇系統(tǒng)時(shí)鐘頻率為500Hz,20s即計(jì)數(shù)值為1000。</p><p> 計(jì)費(fèi)模塊由兩個(gè)進(jìn)程組成。其中,一個(gè)進(jìn)程根據(jù)條件對(duì)enable和price賦值:當(dāng)記錄的距離達(dá)到3公里后enable變?yōu)?,開始進(jìn)行每公里收費(fèi),當(dāng)總費(fèi)用大于40元后,則單價(jià)price由原來的2元每公里編程4元每公里;第二個(gè)進(jìn)程在每個(gè)時(shí)鐘周期判斷timeout和
16、clkout的值。當(dāng)其為1時(shí),則在總費(fèi)用上加上相應(yīng)的費(fèi)用。</p><p> 2出租車計(jì)費(fèi)器主要模塊設(shè)計(jì)</p><p> 從上述設(shè)計(jì)方案中我們可以大致得到出租車計(jì)費(fèi)器的系統(tǒng)框圖,如圖3-2所示。其中clk為輸入時(shí)鐘脈沖,時(shí)鐘上升沿有效;reset為復(fù)位信號(hào),start為開始計(jì)費(fèi)信號(hào),stop為停止計(jì)費(fèi)信號(hào),均高電平有效;SP[2..0]表示出租車狀態(tài)(停止或不同形式速度);kmcnt
17、和count信號(hào)則分別輸出出租車行駛的里程和花費(fèi)。</p><p> 圖3-2 出租車計(jì)費(fèi)器系統(tǒng)框圖</p><p><b> 2.1 速度模塊</b></p><p> 速度模塊首先根據(jù)start信號(hào)判斷是否開始計(jì)費(fèi),然后根據(jù)輸入的速度檔位sp[2..0]的判斷,確定行駛100m所需要的時(shí)鐘數(shù),每前進(jìn)100m,輸出一個(gè)clkout信號(hào)。
18、同時(shí)由cnt對(duì)clk進(jìn)行計(jì)數(shù),當(dāng)cnt等于kinside時(shí),把clkout信號(hào)置1,cnt清0。其模塊框圖如圖3-3。</p><p> 圖3-3 速度模塊框圖</p><p><b> 2.2 計(jì)程模塊</b></p><p> 此模塊主要用于記錄行進(jìn)的距離,其模塊框圖如圖3-4所示。通過對(duì)clkout信號(hào)的計(jì)數(shù),可以計(jì)算行駛的距離km
19、count。一個(gè)clkout脈沖相當(dāng)于行進(jìn)100m所以只要記錄clkout的脈沖數(shù)目即可確定共行進(jìn)的距離。Kmcount1為十分位,kmcount2為個(gè)位,kmcount3為十位,分別為十進(jìn)制數(shù)。</p><p> 圖3-4 計(jì)程模塊框圖</p><p><b> 2.3 計(jì)時(shí)模塊</b></p><p> 速度模塊主要用于計(jì)時(shí)收費(fèi),記錄
20、計(jì)程車速度為0的時(shí)間(如等待紅燈),其模塊框圖如圖3-5所示。通過對(duì)sp信號(hào)的判斷,當(dāng)sp=0,開始記錄時(shí)間。當(dāng)時(shí)間達(dá)到足夠長(zhǎng)時(shí),產(chǎn)生timecount脈沖,并重新計(jì)時(shí)。</p><p> 圖3-5 計(jì)時(shí)模塊框圖</p><p><b> 2.4 計(jì)費(fèi)模塊</b></p><p> 計(jì)費(fèi)模塊如圖3-6所示,可分為kmmoney1和kmmo
21、ney2兩個(gè)進(jìn)程。</p><p> Kmmoney1用于產(chǎn)生enable和price信號(hào)。當(dāng)記錄距離達(dá)到3km后,enable信號(hào)為1,開始進(jìn)行每公里收費(fèi)。當(dāng)總費(fèi)用大于40元后,單價(jià)price由原來的2元變成4元,用作計(jì)時(shí)收費(fèi)。通過對(duì)sp信號(hào)的判斷,當(dāng)sp=0,開始記錄時(shí)間。當(dāng)時(shí)間達(dá)到足夠長(zhǎng)時(shí),產(chǎn)生timecount脈沖,并重新計(jì)時(shí)。</p><p> Kmmoney2用于判斷tim
22、ecount和clkout的值,當(dāng)其為1時(shí),總費(fèi)用加1。最終輸出為總費(fèi)用。</p><p> 圖3-6 計(jì)費(fèi)模塊框圖</p><p><b> 整體電路設(shè)計(jì)</b></p><p><b> 1 整體電路圖</b></p><p> 整體RTL電路如圖4-1。硬件電路由CycloneⅡ電路板
23、組成,clk為時(shí)鐘周期信號(hào),由試驗(yàn)箱產(chǎn)生,start/stop是啟動(dòng)停止按鍵電路,reset為自動(dòng)清零電路。電源又AD-DC開關(guān)電源供電。</p><p> 圖4-1 整體RTL門電路</p><p><b> 2 電源電路</b></p><p> 電源采用了是比較流行的開關(guān)電源,AD-DC開關(guān)電源,輸入115VAC到230VAC,輸出
24、+5V(4A)。使用開關(guān)電源的好處就是比較節(jié)省能源,它的轉(zhuǎn)換效率很高,可達(dá)85%以上,穩(wěn)壓范圍寬,除此之外,還具有穩(wěn)壓精度高、不使用電源變壓器等特點(diǎn)。</p><p> 3 啟動(dòng)/停止按鍵電路</p><p> 如圖4-2所示,采用雙刀雙路開關(guān),一路開關(guān)用于清零部分,由于顯示部分特殊要求,即計(jì)費(fèi)停止后屏幕上荏苒要保持計(jì)費(fèi)的所有信息,只有當(dāng)下次計(jì)費(fèi)啟動(dòng)時(shí)才清零從新開始計(jì)費(fèi)。另外兩路開關(guān),
25、其中一路用于啟動(dòng)指示和啟動(dòng)/停止輸出信號(hào)給FPGA芯片的I/O口。當(dāng)按下鍵后,清零部分和啟動(dòng)計(jì)費(fèi)部分同時(shí)進(jìn)行,但清零只是瞬間的,計(jì)費(fèi)指示燈兩起。再次按下鍵后,開關(guān)換到另外的兩路,空車指示燈亮起。</p><p> 圖4-2啟動(dòng)/停止按鍵電路</p><p><b> 4 自動(dòng)清零部分</b></p><p> 由于顯示部分的特殊要求,即計(jì)
26、費(fèi)停止后屏幕上仍然要保持計(jì)費(fèi)的所有信息,只有當(dāng)下次計(jì)費(fèi)啟動(dòng)時(shí)才清零從新開始計(jì)費(fèi)。VHDL語言的特殊性,不能在一個(gè)結(jié)構(gòu)中用兩個(gè)不同的動(dòng)作使其賦值。所以必須要有一個(gè)瞬間清零的信號(hào),當(dāng)FPGA的清零I/O端口為“1”時(shí)就自動(dòng)清零。使用電容的充放電功能來實(shí)現(xiàn),按鍵斷開時(shí)清零輸出端為接地,按鍵閉合時(shí)電容充電清零端為高電平,充完電后清零端輸出又為低電平,當(dāng)按鍵斷開后,通過一個(gè)2k歐姆的電阻放電,為下次充電做好準(zhǔn)備。如圖4-3所示。</p>
27、;<p> 圖4-3 自動(dòng)清零電路</p><p><b> 系統(tǒng)仿真與下載實(shí)現(xiàn)</b></p><p> 1 QuartusⅡ軟件介紹</p><p><b> 5.1.1軟件特點(diǎn)</b></p><p> QuartusⅡ是Altera公司自行設(shè)計(jì)的一個(gè)完全集成化、易學(xué)易
28、用的可編程邏輯設(shè)計(jì)環(huán)境,它提供了完全集成且與電路結(jié)構(gòu)無關(guān)的開發(fā)包環(huán)境,具有數(shù)字邏輯設(shè)計(jì)的全部特性,包括:</p><p> 可利用原理圖、結(jié)構(gòu)框圖、VerilogHDL、AHDL和VHDL完成電路描述,并將其保存為設(shè)計(jì)實(shí)體文件;</p><p> 芯片(電路)平面布局連線編輯;</p><p> LogicLock增量設(shè)計(jì)方法,用戶可建立并優(yōu)化系統(tǒng),然后添加對(duì)
29、原始系統(tǒng)的性能影響較小或無影響的后續(xù)模塊;</p><p> 功能強(qiáng)大的邏輯綜合工具;</p><p> 完備的電路功能仿真與時(shí)序邏輯仿真工具;</p><p> 定時(shí)/時(shí)序分析與關(guān)鍵路徑延時(shí)分析;</p><p> 可使用SignalTapⅡ邏輯分析工具進(jìn)行嵌入式的邏輯分析;</p><p> 支持軟件源文
30、件的添加和創(chuàng)建,并將它們連接起來生成編程文件;</p><p> 使用組合編譯方法可一次完成整體設(shè)計(jì)流程;</p><p><b> 自動(dòng)定位編譯錯(cuò)誤;</b></p><p> 高效的期間編程與驗(yàn)證工具;</p><p> 可讀入標(biāo)準(zhǔn)的EDIF網(wǎng)表文件、VHDL網(wǎng)表文件、和Verilog網(wǎng)表文件;</p&
31、gt;<p> 能生成第三方EDA軟件使用的VHDL網(wǎng)表文件和Verilog網(wǎng)表文件;</p><p> 5.1.2 QuartusⅡ設(shè)計(jì)流程:</p><p> 設(shè)計(jì)輸入:完成器件的硬件描述,包括文本編輯器、塊與符號(hào)編輯器、MegaWizard插件管理器、約束編輯器和布局編輯器等工具;</p><p> 綜合:包括分析和綜合器、輔助工具和RT
32、L查看器等工具;</p><p> 不懼連線:將設(shè)計(jì)綜合后的網(wǎng)表文件映射到實(shí)體器件的過程,包括Fitter工具、約束編輯器、布局圖編輯器、芯片編輯器和增量布局連線工具;</p><p><b> 時(shí)序分析;</b></p><p><b> 2仿真結(jié)果</b></p><p><b>
33、; 2.1整體仿真</b></p><p> 對(duì)電路整體進(jìn)行仿真,得出如下仿真波形圖5-1。圖中,當(dāng)復(fù)位信號(hào)reset為高電平時(shí),系統(tǒng)所有寄存器、計(jì)數(shù)器都清零;當(dāng)開始計(jì)費(fèi)信號(hào)start信號(hào)有效時(shí),計(jì)費(fèi)器開始計(jì)費(fèi),根據(jù)出租車行駛的速度sp[2..0]的取值計(jì)算所用花費(fèi)和行駛里程;當(dāng)停止計(jì)費(fèi)信號(hào)有效時(shí),計(jì)費(fèi)器停止工作。 </p><p> 圖5-1 出租車計(jì)費(fèi)器仿真波形圖&
34、lt;/p><p><b> 2.2速度模塊仿真</b></p><p> 速度模塊的仿真波形圖如圖5-2所示。該模塊根據(jù)出租車所處的運(yùn)行狀態(tài)和不同的形式速度,對(duì)相應(yīng)數(shù)目的時(shí)鐘周期進(jìn)行計(jì)數(shù),車每行駛100m時(shí)輸出信號(hào)clkout輸出高電平。</p><p> 圖5-2 速度模塊仿真波形圖</p><p><b&g
35、t; 2.3計(jì)程模塊仿真</b></p><p> 計(jì)程模塊的仿真波形如圖5-3所示。圖中,當(dāng)reset信號(hào)有效時(shí),系統(tǒng)復(fù)位清零;否則,對(duì)輸入信號(hào)clkout進(jìn)行十進(jìn)制計(jì)數(shù)。</p><p> 圖5—3計(jì)程模塊仿真波形圖</p><p><b> 2.4計(jì)時(shí)模塊仿真</b></p><p> 計(jì)時(shí)模
36、塊的仿真波形圖如圖5-4所示。預(yù)設(shè)1000個(gè)時(shí)鐘周期為20s,對(duì)時(shí)鐘周期進(jìn)行計(jì)數(shù),每計(jì)1000個(gè)時(shí)鐘周期輸出高電平,指示計(jì)時(shí)20秒。</p><p> 圖5-4 計(jì)時(shí)模塊仿真波形圖</p><p> 2.5 計(jì)費(fèi)模塊仿真</p><p> 計(jì)費(fèi)模塊的仿真波形圖如圖5-5所示。當(dāng)reset信號(hào)有效時(shí),系統(tǒng)復(fù)位清零;否則,當(dāng)計(jì)時(shí)計(jì)費(fèi)信號(hào)timecount和計(jì)程計(jì)
37、費(fèi)信號(hào)clkout為高電平時(shí),按照一定計(jì)費(fèi)規(guī)則進(jìn)行計(jì)費(fèi)。</p><p> 圖5-5計(jì)費(fèi)模塊仿真功能圖</p><p> 綜上所述,本設(shè)計(jì)的出租車計(jì)費(fèi)器完全符合系統(tǒng)設(shè)計(jì)的要求,實(shí)現(xiàn)了出租車計(jì)費(fèi)器所需的各項(xiàng)基本功能。</p><p><b> 5.3設(shè)計(jì)測(cè)試</b></p><p> 利用QuartusⅡ6.0對(duì)所
38、設(shè)計(jì)出租車計(jì)費(fèi)器的VHDL代碼進(jìn)行了仿真,并在CycloneⅡ型可編程數(shù)字實(shí)現(xiàn)系統(tǒng)上實(shí)現(xiàn)了該控制。該數(shù)字實(shí)現(xiàn)系統(tǒng)分成兩部分,一是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)
39、用+(里程-3km)×里程單價(jià)+等待時(shí)間×等待單價(jià)的出租車計(jì)費(fèi)模式。</p><p><b> 第六章 總結(jié)及展望</b></p><p> 本文論述了基于FPGA的出租車計(jì)費(fèi)器設(shè)計(jì),分別介紹了整個(gè)系統(tǒng)和各個(gè)模塊的設(shè)計(jì),使用FPGA芯片、VHDL硬件描述語言作為設(shè)計(jì)手段,利用自頂向下的模塊化設(shè)計(jì)思路,通過在QuartusⅡ軟件下進(jìn)行的模擬仿真,
40、并進(jìn)行相應(yīng)的硬件下載調(diào)試,證明所設(shè)計(jì)的系統(tǒng)完成了出租車計(jì)費(fèi)器的功能,各項(xiàng)技術(shù)指標(biāo)符合預(yù)定標(biāo)準(zhǔn),具有一定實(shí)用性。由于本人在經(jīng)驗(yàn)水平上的欠缺,設(shè)計(jì)中可能存在很多不足,請(qǐng)各位老師予以指證!</p><p> 近年來,F(xiàn)PGA在通信、控制、數(shù)據(jù)計(jì)算等領(lǐng)域得到了廣泛的應(yīng)用,利用FPGA來設(shè)計(jì)電子產(chǎn)品可減少電子系統(tǒng)的開發(fā)風(fēng)險(xiǎn)和開發(fā)成本;縮短了上市時(shí)間;通過在系統(tǒng)編程、遠(yuǎn)程在線重構(gòu)等技術(shù)降低維護(hù)升級(jí)成本。并且,F(xiàn)PGA器件的
41、成本越來越低,Actel公司發(fā)布第三代的基于Flash的可編程邏輯方案,這些新的FPGA芯片最低價(jià)將達(dá)到1.5美元,代表全球最低成本的FPGA。這些都說明可編程器件已成為現(xiàn)在及未來很長(zhǎng)一段時(shí)間的主流,用它來實(shí)現(xiàn)的出租車計(jì)費(fèi)器省去很多外圍電路,穩(wěn)定,簡(jiǎn)單有效,將來必然可以設(shè)計(jì)出更多更強(qiáng)大的功能,提高產(chǎn)品競(jìng)爭(zhēng)力。未來基于FPGA平臺(tái)的出租車計(jì)費(fèi)器將會(huì)有更低的成本、更小的體積、更安全、更精確和更多功能。</p><p>
42、;<b> ·致謝</b></p><p> 本次設(shè)計(jì)從選題到最后完成,都得到了指導(dǎo)老師付敏老師的悉心指導(dǎo)。付老師淵博的知識(shí)、嚴(yán)謹(jǐn)?shù)闹螌W(xué)態(tài)度和誨人不倦的精神永遠(yuǎn)是我學(xué)習(xí)的榜樣。同時(shí),感謝論文指導(dǎo)組的劉海力老師和郭仟老師對(duì)選題的分析。在系統(tǒng)設(shè)計(jì)過程中,我也遇到了較多的困難,我十分感謝我的朋友和老師給與我的幫助和支持,使我能順利完成本系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)。</p><
43、;p><b> ·主要參考文獻(xiàn)</b></p><p> [1] 劉韜,樓興華. 《FPGA數(shù)字電子系統(tǒng)設(shè)計(jì)與開發(fā)實(shí)例導(dǎo)航》[M]. 北京:人民郵電出版社,2005.6, 27~36.</p><p> [2] 王輝,殷穎,陳婷,俞一鳴. MAX+plusⅡ和QuartusⅡ應(yīng)用于開發(fā)技巧[M]. 北京:機(jī)械工業(yè)出版社,2007.1,293~31
44、6.</p><p> [3] 焦敏. FPGA 在出租車計(jì)費(fèi)器上的應(yīng)用研究[J];中國科技信息,2009(9):145~146.</p><p> [4] 茅豐. 基于FPGA 的出租車計(jì)費(fèi)器[J];電子技術(shù)應(yīng)用,2007.3.</p><p> [5] 廖艷秋. FPGA 的出租車計(jì)費(fèi)器[J];電子科技大學(xué),2008.10.</p><
45、p> [6] 吳冬梅,吳延海,鄧玉玖. 基于CPLD/FPGA 的出租車計(jì)費(fèi)器[J];電子技術(shù)應(yīng)用,2004(11):71~73.</p><p> [7] 黃智偉. FPGA 系統(tǒng)設(shè)計(jì)與實(shí)踐[M].,北京:電子工業(yè)出版社,2005,200~217.</p><p> [8] 黃建新,劉邁,譚克俊. 基于FPGA芯片設(shè)計(jì)出租車計(jì)費(fèi)器的研究[J]. 吉林化工學(xué)院學(xué)報(bào),2003(0
46、3):52~55.</p><p> [9] 候伯亨,顧新. VHDL 硬件描述語言與數(shù)字邏輯電路設(shè)計(jì)[M]. 西安:西安電子科技大學(xué)出版社,2000.</p><p> [10] 姜雪松,VHDL設(shè)計(jì)實(shí)例與仿真[M].北京:機(jī)械工業(yè)出版社,2007.1,91~103.</p><p> [11] 王彥芳,王小平,王彥永等.用可編程邏輯器件實(shí)現(xiàn)專用數(shù)字集成電路
47、的功能設(shè)計(jì)[J].半導(dǎo)體情報(bào),2000,37(5)48~51.</p><p> [12] 張立,張光新,柴磊等. FPGA 在多功能計(jì)費(fèi)器系統(tǒng)中的應(yīng)用[J]. 儀器儀表學(xué)報(bào),2005,26(8):7352737.</p><p> [13] 林愿. 基于CPLD/FPGA 的出租車計(jì)費(fèi)器系統(tǒng)的設(shè)計(jì)實(shí)現(xiàn)[J]. 國外電子元器件,2007(07):26~29.</p>&l
48、t;p> [14] 周潤(rùn)景,圖雅,張麗敏. 基于Quartus II 的FPGA/CPLD 數(shù)字系統(tǒng)設(shè)計(jì)實(shí)例[J]. 北京:電子工業(yè)出版社,2007.</p><p> [15] 劉欲曉,方強(qiáng),黃宛寧.EDA技術(shù)與VHDL電路開發(fā)應(yīng)用實(shí)踐[M];北京:電子工業(yè)出版社,2009(4),175~186.</p><p> [16] [英]Jone Wulenskl. VHDL Di
49、gtal System Design[M],北京:電子工業(yè)出版社,2004,10~105.</p><p> [17] San Jose. MAX+PLUS II Introduction USA[M]:Altera Corporation,2004,52~69.</p><p><b> 附錄</b></p><p><b>
50、 VHDL程序</b></p><p><b> Speed模塊</b></p><p> library ieee; --加載庫文件</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_unsigned.a
51、ll;</p><p> entity speed is</p><p> port( --定義輸入輸出端口</p><p> clk :in std_logic;</p><p> reset:in std_logic;</p><p> start:in std_log
52、ic;</p><p> stop :in std_logic;</p><p> sp :in std_logic_vector(2 downto 0);</p><p> clkout:out std_logic</p><p><b> );</b></p><p> end
53、speed;</p><p> architecture rtl of speed is</p><p><b> begin</b></p><p> process(clk,reset,start,stop,sp) --敏感信號(hào)發(fā)生變化時(shí),啟動(dòng)進(jìn)程</p><p> type state_type is
54、(s0,s1); --枚舉類型;</p><p> variable s_state:state_type; </p><p> variable cnt:integer range 0 to 28;</p><p> variable kinside:integer range 0 to 30;</p><p>&l
55、t;b> begin</b></p><p> case sp is --速度選擇</p><p> when"000"=>kinside:=0; --停止?fàn)顟B(tài)或空檔</p><p> when"001"=>kinside:=28; --第一檔<
56、/p><p> when"010"=>kinside:=24; --第二檔</p><p> when"011"=>kinside:=20;--第三檔</p><p> when"100"=>kinside:=16;--第四檔</p><p>
57、; when"101"=>kinside:=12;--第五檔</p><p> when"110"=>kinside:=8;--第六檔</p><p> when"111"=>kinside:=4;--第七檔</p><p><b> end case;
58、</b></p><p> if reset='1'then--復(fù)位清零</p><p> s_state:=s0;</p><p> elsif clk'event and clk='1'then--時(shí)鐘上升沿到達(dá)時(shí),狀態(tài)轉(zhuǎn)換</p><p> case s_stat
59、e is</p><p><b> when s0=></b></p><p><b> cnt:=0;</b></p><p> clkout<='0';</p><p> if start='1'then</p><p>
60、; s_state:=s1;</p><p><b> else</b></p><p> s_state:=s0;</p><p><b> end if;</b></p><p><b> when s1=></b></p><p>
61、 clkout<='0';</p><p> if stop='1'then</p><p> s_state:=s0;--相當(dāng)于無客上車</p><p> elsif sp="000"then</p><p> s_state:=s1;--有客上車但車速為0,即剛上
62、車還未起步</p><p> elsif cnt=kinside then</p><p><b> cnt:=0;</b></p><p> clkout<='1';</p><p> s_state:=s1;</p><p><b> else<
63、/b></p><p> cnt:=cnt+1;</p><p> s_state:=s1;</p><p><b> end if;</b></p><p><b> end case;</b></p><p><b> end if;</b
64、></p><p> end process;</p><p><b> end rtl;</b></p><p><b> Times模塊</b></p><p> library ieee; --加載庫文件</p><p> use ie
65、ee.std_logic_1164.all;</p><p> use ieee.std_logic_unsigned.all;</p><p> entity times is</p><p> port( --定義輸入輸出端口</p><p> clk :in std_logic;</
66、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> timecount:out s
67、td_logic</p><p><b> );</b></p><p> end times;</p><p> architecture rtl of times is</p><p><b> begin</b></p><p> process(reset,
68、clk,sp,stop,start)--啟動(dòng)進(jìn)程</p><p> type state_type is(t0,t1,t2);</p><p> variable t_state:state_type;</p><p> variable waittime:integer range 0 to 1000;</p><p>&l
69、t;b> begin</b></p><p> if reset='1'then--復(fù)位清零</p><p> t_state:=t0;</p><p> elsif(clk'event and clk='1')then--時(shí)鐘上升沿到達(dá)</p><p>
70、case t_state is</p><p> --根據(jù)條件完成狀態(tài)轉(zhuǎn)換</p><p><b> when t0=></b></p><p> waittime:=0;</p><p> timecount<='0';</p><p> if
71、start='1'then</p><p> t_state:=t1;</p><p><b> else</b></p><p> t_state:=t0;</p><p><b> end if;</b></p><p><b> wh
72、en t1=></b></p><p> if sp="000"then</p><p> t_state:=t2;</p><p><b> else</b></p><p> waittime:=0;</p><p> t_state:=t1;&
73、lt;/p><p><b> end if;</b></p><p><b> when t2=></b></p><p> waittime:=waittime+1;--等待時(shí)間加1</p><p> timecount<='0';</p><
74、;p> if waittime=1000 then</p><p> timecount<='1';--產(chǎn)生一個(gè)時(shí)間計(jì)費(fèi)脈沖</p><p> waittime:=0;</p><p> elsif stop='1'then</p><p> t_state:=t0;</p&g
75、t;<p> elsif sp="000"then</p><p> t_state:=t2;</p><p><b> else</b></p><p> timecount<='0';</p><p> t_state:=t1;</p>
76、<p><b> end if;</b></p><p><b> end case;</b></p><p><b> end if;</b></p><p> end process;</p><p><b> end rtl;</b&g
77、t;</p><p> Kilometers模塊</p><p> library ieee; --加載庫文件</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_unsigned.all;</p><p> e
78、ntity kilometers is</p><p> port(--定義輸入輸出端口</p><p> clkout,reset:in std_logic;</p><p> kmcnt1:out std_logic_vector(3 downto 0);</p><p> kmcnt2:out std_log
79、ic_vector(3 downto 0);</p><p> kmcnt3:out std_logic_vector(3 downto 0)</p><p><b> );</b></p><p> end kilometers;</p><p> architecture rtl of kilometers
80、is</p><p><b> begin</b></p><p> process(clkout,reset)--啟動(dòng)進(jìn)程</p><p> variablekm_reg:std_logic_vector(11 downto 0);</p><p><b> begin</b>
81、;</p><p> if reset='1'then--復(fù)位清零</p><p> km_reg:="000000000000";</p><p> elsif clkout'event and clkout='1'then--時(shí)鐘上升沿到達(dá)時(shí)進(jìn)行計(jì)程</p><
82、;p> if km_reg(3 downto 0)="1001"then--對(duì)應(yīng)里程十分位</p><p> km_reg:=km_reg+"0111";--十分位向個(gè)分位進(jìn)位</p><p><b> else</b></p><p> km_reg(3 downto 0):=
83、km_reg(3 downto 0)+"0001";</p><p><b> end if;</b></p><p><b> end if;</b></p><p> kmcnt1<=km_reg(3 downto 0);</p><p> kmcnt2<
84、=km_reg(7 downto 4);</p><p> kmcnt3<=km_reg(11 downto 8);</p><p> end process;</p><p><b> end rtl;</b></p><p><b> Kmmoney模塊</b></p>
85、<p> library ieee; --加載庫文件</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_unsigned.all;</p><p> entity kmmoney is</p><p> port(
86、 --定義輸入輸出端口</p><p> clk :in std_logic;</p><p> reset :in std_logic;</p><p> timecount:in std_logic;</p><p> clkout :in std_logic;</p><
87、;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> count2 :out std_lo
88、gic_vector(3 downto 0);</p><p> count3 :out std_logic_vector(3 downto 0)</p><p><b> );</b></p><p> end kmmoney;</p><p> architecture rtl of kmmoney is&
89、lt;/p><p> signal cash:std_logic_vector(11 downto 0);</p><p> signal price:std_logic_vector(3 downto 0);</p><p> signal enable:std_logic;</p><p><b> begin</b&
90、gt;</p><p> kmmoney1:PROCESS(cash,kmcnt2)--此進(jìn)程產(chǎn)生下一進(jìn)程的敏感信號(hào)</p><p><b> begin</b></p><p> if cash>="000001000000"then</p><p> price<=&q
91、uot;0100";</p><p><b> else</b></p><p> price<="0100";</p><p><b> end if;</b></p><p> if(kmcnt2>="0011")OR(kmc
92、nt3>="0001")then</p><p> enable<='1';</p><p><b> else</b></p><p> enable<='0';</p><p><b> end if;</b><
93、/p><p> end process;</p><p> kmmoney2:process(reset,clkout,clk,enable,price,kmcnt2)</p><p> variable reg2:std_logic_vector(11 downto 0);</p><p> variable clkout_cnt:in
94、teger range 0 to 10;</p><p><b> begin</b></p><p> ifreset='1'then</p><p> cash<="000000000011";--起步費(fèi)用設(shè)為3元</p><p> elsif clk
95、39;event and clk='1'then</p><p> --判斷是否需要時(shí)間計(jì)費(fèi),每20s加一元</p><p> if timecount='1'then</p><p> reg2:=cash;</p><p> if reg2(3 downto 0)+"0001&q
96、uot;>"1001"then--產(chǎn)生進(jìn)位</p><p> reg2(7 downto 0):=reg2(7 downto 0)+"00000111";</p><p> if reg2(7 downto 4)>"1001"then</p><p> cash<=reg2+&qu
97、ot;000001100000";</p><p><b> else</b></p><p> cash<=reg2;</p><p><b> end if;</b></p><p><b> else</b></p><p>
98、; cash<=reg2+"0001";</p><p><b> end if;</b></p><p><b> --里程計(jì)費(fèi)</b></p><p> elsif clkout='1' and enable='1'then</p><
99、;p> if 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>
100、<p> reg2(7 downto 0):=--十位進(jìn)位</p><p> reg2(7 downto 0)+"00000110"+price;</p><p> if reg2(7 downto 4)>"1001"then--百位進(jìn)位</p><p> cash<=reg2+&q
101、uot;000001100000";</p><p><b> else</b></p><p> cash<=reg2;</p><p><b> end if;</b></p><p><b> else</b></p><p&g
102、t; cash<=reg2+price;</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><
103、;p><b> end if;</b></p><p><b> end if;</b></p><p> end process;</p><p> count1<=cash(3 downto 0);--總費(fèi)用的個(gè)位</p><p> count2<=cash(7
104、downto 4);--總費(fèi)用的十位</p><p> count3<=cash(11 downto 8);--總費(fèi)用的百位</p><p> end rtl;</p><p><b> TOP模塊</b></p><p> library ieee;</p><p>
105、; use ieee.std_logic_1164.all;</p><p> entity top is</p><p> port(--定義整個(gè)系統(tǒng)的輸入輸出端口</p><p> clk :in std_logic;</p><p> reset :in std_logic;</p><p>
106、 start :in std_logic;</p><p> 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:o
107、ut std_logic_vector(3 downto 0);</p><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)
108、;</p><p> count3:out std_logic_vector(3 downto 0)</p><p><b> );</b></p><p><b> end top;</b></p><p> architecture rtl of top is</p>&l
109、t;p> --對(duì)上述電路模塊進(jìn)行元件定義</p><p> component speed is--定義速度模塊</p><p><b> port(</b></p><p> clk :in std_logic;</p><p> reset:in std_logic;</p>&
110、lt;p> start:in std_logic;</p><p> stop :in std_logic;</p><p> sp :in std_logic_vector(2 downto 0);</p><p> clkout:out std_logic</p><p><b> );</b>&
111、lt;/p><p> end component speed;</p><p> component times is --定義計(jì)時(shí)模塊</p><p><b> port(</b></p><p> clk :in std_logic;</p><p> reset:in std_
112、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> timecount:out std_logic</p><p>&l
113、t;b> );</b></p><p> end component times;</p><p> component kilometers is--定義計(jì)程模塊</p><p><b> port(</b></p><p> clkout,reset:in std_logic;<
114、/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_vector(3 downto 0)</p><p><b> );&l
115、t;/b></p><p> end component kilometers;</p><p> component kmmoney is--定義計(jì)費(fèi)模塊</p><p><b> port(</b></p><p> clk :in std_logic;</p><p>
116、; reset :in std_logic;</p><p> 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_l
117、ogic_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_logic_vector(3 downto 0)&l
118、t;/p><p><b> );</b></p><p> end component kmmoney;</p><p> signal clktmp :std_logic;</p><p> signal timetmp:std_logic;</p><p> signal kmtmp2
119、:std_logic_vector(3 downto 0);</p><p> signal kmtmp3 :std_logic_vector(3 downto 0);</p><p><b> begin</b></p><p> --使用定義的例化模塊</p><p> U1:speed PORT MAP(c
120、lk,reset,start,stop,sp,clktmp);</p><p> U2:times PORT MAP(clk,reset,start,stop,sp,timetmp);</p><p> U3:kilometers PORT MAP(clktmp,reset,kmcnt1,kmtmp2,kmtmp3);</p><p> U4:kmmoney
溫馨提示
- 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. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 出租車自動(dòng)計(jì)費(fèi)系統(tǒng)eda課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---出租車計(jì)費(fèi)系統(tǒng)
- 單片機(jī)課程設(shè)計(jì)--出租車計(jì)費(fèi)系統(tǒng)
- eda課程設(shè)計(jì)---出租車計(jì)費(fèi)器系統(tǒng)
- 單片機(jī)課程設(shè)計(jì)-- 出租車計(jì)費(fèi)系統(tǒng)
- 單片機(jī)課程設(shè)計(jì)---出租車計(jì)費(fèi)系統(tǒng)
- 單片機(jī)課程設(shè)計(jì)--出租車計(jì)費(fèi)系統(tǒng)
- eda課程設(shè)計(jì)---出租車計(jì)費(fèi)器設(shè)計(jì)
- eda 課程設(shè)計(jì)--出租車計(jì)費(fèi)器設(shè)計(jì)
- 出租車計(jì)費(fèi)器課程設(shè)計(jì)報(bào)告
- 出租車自動(dòng)計(jì)費(fèi)器課程設(shè)計(jì)
- eda課程設(shè)計(jì)--- 出租車計(jì)費(fèi)器
- 出租車計(jì)費(fèi)器課程設(shè)計(jì)報(bào)告
- eda課程設(shè)計(jì)——出租車計(jì)費(fèi)器設(shè)計(jì)
- 出租車自動(dòng)計(jì)費(fèi)器設(shè)計(jì)課程設(shè)計(jì)
- 出租車自動(dòng)計(jì)費(fèi)器設(shè)計(jì)課程設(shè)計(jì)
- eda課程設(shè)計(jì)出租車計(jì)費(fèi)器
- eda課程設(shè)計(jì)--出租車計(jì)費(fèi)器
- 課程設(shè)計(jì)-出租車自動(dòng)計(jì)費(fèi)器設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---出租車計(jì)費(fèi)系統(tǒng) (2)
評(píng)論
0/150
提交評(píng)論