• 方案介紹
  • 附件下載
  • 相關推薦
申請入駐 產(chǎn)業(yè)圖譜

Quartus出租車計費系統(tǒng)VHDL代碼

06/11 10:39
420
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

2-23122G033214Y.doc

共1個文件

名稱:Quartus出租車計費系統(tǒng)VHDL代碼

軟件:Quartus

語言:VHDL

代碼功能:

出租車計費系統(tǒng)設計。

設計要求:

設計一個模擬出租車計費的電路系統(tǒng),具有以下:

(1)能實現(xiàn)計費功能,計費標準為:按行駛路程收費,起步價為11元,并在車行3公里(3km)后按2元/公里收費。當總費用達到或超過40元時每公里收費4元。當遇到紅綠燈或客戶有事需要停車等待時,則按時間收費,計費單價為每20s收費。

(2)實現(xiàn)預置功能:能預置起步費、每公里收車行加費里程、計時收費。

(3)實現(xiàn)模擬功能:能模擬汽車行駛、停止和暫停等狀態(tài)。

(4)將路程和車費顯示出來,以十進制BCD碼方式輸出信號。

FPGA代碼Verilog/VHDL代碼資源下載:www.hdlcode.com

演示視頻:

設計文檔:

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;--復位信號
??????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--復位
?????????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;
???
???
???PROCESS?(clk_in,?reset_n)
???BEGIN
??????IF?(reset_n?=?'0')?THEN
?????????state?<=?s_idle;--復位
?????????totel_money?<=?"0000000000000000";--清零
?????????totel_money_out?<=?"0000000000000000";--清零
??????ELSIF?(clk_in'EVENT?AND?clk_in?=?'1')?THEN
?????????totel_money_out?<=?totel_money;--輸出合計費用
?????????CASE?state?IS
????????????WHEN?s_idle?=>--空閑狀態(tài)
???????????????IF?(start_n?=?'0')?THEN--按下起動鍵start,汽車起動
??????????????????state?<=?s_starting_price;
??totel_money?<=?"0000000000001011";--顯示起步價11元,3公里
???????????????ELSE
??????????????????state?<=?s_idle;--空閑狀態(tài)
??????????????????totel_money?<=?"0000000000000000";
???????????????END?IF;
????????????WHEN?s_starting_price?=>--起步價狀態(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元計費
???????????????IF?(pulse_kilometre?=?'1')?THEN
??????????????????totel_money?<=?totel_money?+?"0000000000000010";--每公里2元計費
???????????????END?IF;
???????????????IF?(totel_money?>=?"0000000000101000")?THEN--當總費用達到40元時,每公里按4元收費
??????????????????state?<=?s_highmileage_price;
???????????????ELSIF?(stop_n?=?'0')?THEN--中途停車
??????????????????state?<=?s_stop_2;
???????????????ELSE
??????????????????state?<=?s_mileage_price;
???????????????END?IF;
????????????WHEN?s_highmileage_price?=>--當總費用達到40元時,每公里按4元收費
???????????????IF?(pulse_kilometre?=?'1')?THEN
??????????????????totel_money?<=?totel_money?+?"0000000000000100";--每公里4元計費
???????????????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--啟動
??????????????????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--啟動
??????????????????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--啟動
??????????????????state?<=?s_highmileage_price;
???????????????ELSE
??????????????????state?<=?s_stop_3;
???????????????END?IF;
????????????WHEN?OTHERS?=>
???????????????state?<=?s_idle;
?????????END?CASE;
??????END?IF;
???END?PROCESS;
???
???
END?behave;

點擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=424

  • 2-23122G033214Y.doc
    下載

相關推薦