徐晶晶,楊濤(指導(dǎo)教師)
(電子科技大學(xué)電子科學(xué)與工程學(xué)院,四川成都,611731)
FPGA(Field Programmable Gate Array)是在PAL、GAL等可編程器件的基礎(chǔ)上進(jìn)一步發(fā)展的產(chǎn)物。FPGA由可編程邏輯功能塊、片內(nèi)互聯(lián)線、輸入輸出塊構(gòu)成,通過修改布線實現(xiàn)可編程??墒褂每驁D或者Verilog HDL來設(shè)計FPGA,Verilog HDL 推出已經(jīng)有 20 多年,擁有廣泛的設(shè)計群體,成熟的資源比 VHDL豐富,因此本次設(shè)計采用Verilog HDL 語言。而出租車是日常出行中必不可少的交通工具,基于出租車的附屬品市場前景也是十分廣闊。本文基于FPGA設(shè)計模擬了一款出租車計費(fèi)系統(tǒng),具有開發(fā)周期短,設(shè)計靈活等優(yōu)勢[1]。
本次設(shè)計中 FPGA 型號為 Xilinx公司的 spartan-6 系列的 xc6slx-2ftg256 型號。設(shè)計開發(fā)工具選用 ISE14.7,針對FPGA 設(shè)計的功能和時序仿真,選擇 Mentor 公司的Modelsim 仿真工具。
出租車計費(fèi)系統(tǒng)的實現(xiàn)框圖如圖1(a)所示[2],RTL頂層原理圖如圖1(b)所示,上位機(jī)發(fā)送指令模擬汽車啟動、停止、行駛公里數(shù)、等待時間的操作,通過串口將指令發(fā)送至設(shè)計的出租車計費(fèi)系統(tǒng),而后再通過串口將總計費(fèi)用返回至上位機(jī)。
(1) 上位機(jī)實現(xiàn)模擬功能:汽車啟動、停止、公里計數(shù)、等待時間計數(shù)。
(2) 具體計費(fèi)方式:
里程<3公里:費(fèi)用=6元;3公里<里程≤19公里:費(fèi)用=6+(里程-3)*2+等候時間*等候單價1;里程>19公里:費(fèi)用=里程*里程單價(2)+等候時間*等候單價1。
(3) 費(fèi)用能夠通過上位機(jī)顯示[3]。
出租車計費(fèi)系統(tǒng)分為五個模塊,分別為串口接收模塊uart_rx、里程計數(shù)模塊mileage_counter、等待時間計數(shù)模塊wait_time、計費(fèi)模塊charge、串口發(fā)送模塊uart_tx。
圖1
串口接收模塊負(fù)責(zé)接收上位機(jī)傳送的控制指令[4],其RTL原理圖如圖2所示。表1給出了串口接收模塊輸入輸出端口定義。
圖2
表1 串口接收模塊輸入輸出端口定義
串口接收模塊的仿真結(jié)果如圖3所示。
圖3
通過串口接收模塊仿真波形可以看出uart_rx模塊接受控制命令ctrl(0:啟動;1:停止;2公里數(shù);3:等待時間數(shù))傳送至其他模塊。本次模擬的為行駛5公里,等待2個時間單位。
里程計數(shù)模塊負(fù)責(zé)計算行駛里程數(shù),其RTL原理圖如圖4所示。表2給出了里程計數(shù)模塊輸入輸出端口定義。
圖4
表2 里程計數(shù)模塊輸入輸出端口定義
里程計數(shù)模塊仿真波形如圖5所示。
圖5
通過里程計數(shù)模塊仿真波形,可以看出在計費(fèi)時間內(nèi)(count_en=1),最終的里程數(shù)(kilo_out)為5公里。
等待時間計數(shù)模塊負(fù)責(zé)計算等待時長,其RTL原理圖如圖6所示。表3給出了等待時間計數(shù)模塊輸入輸出端口定義。
圖6
表3 等待時間計數(shù)模塊輸入輸出端口定義
等待時間計數(shù)模塊仿真波形如圖7所示。
圖7
通過等待時間計數(shù)模塊仿真波形,可以看出在計費(fèi)時間內(nèi)(count_en=1),最終的等待時間(wait_time)為2。
計費(fèi)模塊負(fù)責(zé)計算總體開銷[5],其RTL原理圖如圖8所示。表4給出了計費(fèi)模塊輸入輸出端口定義。
圖8
表4 計費(fèi)模塊輸入輸出端口定義
計費(fèi)模塊仿真波形如圖9所示。
圖9
通過計費(fèi)模塊仿真波形可以看到總公里數(shù)(kilo_out)、等待時間數(shù)(wait_time)、產(chǎn)生費(fèi)用(cost)。通過仿真結(jié)果可以看到計費(fèi)截止時(count_done信號為1),產(chǎn)生的總費(fèi)用為12元。
串口發(fā)送模塊負(fù)責(zé)將計費(fèi)模塊計算出的總體開銷返回給上位機(jī),其RTL原理圖如圖10所示。表5給出了串口發(fā)送模塊輸入輸出端口定義。
圖10
表5 串口發(fā)送模塊輸入輸出端口定義
串口發(fā)送模塊仿真波形如圖11所示。
圖11
通過串口發(fā)送模塊的仿真波形可以看出uart_tx模塊將產(chǎn)生的總費(fèi)用(rx_dout_reg)傳送回上位機(jī)。
我們連接好開發(fā)板如圖12所示,將bit文件下載至開發(fā)板,而后將USB數(shù)據(jù)線連接至USB轉(zhuǎn)串口芯片。打開上位機(jī)軟件(友善串口助手),通過上位機(jī)發(fā)送控制信號(0:啟動;1:停止;2公里數(shù);3:等待時間數(shù)),可以通過上位機(jī)軟件看到返回的產(chǎn)生費(fèi)用。
如:行駛3公里(控制信號為:00 02 02 02 01)返回的數(shù)據(jù)為06,表示產(chǎn)生費(fèi)用為6元;行駛5公里,等待時間為2,(控制信號為:00 02 02 02 02 02 03 03 01),返回的數(shù)據(jù)為0C,表示產(chǎn)生費(fèi)用為12元。驗證結(jié)果如圖13所示。
圖13
此外本文還驗證了一些其他數(shù)據(jù),驗證結(jié)果如圖14所示。
圖14
出租車計費(fèi)器在日常出行中不可缺少,本文利用FPGA實現(xiàn)了出租車計費(fèi)系統(tǒng)。出租車計費(fèi)系統(tǒng)利用Verilog語言設(shè)計出來的出租車計費(fèi)器系統(tǒng)實現(xiàn)了串口接收模塊uart_rx、里程計數(shù)模塊mileage_counter、等待時間計數(shù)模塊wait_time、計費(fèi)模塊charge、串口發(fā)送模塊uart_tx。完成了通過控制信號模擬汽車啟動、停止、里程計數(shù)與等待時間計數(shù),最終將總計費(fèi)用通過上位機(jī)顯示了出來。通過FPGA來開發(fā)數(shù)字電路,縮短了設(shè)計時間,減少了PCB面積,具有很強(qiáng)的靈活性,因此具有很大的應(yīng)用前景。