名稱:出租車計(jì)價(jià)設(shè)計(jì)VHDL代碼AX301開發(fā)板Quartus
軟件:Quartus
語言:VHDL
代碼功能:
1.?實(shí)現(xiàn)計(jì)費(fèi)功能,計(jì)費(fèi)標(biāo)準(zhǔn)為:按行駛里程計(jì)費(fèi),起步價(jià)為7元,并在車行3Km后按2元/Km計(jì)費(fèi),當(dāng)計(jì)費(fèi)器達(dá)到或超過20元時(shí),每公里加收50%的車費(fèi),車停止不計(jì)費(fèi)。
2.?現(xiàn)場模擬功能:能模擬汽車起動、停止、暫停以及加速等狀態(tài)。
3.?用BCD碼將車費(fèi)和路程顯示出來。
FPGA代碼Verilog/VHDL代碼資源下載:www.hdlcode.com
本代碼已在AX301開發(fā)板驗(yàn)證,開發(fā)板如下,其他開發(fā)板可以修改管腳適配:
演示視頻:
設(shè)計(jì)文檔:
1. 工程文件
2. 程序文件
3. 編譯
4. RTL圖
5. Testbench
6. 仿真圖
部分代碼展示:
LIBRARY?ieee; ???USE?ieee.std_logic_1164.all; ENTITY?taxi_fee?IS ???PORT?( ??????clk????????:?IN?STD_LOGIC;--50MHz基準(zhǔn)頻率CLOCK0 ??????reset??????:?IN?STD_LOGIC;--復(fù)位信號,低有效? ??????stop???????:?IN?STD_LOGIC;--本次行程結(jié)束,停止計(jì)費(fèi) ??????start??????:?IN?STD_LOGIC;--啟動信號,行程開始 wait_key???:?IN?STD_LOGIC;--停車等待信號? ??????bit_select?????:?OUT?STD_LOGIC_VECTOR(5?DOWNTO?0);--數(shù)碼管位選 ??????seg_select?????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0)--數(shù)碼管段選 ???); END?taxi_fee; ARCHITECTURE?trans?OF?taxi_fee?IS --模塊例化 ???COMPONENT?display?IS ??????PORT?( ?????????clk????????:?IN?STD_LOGIC; ?????????reset??????:?IN?STD_LOGIC; ?????????totel_money?:?IN?STD_LOGIC_VECTOR(15?DOWNTO?0); ?????????mileage????:?IN?STD_LOGIC_VECTOR(7?DOWNTO?0); ?????????Kmmoney_L??:?OUT?STD_LOGIC_VECTOR(3?DOWNTO?0); ?????????Kmmoney_M??:?OUT?STD_LOGIC_VECTOR(3?DOWNTO?0); ?????????Kmmoney_H??:?OUT?STD_LOGIC_VECTOR(3?DOWNTO?0); ?????????Kmcount_H??:?OUT?STD_LOGIC_VECTOR(3?DOWNTO?0); ?????????Kmcount_L??:?OUT?STD_LOGIC_VECTOR(3?DOWNTO?0) ??????); ???END?COMPONENT; --數(shù)碼管顯示模塊 COMPONENT?segment_ctrl?IS ???PORT?( ??????clk????????????:?IN?STD_LOGIC;--時(shí)鐘 ?????? ??????Kmmoney_L????:?IN?STD_LOGIC_VECTOR(3?DOWNTO?0);----金額十分位,合計(jì)費(fèi)用?HML=xxx?(BCD碼顯示) ??????Kmmoney_M????:?IN?STD_LOGIC_VECTOR(3?DOWNTO?0);--金額個(gè)位 ??????Kmmoney_H????:?IN?STD_LOGIC_VECTOR(3?DOWNTO?0);--金額十位 ??????--總路程,里程范圍為HL=0~99(BCD碼顯示) ??????Kmcount_H????:?IN?STD_LOGIC_VECTOR(3?DOWNTO?0);--里程十位 ??????Kmcount_L????:?IN?STD_LOGIC_VECTOR(3?DOWNTO?0);--里程個(gè)位 ?????? ??????bit_select?????:?OUT?STD_LOGIC_VECTOR(5?DOWNTO?0);--數(shù)碼管位選 ??????seg_select?????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0)--數(shù)碼管段選 ???); END?COMPONENT; --模塊例化??? ???COMPONENT?speed_pulse?IS ??????PORT?( ?????????clk????????:?IN?STD_LOGIC; ?????????reset??????:?IN?STD_LOGIC; ?????????one_kilometre?:?OUT?STD_LOGIC ??????); ???END?COMPONENT; --模塊例化 COMPONENT?taxi_state?IS ???PORT?( ??????clk??????????????:?IN?STD_LOGIC; ??????reset????????????:?IN?STD_LOGIC; ?????? ??????stop?????????????:?IN?STD_LOGIC; ??????start????????????:?IN?STD_LOGIC; ??????wait_key???:?IN?STD_LOGIC;--停車等待信號? ??????one_kilometre????:?IN?STD_LOGIC; ??????mileage_out??????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0); ??????totel_money_out??:?OUT?STD_LOGIC_VECTOR(15?DOWNTO?0) ???); ???END?COMPONENT; ??? --信號定義 ???SIGNAL?one_kilometre???:?STD_LOGIC; ???SIGNAL?totel_money?????:?STD_LOGIC_VECTOR(15?DOWNTO?0); ???SIGNAL?mileage?????????:?STD_LOGIC_VECTOR(7?DOWNTO?0); ???SIGNAL?Kmmoney_L??:?STD_LOGIC_VECTOR(3?DOWNTO?0);--合計(jì)費(fèi)用?HML=xxx?(BCD碼顯示) ???SIGNAL?Kmmoney_M??:?STD_LOGIC_VECTOR(3?DOWNTO?0);--合計(jì)費(fèi)用?HML=xxx?(BCD碼顯示) ???SIGNAL?Kmmoney_H??:?STD_LOGIC_VECTOR(3?DOWNTO?0);--合計(jì)費(fèi)用?HML=xxx?(BCD碼顯示) ???SIGNAL?Kmcount_H??:?STD_LOGIC_VECTOR(3?DOWNTO?0);--總路程,里程范圍為HL=0~99(BCD碼顯示) ???SIGNAL?Kmcount_L??:?STD_LOGIC_VECTOR(3?DOWNTO?0);--總路程,里程范圍為HL=0~99(BCD碼顯示) BEGIN ???--速度脈沖產(chǎn)生模塊 ???U_speed_pulse?:?speed_pulse ??????PORT?MAP?( ?????????clk?????????????=>?clk,--標(biāo)準(zhǔn)時(shí)鐘 ?????????reset???????????=>?reset,--復(fù)位信號,低有效? ?????????one_kilometre???=>?one_kilometre--1公里產(chǎn)生一次脈沖 ??????); ??? ??? ???--計(jì)費(fèi)模塊 ???U_taxi_state?:?taxi_state ??????PORT?MAP?( ?????????clk??????????????=>?clk,--標(biāo)準(zhǔn)時(shí)鐘 ?????????reset????????????=>?reset,--復(fù)位信號,低有效? ?????????stop?????????????=>?stop,--本次行程結(jié)束,停止計(jì)費(fèi),高有效 ?????????start????????????=>?start,--啟動信號,行程開始,高有效? ?????????wait_key?????????=>?wait_key,--停車等待信號? ?????????one_kilometre????=>?one_kilometre,--1公里產(chǎn)生一次脈沖 ?????????mileage_out??????=>?mileage, ?????????totel_money_out??=>?totel_money--合計(jì)費(fèi)用 ??????); ??? ??? ???----BCD碼轉(zhuǎn)換模塊 ???U_display?:?display ??????PORT?MAP?( ?????????clk??????????=>?clk,--標(biāo)準(zhǔn)時(shí)鐘 ?????????reset????????=>?reset,--復(fù)位信號,低有效? ?????????totel_money??=>?totel_money,--費(fèi)用 ?????????mileage??????=>?mileage,--里程 ?????????Kmmoney_L????=>?Kmmoney_L,--合計(jì)費(fèi)用?HML=xxx?(BCD碼顯示) ?????????Kmmoney_M????=>?Kmmoney_M, ?????????Kmmoney_H????=>?Kmmoney_H, ????????? ?????????Kmcount_H????=>?Kmcount_H,--總路程,里程范圍為HL=0~99(BCD碼顯示) ?????????Kmcount_L????=>?Kmcount_L ??????); ??? --數(shù)碼管顯示模塊 U_segment_ctrl:?segment_ctrl ???PORT?MAP( ??????clk??????????=>?clk,--時(shí)鐘 ?????? ??????Kmmoney_L????=>?Kmmoney_L,----金額十分位,合計(jì)費(fèi)用?HML=xxx?(BCD碼顯示) ??????Kmmoney_M????=>?Kmmoney_M,--金額個(gè)位 ??????Kmmoney_H????=>?Kmmoney_H,--金額十位 ??????--總路程,里程范圍為HL=0~99(BCD碼顯示) ??????Kmcount_H????=>?Kmcount_H,--里程十位 ??????Kmcount_L????=>?Kmcount_L,--里程個(gè)位 ?????? ??????bit_select??=>?bit_select,--數(shù)碼管位選 ??????seg_select??=>?seg_select--數(shù)碼管段選 ???); END?trans;
點(diǎn)擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=331