名稱:Quartus出租車計(jì)費(fèi)系統(tǒng)VHDL代碼
軟件:Quartus
語言:VHDL
代碼功能:
出租車計(jì)費(fèi)系統(tǒng)設(shè)計(jì)。
設(shè)計(jì)要求:
設(shè)計(jì)一個(gè)模擬出租車計(jì)費(fèi)的電路系統(tǒng),具有以下:
(1)能實(shí)現(xiàn)計(jì)費(fèi)功能,計(jì)費(fèi)標(biāo)準(zhǔn)為:按行駛路程收費(fèi),起步價(jià)為11元,并在車行3公里(3km)后按2元/公里收費(fèi)。當(dāng)總費(fèi)用達(dá)到或超過40元時(shí)每公里收費(fèi)4元。當(dāng)遇到紅綠燈或客戶有事需要停車等待時(shí),則按時(shí)間收費(fèi),計(jì)費(fèi)單價(jià)為每20s收費(fèi)。
(2)實(shí)現(xiàn)預(yù)置功能:能預(yù)置起步費(fèi)、每公里收車行加費(fèi)里程、計(jì)時(shí)收費(fèi)。
(3)實(shí)現(xiàn)模擬功能:能模擬汽車行駛、停止和暫停等狀態(tài)。
(4)將路程和車費(fèi)顯示出來,以十進(jìn)制BCD碼方式輸出信號(hào)。
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; ??? ??? ???PROCESS?(clk_in,?reset_n) ???BEGIN ??????IF?(reset_n?=?'0')?THEN ?????????state?<=?s_idle;--復(fù)位 ?????????totel_money?<=?"0000000000000000";--清零 ?????????totel_money_out?<=?"0000000000000000";--清零 ??????ELSIF?(clk_in'EVENT?AND?clk_in?=?'1')?THEN ?????????totel_money_out?<=?totel_money;--輸出合計(jì)費(fèi)用 ?????????CASE?state?IS ????????????WHEN?s_idle?=>--空閑狀態(tài) ???????????????IF?(start_n?=?'0')?THEN--按下起動(dòng)鍵start,汽車起動(dòng) ??????????????????state?<=?s_starting_price; ??totel_money?<=?"0000000000001011";--顯示起步價(jià)11元,3公里 ???????????????ELSE ??????????????????state?<=?s_idle;--空閑狀態(tài) ??????????????????totel_money?<=?"0000000000000000"; ???????????????END?IF; ????????????WHEN?s_starting_price?=>--起步價(jià)狀態(tài) ???????????????IF?(stop_n?=?'0')?THEN--中途停車 ??????????????????state?<=?s_stop_1; ???????????????ELSIF?(mileage?>=?"0000000000000011")?THEN--大于3.0公里 ??????????????????state?<=?s_mileage_price; ???????????????ELSE ??????????????????state?<=?s_starting_price; ???????????????END?IF; ????????????WHEN?s_mileage_price?=>--車行駛?3.0公里后按每公里2元計(jì)費(fèi) ???????????????IF?(pulse_kilometre?=?'1')?THEN ??????????????????totel_money?<=?totel_money?+?"0000000000000010";--每公里2元計(jì)費(fèi) ???????????????END?IF; ???????????????IF?(totel_money?>=?"0000000000101000")?THEN--當(dāng)總費(fèi)用達(dá)到40元時(shí),每公里按4元收費(fèi) ??????????????????state?<=?s_highmileage_price; ???????????????ELSIF?(stop_n?=?'0')?THEN--中途停車 ??????????????????state?<=?s_stop_2; ???????????????ELSE ??????????????????state?<=?s_mileage_price; ???????????????END?IF; ????????????WHEN?s_highmileage_price?=>--當(dāng)總費(fèi)用達(dá)到40元時(shí),每公里按4元收費(fèi) ???????????????IF?(pulse_kilometre?=?'1')?THEN ??????????????????totel_money?<=?totel_money?+?"0000000000000100";--每公里4元計(jì)費(fèi) ???????????????END?IF; ???????????????IF?(stop_n?=?'0')?THEN--中途停車 ??????????????????state?<=?s_stop_3; ???????????????ELSE ??????????????????state?<=?s_highmileage_price; ???????????????END?IF; ????????????WHEN?s_stop_1?=>--停車等待 ???????????????IF?(ten_seconds?=?'1')?THEN--每20秒 ??????????????????totel_money?<=?totel_money?+?"0000000000000001";--每20秒收取1元 ???????????????END?IF; ???????????????IF?(start_n?=?'0')?THEN--啟動(dòng) ??????????????????state?<=?s_starting_price; ???????????????ELSE ??????????????????state?<=?s_stop_1; ???????????????END?IF; ????????????WHEN?s_stop_2?=>--停車等待 ???????????????IF?(ten_seconds?=?'1')?THEN--每20秒 ??????????????????totel_money?<=?totel_money?+?"0000000000000001";--每20秒收取1元 ???????????????END?IF; ???????????????IF?(start_n?=?'0')?THEN--啟動(dòng) ??????????????????state?<=?s_mileage_price; ???????????????ELSE ??????????????????state?<=?s_stop_2; ???????????????END?IF; ????????????WHEN?s_stop_3?=>--停車等待 ???????????????IF?(ten_seconds?=?'1')?THEN--每20秒 ??????????????????totel_money?<=?totel_money?+?"0000000000000001";--每20秒收取1元 ???????????????END?IF; ???????????????IF?(start_n?=?'0')?THEN--啟動(dòng) ??????????????????state?<=?s_highmileage_price; ???????????????ELSE ??????????????????state?<=?s_stop_3; ???????????????END?IF; ????????????WHEN?OTHERS?=> ???????????????state?<=?s_idle; ?????????END?CASE; ??????END?IF; ???END?PROCESS; ??? ??? END?behave;
點(diǎn)擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=424