名稱:售貨機(jī)基于ego1開發(fā)板的自動(dòng)飲料機(jī)verilog代碼vivado軟件(代碼在文末下載)
軟件:VIVADO
語言:Verilog
代碼功能:
設(shè)計(jì)一個(gè)自動(dòng)飲料機(jī)邏輯電路,它的投幣口只能投入一枚五角或一元硬幣;
投入一元五角硬幣后機(jī)器自動(dòng)給出一杯飲料,投入兩元硬幣后再給出飲料的同時(shí)找回一枚五角硬幣;
數(shù)碼管顯示投幣金額、商品單價(jià)、找零金額;
出貨時(shí)通過led燈指示。
FPGA代碼Verilog/VHDL代碼資源下載:www.hdlcode.com
本代碼已在ego1開發(fā)板驗(yàn)證,開發(fā)板如下,其他開發(fā)板可以修改管腳適配:
演示視頻:
設(shè)計(jì)文檔:
1. 工程文件
2. 程序文件
3. 程序編譯
4. RTL圖
5. 管腳分配
6. Testbench
7. 仿真圖
整體仿真圖
按鍵消抖模塊
控制模塊
顯示模塊
部分代碼展示:
//售貨狀態(tài)控制模塊 module?state_control( input?clk_in, input?rst,//高電平有效 input?throw_into_10_down_out,//1.0元 input?throw_into_05_down_out,//0.5元 output??outgo_done_15,//出貨指示燈 output?[7:0]?total_throw_inmoney_out,//投入總錢幣 output?[7:0]?total_need_money_out,//商品價(jià)錢 output?[7:0]?total_refund_money_out//找零金額 ); parameter?state_0=4'd0;//選擇商品 parameter?state_1=4'd1;//投錢 parameter?state_2=4'd2;//確認(rèn)購(gòu)買 parameter?state_4=4'd4;//等待 parameter?state_5=4'd9;//結(jié)束 reg?[3:0]?state=4'd0; reg?[7:0]?total_throw_inmoney=8'd0;//投入總錢幣 reg?[7:0]?total_need_money=8'd0;//選中商品價(jià)錢 reg?[7:0]?total_refund_money=8'd0;//找零金額 reg?[7:0]?accumulated_money=8'd0;//累計(jì)賣貨額 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)機(jī),實(shí)現(xiàn)各個(gè)狀態(tài)的轉(zhuǎn)換////////////////////////////////////////// reg?wait_second_time=1'd0; always@(posedge?clk_in?or?posedge?rst) if(rst) state<=state_0; else case(state) state_0://初始狀態(tài) state<=state_1; state_1://投錢 begin if(total_throw_inmoney>=total_need_money)//投幣足夠 state<=state_2;//找零 else state<=state_1;//繼續(xù)投錢 end state_2://確認(rèn)購(gòu)買 state?<=state_4; state_4://等待 state<=state_5; state_5://結(jié)束 state<=state_5; default:state<=state_0; endcase reg?[7:0]?univalence=8'd0;//單價(jià) reg?outgo_done=0; always@(posedge?clk_in) begin case?(state) state_0:?//商品選擇 begin ????univalence<=8'd15;//單價(jià)一元五角 total_need_money<=univalence;//單價(jià) total_throw_inmoney<=8'd0; total_refund_money<=8'd0; outgo_done<=1'd0; end state_1:???????????????///////////////////////////////////////////////////投幣輸入//////////////////////////////// begin if(throw_into_05_down_out?==1'd1)//投入0.5元 total_throw_inmoney<=total_throw_inmoney+8'd5; else?if(throw_into_10_down_out?==1'd1)//投入1.0元 total_throw_inmoney<=total_throw_inmoney+8'd10; else total_throw_inmoney<=total_throw_inmoney; total_need_money<=total_need_money; total_refund_money<=total_refund_money; outgo_done<=1'd0; end state_2:?//計(jì)算找零金額 begin if(total_throw_inmoney>total_need_money)?//如果投入大于所需 begin total_refund_money<=total_throw_inmoney-total_need_money;//找零 end else?if(total_throw_inmoney==total_need_money)//如果投入等于所需 begin total_refund_money<=8'd0; end else total_refund_money<=total_throw_inmoney;//退幣 total_need_money<=total_need_money; total_throw_inmoney<=total_throw_inmoney; outgo_done<=1'd0;// end state_4,state_5: begin total_need_money<=total_need_money; total_throw_inmoney<=total_throw_inmoney; total_refund_money<=total_refund_money; outgo_done<=1'd1; end
點(diǎn)擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=306