HDL课程设计报告.docx
《HDL课程设计报告.docx》由会员分享,可在线阅读,更多相关《HDL课程设计报告.docx(13页珍藏版)》请在冰豆网上搜索。
HDL课程设计报告
河海大学计算机与信息学院(常州)
课程设计报告
题目自动售货机控制电路设计
专业、学号电子信息工程0962610117
授课班号278606
学生姓名马悦
指导教师奚吉
完成时间2011年9月1号
课程设计(报告)任务书
(理工科类)
Ⅰ、课程设计(报告)题目:
自动售货机控制电路设计
Ⅱ、课程设计(论文)工作内容
一、课程设计目标
1、培养综合运用知识和独立开展实践创新的能力;
2、《硬件描述语言》是一门技术性、应用性很强的学科,实验课教学是它的一个极为重要的环节。
不论理论学习还是实际应用,都离不开实验课教学。
如果不在切实认真地抓好学生的实践技能的锻炼上下功夫,单凭课堂理论课学习,势必出现理论与实践脱节、学习与应用脱节的局面。
《HDL项目设计》的目的就是让同学们在理论学习的基础上,通过完成一个涉及时序逻辑、组合逻辑、声光输出的,具有实用性、趣味性的小系统设计,使学生不但能够将课堂上学到的理论知识与实际应用结合起来,而且能够对分析、解决实际的数字电路问题进一步加深认识,为今后能够独立进行某些数字应用系统的开发设计工作打下一定的基础。
二、研究方法及手段应用
1、将任务分成若干模块,查阅相关论文资料,分模块调试和完成任务;
2、通过EDA实验箱进行实际调试,实现软件的功能。
三、课程设计预期效果
1、完成实验环境搭建;
2、
(1)用四个发光二极管分别模拟售出价值为5角、1元、1.5元和2元的小商品,购买者可以通过开关选择任意一种标价中的小商品。
(2)灯亮时表示该小商品售出。
(3)用开关分别模拟5角、1元硬币和5元纸币投入,可以用几只发光二极管(或数码管)分别代表找回剩余的硬币。
(4)每次只能售出一种小商品,当所投硬币达到或超过购买者所选面值时,售出货物并找回剩余的硬币,回到初始状态;
(5)当所投硬币值不足面值时,可通过一个复位键退回所投硬币,回到初始状态。
学生姓名:
潘昊专业年级:
09级电信一班
摘要
VerilogHDL是一种应用广泛的硬件描述语言,可用于从算法级、门级到开关级的多种抽象层次的数字系统设计。
由于这种语言简捷、高效、易学易用、功能强,因此逐渐为众多设计者所接受,广泛流行,尤其在ASIC设计领域处于主流地位。
Verilog硬件描述语言能够用软年语言的方式描述硬件特性,并可用仿真方式完成电路的调试,使得硬件开发周期和成本大大降低,本文介绍了VerilogHDL的特点和应用,并以自动售货机为例,详细说明了其实现过程,并给出了实现代码和仿真波形。
本设计是以现场可编程逻辑器件(FPGA)为核心的自动售货机,利用QuartusⅡ软件编写verilogHDL硬件描述语言程序以实现自动售货功能。
本设计主要以程序为主,硬件方面则使用实验箱,将程序各变量端口与实验箱管脚进行相应的配置,用八个开关分别代表商品价格、所投钱币价格及确认付款找零操作。
当选择好商品并投币后,数码管显示所选商品价格及投入钱币价格;按下确认付款开关,数码管显示应找多少钱,蜂鸣器响,对应商品LED灯亮。
若所投钱币不足所选商品价格,对应警告钱币不足的LED灯亮。
【关键词】自动售货机VerilogHDLFPGAQuartusII
ABSTRACT
VerilogHDLisawidelyusedhardwaredescriptionlanguagethatcanbeusedfromthealgorithmlevel,gate-leveltotheswitch-levelabstractionofavarietyoflevelsofdigitalsystemdesign.Becauseofthislanguageissimple,efficient,easytouse,powerful,somanydesignersgraduallyacceptedwidelypopular,especiallyintheASICdesigninthemainstream.Veriloghardwaredescriptionlanguagetolanguageusedinthemannerdescribedinsofthardwarefeatures,andcancompletethecircuitemulationmodedebugging,makingthehardwaredevelopmentcycleandgreatlyreducethecost,thisarticledescribesthecharacteristicsandapplicationofVerilogHDL,andvendingmachines,forexample,detailstheprocessofitsimplementation,andgivestheimplementationcodeandsimulationwaveforms.
Thisdesignisanauto-vendingmachinebasedonfieldprogrammablelogicdevices(FPGA).WeuseQuartusⅡtowriteprocedureinverilogHDLwhichisalanguagetodescribehardware.Theprocedurewillrealizethefunctionofauto-vendingmachine.
Thisdesignismainlyaboutprocedure.Forthehardware,weuseexperimentalbox.Weallocateallvariablequantitiesintheproceduretothefeetinexperimentalbox.Weuseeightswitchrespectivelyrepresentcommoditypricesandthrowmoneypriceandconfirmpaymentchangeoperation.Whenchoosinggoodcommoditiesandcoin,digitalpipedisplayselectedcommoditypricesandmoneyprice.Whenpressingconfirmpaymentswitch,digitalpipedisplayshouldfindhowmuchmoney,buzzersounded,correspondingcommodityLEDlights.Ifthrowmoneyshortageselectedcommodityprices,correspondingwarningmoneyshortageofLEDlights.
【Keywords】VendingmachineVerilogHDLFPGAQuartusII
第一章系统设计
第一节总体方案
根据题目的基本要求,自动售货机的问题实际上就是状态转换的问题,不同的状态对应不同的输出,具体的来说就是输入不同币值的钱后对应着不同的作用结果。
因此我们将此问题分为两部分来考虑,即输入和输出。
一.输入部分
包括投币信号、饮料选择信号、复位信号。
因为币值考虑5角和1元和5元的情况,因此可以分别用三个输入端代替。
同样对于四种饮料的选择也可用四个输入端代替。
输入变量有:
时钟信号(clk):
每个时钟的上升沿触发系统的状态转换。
复位信号(reset):
上升沿触发,按下后自动回到初始状态。
投币信号:
5角(coin5),1元(coin10),5元(),高电平有效。
货物信号:
纯净水(water),可乐(coke),高电平有效。
撤消操作(cancel):
按下后退币,并自动回到初始状态。
二.输出部分
包括币值显示信号、输出货物信号以及找零信号。
输出变量有:
货物信号(clk):
指示灯显示所选择的货物。
投币信号(reset):
指示灯显示投币的种类,是五角还是一元还是五元。
找零信号:
出币口的控制,对应找零或者是撤消操作后的退币额。
第二节系统框图
第三节程序设计
一.分频模块
parametera=8'd25000;
always@(posedgeclk)
begin
if(counter==0)
begincounter<=a;clk_500Hz<=~clk_500Hz;
end
elsecounter<=counter-1;
end
实验板上所用的芯片主频为50MHZ,所以使用时一般先对其进行分频,本分频模块主要用于将分频后的时钟信号提供给数码管显示模块。
二.按键部分
本次课程设计共使用了八个按键。
前三个按键分别用来表示投入5角、1元和5元,另外通过它们的组合还可以表示1.5元,5.5元,6元和6.5元。
3'b001:
beginprice_sum=5;end
3'b010:
beginprice_sum=10;end
3'b100:
beginprice_sum=50;end
3'b011:
beginprice_sum=15;end
3'b101:
beginprice_sum=55;end
3'b110:
beginprice_sum=60;end
3'b111:
beginprice_sum=65;end
从以上程序不难看出通过三个按键的不同组合可以表示出七中投币组合。
接下来的三个按键则分别用来表示选中价值为5角、1元、1.5元、2元、2.5元和3元的小商品。
程序如下:
3'b001:
beginprice=5;end
3'b010:
beginprice=10;end
3'b100:
beginprice=15;end
3'b011:
beginprice=15;end
3'b101:
beginprice=20;end
3'b110:
beginprice=25;end
3'b111:
beginprice=30;end
按下第七个按键首先会判断所投货币总额是否大于选中商品价格,如果大于等于则可通过数码管显示出应找回的余额,如果小于则发出报警声。
此时按下第八个按键可复位回到初始状态。
三.数码管显示模块
本模块包含动态扫描和译码两个子模块。
动态扫描:
case(flag)
2'b00:
begin
money<={4'b1110,led7(price_sum%10),1'b1};
dis_price<={4'b1110,led7(price%10),1'b1};
flag=2'b01;
end
2'b01:
begin
money<={4'b1101,led7(price_sum/10),1'b0};
dis_price<={4'b1101,led7(price/10),1'b0};
flag=2'b00;
end
money[11:
8]为实验板上左侧四位数码管位选端,money[7:
1]为数码管段选可显示0~9,money[0]表示为数码管dp端。
dis_price[11:
8]为实验板上右侧四位数码管位选端,dis_price[7:
1]为数码管段选可显示0~9,dis_price[0]表示为数码管dp端。
译码:
case(d_in)
0:
led7=~7'b111_1110;
1:
led7=~7'b011_0000;
2:
led7=~7'b110_1101;
3:
led7=~7'b111_1001;
4:
led7=~7'b011_0011;
5:
led7=~7'b101_1011;
6:
led7=~7'b101_1111;
7:
led7=~7'b111_0000;
8:
led7=~7'b111_1111;
9:
led7=~7'b111_0011;
default:
led7=~7'b111_1111;
由于此数码管为七段共阳极数码管,故可写出其0~9的码表。
第二章结果与讨论
第一节实验调试
一、调试步骤
①运行Quartus II软件,新建工程。
②建立文本文件VerilogHDLFile。
在文件中写入程序。
保存,编译。
③分配管脚。
保存,编译。
④将生成的.sof文件写入FPGA试验箱中。
⑤根据要求选择几种买东西的可能情况,在实验箱上实验,观察记录结果。
二、实验现象
⑴选择买0.5元的商品,投5元的金额,调试现象如下:
①选择0.5元商品数码管显示0.5,再选择一种商品,数码管显示清零,重新进行商品选择。
②按下5元投币键,对应数码管显示5.0。
③按下确认购买开关,找零时,对应数码管显示4.5,蜂鸣器响,对应0.5元商品的LED灯亮。
⑵选择1.5元的商品,投1元的金额,调试现象如下:
①选择1.5元的商品,对应数码管显示1.5。
②按下1元的投币键,对应数码管显示1。
③找零显示1元,退回所投的钱,表示警告的LED灯亮(交易不成功)
第二节结果与分析
调试过程中出现的问题及原因:
① 数码管显示不正确。
管脚配置不正确导致数码管显示异常。
② 重新分配管脚后,仍为先前程序的操作结果。
重新配置管脚后,未运行程序,使得烧写进去的仍为原先的程序。
心得体会
经过为期一礼拜的HDL的课程设计,时间虽然短暂,可是收获还是很多的,再一次使用QuartusII软件,加深了对软件的理解,和使用熟练程度。
系统而又详细的复习和运用了所学的Verilog语言,加深了我对作为一个编程者所应有素质和基础知识的重要性,还有程序的规范性对于程序的重要性,这些在平时我们忽略的问题,其实有时候关乎着我们编程的成功。
VHDL语言有限状态机设计控制电路,可大大降低设计难度和时间,提高设计效率和可靠性,利用语言的灵活性及功能强大的EDA工具,可以轻松完成硬件的功能扩充与升级,还可以实现更复杂的数字系统,整个设计过程相对于传统的设计方法,有较大的突破。
VHDL语言作为现代数字系统的重要设计工具,以其灵活、简洁的设计风格在电路设计中发挥着越来越重要的作用。
通过本次课程设计,我对VerilogHDL语言有了更深刻的了解,能够比较灵活地运用它来实现我们所想要要其实现的功能。
在实验中,我也遇到了很多挫折,其中比较突出的问题便是:
1.无法把程序写进实验箱;2.由于自动售货机需要的连接的管脚较多,一会小心便会弄错,导致数码管显示不正常,LED的灯不能按正确要求亮等。
不过我都和同伴一一克服了,大家齐心协力解决了问题,使我明白了和他人共同合作的重要性,对待事情要认真,争取一次性的成功,如果开始不小心弄错,很难查出错误,而且耗费很多时间。
在以后的道路上我们也必须深刻认识到团队合作的精神,投入今后的发展之中,专心致志的做事。
成功就是在不断摸索着前进中实现的,遇到问题我们不能灰心、烦躁,甚至放弃,而要静下心来仔细思考,分部检查,找出最终的原因进行改正,这样才会有进步,才会一步步向自己的目标靠近,才会取得自己所要追求的成功。
参考文献
[1] 夏宇闻 编著《Verilog数字系统教程》北京航空航天出版社
[2] 梁瑞宇编写《FPGA设计实验指导书(VerilogHDL)》
[3] 赵淑范王宪伟《电子技术实验与课程设计》
[4] 谷歌网站
附录
一、管脚分配:
I/O
管脚号
I/O
管脚号
btn_mon[0]
Pin_64
clk
Pin_28
btn_mon[1]
Pin_65
dis_price[0]
Pin_161
btn_mon[2]
Pin_66
dis_price[1]
Pin_143
btn_sell[0]
Pin_67
dis_price[2]
Pin_156
btn_sell[1]
Pin_68
dis_price[3]
Pin_159
btn_sell[2]
Pin_73
dis_price[4]
Pin_160
btn_sell[3]
Pin_74
dis_price[5]
Pin_162
btn_ok
Pin_75
dis_price[6]
Pin_144
dis_money[0]
Pin_179
dis_price[7]
Pin_158
dis_money[1]
Pin_173
dis_price[8]
Pin_163
dis_money[2]
Pin_175
dis_price[9]
Pin_164
dis_money[3]
Pin_177
dis_price[10]
Pin_165
dis_money[4]
Pin_178
dis_price[11]
Pin_166
dis_money[5]
Pin_180
beep
Pin_117
dis_money[6]
Pin_174
led[0]
Pin_2
dis_money[7]
Pin_176
led[1]
Pin_1
dis_money[8]
Pin_170
led[2]
Pin_61
dis_money[9]
Pin_169
led[3]
Pin_62
dis_money[10]
Pin_168
led_warn
Pin_63
dis_money[11]
Pin_167
二、QuartusII仿真图
三、作品图