课程设计报告FPGA
- 格式:docx
- 大小:136.18 KB
- 文档页数:13
课程设计报告
自动售货机
学院:电子与通信工程学院
班级:微电子1 班姓名:
刁飞鹏
学号:09110038
自动售货机设计
任务分析
任务要求利用开发系统板,设计一个自动售货机控制芯片。自动
售货机平时处于待机状态,当有钱投入之后开始工作。利用三个按键作为投币信号,分别代表投币5元、10元、20元,投入钱币以后,
采用七段数码管显示投入的金额;利用另外4个按键代表4种货物,
可以在售货机上选择购买的货物,假设4 种货物的售价分别为3元、
6 元、10元、17元。选择了货物之后,七段数码管显示购物之后的
找币余额,并且用LED数码管指示灯显示是否有足够的金额购买,
如果投币不够,报警指示灯亮起,并且显示余额为零。选择了购买
物品之后,可以按键出货或者余额不足退币。
系统的输入信号包括8 个按键开关、时钟信号,输出部分有2
个LED、4个七段数码管,系统框图如图所示。
自动售货机控制芯片的外部时钟由晶振产生,该开发板系统实例中晶振频率为50Mhz。
系统设计
自动售货机控制芯片系统结构框图如图所示,包括三个模块:分频器模块、核心控制模块和按键与七段数码管控制模块。其中,分
频器模块主要用于产生供按键、七段数码管扫描的时钟,这个扫描时钟的周期应该大约为0.01~0.001s。同时,这个分频时钟也可用于
核心模块的基本控制,由于扫描时钟要和按键、七段数码管控制电路构成一个同步电路,因此,必须使用同一个分频时钟。
核心控制模块的作用主要是控制系统的状态。系统一共有三种状
态,需要使用两位状态寄存器存储状态数据,每个状态之间的转换
由外部按键控制,在每一个状态下,有不同的七段数码管和指示灯的输出。
按键和数码管显示控制电路是对外部的矩阵按键以及动态显示硬件进行驱动,该模块对矩阵按键进行扫描,输出经过扫描之后的
按键结果。并且可以把核心模块输出的二进制显示数据转化为BCD
码,通过BCD译码,以及动态显示技术最终输出到动态七段数码管上显示出来。
模块设计
1.分频模块设计
Module clk_div(rst,clk,clk_1);
Input rst,clk;
Output clk_1;
Reg [14:0]cnt;
Reg clk_1;
always@(posedge clk or negedge rst)
begin
if(rst==1'b0)begin
cnt<=15'd0;
clk_1<=1'b0;
end
else if(cnt==15'd26213)
begin
cnt<=15'd0;
clk_1<=~clk_1;
end
else cnt<=cnt+1'b1;
end
endmodule
2.核心控制模块
(1)模块原理分析。核心控制模块控制三个状态,分别是“等待投币状态”、“等待买货状态”、“出货、退币状态”。
系统状态转换过程如图所示,当系统复位以后,进入“等待
投币状态”,此时数码管输出全部为0,而指示灯也输出为“00”。
在这种状态下,如果输入了投币按键,包括投币5元、10元、15元,
就会跳转到下一个状态,称之为“等待买货状态”。在“等待买货状态”下,七段数码管输出的金额,指示灯仍然输出“00”。在这种状态下,如果输入了购物按键,包括购买3 元、6元、10 元、17元的
货物,就会跳转到下一个状态,称之为“出货、退币状态”。如果投币金额不足,七段数码管输出零,“余额不足指示灯”亮起。这个状
态下,如果按下“出货、退币按键”则系统恢复到等待投币状态”,表示售货完成。
数码管:0000
指示灯:00
根据前面已经设计好的状态转移图。对所有的状态进行编码设计。
由于系统包括三个状态,因此可以设计两位寄存器来对所有的状态
进行编码。
设计状态机首先要确定状态,以及对状态进行编码,然后根据状态图确定具体的状态转换以及输出和输入的关系。
按照系统要求,有8 个按键输入,首先定义每个按键具体含义,如表所示:
另外,还有两个LED发光二极管,其中0 号LED代表“金额充足”,可以出货。1号代表“金额不足”,只能退币处理。
当系统复位以后,处于“等待投币状态”,状态代码为为
“2'b00",此时数码管输出全为0,而指示灯也输出为“00”。如果
在这个状态下,只有出入三个投币按键,状态才能发生跳转,三个投币按键分别代表投币5元、10元、20 元,对应的按键分别是0号、
1 号、2号。按下投币按键后,投币的金额需要被内部寄存器存储下来。投币之后,状态跳转为"等待买货状态”,状态代码为为
“2'b01".
在“等待买货状态”下,七段数码管输出已经被保存下来的刚刚投币的金额,LED指示灯仍然输出“00”。在这种状态下,如果输
入了购物按键,包括购买3元、6元、10 元、17元的货物,分别对
应着3号、4号、5 号、6号按键,就会跳转到下一状态,称之为“出货、退币状态”,状态代码为为“2'b10”。
在“出货、退币状态”下,如果刚刚投币金额充足,七段数码管
输出找零的金额,“金额充足指示灯”亮起,如果投币金额不足,七段数码管输出零,余额不足指示灯亮起。这种状态下,如果按下7
号按键代表的“出货、退币”按键则系统恢复到“等待投币状态”,表示售货完成。
(2)模块接口定义。
module state(rst,clk_1,led,display,key);
input rst;
input clk_1;
input [7:0]key;
output [1:0]led;
output [7:0]display;