名稱:出租車計(jì)價(jià)器VHDL計(jì)費(fèi)器(代碼在文末付費(fèi)下載)
軟件:Quartus
語(yǔ)言:VHDL
要求:
啟動(dòng)鍵start表示汽車啟動(dòng),起步價(jià)7元,同時(shí)路程開始計(jì)數(shù),停止鍵stop表示熄火,車費(fèi)和路程均為0,當(dāng)暫停鍵pause為1時(shí),車費(fèi)和路程停止計(jì)數(shù),當(dāng)檔位分別取0,1,2,3,時(shí)路程計(jì)數(shù)逐漸加快,路程超過3Km后,按設(shè)定逐步遞增。對(duì)設(shè)計(jì)進(jìn)行仿真,實(shí)現(xiàn)出租車計(jì)價(jià)器功能。
演示視頻:
部分代碼展示
LIBRARY?ieee; ???USE?ieee.std_logic_1164.all; ???USE?ieee.std_logic_unsigned.all; ENTITY?taxi?IS ???PORT?( ??????clk?????????????:?IN?STD_LOGIC; ??????start???????????:?IN?STD_LOGIC;--啟動(dòng) ??????money???????????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0);--金額 ??????distance????????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0);--里程 ??????stop????????????:?IN?STD_LOGIC;--停止 ??????pause???????????:?IN?STD_LOGIC;--暫停 ??????gears???????????:?IN?STD_LOGIC_VECTOR(1?DOWNTO?0)--檔位 ???); END?taxi; ARCHITECTURE?behave?OF?taxi?IS ???TYPE?State_type?IS?(s_stop,?s_start,?s_charge,?s_pause_start?,s_pause_charge);??--?定義狀態(tài) ???SIGNAL?state?:?State_Type;????--?創(chuàng)建信號(hào) ??? --定義中間信號(hào) ???SIGNAL?money_buf????:?STD_LOGIC_VECTOR(7?DOWNTO?0)?:=?"00000000"; ???SIGNAL?distance_buf?:?STD_LOGIC_VECTOR(7?DOWNTO?0)?:=?"00000000"; ???SIGNAL?count????????:?STD_LOGIC_VECTOR(2?DOWNTO?0)?:=?"000"; ???SIGNAL?charge_cnt???:?STD_LOGIC_VECTOR(2?DOWNTO?0)?:=?"000"; ???SIGNAL?charge_en????:?STD_LOGIC?:=?'0'; BEGIN --檔位,根據(jù)不同檔位對(duì)count進(jìn)行不同賦值,用于后面控制計(jì)費(fèi)速率 ???PROCESS?(gears) ???BEGIN ??????CASE?gears?IS ?????????WHEN?"00"?=> ????????????count?<=?"111";--7 ?????????WHEN?"01"?=> ????????????count?<=?"101";--5 ?????????WHEN?"10"?=> ????????????count?<=?"011";--3 ?????????WHEN?"11"?=> ????????????count?<=?"001";--1 ?????????WHEN?OTHERS?=> ??????END?CASE; ???END?PROCESS; ??? --charge_en為計(jì)費(fèi)脈沖,根據(jù)count控制計(jì)費(fèi)脈沖,檔位越高,脈沖頻率越大 ???PROCESS?(clk) ???BEGIN ??????IF?(clk'EVENT?AND?clk?=?'1')?THEN ?????????IF?(charge_cnt?>=?count)?THEN ????????????charge_cnt?<=?"000"; ????????????charge_en?<=?'1';--計(jì)數(shù)到count后charge_en拉高 ?????????ELSE ????????????charge_cnt?<=?charge_cnt?+?"001"; ????????????charge_en?<=?'0'; ?????????END?IF; ??????END?IF; ???END?PROCESS; ??? ???--出租車狀態(tài)機(jī)控制
設(shè)計(jì)文檔(文檔點(diǎn)擊可下載):
1. 工程文件
2. 程序文件
CPLD器件,可以根據(jù)具體需求自由選擇
3. 程序編譯
4. RTL圖
5. 狀態(tài)圖
6. 仿真文件
7. 仿真圖
下圖所示,gears表示檔位,檔位越高,路程及計(jì)費(fèi)越快。
本代碼已在開發(fā)板驗(yàn)證,開發(fā)板資料:
點(diǎn)擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=169