名称:基于FPGA的苏打汽水自动售货机设计Verilog代码VIVADO仿真
软件:VIVADO
语言:Verilog
代码功能:
苏打汽水自动售货机。它们的价格为25美分。机器接收5美分、10美分和25美分硬币。当投入足够的硬币时,苏打汽水自动售货机就会分配汽水和找零钱。
为这个苏打汽水自动售货机设计一个有限状态机控制器。有限状态机的输入是 Nickel(5美分)、Dime(10美分)和 Quarter(25美分),表示硬币已经投入机器。
假设在一个周期投一个硬币。输出是 Dispense、 Retumdime、 Returntwodime。
当有限状态机达到25美分时,它将给出Dispense和相应的 Return输出,需要给出合适的找零。接着它准备开始接收硬币以便售卖下一瓶苏打汽水。
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
演示视频:
设计文档:
1. 工程文件
2. 程序文件
3. 程序编译
4. Testbench
5. 仿真图
部分代码展示:
//苏打水自动售货机,价钱25 module?autu_sell( input?clk,//时钟 input?Nickel,//5美分 input?Dime,//10美分 input?Quartue,//25美分 output?reg?Dispense,//出货 output?reg?ReturnNickel,//找零5美分 output?reg?ReturnDime,//找零10美分 output?reg?ReturnTwoDime//找零20美分 ); reg?[2:0]?state=3'd0; parameter?s_idle=3'd0; parameter?s_add_5=3'd1; parameter?s_add_10=3'd2; parameter?s_add_25=3'd3; parameter?s_charge=3'd4; parameter?s_Dispense=3'd5; reg?[5:0]?in_money=0;//总投币金额 always@(posedge?clk) case(state) s_idle: if(in_money>=25)//投币大于等于25 state<=s_charge;//计算找零 else?if(Nickel)//5美分 state<=s_add_5; else?if(Dime)//10美分 state<=s_add_10; else?if(Quartue)//25美分 state<=s_add_25; else state<=s_idle; s_add_5://+5美分 state<=s_idle; s_add_10://+10美分 state<=s_idle; s_add_25://+25美分 state<=s_idle; s_charge://计算找零 state<=s_Dispense; s_Dispense://出货 state<=s_idle; default:; endcase //计算总输入金额 always@(posedge?clk) case(state) s_add_5://+5美分 in_money<=in_money+5; s_add_10://+10美分 in_money<=in_money+10; s_add_25://+25美分 in_money<=in_money+25; s_Dispense: ????in_money<=0; default:; endcase
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=836
506