名稱:售貨機基于ego1開發(fā)板的自動飲料機verilog代碼vivado軟件(代碼在文末下載)
軟件:VIVADO
語言:Verilog
代碼功能:
設計一個自動飲料機邏輯電路,它的投幣口只能投入一枚五角或一元硬幣;
投入一元五角硬幣后機器自動給出一杯飲料,投入兩元硬幣后再給出飲料的同時找回一枚五角硬幣;
數碼管顯示投幣金額、商品單價、找零金額;
出貨時通過led燈指示。
FPGA代碼Verilog/VHDL代碼資源下載:www.hdlcode.com
本代碼已在ego1開發(fā)板驗證,開發(fā)板如下,其他開發(fā)板可以修改管腳適配:
演示視頻:
設計文檔:
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,//商品價錢 output?[7:0]?total_refund_money_out//找零金額 ); parameter?state_0=4'd0;//選擇商品 parameter?state_1=4'd1;//投錢 parameter?state_2=4'd2;//確認購買 parameter?state_4=4'd4;//等待 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)機,實現各個狀態(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://初始狀態(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://確認購買 state?<=state_4; state_4://等待 state<=state_5; state_5://結束 state<=state_5; default:state<=state_0; endcase reg?[7:0]?univalence=8'd0;//單價 reg?outgo_done=0; always@(posedge?clk_in) begin case?(state) state_0:?//商品選擇 begin ????univalence<=8'd15;//單價一元五角 total_need_money<=univalence;//單價 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:?//計算找零金額 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
點擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=306
閱讀全文