《课程设计报告FPGA(共13页).doc》由会员分享,可在线阅读,更多相关《课程设计报告FPGA(共13页).doc(13页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上 课程设计报告 自动售货机 学院:电子与通信工程学院班级:微电子1班姓名:刁飞鹏学号:自动售货机设计任务分析任务要求利用开发系统板,设计一个自动售货机控制芯片。自动售货机平时处于待机状态,当有钱投入之后开始工作。利用三个按键作为投币信号,分别代表投币5元、10元、20元,投入钱币以后,采用七段数码管显示投入的金额;利用另外4个按键代表4种货物,可以在售货机上选择购买的货物,假设4种货物的售价分别为3元、6元、10元、17元。选择了货物之后,七段数码管显示购物之后的找币余额,并且用LED数码管指示灯显示是否有足够的金额购买,如果投币不够,报警指示灯亮起,并且显示余额为零
2、。选择了购买物品之后,可以按键出货或者余额不足退币。系统的输入信号包括8个按键开关、时钟信号,输出部分有2个LED、4个七段数码管,系统框图如图所示。自动售货机控制芯片的外部时钟由晶振产生,该开发板系统实例中晶振频率为50Mhz。系统设计自动售货机控制芯片系统结构框图如图所示,包括三个模块:分频器模块、核心控制模块和按键与七段数码管控制模块。其中,分频器模块主要用于产生供按键、七段数码管扫描的时钟,这个扫描时钟的周期应该大约为0.010.001s。同时,这个分频时钟也可用于核心模块的基本控制,由于扫描时钟要和按键、七段数码管控制电路构成一个同步电路,因此,必须使用同一个分频时钟。数码管按键8位
3、LED时钟按键、七段数码管控制模版核心状态控制分频器 核心控制模块的作用主要是控制系统的状态。系统一共有三种状态,需要使用两位状态寄存器存储状态数据,每个状态之间的转换由外部按键控制,在每一个状态下,有不同的七段数码管和指示灯的输出。 按键和数码管显示控制电路是对外部的矩阵按键以及动态显示硬件进行驱动,该模块对矩阵按键进行扫描,输出经过扫描之后的按键结果。并且可以把核心模块输出的二进制显示数据转化为BCD码,通过BCD译码,以及动态显示技术最终输出到动态七段数码管上显示出来。模块设计1. 分频模块设计Module clk_div(rst,clk,clk_1);Input rst,clk;Out
4、put clk_1;Reg 14:0cnt;Reg clk_1;always(posedge clk or negedge rst)beginif(rst=1b0)begin cnt=15d0; clk_1=1b0; endelse if(cnt=15d26213) begin cnt=15d0; clk_1=clk_1; endelse cnt=cnt+1b1;endendmodule 2. 核心控制模块(1) 模块原理分析。核心控制模块控制三个状态,分别是“等待投币状态”、“等待买货状态”、“出货、退币状态”。 系统状态转换过程如图所示,当系统复位以后,进入“等待投币状态”,此时数码管输出
5、全部为0,而指示灯也输出为“00”。在这种状态下,如果输入了投币按键,包括投币5元、10元、15元,就会跳转到下一个状态,称之为“等待买货状态”。在“等待买货状态”下,七段数码管输出的金额,指示灯仍然输出“00”。在这种状态下,如果输入了购物按键,包括购买3元、6元、10元、17元的货物,就会跳转到下一个状态,称之为“出货、退币状态”。如果投币金额不足,七段数码管输出零,“余额不足指示灯”亮起。这个状态下,如果按下“出货、退币按键”则系统恢复到等待投币状态”,表示售货完成。买货按键:3元 6元 10元 17元出货、退币按键投币按键:5元 10元 20元出货、退币状态数码管:余额/0000指示灯
6、:金额是否充足数码管:投币金额 指示灯:00等待买货状态等待投币状态数码管:0000指示灯:00 根据前面已经设计好的状态转移图。对所有的状态进行编码设计。由于系统包括三个状态,因此可以设计两位寄存器来对所有的状态进行编码。设计状态机首先要确定状态,以及对状态进行编码,然后根据状态图确定具体的状态转换以及输出和输入的关系。 状态代码 状态含义 2b00 等待投币状态 2b01 等待买货状态 2b10 出货、退币按键按照系统要求,有8个按键输入,首先定义每个按键具体含义,如表所示:0号1号2号3号4号5号6号7号投币5元投币10元投币20元购买3元物品购买6元物品购买10元物品购买17元物品出货
7、、退币另外,还有两个LED发光二极管,其中0号LED代表“金额充足”,可以出货。1号代表“金额不足”,只能退币处理。当系统复位以后,处于“等待投币状态”,状态代码为为“2b00,此时数码管输出全为0,而指示灯也输出为“00”。如果在这个状态下,只有出入三个投币按键,状态才能发生跳转,三个投币按键分别代表投币5元、10元、20元,对应的按键分别是0号、1号、2号。按下投币按键后,投币的金额需要被内部寄存器存储下来。投币之后,状态跳转为 等待买货状态”,状态代码为为“2b01.在“等待买货状态”下,七段数码管输出已经被保存下来的刚刚投币的金额,LED指示灯仍然输出“00”。在这种状态下,如果输入了
8、购物按键,包括购买3元、6元、10元、17元的货物,分别对应着3号、4号、5号、6号按键,就会跳转到下一状态,称之为“出货、退币状态”,状态代码为为“2b10”。在“出货、退币状态”下,如果刚刚投币金额充足,七段数码管输出找零的金额,“金额充足指示灯”亮起,如果投币金额不足,七段数码管输出零,余额不足指示灯亮起。这种状态下,如果按下7号按键代表的“出货、退币”按键则系统恢复到“等待投币状态”,表示售货完成。(2) 模块接口定义。 信号名I/O位宽含义rstI1bit系统复位信号clk_1I1bit分频后周期为0.01sledO2bit2个led数码管显示数据displayO8bit七段数码管显
9、示数据keyI8bit矩阵按键输入modulestate(rst,clk_1,led,display,key);inputrst;inputclk_1;input7:0key;output1:0led;output7:0display;reg1:0led;reg7:0display;reg1:0state;parameter1:0 waitfor = 2b00, buying = 2b01, outfor = 2b10;always(posedge clk_1 or negedge rst)beginif(!rst)begindisplay=8d0;led=2b00;state=waitfor
10、;endelse begincase(state)waitfor:beginif(key0=1b0)beginstate=buying;display=8d5;led=2b00;endif(key1=1b0)beginstate=buying;display=8d10;led=2b00;endif(key2=1b0)beginstate=buying;display=8d20;led=2b00;endendbuying:beginif(key3=1b0)beginstate=outfor;if(display8d3)begindisplay=8d0;led=2b10;endelsebegind
11、isplay=display-8d3;led=2b01;endendif(key4=1b0)beginstate=outfor;if(display8d6)begindisplay=8d0;led=2b10;endelsebegindisplay=display-8d6;led=2b01;endendif(key5=1b0)beginstate=outfor;if(display8d10)begindisplay=8d0;led=2b10;endelsebegindisplay=display-8d10;led=2b01;endendif(key6=1b0)beginstate=outfor;
12、if(display8d17)begindisplay=8d0;led=2b10;endelsebegindisplay=display-8d17;led=2b01;endendendoutfor:beginif(key7=1b0)beginstate=waitfor;display=8d0;led=2b00;endendendcaseendendendmodule 按键控制模块modulexishi(clk_1,display,s,m);inputclk_1;input7:0display;output3:0s;output6:0m;reg3:0s;reg6:0m;reg1:0st;reg3
13、:0shi,bai,ge;reg3:0bin;wire7:0display_1;always(posedge clk_1)beginst=st+1b1;endalways(st)begincase(st)2b00:s=4b0001;2b01:s=4b0010;2b10:s=4b0100;default:s8d199)bai=7d99)bai=4d1;else bai=7d90)shi=7d80)shi=7d70)shi=7d60)shi=7d50)shi=7d40)shi=7d30)shi=7d20)shi=7d10)shi=4d1;elseshi=4d0;endalways(display_
14、1 or shi)ge=display_1-shi*4d10;always(st,ge,shi,bai)begincase(st)2b00:bin=ge;2b01:bin=shi;2b10:bin=bai;default:bin=4b0000;endcaseendalways(bin)begincase(bin)4b0000:m=7b;/04b0001:m=7b;/14b0010:m=7b;/24b0011:m=7b;/34b0100:m=7b;/44b0101:m=7b;/54b0110:m=7b;/64b0111:m=7b;/74b1000:m=7b;/84b1001:m=7b;/9def
15、ault : m=7b;/-endcase endendmodule 顶层模块设计moduleclassdesign(clk,rst,key,led,s,m);inputclk,rst;input7:0key;output1:0led;output3:0s;output6:0m;wire1:0led;wire3:0s;wire6:0m;wireclk_1;wire7:0display;clk_div U0(.rst(rst), .clk(clk), .clk_1(clk_1);state U1(.rst(rst), .clk_1(clk_1), .led(led), .display(display), .key(key);xishi U2(.clk_1(clk_1), .display(display), .s(s), .m(m);endmodule 任务总结本任务设计了一个自动售货机的控制芯片,系统结构比较复杂,涉及所有常见的外围硬件电路,以及电路控制基本原理。首先要建立一个分频器电路,构建扫描时系统内部的时钟。核心控制模块是一个典型的状态机电路。状态机包括三种状态,控制售货机投币、选货、出货或退币等过程。为了配合售货过程,需要七段数码管、LED指示灯来显示状态以及报警信息。处理这些动态输入/输出设备,还需要设计相应的驱动电路。专心-专注-专业