HDL项目设计自动售货机Word文件下载.docx
- 文档编号:19168997
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:25
- 大小:87.79KB
HDL项目设计自动售货机Word文件下载.docx
《HDL项目设计自动售货机Word文件下载.docx》由会员分享,可在线阅读,更多相关《HDL项目设计自动售货机Word文件下载.docx(25页珍藏版)》请在冰豆网上搜索。
【Keywords】auto-vendingmachineHDLQuartusIIFPGA
系统设计
1.设计目标
(1)用四个发光二极管分别模拟售出价值为5角、1元、1.5元和2元的小商品,购买者可以通过开关选择任意一种标价中的小商品。
(2)灯亮时表示该小商品售出。
(3)用开关分别模拟5角、1元硬币和5元纸币投入,可以用几只发光二极管(或数码管)分别代表找回剩余的硬币。
(4)每次只能售出一种小商品,当所投硬币达到或超过购买者所选面值时,售出货物并找回剩余的硬币,回到初始状态;
(5)当所投硬币值不足面值时,可通过一个复位键退回所投硬币,回到初始状态。
2.设计方案比较
本设计可以通过多种方案来实现,例如采用数字逻辑电路制作,用IC器件连接焊接外围电路实现,这种电路很直观,简单方便。
但应用数字逻辑电路制作,使用的器件较多,连接复杂,体积大,功耗大。
电路中焊点和线路较多会,使成品的稳定度和精度大大降低。
在本设计中,主要采用另一种方案:
使用现场可编程逻辑器件(FPGA)制作,利用VerilogHDL硬件描述语言编程进行控制,然后利用QuartusⅡ平台实现。
采用FPGA实现,它的优点是所有电路集成在一块芯片上,此方案所需的外围电路简单,这样它的体积就减少了,同时还提高了系统的稳定度。
还可以用软件QuartusⅡ5.0进行仿真和调试等。
设计人员可以充分利用HDL硬件描述语言方便的编程,提高开发效率,缩短研发周期,降低研发成本;
而且易于进行功能的扩展,实现方法灵活,调试方便,修改容易。
3.系统框图
选择商品
找零
初始状态
币值不足
币值充足
投币
4.详细方案
根据题目的基本要求,自动售货机的问题实际就是状态转换的问题,不同的状态对应不同的输出。
我们设计的自动售货机有四个状态,即初始状态、选择商品状态、投币状态、找零状态。
初始状态:
各变量都设置为零,按下rst键后,一切恢复到初始状态。
选择商品状态:
分别有价格为0.5元、1元、1.5元和2元的商品,每次选择商品前,设置一个标志位表示选择商品状态。
此自动售货机每一次售货时只能一次选择一种商品,当同时选择两种以上时,选择商品无效,数码管显示清零,重新进行商品选择。
选择商品后,数码管显示所选商品价格。
投币状态:
当选好商品后,开始投币,同样有一标志位表示投币金额。
投币口只接受三种面值的钱币0.5元、1元和5元,可以同时投入多种面值钱币。
完币后,先有一个确认买商品的过程,若投了币但又不购买商品了,完币后,先有一个确认买商品的过程,若投了币但又不购买商品了,就将全部投币金额退回;
若确认购买商品,则进入下一状态:
找零状态。
找零状态:
投完币,并确认购买商品后,进入找零状态。
首先要将所投的金额与所选商品的价格做比较,若所投金额小于商品价格,则退回所投钱币;
若大于等于商品价格,则两者做差,得到需要找零的钱。
实际过程中,我们将此问题分为两部分来实现:
输入部分和输出部分。
输入部分:
包括复位信号、选择商品信号和投币信号。
四种小商品的选择可以分别用四个输入端代替,三种币值可以分别用三个输入端表示。
时钟信号clk为每个时钟的上升沿触发系统的状态转换;
复位信号为上升沿触发,按下后自动回复初始状态;
选择信号为4个按键,表示4种不同价值的小商品,高电平有效;
投币信号为3个按键,表示3种币值,高电平有效;
确定信号为选择投币后按确定键才能判断输出。
输出部分:
包括币值显示信号、货物信号及找零信号。
其中,用相应的指示灯表示所选货物、投币币值,用数码管显示找零信号。
5.程序
moduleseller(b1,b2,b3,pri_5,pri_10,pri_15,pri_20,clk,rst,out1,out2,goods,money);
inputb1,b2,b3;
inputpri_5,pri_10,pri_15,pri_20;
inputrst;
inputclk;
outputout1,out2;
outputgoods;
outputmoney;
reg[0:
2]money;
3]goods;
6]out1;
6]out2;
always@(clk)
if(rst)
begin
money=3'
b000;
out1=7'
b0111111;
out2=7'
goods=4'
b0000;
end
else
if(b1==1&
&
b2==0&
b3==0)
b001;
if(pri_5==1)
b0001;
b1101101;
if(b1==0&
b2==1&
b010;
end
if(pri_10==1)
b0010;
b0000110;
b3==1)
b100;
b1100110;
b1111111;
if(pri_15==1)
b1001111;
b0100;
if(pri_20==1)
b1000;
b011;
b3==1)
b101;
b110;
b1111101;
b111;
endmodule
moduleseller(clk,rst,price,yes,money,goods,led_warn,bizhi,led);
inputclk,rst,yes;
input[2:
0]money;
input[3:
0]goods;
output[3:
0]led;
outputled_warn;
output[11:
0]bizhi;
0]price;
regclk_500Hz;
reg[3:
regled_warn;
reg[11:
reg[31:
0]counter;
reg[9:
0]inprice,price_all;
reg[1:
0]flag=2'
b00;
parameterCOUNT1=25'
d10000;
always@(posedgeclk)
if(counter==0)
counter<
=COUNT1;
clk_500Hz<
=~clk_500Hz;
=counter-1;
always@(negedgerstorposedgeclk)
if(!
rst)
led=4'
price_all=0;
led_warn=0;
price=0;
case(money)
3'
b001:
beginprice_all=5;
end
b010:
beginprice_all=10;
b100:
beginprice_all=50;
b011:
beginprice_all=15;
b101:
beginprice_all=55;
b110:
beginprice_all=60;
b111:
beginprice_all=65;
default:
beginprice_all=0;
endcase
case(goods)
4'
b0001:
beginprice=5;
b0010:
beginprice=10;
b0100:
beginprice=15;
b1000:
beginprice=20;
beginprice=0;
if(yes==1)
if(price_all<
inprice)
led_warn=1;
begin
price_all=price_all-inprice;
case(price)
5:
beginled=4'
10:
beginled=4'
15:
20:
endcase
always@(posedgeclk_500Hz)
begin
case(flag)
2'
b00:
bizhi<
={4'
b1110,led7(price_all%10),1'
b1};
price<
b1110,led7(price%10),1'
flag=2'
b01;
b01:
b1101,led7(price_all/10),1'
b0};
b1101,led7(price/10),1'
function[6:
0]led7;
0]input;
case(input)
0:
led7=~7'
b111_1110;
1:
b011_0000;
2:
b110_1101;
3:
b111_1001;
4:
b011_0011;
5:
b101_1011;
6:
b101_1111;
7:
b111_0000;
8:
b111_1111;
9:
b111_0011;
default:
endfunction
结果与讨论
1.调试步骤
(1)运行Quart
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- HDL 项目 设计 自动 售货