名稱:出租車計(jì)費(fèi)器Basys2開(kāi)發(fā)板verilog出租車計(jì)價(jià)器出租車打表器(代碼在文末下載)
軟件:ISE
語(yǔ)言:Verilog
代碼功能:
設(shè)計(jì)一個(gè)出租車計(jì)費(fèi)器,能在 Basys2開(kāi)發(fā)板上實(shí)際運(yùn)行。
1、用開(kāi)發(fā)板上的2個(gè)按鍵輸入路程和計(jì)時(shí)信號(hào),其中一個(gè)按鍵,每按一下,代表輸入一個(gè)0.5公里的脈沖,另外一個(gè)按鍵,每按一次,代表超時(shí)后的1分鐘。
2、計(jì)費(fèi)規(guī)則為起步價(jià)8元,2.5公里內(nèi)免費(fèi),每公里1.6元,每分鐘等待0.4元。(計(jì)費(fèi)方式可以自行修改)
3、路程、等待時(shí)間和費(fèi)用都要用開(kāi)發(fā)板上的數(shù)碼管顯示,數(shù)碼管數(shù)目肯定不足,可以用開(kāi)發(fā)板上的開(kāi)關(guān)來(lái)切換顯示,這一部分也需要自己編寫(xiě)代碼實(shí)現(xiàn)。
本代碼的計(jì)費(fèi)方式可以自行修改。修改以下代碼即可:
//定義計(jì)費(fèi)方式,可修改 parameter?start_price=15'd80;//起步價(jià)8.0元 parameter?start_kilometres=8'd25;//2.5公里內(nèi)起步價(jià) parameter?kilometres_price=15'd8;//0.8元每0.5公里 parameter?time_price=15'd4;//0.4元每分鐘
FPGA代碼Verilog/VHDL代碼資源下載:www.hdlcode.com
本代碼已在Basys2開(kāi)發(fā)板驗(yàn)證,開(kāi)發(fā)板如下,其他開(kāi)發(fā)板可以修改管腳適配:
演示視頻:
設(shè)計(jì)文檔:
1. 工程文件
2. 程序文件
3. 管腳分配
4. 程序編譯
5. RTL圖
6. Testbench
7. 仿真圖
整體仿真圖
按鍵模塊
控制模塊
顯示模塊
部分代碼展示:
//控制模塊 module?taxi_state( input?clk,//標(biāo)準(zhǔn)時(shí)鐘 input?reset,//復(fù)位信號(hào),高有效? input?stop,//本次行程結(jié)束,停止計(jì)費(fèi),低有效? input?start,//啟動(dòng)信號(hào),行程開(kāi)始,低有效? input?one_kilometre,//0.5公里產(chǎn)生一次 input?minute_en,//1分鐘產(chǎn)生一次 output?[7:0]?minute_out,//分鐘 output?[7:0]?mileage_out,//里程 output?reg?[15:0]?totel_money_out//合計(jì)費(fèi)用 ); parameter?s_idle=3'd0; parameter?s_starting_price=3'd1;//起步價(jià) parameter?s_mileage_price=3'd2;//按里程計(jì)費(fèi) parameter?s_stop=3'd3; parameter?s_begin=3'd4; reg?[2:0]?state=3'd0; reg?[15:0]?totel_money=16'd0; reg?[7:0]?mileage=8'd0;//里程 assign?mileage_out=mileage; //里程控制 always@(posedge?clk) if(reset==1) mileage<=8'd0; else if(state==s_starting_price?||?state==s_mileage_price?) if(one_kilometre==1) mileage<=mileage+8'd5;//0.5公里里程加0.5 else mileage<=mileage; else?if(stop==1)? mileage<=8'd0; else mileage<=mileage; //定義計(jì)費(fèi)方式,可修改 parameter?start_price=15'd80;//起步價(jià)8.0元 parameter?start_kilometres=8'd25;//2.5公里內(nèi)起步價(jià) parameter?kilometres_price=15'd8;//0.8元每0.5公里 parameter?time_price=15'd4;//0.4元每分鐘 always@(posedge?clk) if(reset==1)begin state<=s_idle;//reset totel_money<=16'd0; totel_money_out<=16'd0; end else if(stop==1)?begin//停止 state<=s_stop; totel_money<=16'd0; totel_money_out<=totel_money;//輸出合計(jì)費(fèi)用 end else?begin totel_money_out<=totel_money;//輸出合計(jì)費(fèi)用 case(state) s_idle:begin//空閑狀態(tài) ????totel_money<=totel_money; if(start==1)//啟動(dòng) state<=s_begin; else state<=s_idle; end s_begin:begin state<=s_starting_price; totel_money<=start_price;//起步價(jià) end s_starting_price:begin//起步價(jià)狀態(tài) if(minute_en==1)//1分鐘 totel_money<=totel_money+time_price;//0.4元每分鐘 else ; if(mileage>=start_kilometres)//大于start_kilometres公里 state<=s_mileage_price; else state<=s_starting_price; end s_mileage_price:begin//車行駛起步公里后按每公里1.6元計(jì)費(fèi) if(one_kilometre==1) totel_money<=totel_money+kilometres_price;//每公里?1.6元計(jì)費(fèi) else?if(minute_en==1)//1分鐘 totel_money<=totel_money+time_price;//0.4元每分鐘 else ; end s_stop://停止 state<=s_idle; default:state<=s_idle; endcase end reg?[7:0]?minute_cnt=8'd0; //總等待時(shí)間計(jì)數(shù) always@(posedge?clk) if(reset==1) minute_cnt<=8'd0; else?if(state==s_mileage_price?||?state==s_starting_price) if(minute_en==1)//1分鐘 minute_cnt<=minute_cnt+8'd1;//加分鐘 else
點(diǎn)擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=265