名稱:出租車計費器VHDL代碼Quartus仿真
軟件:Quartus
語言:VHDL
代碼功能:
設(shè)計一個滿足日常生活所需功能的出租車計費器
該計費器能實現(xiàn)計費功能。車起步開始計費,首先顯示起步價,起步費為1000元,車在行駛3km以內(nèi),只收起步價。車行駛超過3km后,每km2元,車費依次累加。當(dāng)費用達(dá)到或超過40元時,每km收費4元。當(dāng)遇到紅燈或客戶需要停車等待時,則按時間計費為每20s收費1元。
實現(xiàn)計費器預(yù)置功能,能夠預(yù)置起步費、每公里收費、車行加費里程、計時收費等。
FPGA代碼Verilog/VHDL代碼資源下載:www.hdlcode.com
演示視頻:
設(shè)計文檔:
1. 工程文件
2. 程序文件
代碼
3. 程序編譯
4. RTL圖
5. 仿真圖
整體仿真圖
速度控制模塊
狀態(tài)機控制模塊
顯示模塊
部分代碼展示:
LIBRARY?ieee; ???USE?ieee.std_logic_1164.all; ???USE?ieee.std_logic_unsigned.all; --狀態(tài)機控制模塊 ENTITY?taxi_state?IS ???PORT?( ??????clk_in???????????????:?IN?STD_LOGIC;--時鐘100Hz ??????reset_n??????????????:?IN?STD_LOGIC;--復(fù)位信號 ??????start_n??????????????:?IN?STD_LOGIC;--啟動信號,行程開始 ??????stop_n???????????????:?IN?STD_LOGIC;--中途暫停 ??????pulse_kilometre??????:?IN?STD_LOGIC;--1公里產(chǎn)生一次脈沖 ??????mileage_out??????????:?OUT?STD_LOGIC_VECTOR(15?DOWNTO?0);--里程 ??????totel_money_out??????:?OUT?STD_LOGIC_VECTOR(15?DOWNTO?0)--合計費用 ???); END?taxi_state; ARCHITECTURE?behave?OF?taxi_state?IS --定義狀態(tài) ???TYPE?State_type?IS?(s_idle,?s_starting_price,?s_mileage_price,?s_highmileage_price?,s_stop_1,s_stop_2,s_stop_3);??--?定義狀態(tài) ???SIGNAL?state:?State_Type;????--?創(chuàng)建信號 ???SIGNAL?totel_money???:?STD_LOGIC_VECTOR(15?DOWNTO?0)?:=?"0000000000000000";--總價錢 ???SIGNAL?mileage???????:?STD_LOGIC_VECTOR(15?DOWNTO?0)?:=?"0000000000000000";--里程 ??? ???SIGNAL?ten_seconds???:?STD_LOGIC?:=?'0'; ???SIGNAL?count_seconds?:?integer?:=?0; BEGIN ???mileage_out?<=?mileage;--輸出 ???PROCESS?(clk_in,?reset_n) ???BEGIN ??????IF?(reset_n?=?'0')?THEN--復(fù)位 ?????????mileage?<=?"0000000000000000"; ??????ELSIF?(clk_in'EVENT?AND?clk_in?=?'1')?THEN ?????????IF?(state?=?s_starting_price?OR?state?=?s_mileage_price?OR?state?=?s_highmileage_price)?THEN ????????????IF?(pulse_kilometre?=?'1')?THEN--1公里里程加1 ???????????????mileage?<=?mileage?+?"0000000000000001"; ????????????ELSE ???????????????mileage?<=?mileage; ????????????END?IF; ?????????END?IF; ??????END?IF; ???END?PROCESS; ??? ???--每20秒收取1元 ???PROCESS?(clk_in,?reset_n) ???BEGIN ??????IF?(reset_n?=?'0')?THEN ?????????count_seconds?<=?0; ?????????ten_seconds?<=?'0'; ??????ELSIF?(clk_in'EVENT?AND?clk_in?=?'1')?THEN ?????????IF?(state?=?s_stop_1?OR?state?=?s_stop_2?OR?state?=?s_stop_3)?THEN--停車等待 ????????????IF?(count_seconds?>=?200)?THEN--20秒 ???????????????count_seconds?<=?0; ???????????????ten_seconds?<=?'1';--20秒信號 ????????????ELSE ???????????????count_seconds?<=?count_seconds?+?1;--計數(shù) ???????????????ten_seconds?<=?'0'; ????????????END?IF; ?????????END?IF; ??????END?IF; ???END?PROCESS;
點擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=553