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

出租車計(jì)價(jià)器VHDL代碼Quartus仿真

加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

2-231229101401913.doc

共1個(gè)文件

名稱:出租車計(jì)價(jià)器VHDL代碼Quartus仿真

軟件:Quartus

語言:VHDL

代碼功能:

要求:

1.該出租車計(jì)價(jià)器,計(jì)費(fèi)包括起步價(jià)、等待時(shí)間計(jì)費(fèi)、里程計(jì)費(fèi)、燃油附加費(fèi)四部分。

2.白天計(jì)價(jià)模式:起步價(jià)為90元,3km之內(nèi)按起步價(jià)計(jì)費(fèi),超過3km,每km增加2元,等待時(shí)間單價(jià)為每分鐘0.1元,燃油附加費(fèi)2.0元。

3.夜晚計(jì)價(jià)模式:起步價(jià)為10.0元,3km之內(nèi)按起步價(jià)計(jì)費(fèi),超過3km,每km增加2元,等待時(shí)間單價(jià)為每分鐘0.1元,燃油附加費(fèi)20元。

4.用兩位數(shù)碼管顯示總里程,最大值為99km,用兩位數(shù)碼管顯示等待時(shí)間,最大值為59min,用四個(gè)數(shù)碼管顯示總費(fèi)用,最大值為9999元。

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

演示視頻:

設(shè)計(jì)文檔:

1. 工程文件

2. 程序文件

頂層電路

3. 程序編譯

4. RTL圖

5. 仿真圖

頂層

Keyin模塊

Speed模塊

Times模塊

Kmmoney模塊

部分代碼展示:

library?ieee;?--加載庫文件
use?ieee.std_logic_1164.all;
use?ieee.std_logic_unsigned.all;
entity?keyin?is
port(?????????????--定義輸入輸出端口
clk50MHZ??:in?std_logic;--輸入時(shí)鐘50MHZ
reset:in?std_logic;--復(fù)位信號,低電平復(fù)位
key_on:in?std_logic;--開始計(jì)費(fèi)按鍵
key_off:in?std_logic;--停止計(jì)費(fèi)按鍵
key_kong:in?std_logic;--空檔按鍵
key_up:in?std_logic;--空檔按鍵
moshi:in?std_logic;--
key_start:out??std_logic;--開始計(jì)費(fèi)信號
key_stop?:out??std_logic;--停止計(jì)費(fèi)信號
sp???:out?std_logic_vector(2?downto?0);?--檔位,key_speed0,空,加減檔
????????clk_1khz_out:out??std_logic;
????????clk_1hz_out:out??std_logic;
????????mode?:out??std_logic
);
end??;
architecture?rtl?of?keyin?is
signal?spp??:?std_logic_vector(2?downto?0):="000";
signal?CLK100HZ,CLK1kHZ,CLK1HZ:std_logic;
signal?key?:std_logic_vector(4?downto?0);
signal?bai:std_logic;
begin
key<=key_on?&?key_off?&?key_kong?&?key_up?&?moshi?;
----------------分頻程序----------------------------
PROCESS(clk50MHZ,reset)
?VARIABLE??Q1??:integer?range?0?to?500000;?--定義標(biāo)準(zhǔn)邏輯位矢量數(shù)據(jù)類型
?VARIABLE??Q2??:integer?range?0?to?500000;?--定義標(biāo)準(zhǔn)邏輯位矢量數(shù)據(jù)類型
?VARIABLE??Q3??:integer?range?0?to?50000000;?--定義標(biāo)準(zhǔn)邏輯位矢量數(shù)據(jù)類型
??BEGIN????
??if?reset='0'then
CLK100HZ<='0';
CLK1kHZ<='0';
CLK1HZ<='0';
Q1?:=0;
Q2?:=0;
Q3?:=0;
??ELSIF??RISING_EDGE(clk50MHZ)?THEN??
???IF?Q1>=9?--50?000?000?/((249+1)*2)=100??HZ50m/100=x,x/2-1=??249999
then?Q1?:=0;
CLK100HZ<=NOT?CLK100HZ;--10ms
ELSE
Q1?:=?Q1?+?1?;
???END?IF;
???IF?Q2>=2??--50?000?000?/100x,x/2-1??HZ??24999
then?Q2?:=0;
CLK1kHZ<=NOT?CLK1kHZ;--1ms
ELSE
Q2?:=?Q2?+?1?;
???END?IF;
??????IF?Q3>=24??--50?000?000?/((24999+1)*2)=1??HZ??24999999
then?Q3?:=0;
CLK1HZ<=NOT?CLK1HZ;--1s
ELSE
Q3?:=?Q3?+?1?;
???END?IF;
????END?IF;
?????clk_1hz_out<=CLK1HZ;
?clk_1khz_out<=CLK1kHZ;
?END?PROCESS;?
---------------------------------------------------
process(CLK100HZ,reset)????--敏感信號發(fā)生變化時(shí),啟動(dòng)進(jìn)程
variable?keyflag:std_logic:='0';
begin
if?reset='0'then--復(fù)位清零
spp<="000";--速度清0
keyflag:='0';
key_start<='0';
key_stop<='0';
bai<='1';
elsif?CLK100HZ'event?and?CLK100HZ='1'then--時(shí)鐘上升沿到達(dá)時(shí),狀態(tài)轉(zhuǎn)換
if(key="11111")thenkeyflag:='0';?end?if;
?if(keyflag='0')then?
if(key_on='0')then?--開始計(jì)費(fèi)
keyflag:='1';--保持按鍵按下標(biāo)志
key_start<='1';--開始計(jì)費(fèi)
key_stop<='0';spp<="001";
elsif(key_off='0')then?--停止計(jì)費(fèi)
keyflag:='1';--保持按鍵按下標(biāo)志
key_start<='0';--?
key_stop<='1';--停止計(jì)費(fèi)
elsIF(key_kong='0')then?--空檔按下
keyflag:='1';--保持按鍵按下標(biāo)志
spp<="000";--速度清0
elsIF(key_up='0')then?--
keyflag:='1';--保持按鍵按下標(biāo)志
spp<="001";--
elsif(moshi='0')then--白天夜間模式切換
keyflag:='1';--保持按鍵按下標(biāo)志
bai<=NOT?bai;
end?if;
end?if;
end?if;
sp?<=spp;
mode?<=bai;
end?process;
end?rtl;

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

  • 2-231229101401913.doc
    下載

相關(guān)推薦