资源描述:
《自动售饮料机课程设计报告》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、EDA与数字系统设计课程设计报告院系:信息工程学院专业:通信工程学号:200912231姓名:梁晓雯指导教师:段美霞、袁胜二013年01月17日20目录1、课程设计目的……………………………………………………12、课程设计题目描述和要求………………………………………13、课程设计报告内容………………………………………………23.1、设计原理、方案论证……………………………………23.2、系统设计详述……………………………………………43.3、系统设计工作进程………………………………………143.4、设计和调试过程中出现的问题及解决方法……………144
2、、设计总结和心得体会……………………………………………145、参考文献…………………………………………………………156、附录(源程序)…………………………………………………15201.课程设计目的通过对课程设计任务的完成,使自己进一步理解课堂上所学的理论知识,更好地掌握和熟悉FPGA的开发流程和VerilogHDL语言建模、仿真、综合、下载、配置的方法,并使用EDA6000进行硬件仿真与调试。另外,由于设计过程中涉及到各种器件的使用,所以通过此次课程设计来提高自己综合运用各种技术和知识的能力。2.课程设计题目描述和要求设计一个自动售饮料机,所设计的
3、饮料机仅售一种饮料,饮料价格为2.5元,投币时可使用5角和1元两种硬币,并且机器有找零功能。要求:1)饮料机有两个投币孔,分别投一元和五角两种币值;2)所投币值用两个8断数码管显示;3)具有找零、饮料售出、取饮料的提示功能。3.课程设计报告内容3.1、设计原理、方案论证3.1.1设计原理1)根据题目要求,投币时可能出现0元、0.5元、1元、1.5元、2元、2.5元、3元,共七种情况。所以可以假设五种状态:idle—0元、half—0.5元、one—1元、one_half—1.5元、two—2元。2)各个状态之间的关系可以采用有限状态机(寄存器和组合逻
4、辑构成的时序电路)来表示,如下图1所示:图1“自动售饮料机”各个状态之间的关系203)定义一个中间变量money,表示不同时刻的不同状态,用于各个状态之间的转换。4)在系统复位后,机器开始运转。每一次出售饮料的过程中由money记录其状态,表示购买者已投入钱币数目的变化。在下一次售出前,首先将系统清零。5)“自动售饮料机”描述的基本结构如下所示:always(时钟)系统复位(信号清零)case(money)idle:if(0.5)转half;elseif(1)转one;half:if(0.5)转one;elseif(1)转one_half;one:i
5、f(0.5)转one_half;elseif(1)转two;one_half:if(0.5)转two;elseif(1)售出饮料,转idle;two:if(0.5)售出饮料,转idle;elseif(1)售出饮料,找零,转idle;3.1.2方案论证使用现场可编程逻辑器件(FPGA)制作,利用VerilogHDL硬件描述语言编程进行控制,然后编程实现。编写程序过程中,输入输出分别为:输入信号:clk时钟输入rst系统复位信号wu_jiao代表投入5角硬币yi_yuan代表投入1元硬币输出信号:half_out表示找零信号sell_out表示机器售出了
6、一瓶饮料drink提示投币者取走饮料输入wu_jiao或yi_yuan信号,并在数码管上显示已投币值,直到两个信号20代表的币值超过2.5元时,sell_out和drink信号出现高电平,表示卖出和取饮料信号。如果投入币值为3元,half_out信号出现高电平,表示找零。项目模块框图2如示:图2项目模块框图3.2系统设计详述:系统总框图如图2所示,程序设计思路见设计原理。每一个时钟上升沿到来时,判断是否有yi_yuan或wu_jiao信号,为防止yi_yuan或wu_jiao信号在多个时钟周期有效,特设定两个flag,当yi_yuan或wu_jiao
7、由高变为低时才认为此次投币有效。并计算,使用case语句跳至相应币值。每次投币成功,将yi_yuan或wu_jiao各自的flag清零,以免影响下一次投币。当投入币值超过2.5元,sell_out和drink信号置1,如果投入3元,half_out置1所编完整程序代码如下:modulesell_out(clk,yi_yuan,wu_jiao,rst,drink,half_out,sell_out,led1,led2);parameterzero=0,half=1,one=2,one_half=3,two=4;inputyi_yuan,wu_jiao,
8、rst,clk;outputdrink,half_out,sell_out;output[7:0]led1,