張炯 陳初俠 操曉思 徐甫 歐陽凱



摘要:該文基于FPGA芯片EP1K30QC208-2進(jìn)行了出租車計費系統(tǒng)設(shè)計。首先從設(shè)計要求出發(fā),將出租車計費系統(tǒng)分成多個子電路模塊并用Verilog HDL語言對其進(jìn)行設(shè)計,然后調(diào)用已設(shè)計好的各子電路模塊采用原理圖方式進(jìn)行頂層電路設(shè)計,最后將設(shè)計好的頂層電路下載到FPGA芯片中進(jìn)行硬件驗證。實驗結(jié)果表明,所設(shè)計的出租車計費系統(tǒng)能動態(tài)顯示出租車的行駛里程、等待時間和計費金額,具有一定的實用價值。
關(guān)鍵詞:出租車計費;FPGA;Verilog HDL
中圖分類號:TP29? ? ? ? 文獻(xiàn)標(biāo)識碼:A
文章編號:1009-3044(2021)13-0093-03
眾所周知,出租車在我們的生活中承擔(dān)著非常重要的角色,一個具有良好性能的出租車計費系統(tǒng)不僅有助于加強行業(yè)管理,還可以減少乘客與司機之間的糾紛[1]。出租車計費系統(tǒng)可以采用模擬電路和數(shù)字電路來實現(xiàn),這種設(shè)計方法弊端是整體電路較復(fù)雜,而且出現(xiàn)故障時調(diào)試比較困難。出租車計費系統(tǒng)也可以采用單片機來實現(xiàn)[2],但由于計費系統(tǒng)經(jīng)常需要根據(jù)油價進(jìn)行計費標(biāo)準(zhǔn)的相應(yīng)更改,如果采用單片機,需要每次更改計費標(biāo)準(zhǔn)后再次燒錄程序至單片機,費時費力[3]。因此對出租車計費系統(tǒng)的更新?lián)Q代迫在眉睫。
隨著大規(guī)模可編程邏輯器件的出現(xiàn),基于FPGA設(shè)計的出租車計費系統(tǒng)逐漸顯示其強大的性能,不僅具有很高的可移植性,而且需要更改電路時非常方便,如果計費標(biāo)準(zhǔn)變化,可以實現(xiàn)現(xiàn)場更新[3]。本文以現(xiàn)場可編程邏輯器件(FPGA)為設(shè)計載體,以硬件描述語言(Verilog HDL)為主要表達(dá)方式,以Quartus Ⅱ開發(fā)軟件和ZY11EDA13BE開發(fā)系統(tǒng)為設(shè)計工具設(shè)計了一種能動態(tài)顯示出租車計程、計時、計費的系統(tǒng)。
1? 出租車計費系統(tǒng)設(shè)計要求
本文以安徽省巢湖市出租車計價標(biāo)準(zhǔn)為例來進(jìn)行設(shè)計。巢湖市出租車計價標(biāo)準(zhǔn)如下:1)出租車起步開始計費,起步價為6元,車行駛2km以內(nèi),只收取起步價。2)當(dāng)行駛公里數(shù)超過2km而少于5km時,超出2km的路程每千米收費為1.6元。3)當(dāng)行駛公里數(shù)超過5km時,超出5km的路程每千米收費加收50%,即為2.4元。4)當(dāng)遇到紅燈或者客戶需要停車等待時,1分鐘內(nèi)免費,滿1分鐘后,每分鐘收取0.2元。5)出租車夜間行駛(22:00-次日5:00)起步價、行駛公里租價加收20%夜間補貼。
為了方便出租車計費系統(tǒng)的模擬,本出租車計費系統(tǒng)除了實現(xiàn)以上計費功能外,還包含以下要求:1)設(shè)置計費暫停按鈕,若計費系統(tǒng)收到暫停命令,則不計費,車費保持不變。2)設(shè)置計費復(fù)位按鈕,若計費系統(tǒng)收到復(fù)位命令,則車費清零。3)能動態(tài)顯示出租車行駛的里程,范圍為00.0~99.0km。4)能動態(tài)顯示等待時間,范圍為0~9min。5)能動態(tài)顯示車費總和,范圍為000.0~999.9元。
2? 出租車計費系統(tǒng)總體設(shè)計方案
出租車計費系統(tǒng)設(shè)計框圖如圖1所示。根據(jù)設(shè)計要求,將出租車計費系統(tǒng)設(shè)計分為三部分,分別是外部輸入、控制模塊、顯示模塊[4]。外部輸入包含掃描時鐘、車輪脈沖、計時時鐘、白天信號、行駛信號、使能信號、復(fù)位信號。控制模塊包含分頻模塊、計程模塊、計時模塊、計費模塊和轉(zhuǎn)換模塊。
3? 出租車計費系統(tǒng)設(shè)計
本次設(shè)計采用層次化的設(shè)計方法,分底層各子模塊電路設(shè)計和頂層電路設(shè)計。設(shè)計過程中,通過Quartus Ⅱ軟件平臺利用Verilog HDL語言設(shè)計和原理圖設(shè)計相結(jié)合的方式來進(jìn)行,其中各子模塊電路用Verilog HDL語言設(shè)計方式來實現(xiàn),頂層電路通過調(diào)用各子模塊用原理圖設(shè)計方式來實現(xiàn)。
3.1? 底層電路設(shè)計
底層電路有八個子電路模塊,分別是50分頻模塊、60分頻模塊、計程模塊、計時模塊、計費模塊、轉(zhuǎn)換模塊1、轉(zhuǎn)換模塊2和動態(tài)顯示模塊。下面分別對它們進(jìn)行介紹。
3.1.1? 50分頻模塊
該模塊的功能是對車輪傳感器傳送的脈沖信號進(jìn)行計數(shù),每轉(zhuǎn)一圈計一次數(shù)。為方便計算我們設(shè)定車輪轉(zhuǎn)一圈為2米,轉(zhuǎn)50圈剛好為100米,即0.1公里。因此這里我們選用一個50分頻的分頻器,當(dāng)計數(shù)從0開始計到24時,輸出信號進(jìn)行翻轉(zhuǎn),其仿真波形如圖2所示。從波形可以看出,輸出信號為一個脈沖周期時,剛好計數(shù)記了50次。
3.1.2? 60分頻模塊
為了便于計算出租車行駛過程中的等待時間,我們引入60分頻模塊電路,其輸入時鐘為1hz,輸出信號為60秒的周期信號。由于此分頻器的輸出信號周期為60秒,所以輸出信號每來一個脈沖剛好就是一分鐘,很好地為計時模塊服務(wù)工作。如圖3所示為60分頻模塊仿真波形圖,從波形可以看出,每輸入一個時鐘就給其進(jìn)行計數(shù),當(dāng)計數(shù)到29時,輸出信號進(jìn)行翻轉(zhuǎn),剛好計數(shù)60次就可得一個完整的輸出脈沖。
3.1.3? 計程模塊
計程模塊用來計量出租車行駛的總里程,計值范圍為0-99.9km。為了設(shè)計方便,計值范圍我們?nèi)?-999,那個小數(shù)點我們可以從動態(tài)顯示模塊加上,由此999就可變成99.9。如圖4所示為計程模塊仿真波形圖,復(fù)位信號rst、計程時鐘clk、使能信號en和行駛信號run為輸入信號,里程信號q為輸出信號。當(dāng)復(fù)位信號rst有效時(高電平有效),總里程為0;當(dāng)使能信號en和行駛信號run有效時,每來一個計程時鐘clk就累加計數(shù)一次,一直計到999;當(dāng)使能信號en無效或行駛信號run無效時,不進(jìn)行計數(shù),此時計程輸出保持里程不變。
3.1.4? 計時模塊
計時模塊用來計量出租車在行駛過程中的等待時間,計值范圍為0-9分鐘。如圖5所示為計時模塊仿真波形圖,復(fù)位信號rst、計程時鐘clk、使能信號en和行駛信號run為輸入信號,等待時間信號waittime為輸出信號。當(dāng)復(fù)位信號rst有效時,計時為0;當(dāng)使能信號en有效而行駛信號run無效時,每來一個計時時鐘clk就累加計數(shù)一次,一直計到9;當(dāng)使能信號en無效或行駛信號run有效時,不進(jìn)行計數(shù),此時計時輸出保持等待時間不變。
3.1.5? 計費模塊
計費模塊用來計算出租車開始運行到結(jié)束所產(chǎn)生的總體費用,計值范圍為0-999.9元。為了設(shè)計方便,計值范圍我們?nèi)?-9999,那個小數(shù)點我們可以從動態(tài)顯示模塊加上。如圖6所示為計費模塊仿真波形圖,復(fù)位信號rst、使能信號en、白天信號baihei、里程信號km和等待時間信號waittime為輸入信號,總費用信號costout為輸出信號。當(dāng)復(fù)位信號rst有效時,總計費為0;當(dāng)使能信號en無效時,總費用保持不變;當(dāng)使能信號en有效時,總費用會根據(jù)白天黑夜信號baihei、里程信號km和等待時間信號waittime的值而確定。例如,當(dāng)出租車在白天時分運行時,行駛公里為7km,等待時間為5分鐘,則總費用為6+(5-2)×1.6+(7-5)×2.4+5×0.2=16.6元;當(dāng)出租車在晚上時分運行時,行駛公里為7km,等待時間為5分鐘,則總費用為[6+(5-2)×1.6+(7-5)×2.4]×(1+0.2)+5×0.2=19.7元。從圖6可以看出,在140ns-160ns之間,仿真結(jié)果數(shù)值與理論計算值一致,說明設(shè)計正確。
3.1.6? 轉(zhuǎn)換模塊
轉(zhuǎn)換模塊是為了把計程模塊和計費模塊輸出的多位十進(jìn)制數(shù)轉(zhuǎn)換成便于數(shù)碼管顯示的多個一位十進(jìn)制數(shù)。如圖7所示為轉(zhuǎn)換模塊仿真波形圖,圖7(a)是計程模塊輸出里程的轉(zhuǎn)換結(jié)果,圖7(b)是計費模塊輸出費用的轉(zhuǎn)換結(jié)果。從7(a)可以看出,當(dāng)里程為11.2km時,輸出結(jié)果為1、1、2;從7(b)可以看出,當(dāng)費用為103.7元時,輸出結(jié)果為1、0、3、7,仿真結(jié)果與設(shè)想一致。
3.1.7? 動態(tài)顯示模塊
動態(tài)顯示模塊通過掃描時鐘來動態(tài)顯示出租車行駛里程數(shù)、等待時間數(shù)和總體費用,其仿真波形如圖8所示。輸入信號clk32768hz是頻率為32768hz的掃描信號;輸入信號kmbai、kmshi、kmge為出租車?yán)锍痰氖弧€位和十分位;輸入信號waittime為出租車所等待的時間;輸入信號bcd3、bcd2、bcd1、bcd0為出租車計費的百位、十位、個位和十分位。
輸出信號sel為數(shù)碼管掃描片選信號,當(dāng)sel=000時,最右邊的數(shù)碼管點亮,此時“4”會被點亮,以此類推,當(dāng)sel=111時,最左邊的數(shù)碼管點亮,此時“1”會被點亮[5]。輸出信號dataout為7段數(shù)碼管的顯示結(jié)果,用8位二進(jìn)制數(shù)表示,最左邊一位用于點亮數(shù)碼管上的小數(shù)點。例如,當(dāng)sel=000時,dataout=01100110,此時顯示“4”的數(shù)碼管會被點亮;當(dāng)sel=001時,dataout=10000110,此時顯示“1.”的數(shù)碼管會被點亮,由于dataout的最高位為1,所以這里顯示了一個小數(shù)點。
3.2? 頂層電路設(shè)計
出租車頂層電路設(shè)計采用原理圖輸入方式進(jìn)行,通過調(diào)用生成的各底層子模塊電路符號,并將它們做適當(dāng)連接就可實現(xiàn)頂層電路的設(shè)計,其電路如圖9所示。
4? 出租車計費系統(tǒng)的硬件驗證
本設(shè)計選用湖北眾友科技實業(yè)股份有限公司生產(chǎn)的ZY11EDA13BE實驗箱作為硬件驗證平臺,同時選用Altera公司的EP1K30QC208-2作為FPGA芯片。只要對出租車計費系統(tǒng)頂層文件的輸入輸出引腳進(jìn)行鎖定,然后重新編譯并下載到FPGA芯片中,就可以進(jìn)行出租車計費系統(tǒng)的硬件測試驗證[6]。
硬件驗證結(jié)果如圖10所示,(a)、(b)分別為出租車白天和夜間行駛的計費結(jié)果。圖(a)中,出租車行駛里程為4.8km,等待時間為4分鐘,根據(jù)巢湖市出租車計費標(biāo)準(zhǔn)可得出租車的總費用理論值為6+(4.8-2)×1.6+4×0.2=11.28元;圖(b)中,出租車行駛里程為15.4m,等待時間為5分鐘,根據(jù)巢湖市出租車計費標(biāo)準(zhǔn)可得出租車的總費用理論值為[6+(5-2)×1.6+(15.4-5)×2.4]×(1+0.2)+5×0.2=43.912元。由于費用顯示精度為0.1元,所以小數(shù)點后面的第二位和第三位應(yīng)省去,即費用分別應(yīng)為11.2元、43.9元,從圖10可看出這與實驗硬件驗證結(jié)果一致。
5 結(jié)束語
本文基于FPGA芯片采用層次化的設(shè)計方法設(shè)計出租車計費系統(tǒng)。設(shè)計過程中,首先將出租車計費系統(tǒng)分成多個子電路模塊;然后通過Quartus Ⅱ軟件平臺利用Verilog HDL語言設(shè)計各子電路模塊并對其進(jìn)行仿真分析;接著把設(shè)計好的各子電路模塊生成元件符號并調(diào)用它們用原理圖設(shè)計方式設(shè)計出租車計費系統(tǒng)頂層電路;最后把已設(shè)計好的頂層電路下載到FPGA芯片中對其進(jìn)行硬件測試驗證。實驗結(jié)果表明,本出租車計費系統(tǒng)能正確的動態(tài)顯示出租車的行駛里程、等待時間和計費金額,設(shè)計達(dá)到預(yù)定目標(biāo)。
參考文獻(xiàn):
[1] 吳承琦,孫培生.出租汽車計價器發(fā)展歷程回顧、感悟及展望[J].中國計量,2008(3):18-21.
[2] 張立,張光新,柴磊,等.FPGA在多功能計費器系統(tǒng)中的應(yīng)用[J].儀器儀表學(xué)報,2005(S2):735-737.
[3] 任立民.基于FPGA的出租車計費系統(tǒng)設(shè)計[J].南陽理工學(xué)院學(xué)報,2019,11(2):49-52.
[4] 陳乾君,葉冬.基于CPLD的出租車計費器系統(tǒng)的研究與設(shè)計[J].物聯(lián)網(wǎng)技術(shù),2013,3(6):23-24,27.
[5] 陳初俠,袁濤,曾奧運,等.基于EDA技術(shù)的汽車速度表設(shè)計[J].綏化學(xué)院學(xué)報,2018,38(5):149-151.
【通聯(lián)編輯:朱寶貴】