出租車計(jì)價(jià)器的FPGA設(shè)計(jì)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
O 引 言
FPGA(Field Programmable Gate Array,現(xiàn)場(chǎng)可編程門陣列)是一種高密度可編程邏輯器件,它支持系統(tǒng)可編程,通過(guò)寫入不同的配置數(shù)據(jù)就可以實(shí)現(xiàn)不同的邏輯功能。使用FPGA來(lái)設(shè)計(jì)電子系統(tǒng),具有設(shè)計(jì)周期短、易于修改等明顯特點(diǎn),特別適合于進(jìn)行科學(xué)實(shí)驗(yàn)、樣機(jī)研制和電子產(chǎn)品的小批量生產(chǎn)。
本文針對(duì)FPGA器件,用EDA工具軟件Max+P1usⅡ,設(shè)計(jì)了一種出租車的計(jì)價(jià)器,它可以以十進(jìn)制數(shù)的形式,直觀地顯示出租車行駛的里程和乘客應(yīng)付的費(fèi)用,具有一定的實(shí)際應(yīng)用價(jià)值。
1 系統(tǒng)設(shè)計(jì)要求
所要設(shè)計(jì)的出租車計(jì)價(jià)器,要求能夠顯示里程數(shù)和乘客應(yīng)付的費(fèi)用,其中里程數(shù)精確到0.1km,乘客應(yīng)付的費(fèi)用精確到O.1元,顯示必須以十進(jìn)制的形式來(lái)進(jìn)行。出租車的計(jì)費(fèi)標(biāo)準(zhǔn)為:起步價(jià)6元,里程在3 km以內(nèi)均為起步價(jià);里程在3~7 km之間時(shí),每行駛1 km增加1.6元;超過(guò)7 km時(shí),每行駛1 km增加2.4元。
2 系統(tǒng)設(shè)計(jì)方案
該系統(tǒng)的設(shè)計(jì)可以采用分立元件來(lái)搭建,也可以通過(guò)單片機(jī)來(lái)設(shè)計(jì),而使用可編程FPGA來(lái)設(shè)計(jì),具有設(shè)計(jì)周期短、易于修改等明顯特點(diǎn),而且隨著可編程邏輯器件和EDA軟件的飛速發(fā)展,越來(lái)越多的電子系統(tǒng)采用FPGA來(lái)設(shè)計(jì),一旦該系統(tǒng)達(dá)到一定的量產(chǎn)規(guī)模,也比較容易轉(zhuǎn)化為ASIC芯片設(shè)計(jì)。因此,基于FPGA來(lái)設(shè)計(jì)一個(gè)出租車的計(jì)價(jià)器。本系統(tǒng)在EDA工具軟件MAX+plusⅡ中,采用硬件描述語(yǔ)言Verilog HDL和原理圖設(shè)計(jì)相結(jié)合的方法,進(jìn)行各個(gè)模塊的設(shè)計(jì),最終將各個(gè)模塊組成整個(gè)系統(tǒng)。
出租車能夠顯示行駛的里程,可以通過(guò)車輪的轉(zhuǎn)動(dòng)產(chǎn)生脈沖,然后通過(guò)計(jì)數(shù)器對(duì)脈沖進(jìn)行計(jì)數(shù)來(lái)實(shí)現(xiàn)。假設(shè)出租車每行駛2 m就產(chǎn)生一個(gè)脈沖。由于里程數(shù)要精確到O.1 km,也就是100m,因此每經(jīng)過(guò)50個(gè)脈沖就要輸出一個(gè)新的脈沖信號(hào),這里稱為100 m脈沖信號(hào),作為里程計(jì)數(shù)器的時(shí)鐘信號(hào),可以通過(guò)一個(gè)模為50的計(jì)數(shù)器進(jìn)行分頻而得到。
里程計(jì)數(shù)器可以用一個(gè)三位BCD碼計(jì)數(shù)器來(lái)實(shí)現(xiàn),最大能顯示到999。以前兩位為整數(shù),第三位為小數(shù),也就是最大能顯示里程99.9 km,因?yàn)槌鲎廛嚩荚谑袇^(qū)和近郊活動(dòng),三位BCD碼計(jì)數(shù)器是可以實(shí)現(xiàn)里程計(jì)數(shù)的。里程計(jì)數(shù)器每計(jì)數(shù)1 km還會(huì)周期性地輸出一個(gè)脈沖信號(hào),稱為1 km脈沖信號(hào),可以通過(guò)一定的組合電路來(lái)實(shí)現(xiàn)。
系統(tǒng)最核心的部分就是計(jì)費(fèi)如何實(shí)現(xiàn)。這里就需要設(shè)計(jì)一個(gè)BCD碼的加法器,在起步價(jià)的基礎(chǔ)上,根據(jù)行駛里程的不同,依據(jù)計(jì)費(fèi)標(biāo)準(zhǔn),每增加1 km加上一個(gè)單價(jià),單價(jià)的產(chǎn)生可以用Verilog HDL編寫程序來(lái)實(shí)現(xiàn)。系統(tǒng)的總體設(shè)計(jì)框圖如圖1所示。
2.1 單價(jià)產(chǎn)生模塊
單價(jià)產(chǎn)生模塊的Verilog HDL源程序如下:
其中輸入信號(hào)bai和shi就是里程計(jì)數(shù)器輸出的兩位整數(shù)里程,輸出信號(hào)jia就是根據(jù)計(jì)費(fèi)標(biāo)準(zhǔn)而產(chǎn)生的單價(jià),以三位BCD碼的形式輸出,以前兩位為整數(shù),第三位為小數(shù)。即里程在3 km以內(nèi)時(shí),jia=0;里程在3~7 km之間時(shí),jia=016(1.6元);超過(guò)7 km時(shí),jia=024(2.4元)。
用Verilog HDL編寫程序來(lái)實(shí)現(xiàn)模塊功能的優(yōu)點(diǎn)在于,當(dāng)出租車的計(jì)費(fèi)標(biāo)準(zhǔn)發(fā)生變化時(shí),可以很容易地通過(guò)改寫程序來(lái)完成新的設(shè)計(jì),比起硬件電路的修改要方便得多,這也是用Verilog HDL來(lái)實(shí)現(xiàn)模塊功能的重要優(yōu)勢(shì)。
2.2 三位BCD碼加法器
系統(tǒng)中用到了三位BCD碼加法器,可以實(shí)現(xiàn)三位十進(jìn)制數(shù)的加法運(yùn)算。加法器輸出的結(jié)果就是乘客應(yīng)付的費(fèi)用,這里同樣以前兩位為整數(shù),第三位為小數(shù),也就是最大能顯示99.9元。三位BCD碼加法器由三個(gè)一位BCD碼加法器級(jí)聯(lián)而成。
一位BCD碼由四位二進(jìn)制數(shù)組成,四位二進(jìn)制數(shù)的加法運(yùn)算會(huì)產(chǎn)生大于9的數(shù)字,必須進(jìn)行適當(dāng)?shù)恼{(diào)整才會(huì)產(chǎn)生正確的結(jié)果。一位BCD碼加法器的Verilog HDL源程序如下:
一位BCD碼加法器模塊的仿真波形和生成的模塊符號(hào)如圖2和圖3所示。
本模塊中A和B為輸入的一位BCD碼,CIN為低位來(lái)的進(jìn)位信號(hào),CO是本片向高位產(chǎn)生的進(jìn)位輸出信號(hào),SUM是兩個(gè)數(shù)相加的和。三位BCD碼加法器由三個(gè)本模塊級(jí)聯(lián)而成,其電路原理圖和仿真波形如圖4和圖5所示。
2.3 緩沖器模塊
三位BCD碼加法器輸出的結(jié)果通過(guò)緩沖器以后,反饋到輸入端重新作為一個(gè)加數(shù),在1km脈沖信號(hào)的作用下,每來(lái)一個(gè)脈沖就和單價(jià)相加,形成連續(xù)累加的功能。緩沖器還有一個(gè)控制輸入端LD,LD=O時(shí),在1km脈沖的作用下,輸出起步價(jià)6元;LD=1時(shí),在1km脈沖的作用下,輸出和輸入相等。緩沖器的Verilog HDL源程序如下:
2.4 整體電路
將各個(gè)模塊按照輸入輸出關(guān)系連接成整體電路如圖6所示。
在整體電路中,clk為最原始的時(shí)鐘輸入端,cr為異步清零端,q[11..O]輸出里程,jiaqian[11..O]輸出乘客應(yīng)付的費(fèi)用。
3 系統(tǒng)仿真驗(yàn)證
整體電路的仿真波形如圖7所示。
從系統(tǒng)仿真波形圖7(a)中可以看出,當(dāng)清零端cr=O時(shí),里程數(shù)立刻清零,乘客應(yīng)付的費(fèi)用顯示三位十進(jìn)制數(shù)060(起步價(jià)6元),表示乘客剛上車。當(dāng)清零端cr=1時(shí),出租車開始行進(jìn),里程和費(fèi)用都開始計(jì)數(shù),里程顯示三位十進(jìn)制數(shù),前兩位為整數(shù),第三位為小數(shù),也就是每行駛100 m計(jì)一次數(shù)。
從系統(tǒng)仿真波形圖7(b)中可以看出,行駛到3 km時(shí),費(fèi)用由6元增加為7.6元,行駛到4 km時(shí),費(fèi)用由7.6元增加為9.2元,在3~7 km之間時(shí),每行駛1 km增加1.6元。
系統(tǒng)仿真波形圖7(c)中顯示了每行駛1 km后,費(fèi)用逐漸累加的情況。系統(tǒng)仿真波形完全驗(yàn)證了預(yù)期的設(shè)計(jì)要求。
4 結(jié) 語(yǔ)
通過(guò)仿真驗(yàn)證表明,本文所設(shè)計(jì)的出租車計(jì)價(jià)器能夠正常地顯示行駛的里程數(shù)和乘客應(yīng)付的費(fèi)用,符合預(yù)定的計(jì)費(fèi)標(biāo)準(zhǔn)和功能要求。基于FPGA的設(shè)計(jì),集成度高、設(shè)計(jì)周期短。尤其是當(dāng)計(jì)費(fèi)標(biāo)準(zhǔn)發(fā)生變化時(shí),容易通過(guò)改寫Verilog HDL源程序來(lái)完成新的設(shè)計(jì)。