名称:基于FPGA的自动售货机控制系统设计Verilog代码Quartus仿真
软件:Quartus
语言:Verilog
代码功能:
设计完成图中FPGA控制核心电路。在外部提供1MHz时钟及Rest信号前提下实现以下功能:
(1)商品选择设备在本项目中不做设计,有外部设备自行处理。在用户选择商品后,商品编号会自动以4位数据线按照8421BCD方式向FPGA控制核心电路发送。FPGA控制核心电路选择商品编号进行显示。可以假设按照如下表格进行数据仿真处理。
(2)对来自外界投币设备的金额信号进行处理累加及显示,投币设备不需要学生设计。投币设备可投入1元、2元、5元、10元面值货币,每投入一次货币就会自动向FPGA控制核心电路以4位数据线按照8421BCD方式并行发送一次数据。要求FPGA控制核心对金额进行叠加,并实时对累加值进行显示。
(3)FPGA控制核心向显示部分发送7段共阴LED显示字形码。硬件为4位7段共阴LED显示。静态显示控制。前两位显示商品编号、后两位显示投入金额。
(4)FPGA控制核心可以向出货设备发送出货的商品编号,控制出货设备出货。出货完成后,出货设备给FPGA控制核心反馈出货完成信号。
(5)FPGA控制核心可以向找零设备发送出找零金额,控制找零设备找零。找零完成后,找零设备给FPGA控制核心反馈找零完成信号。
(6)可以通过状态显示LED灯(高电平点亮低电平系熄灭)指示售货机状态。分别为待机、选商品、投币、出货、找零。
(7)蜂鸣器(高电平发声,低电平关闭)对相应自定义状态进行提醒。(可选)
(8)系统课题通过Rest手动复位,复位后进入待机状态。
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
演示视频:
设计文档:
1. 工程文件
2. 程序文件
3. 程序编译
4. RTL图
5. Testbench
6. 仿真图
部分代码展示:
//自动售货机 module?auto_sell( input?clk,//1MHz input?reset,//复位 //1-1元;2-8元;3-6元;//4-3元 input?[3:0]?goods_num,//商品编号 input?goods_en,//商品选择信号 //投币设备 input?[3:0]?money_in,//1,2,5,10元 input?money_en,//投币信号 //出货设备 output?[3:0]?goods_out,//出货商品编号 input?goods_end,//出货完成 //找零设备 output??[3:0]?change_out,//找零金额 input?change_end,//找零完成 //状态显示led,高亮 output?idle_led,//待机 output?select_led,//选商品 output?money_led,//投币 output?goods_led,//出货 output?change_led,//找零 output?beep,//蜂鸣器,找零结束,高电平响 //数码管显示 output?[6:0]?HEX0,//商品编号 output?[6:0]?HEX1,//商品编号 output?[6:0]?HEX2,//投入金额 output?[6:0]?HEX3//投入金额 ); wire?[7:0]?total_money_out; //自动售货机控制模块 auto_sell_ctrl?i_auto_sell_ctrl( .?clk(clk),//1MHz .?reset(reset),//复位 //1-1元;2-8元;3-6元;//4-3元 .?goods_num(goods_num),//商品编号 .?goods_en(goods_en),//商品选择信号 //投币设备 .?money_in(money_in),//1,2,5,10元 .?money_en(money_en),//投币信号 //出货设备 .?goods_out(goods_out),//出货商品编号 .?goods_end(goods_end),//出货完成 //找零设备 .?change_out(change_out),//找零金额 .?change_end(change_end),//找零完成 .?total_money_out(total_money_out), //状态显示led,高亮 .?idle_led(idle_led),//待机 .?select_led(select_led),//选商品 .?money_led(money_led),//投币 .?goods_led(goods_led),//出货 .?change_led(change_led),//找零 .?beep(beep)//蜂鸣器,找零结束,高电平响 ); //数码管显示模块 display?i_display( .?clk(clk),//1MHz .?goods_num(goods_num),//商品编号 .?total_money_out(total_money_out),//投币金额 //数码管显示 .?HEX0(HEX0),//商品编号 .?HEX1(HEX1),//商品编号 .?HEX2(HEX2),//投入金额 .?HEX3(HEX3)//投入金额 ); endmodule
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=750
								
								
								
648