名稱:出租車計(jì)費(fèi)器VHDL代碼Quartus仿真
軟件:Quartus
語言:VHDL
代碼功能:
設(shè)計(jì)一個(gè)滿足日常生活所需功能的出租車計(jì)費(fèi)器
該計(jì)費(fèi)器能實(shí)現(xiàn)計(jì)費(fèi)功能。車起步開始計(jì)費(fèi),首先顯示起步價(jià),起步費(fèi)為1000元,車在行駛3km以內(nèi),只收起步價(jià)。車行駛超過3km后,每km2元,車費(fèi)依次累加。當(dāng)費(fèi)用達(dá)到或超過40元時(shí),每km收費(fèi)4元。當(dāng)遇到紅燈或客戶需要停車等待時(shí),則按時(shí)間計(jì)費(fèi)為每20s收費(fèi)1元。
實(shí)現(xiàn)計(jì)費(fèi)器預(yù)置功能,能夠預(yù)置起步費(fèi)、每公里收費(fèi)、車行加費(fèi)里程、計(jì)時(shí)收費(fèi)等。
FPGA代碼Verilog/VHDL代碼資源下載:www.hdlcode.com
演示視頻:
設(shè)計(jì)文檔:
1. 工程文件
2. 程序文件
代碼
3. 程序編譯
4. RTL圖
5. 仿真圖
整體仿真圖
速度控制模塊
狀態(tài)機(jī)控制模塊
顯示模塊
部分代碼展示:
LIBRARY?ieee; ???USE?ieee.std_logic_1164.all; ???USE?ieee.std_logic_unsigned.all; --狀態(tài)機(jī)控制模塊 ENTITY?taxi_state?IS ???PORT?( ??????clk_in???????????????:?IN?STD_LOGIC;--時(shí)鐘100Hz ??????reset_n??????????????:?IN?STD_LOGIC;--復(fù)位信號(hào) ??????start_n??????????????:?IN?STD_LOGIC;--啟動(dòng)信號(hào),行程開始 ??????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)--合計(jì)費(fèi)用 ???); 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)建信號(hào) ???SIGNAL?totel_money???:?STD_LOGIC_VECTOR(15?DOWNTO?0)?:=?"0000000000000000";--總價(jià)錢 ???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秒信號(hào) ????????????ELSE ???????????????count_seconds?<=?count_seconds?+?1;--計(jì)數(shù) ???????????????ten_seconds?<=?'0'; ????????????END?IF; ?????????END?IF; ??????END?IF; ???END?PROCESS;
點(diǎn)擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=553