ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:1.60MB ,
资源ID:3363532      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3363532.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(EDA课程设计报告自动售货机.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

EDA课程设计报告自动售货机.docx

1、EDA课程设计报告自动售货机EDA课程设计报告(自动售货机)EDA(Verilog)课程设计报告自动售货机 摘 要 本设计是以现场可编程逻辑器件(FPGA)为核心的自动售货机,利用Quartus软件编写verilog HDL硬件描述语言程序以实现自动售货功能。 本设计主要以程序为主,硬件方面则使用实验箱(芯片Cyclone II EP2C35F672C8,基于MagicSOPC创新教学实验开发平台),将程序各变量端口与实验箱管脚进行相应的配置,用八个开关分别代表商品价格、所投钱币价格及确认付款找零操作。当选择好商品并投币后,数码管显示所选商品价格及投入钱币价格;按下确认付款开关,数码管显示应找

2、多少钱,若交易成功,则对应商品LED灯亮,同时步进电机转动将商品送出。若所投钱币小于所选商品价格,此时交易不成功,同时对应警告的LED灯亮。前言第一章 系统设计 1.1 系统设计 1.2 总体设计 1.3 方案设计第二章 详细设计 2.1 自动售货机状态描述 2.2 详细状态描述 2.2.1 初始状态 2.2.2 选商品状态 2.2.3 投币状态 2.2.4 找零状态 第三章 软件设计 3.1 程序总流程图 3.2 verilog HDL源程序第四章 结果与讨论 4.1 实验调试 4.1.1 调试步骤 4.1.2 实验现象 4.2 结果与分析 第五章 心得体会参考文献 附录 前言EDA是电子设

3、计自动化(Electronic Design Automation)的缩写,在20世纪60年代中期从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。Verilog HDL是众多EDA软件中的一个,结合我们这学期所学课程,本次设计采用的是Verilog公司推出的Verilog硬件描述语言,目的是为了将我们所学应用到实际生活中,同时加深我们对Verilog硬件描述语言,FPGA芯片等等的认识与掌握。Ve r i l o g硬件描述语言的主要能力: 基本逻辑门,例如a n d、o r和n a n d等都内置在语言中。 用户定义原

4、语( U D P)创建的灵活性。用户定义的原语既可以是组合逻辑原语,也可以是时序逻辑原语。 开关级基本结构模型,例如p m o s 和n m o s等也被内置在语言中。 提供显式语言结构指定设计中的端口到端口的时延及路径时延和设计的时序检查。 可采用三种不同方式或混合方式对设计建模。这些方式包括:行为描述方式使用过程化结构建模;数据流方式使用连续赋值语句方式建模;结构化方式使用门和模块实例语句描述建模。 Verilog HDL中有两类数据类型:线网数据类型和寄存器数据类型。线网类型表示构件间的物理连线,而寄存器类型表示抽象的数据存储元件。 能够描述层次设计,可使用模块实例结构描述任何层次。 设

5、计的规模可以是任意的;语言不对设计的规模(大小)施加任何限制。 Verilog HDL不再是某些公司的专有语言而是I E E E标准。 人和机器都可阅读Verilog 语言,因此它可作为E D A的工具和设计者之间的交互语言。 Verilog HDL语言的描述能力能够通过使用编程语言接口( P L I)机制进一步扩展。P L I是允许外部函数访问Verilog 模块内信息、允许设计者与模拟器交互的例程集合。 设计能够在多个层次上加以描述,从开关级、门级、寄存器传送级( RT L)到算法级,包括进程和队列级。 能够使用内置开关级原语在开关级对设计完整建模。 同一语言可用于生成模拟激励和指定测试的

6、验证约束条件,例如输入值的指定。 Verilog HDL 能够监控模拟验证的执行,即模拟验证执行过程中设计的值能够被监控和显示。这些值也能够用于与期望值比较,在不匹配的情况下,打印报告消息。 在行为级描述中, Verilog HDL不仅能够在RT L级上进行设计描述,而且能够在体系结构级描述及其算 法级行为上进行设计描述。 能够使用门和模块实例化语句在结构级进行结构描述。 在Verilog HDL 的混合方式建模能力,即在一个设计中每个模块均可以在不同设计层次上建模。 Verilog HDL 还具有内置逻辑函数,例如&(按位与)和|(按位或)。 对高级编程语言结构,例如条件语句、情况语句和循环

7、语句,语言中都可以使用。 可以显式地对并发和定时进行建模。 提供强有力的文件读写能力。 语言在特定情况下是非确定性的,即在不同的模拟器上模型可以产生不同的结果;例如,事件队列上的事件顺序在标准中没有定义。第一章 系统设计1.1 系统设计(1)用四个发光二极管分别模拟售出价值为5角、1元、1.5元和2元的小商品,购买者可以通过开关选择任意一种标价中的小商品。(2)灯亮时表示该小商品售出成功。(3)用开关分别模拟5角、1元硬币和5元纸币投入,用两个数码管显示商品价格,及应找回的钱数。(4)每次只能售出一种小商品,当投币结束时,按下确认键,若交易成功,则售出货物并找回剩余的硬币;若交易不成功,则找回

8、所投的硬币。按下复位按键,并将所有拨码开关复位,则回到初始状态。 1.2 总体设计 采用FPGA来设计的原理图如图1.1所示.它由控制输入电路、FPGA、电机驱动、显示电路电路组成。图1.1 采用FPGA设计的自动售货机原理方框图控制输入电路主要是为用户设计的,起到一个输入控制的作用。FPGA是现场可编程逻辑器件,也是本设计方案的核心内容,它是实现自动售货机运作的主要控制模块。将编写好的verilog HDL程序烧制到现场可编程逻辑器件FPGA中,然后通过控制输入电路把信号输入到FPGA,由八个开关控制输入信号,即消费者选择商品和消费者投币及确认消费,动态数码管显示输出信号,即找零环节和所选择

9、的商品、消费者投币。1.3方案设计使用现场可编程逻辑器件(FPGA)制作,利用Verilog HDL硬件描述语言编程进行控制,然后烧写实现。对于自动售货机的设计,本方案采用的是现场可编程逻辑器件来实现, 它的优点是所有电路集成在一块芯片上,此方案所需的外围电路简单,这样它的体积就减少了,同时还提高了系统的稳定度,还可以用软件Quartus软件进行仿真和调试等,可以充分利用verilog HDL硬件描述语言方便的编程,提高开发效率,缩短研发周期,降低研发成本;而且易于进行功能的扩展,实现方法灵活,调试方便,修改容易。第二章 详细设计2.1 自动售货机状态描述判断开关被按下的个数N。若N=2表示所

10、选本次选择无效,返回初始状态;若N=1则显示所选商品,并继续执行下面的流程。4个开关分别代表4种商品。3个开关分别代表投入0.5元,1元,5元,统计投入总额。投入总额与商品价格做比较,如果总额=商品价格,则继续执行下面的程序。找零=总额-商品价格,数码管显示找零金额。状态图如图2.1所示: 图2.1自动售货机状态图2.2 详细状态描述2.2.1 初始状态各变量都设置为零,所有拨码开关复位,按下rst键后,一切恢复到初始状态。 2.2.2 选商品状态分别有价格为0.5元、1元、1.5元和2元的商品,每次选择商品前,设置一个标志位btn_sell表示选择商品状态。此自动售货机每一次售货时只能一次选

11、择一种商品,当同时选择两种以上时,选择商品无效,数码管显示清零,重新进行商品选择。选择商品后,数码管显示所选商品价格。 2.2.3 投币状态当选好商品后,开始投币。同样有一标志位btn_price表示投币金额。投币口只接受三种面值的钱币0.5元、1元和5元,可以同时投入多种面值钱币。投完币后,先有一个确认买商品的过程,若投了币但又不购买商品了,就将全部投币金额退回;若确认购买商品,则进入下一状态找零状态。 2.2.4 找零状态投完币,并确认购买商品后,进入找零状态。首先要将所投的金额与所选商品的价格做比较,若所投金额小于商品价格,则退回所投钱币;若大于等于商品价格,则两者做差,得到需要找零的钱

12、。第三章 软件设计3.1 程序总流程图3.2框图(Visio绘制) 3.3 Verilog HDL源程序 (见附录)第四章 结果与讨论4.1 实验调试4.1.1 调试步骤软件调试:运行Quartus II软件,观看仿真波形,为了让数码管显示稳定,我们将原来的50MHZ的时钟信号进行了10000分频,这样以来,我们的display就不能很好的在仿真波形中显示,为此,我们把中间变量price和price_all(即控制display的变量)调出来显示,只要price和price_all显示正确,仿真就成功。仿真波形如下:硬件调试:在软件调试调试成功的情况下,接下来我们要进行硬件调试,步骤如下:运行

13、Quartus II软件,打开工程。再次编译源程序(见附录)。分配管脚(见附录)。将生成的.sof文件写入FPGA试验箱中。根据要求选择几种买东西的可能情况,在实验箱上实验,观察记录结果。实物拍照:交易成功的照片流程(图中拨码开关从左到右依次对应:商品1(0.5元),商品2(1元),商品3(1.5元),商品4(2元),投币0.5元,投币1元,投币5元。图中按键从左到右第三个为确认,第四个为复位):照片依次为:初始状态,商品选择状态,投币状态,确认交易状态。 交易不成功的照片流程(第三个图中左边的LED不应该亮,之所以亮是忘了复位了): 4.1.2 实验现象选择买1.5元的商品,投5元的金额,调

14、试现象如下:选择1.5元商品数码管显示1.5,再选择一种商品,数码管显示初始状态(88),重新进行商品选择。按下5元投币键,对应数码管显示5.0。按下确认购买开关,找零时,对应数码管显示3.5,对应1.5元商品的LED灯亮。选择1.5元的商品,投0.5元的金额,调试现象如下:选择1.5元的商品,对应数码管显示1.5。按下0.5元的投币键,对应数码管显示0.5。找零显示0.5元,退回所投的钱,表示警告的LED灯亮(交易不成功)。4.2 结果与分析 调试过程中出现的问题及原因: 数码管显示不正确。管脚配置不正确导致数码管显示异常。 重新分配管脚后,仍为先前程序的操作结果。重新配置管脚后,未运行程序

15、,使得烧写进去的仍为原先的程序。步进电机送货不理想,该送的时候送,不该送的时候也送,再次查看相关源程序,多次修改调试。参考文献 1 夏宇闻 编著 Verilog数字系统教程 北京航空航天出版社2 梁瑞宇 编写FPGA设计实验指导书(Verilog HDL) 3 潘松 等 著EDA技术实用教程:Verilog_HDL版(第4版) 附录(1)自动售货机主模块module auto_seller(clk,rst,display,btn_ok,btn_mon,btn_sell,led_warn,led,StepDrive);input clk,rst,btn_ok;input 2:0 btn_mon;

16、/选择放入的钱input 3:0 btn_sell;/选择商品bbt_5,gz_10,kqs_15,kl_20output 6:0 led;/led_5,led_10,led_15,led_20output led_warn;/钱不足,指示灯output 15:0 display;/数码管显示投入面值,diaplay15:8=com位选,display7:0=段码output3:0 StepDrive;reg clk_500Hz;reg 6:0 led;wire s;reg led_warn;/警告放入钱不足reg 15:0 display;reg 31:0 counter;(* synthe

17、sis,keep *)reg 9:0 price,price_all;reg 1:0 flag = 2b00;/数码管显示标志位reg 1:0 flag1 = 2b00;reg 1:0 flag2 = 2b00;parameter COUNT1 = 25d10000;step_motor u(.StepDrive(StepDrive), .clk(clk), . StepEnable(s), .rst(rst);/步进电机例化 assign s=(led3:0=4b1111)|(btn_ok=1)|(led_warn=0);/*分频使数码管显示稳定*/always (posedge clk)

18、begin if(counter= 0) begin counter = COUNT1; clk_500Hz = clk_500Hz; end else counter = counter-1; end always (negedge rst or posedge clk) begin if(!rst) begin led = 7b111_1111;/LED灭 price_all = 0;/价格清零 led_warn =1; price = 0; end else begin/*三种面值共8种组合*/ case(btn_mon) 3b001: begin price_all = 5;end 3

19、b010: begin price_all = 10;end 3b100: begin price_all = 50;end 3b011: begin price_all = 15;end 3b101: begin price_all = 55;end 3b110: begin price_all = 60;end 3b111: begin price_all = 65;end default: begin price_all = 0;end endcase case(btn_sell) 4b0001: begin price = 5;end 4b0010: begin price = 10;

20、end 4b0100: begin price = 15;end 4b1000: begin price = 20;end default: begin price = 0;end endcase if(btn_ok=0 ) begin if(price_all price) /放入钱不足 begin led_warn = 0; price = 0; end else begin /金钱足够 price_all = price_all-price; if(price_all =0)led_warn = 1; case(price) /LED灯显示货物卖出 5: begin led = 7b11

21、1_1110;end 10: begin led = 7b111_1101;end 15: begin led = 7b111_1011;end 20: begin led = 7b111_0111;end default: begin led = 7b111_1111;end endcase end end end end/*分频后将时钟给数码管,数码管分别显示放入钱的多少、商品价格*/always (posedge clk_500Hz) begin if(btn_sell) begin case(flag) 2b00: begin display= 8b1111_1110,1b1,led7

22、(price%10); flag=2b01;end 2b01: begin display= 8b1111_1101,1b0,led7(price/10); flag=2b00;end endcase if(btn_mon) case(flag1) 2b00: begin display= 8b1111_1110,1b1,led7(price_all%10); flag1=2b01;end 2b01: begin display= 8b1111_1101,1b0,led7(price_all/10); flag1=2b00;end endcase end else begin case(fla

23、g2) 2b00: begin display=8b1111_1110,1b1,7b0;flag2=2b01;end 2b01: begin display=8b1111_1101,1b1,7b0;flag2=2b00;end endcase end end/*数码管段码表,供阳数码管6:0=hgfedcba*/function 6:0 led7; input 3:0 dis_input; begin case (dis_input) 0 : led7 = 7b100_0000; 1 : led7 = 7b111_1001; 2 : led7 = 7b010_0100; 3 : led7 =

24、7b011_0000; 4 : led7 = 7b001_1001; 5 : led7 = 7b001_0010; 6 : led7 = 7b000_0010; 7 : led7 = 7b111_1000; 8 : led7 = 7b000_0000; 9 : led7 = 7b001_1000;default : led7 = 7b000_0000; endcase endendfunctionendmodule(2)步进电机送货模块module step_motor (StepDrive, clk, StepEnable, rst); input clk; input StepEnable

25、; input rst; reg Dir,t; reg 11:0 c; output3:0 StepDrive; reg 3:0 StepDrive; reg 2:0 state; reg 31:0 StepCounter = 32b0; parameter StepLockOut = 32d200000; reg InternalStepEnable; always (posedge t) begin if(c=12h1111_1111_1111) Dir=Dir; end always (posedge clk or negedge rst) begin if ( !rst) begin

26、StepDrive = 4b0; state = 3b0; StepCounter = 32b0; end else begin if (StepEnable = 1b1) InternalStepEnable = 1b1 ; StepCounter = StepLockOut) begin StepCounter = 32b0 ; t=t; if (InternalStepEnable = 1b1) begin InternalStepEnable = StepEnable ; if (Dir = 1b1) state = state + 3b001 ; else if (Dir = 1b0

27、) state = state - 3b001 ; case (state) 3b000 : StepDrive = 4b0001 ; 3b001 : StepDrive = 4b0011 ; 3b010 : StepDrive = 4b0010 ; 3b011 : StepDrive = 4b0110 ; 3b100 : StepDrive = 4b0100 ; 3b101 : StepDrive = 4b1100 ; 3b110 : StepDrive = 4b1000 ; 3b111 : StepDrive = 4b1001 ; endcase end end end endendmodule(3)引脚分配

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1