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