EDA课程设计报告
自动售饮料机的设计
院 系: 专 业: 学 号: 姓 名: 指导教师:
信息工程学院
第1页
目 录
一 、课程设计目的········································3 二、课程设计题目描述及要求·································3 三、课程设计报告内容·······································3 四、设计总结和心得体会·····································8
第2页
自动售饮料机的设计 一、课程设计目的:
通过这次课程设计对自己以前学过的知识加以巩固,再次熟悉EDA设计软件QuartusII的使用方法,掌握EDA的设计流程,更加熟练进行综合、仿真、调试、分配管脚、下载等操作,并再次基础上初步学会如何设计一个工程,与实际生活结合起来,既锻炼自己的动手能力,又锻炼了自己的思维能力,为以后进行工程实际问题的研究打下设计基础。 二、课程设计题目描述及要求:
自动售饮料机的题目描术及功能要求:
(1)、该系统能完成货物信息存储,进程控制,硬币处理,余额计算,
显示等功能。
(2)、该系统可以管理四种货物,每种的数量和单价在初始化时输入,
存储器中存储。用户可以用硬币进行购物,按键进行选择。 (3)、系统根据用户输入的货币,判断钱币是否够,钱币足够则根据顾
客的要求自动售货,钱币不够则给出提示并退出。 (4)、系统自动的计算出应找钱币余额、库存数量并显示。
三、课程设计报告内容: 3.1、设计原理及方案论证:
本次课程设计中自动售饮料机存储四种饮料,价钱分别为2元、2.5元、3元、3.5元,每种饮料存储9瓶。该售货机有复位和选择功能,通过reset键复位,number键确定购买数量,sel键选择饮料,coin1,coin05键进行投币一元和五角,按get键进行购买,并且还能用数码管显示所购买饮料的单价及其剩余数量,显示投币总数及购买数量,并能找钱。通过程序编写,综合仿真测试,对设计方案进行了论证。
3.2、系统设计描述: (1)程序代码: module
sell(clk,reset,sel,coin05,coin1,get,item,act05,act1,TOT1,TOT2,PRE1,PRE2,NUM,number,SYS);
第3页
parameter p1=4'b0100,p2=4'b0101,p3=4'b0110,p4=4'b0111;// 设置四种饮料价格 input clk,reset,sel,coin05,coin1,get; input [3:0]number; output item,act05;
output [3:0]act1,NUM,TOT1,PRE1,PRE2,TOT2,SYS; reg item,act05; reg c; reg [2:0]Q;
reg [3:0]TOT2,PRE2,NU1,NU2,NU3,NU4,SYS; reg [3:0]a,p,act1,TOT1,NUM,PRE1; reg [4:0]totle,m,TOT; integer i;
always @ (posedge clk) begin
if(reset)// 高电平进行复位 begin
item=0;act05=0;act1=0;TOT=0;PRE1=0;PRE2=0;NUM=0;totle=0;m=0;NU1=4'b1001;NU2=4'b1001;NU3=4'b1001;NU4=4'b1001; end else begin
if(sel) //四种饮料可以进行循环选择 begin a=number; if(Q>4) Q=0; else if(Q<1) Q=0; Q=Q+1;
if(Q==1) begin p=p1;SYS=NU1; end if(Q==2) begin p=p2;SYS=NU2; end if(Q==3) begin p=p3;SYS=NU3; end
第4页
if(Q==4) begin p=p4;SYS=NU4; end end totle=0; a=number;
for(i=1;i<=17;i=i+1)// for循环语句计算所购买饮料总价 if(a>=1&sel!=1) begin
totle=totle+p; a=a-1; end
TOT2=TOT[0];//对投币总数及饮料单价译码为五角的个数 TOT1[3:0]=TOT[4:1];//将投币总数的高四位译码为一元的个数 PRE1[2:0]=p[3:1];//对价格进行译码 PRE2=p[0];
if(TOT2==0) TOT2=4'b0000; if(TOT2==1) TOT2=4'b0101;
if(PRE2==0) PRE2=4'b0000;
if(PRE2==1) PRE2=4'b0101; NUM=number; m=0; item=0; act05=0; act1=0;
if(coin05) TOT=TOT+1; if(coin1) TOT=TOT+2; if(get) begin
if(SYS第5页item=0; end else begin
if(TOT>totle) //投钱大于饮料总价则输出饮料并找钱 begin item=1;
m=TOT-totle; 将要找的钱送给一个变量m TOT=0; end
else if(TOT==totle) //投钱等于饮料总价输出饮料不找钱 begin item=1; TOT=0; end else
begin//否则不输出饮料, 找钱 item=0; m=TOT; TOT=0; end end c=m[0];
act1[3:0]=m[4:1]; if(c!=0) act05=1;
else act05=0;//显示每种饮料剩余数量
if(p==p1&item==1) begin NU1=NU1-number;SYS=NU1; end if(p==p2&item==1) begin NU2=NU2-number;SYS=NU2; end if(p==p3&item==1) begin NU3=NU3-number;SYS=NU3; end if(p==p4&item==1) begin NU4=NU4-number;SYS=NU4; end end
第6页
end end endmodule (2)、原理框图:
(3)、仿真波形:
(3)、电路连接图:
第7页
(4):管脚分配:
(5):
第8页
注释:按reset键复位,按sel键一次选择第一种饮料,按number键2次表示够买2瓶,然后按coin键投币五元,按get键进行购买,购买成功后item灯亮表示输出饮料,数码管NUM显示购买数量,SYS显示该饮料剩余数量,act1显示找钱一元,TOT1、TOT2显示投币总数,PRE1,PRE2显示所购买的饮料单价。 3.3、系统设计工作进程:
这次课程设计我和刘远一组,第一周主要进行程序编写修改,综合及波形仿真,经过多次调试修改,最终波形仿真成功。第二周主要分配管脚、编译下载及功能仿真,解决在其中遇到的问题,最后在老师的指导下又增加了一些其他功能,再次改写程序,综合仿真下载完成整个课程设计。这次设计整个过程两人都参与,一起分析并解决问题,并各自独操作了整个过程,每人都学到了很多知识。 3.4、设计和调试过程中出现的问题及解决方法: 课程设计中遇到的问题主要有:
(1)、程序编写错误:由于程序语法错误导致综合不成功,为此多次修改程序直至综合成功;
(2)、波形仿真错误:主要由于程序编写逻辑错误,很多功能都不能仿真出来,例如按get键后,一直找钱、输出饮料,为此我们添加act05=0、act1=0、item=0
第9页
等语句使该问题得到解决;利用for语句循环在一个clk内计算购买饮料的总价。 (3)、功能仿真中也遇到了一些问题,最终通过多次尝试使问题得到了解决。 四、设计总结和心得体会
通过这次课程设计了解到自己有很多知识还没有学会,思维能力有待提高,这次课程设计与实际生活相联系,通过学习进一步了解到一个工程的设计流程。再次熟练了QuartusII软件的使用方法及其综合、波形仿真、管脚分配、编译下载、功能仿真的整个过程,知道了自动售饮料机是如何设计的,为自己以后的学习打下了基础。
第10页