名稱:VIVADO自動售票機售貨機verilog代碼ego1開發(fā)板驗證?(代碼在文末下載)
軟件:VIVADO
語言:Verilog
代碼功能:
自動售票機:
1、自動售票機只出售1角、2角、5角和1元4種車票。
2、只接收1角、5角和1元硬幣,每次只能出售1張車。
3、自動售票機具有累加銷售額的功能。
實驗要求:
出售車票用SW0~3分別表示1角、2角、5角、1元4種 ;
投入硬幣用S1、S2、S3分別表示1角5角和1元
投幣后用開關SW7確認;若投入錢數(shù)不夠,將硬幣退出并報警,D9~D16閃爍,報警3秒
若投幣足夠,送出車票,用4個不同LED輔出D1、D2、D3、D4顯示,若有余額自動找零
所有幣額用兩位BCD碼顯
按鍵和拔碼開關需要做消抖處理。
FPGA代碼Verilog/VHDL代碼資源下載:www.hdlcode.com
本代碼已在ego1開發(fā)板驗證,開發(fā)板如下,其他開發(fā)板可以修改管腳適配:
設計文檔:
1. 工程文件
2. 程序文件
3. 程序編譯
4. RTL圖
5. 管腳分配
6. Testbench
7. 仿真圖
整體仿真圖
按鍵消抖模塊仿真
售票機控制模塊仿真
數(shù)碼管顯示模塊仿真
部分代碼展示:
//售貨狀態(tài)控制模塊 module?state_control( input?clk_in, input?rst,//高電平有效 //按鍵?高電平有效 input?Selection_goods_01,//選商品1,商品分為0.1,0.2,0.5,1.0元 input?Selection_goods_02,//選商品2,商品分為0.1,0.2,0.5,1.0元 input?Selection_goods_05,//選商品5,商品分為0.1,0.2,0.5,1.0元 input?Selection_goods_10,//選商品10,商品分為0.1,0.2,0.5,1.0元 input?throw_into_10_down_out,//1.0元 input?throw_into_05_down_out,//0.5元 input?throw_into_01_down_out,//0.1元 input?confirm_button_out,//確認 output?[7:0]?LED,//閃爍報警(D9~16) output?reg?outgo_done_01,//出貨指示燈1 output?reg?outgo_done_02,//出貨指示燈2 output?reg?outgo_done_05,//出貨指示燈5 output?reg?outgo_done_10,//出貨指示燈10 output?[7:0]?total_accumulated_money,//累計賣貨額 output?[7:0]?total_throw_inmoney_out,//投入總錢幣 output?[7:0]?total_need_money_out,//選中商品價錢 output?[7:0]?total_refund_money_out//找零金額 ); parameter?state_0=4'd0;//選擇商品 parameter?state_1=4'd1;//投錢 parameter?state_2=4'd2;//確認購買 parameter?state_3=4'd3;//投入不足 parameter?state_4=4'd4;//等待時間3秒 parameter?state_5=4'd9;//結束 reg?[3:0]?state=4'd0; reg?[7:0]?total_throw_inmoney=8'd0;//投入總錢幣 reg?[7:0]?total_need_money=8'd0;//選中商品價錢 reg?[7:0]?total_refund_money=8'd0;//找零金額 reg?[7:0]?accumulated_money=8'd0;//累計賣貨額 assign?total_throw_inmoney_out=total_throw_inmoney; assign?total_need_money_out=total_need_money; assign?total_refund_money_out=total_refund_money; assign?total_accumulated_money=accumulated_money; ///////控制模塊:狀態(tài)機,實現(xiàn)各個狀態(tài)的轉換////////////////////////////////////////// reg?wait_second_time=1'd0; always@(posedge?clk_in?or?posedge?rst) if(rst) state<=state_0; else case(state) state_0://選擇商品 begin if(confirm_button_out==1) begin state<=state_1; end? else?begin? state<=state_0; end end state_1://投錢 begin if(confirm_button_out==1)//按確認鍵 state<=state_2;//找零 else state<=state_1;//繼續(xù)投錢 end state_2://確認購買 begin if(total_throw_inmoney<total_need_money)//投入不足 state<=state_3;//蜂鳴器提示3秒 else? begin????//如果投入大于等于所需錢數(shù) state?<=state_4; end end state_3://投入不足,蜂鳴器提示 if(wait_second_time==1'd1) begin state<=state_0;//回到初始狀態(tài) end else?begin state<=state_3; end state_4://等待時間3秒 if(wait_second_time==1'd1)??//保持3s進入下一個狀態(tài) state<=state_5; else state<=state_4; state_5://結束 state<=state_0; default:state<=state_0; endcase
點擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=304