课程设计报告FPGA.docx
- 文档编号:18208263
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:13
- 大小:65.79KB
课程设计报告FPGA.docx
《课程设计报告FPGA.docx》由会员分享,可在线阅读,更多相关《课程设计报告FPGA.docx(13页珍藏版)》请在冰点文库上搜索。
课程设计报告FPGA
课程设计报告
自动售货机
学院:
电子与通信工程学院
班级:
微电子1班
姓名:
刁飞鹏
学号:
09110038
自动售货机设计
任务分析
任务要求利用开发系统板,设计一个自动售货机控制芯片。
自动售货机平时处于待机状态,当有钱投入之后开始工作。
利用三个按键作为投币信号,分别代表投币5元、10元、20元,投入钱币以后,采用七段数码管显示投入的金额;利用另外4个按键代表4种货物,可以在售货机上选择购买的货物,假设4种货物的售价分别为3元、6元、10元、17元。
选择了货物之后,七段数码管显示购物之后的找币余额,并且用LED数码管指示灯显示是否有足够的金额购买,如果投币不够,报警指示灯亮起,并且显示余额为零。
选择了购买物品之后,可以按键出货或者余额不足退币。
系统的输入信号包括8个按键开关、时钟信号,输出部分有2个
LED、4个七段数码管,系统框图如图所示。
自动售货机控制芯片的外部时钟由晶振产生,该开发板系统实例中晶振频率为50Mhz。
系统设计
自动售货机控制芯片系统结构框图如图所示,包括三个模块:
分频器模块、核心控制模块和按键与七段数码管控制模块。
其中,分频器模块主要用于产生供按键、七段数码管扫描的时钟,这个扫描时钟的周期应该大约为0.01~0.001&同时,这个分频时钟也可用于核心模块的基本控制,由于扫描时钟要和按键、七段数码管控制电路构成一个同步电路,因此,必须使用同一个分频时钟。
核心控制模块的作用主要是控制系统的状态。
系统一共有三种状态,需要使用两位状态寄存器存储状态数据,每个状态之间的转换由外部按键控制,在每一个状态下,有不同的七段数码管和指示灯的输出。
按键和数码管显示控制电路是对外部的矩阵按键以及动态显示硬
件进行驱动,该模块对矩阵按键进行扫描,输出经过扫描之后的按
键结果。
并且可以把核心模块输出的二进制显示数据转化为BCD码,
通过BCD译码,以及动态显示技术最终输出到动态七段数码管上显
示出来。
模块设计
1.分频模块设计
Moduleclk_div(rst,clk,clk_1);
Inputrst,clk;
Outputclk_1;
Reg[14:
0]cnt;
Regclk_1;
always@(posedgeclkornegedgerst)
begin
if(rst==1'b0)begin
cnt<=15'd0;
clk_1<=1'b0;
end
elseif(cnt==15'd26213)
begin
cnt<=15'd0;
clk_1<=~clk_1;
end
elsecnt<=cnt+1'b1;
end
endmodule
2•核心控制模块
(1)模块原理分析。
核心控制模块控制三个状态,分别是“等待投
币状态”、“等待买货状态”、“出货、退币状态”。
系统状态转换过程如图所示,当系统复位以后,进入“等待投
币状态”,此时数码管输出全部为0,而指示灯也输出为“00”。
在这
种状态下,如果输入了投币按键,包括投币5元、10元、15元,就会跳转到下一个状态,称之为“等待买货状态”。
在“等待买货状态”下,七段数码管输出的金额,指示灯仍然输出“00”。
在这种状态下,如果输入了购物按键,包括购买3元、6元、10元、17元的货物,就会跳转到下一个状态,称之为“出货、退币状态”。
如果投币金额不足,七段数码管输出零,“余额不足指示灯”亮起。
这个状态下,如果按下“出货、退币按键”则系统恢复到等待投币状态”,表示售货完成。
根据前面已经设计好的状态转移图。
对所有的状态进行编码设计由于系统包括三个状态,因此可以设计两位寄存器来对所有的状态进行编码。
设计状态机首先要确定状态,以及对状态进行编码,然后根据状态图确定具体的状态转换以及输出和输入的关系。
状态代码
状态含义
2'b00
等待投币状态
2'b01
等待买货状态
2'b10
出货、退币按键
按照系统要求,有8个按键输入,首先定义每个按键具体含义,
如表所示:
0号
1号
2号
3号
4号
5号
6号
7号
投币5
投币
投币
购买3
购买6
购买
购买
出货、
元
10元
20元
元物品
元物品
10元
17元
退币
物品
物品
另外,还有两个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)模块接口定义。
信号名
I/O
位宽
含义
rst
I
1bit
系统复位信号
clk_1
I
1bit
分频后周期为
0.01s
led
O
2bit
2个led数码管
显示数据
display
O
8bit
七段数码管显
示数据
key
I
8bit
矩阵按键输入
modulestate(rst,clk_1,led,display,key);
inputrst;
inputclk_1;
input[7:
0]key;
output[1:
0]led;
output[7:
0]display;
reg[1:
0]led;
reg[7:
0]display;
reg[1:
0]state;
parameter[1:
0]waitfor=2'b00,
buying=2'b01,outfor=2'b10;
always@(posedgeclk_1ornegedgerst)
begin
if(!
rst)
begindisplay<=8'd0;
led<=2'b00;
state<=waitfor;
end
else
begin
case(state)waitfor:
begin
if(key[0]==1'b0)beginstate<=buying;display<=8'd5;led<=2'b00;
end
if(key[1]==1'b0)beginstate<=buying;display<=8'd10;led<=2'b00;
end
if(key[2]==1'b0)beginstate<=buying;display<=8'd20;led<=2'b00;
end
end
buying:
begin
if(key[3]==1'b0)beginstate<=outfor;if(display<8'd3)begindisplay<=8'd0;led<=2'b10;end
else
begindisplay<=display-8'd3;led<=2'b01;
end
end
if(key[4]==1'bO)
beginstate<=outfor;
if(display<8'd6)begindisplay<=8'd0;led<=2'b10;
end
elsebegindisplay<=display-8'd6;led<=2'b01;
end
end
if(key[5]==1'b0)
beginstate<=outfor;if(display<8'd10)begindisplay<=8'd0;led<=2'b10;
end
elsebegindisplay<=display-8'd10;led<=2'b01;
end
end
if(key[6]==1'b0)
beginstate<=outfor;if(display<8'd17)begindisplay<=8'd0;led<=2'b10;
end
else
begindisplay<=display-8'd17;
led<=2'b01;
end
end
end
outfor:
begin
if(key[7]==1'b0)
begin
state<=waitfor;
display<=8'd0;
led<=2'b00;
end
end
endcase
end
end
endmodule
Jps10.Dns
20.D
■
ELS
30.Dns
40.Dns
50.0血
60.0
1
iis.TD.Qm
Km*
2D0
J
E1S
rii
J"
乩kJ
rn~
n
~厂
Skey
:
QMOOOMt0000000L
、tJ'l
00000010
X(nooKiii
XOOOWLOO
」OOOLQ1
X
00Q00L14XQQ0001I1
[*]dlispliiy
:
OCOOOMOxomboool
'I1
.11-
000000]0
X00000011
XOOOOOLOO
J(00000101
X
OOOOOLIOx00000111
Glltd
fwX01
」L
Xn
X00
X0]
10IU
按键控制模块
modulexishi(clk_1,display,s,m);inputclk_1;
input[7:
0]display;
output[3:
0]s;
output[6:
0]m;
reg[3:
0]s;
reg[6:
0]m;
reg[1:
0]st;
reg[3:
0]shi,bai,ge;
reg[3:
0]bin;
wire[7:
0]display_1;
always@(posedgeclk_1)begin
st<=st+1'b1;
end
always@(st)
begin
case(st)
2'b00:
s<=4'b0001;
2'b01:
s<=4'b0010;
2'b10:
s<=4'b0100;default:
s<=4'bOOOO;
endcase
endalways@(display)begin
if(display>8'd199)bai<=4'd2;
elseif(display>=7'd99)
bai<=4'd1;
elsebai<=4'd0;
end
assigndisplay_仁display-bai*7'd100;
always@(display_1)begin
if(display_1>=7'd90)shi<=4'd9;
elseif(display_1>=7'd80)shi<=4'd8;
elseif(display_1>=7'd70)shi<=4'd7;
elseif(display_1>=7'd60)shi<=4'd6;
elseif(display_1>=7'd50)shi<=4'd5;
elseif(display_1>=7'd40)shi<=4'd4;
elseif(display_1>=7'd30)shi<=4'd3;
elseif(display_1>=7'd20)shi<=4'd2;
elseif(display_1>=7'd10)shi<=4'd1;
elseshi<=4'd0;
endalways@(display_1orshi)ge=display_1-shi*4'd10;always@(st,ge,shi,bai)begin
case(st)
2'b00:
bi*=ge;
2'b01:
bin<=shi;
2'b10:
bin<=bai;default:
bi*=4'b0000;
endcaseend
always@(bin)
begin
case(bin)
4'bOOOO:
m<=7'bO111111;〃O
4'bOOO1:
m<=7'bOOOO11O;〃1
4'bOO1O:
m<=7'b1O11O11;〃2
4'bOO11:
m<=7'b1OO1111;〃3
4'b0100:
m<=7'b1100110;//4
4'bO1O1:
m<=7'b11O11O1;〃5
4'bO11O:
m<=7'b11111O1;〃6
4'bO111:
m<=7'bOOOO111;〃7
4'b1000:
m<=7'b1111111;//8
4'b1001:
m<=7'b1101111;//9
default:
m<=7'b1000000;〃-endcase
end
endmodule
JPS
2Q¥砧40.ncCO.”mqm
IDDO砧
■
120.13皿L40.I
14.
5ns
3
r~Lmol—lo_o.o
L_r~Lrn
L_rn_rT_n
l0L
Xio)
£11X12i13)
tjaiHiiiXiflc
C000XlOODCOlXlOJOO[0DM11/lMO100^]0M1O1X1COO110Xl11X1001MMXLM100iX1001D10X10010!
LX10D1100)
(sxtjXa(
)LOXcnj]¥OLCHX'E»aiXouoXoutXX】呵YicioXJQUX⑷QXhoiX"】□>
Hane
elk_l
Sdi
Sn
田i
顶层模块设计
moduleclassdesign(clk,rst,key,led,s,m);
inputclk,rst;
input[7:
0]key;
output[1:
0]led;
output[3:
0]s;
output[6:
0]m;
wire[1:
0]led;
wire[3:
0]s;
wire
wire
wire
[6:
0]m;clk_1;
[7:
0]display;
clk_divUO(.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指示灯来显示
状态以及报警信息。
处理这些动态输入/输出设备,还需
要设计相应的驱动电路。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 报告 FPGA