地铁自动售票机基于FPGA设计文档格式.docx

上传人:b****2 文档编号:3093256 上传时间:2023-05-01 格式:DOCX 页数:34 大小:158.29KB
下载 相关 举报
地铁自动售票机基于FPGA设计文档格式.docx_第1页
第1页 / 共34页
地铁自动售票机基于FPGA设计文档格式.docx_第2页
第2页 / 共34页
地铁自动售票机基于FPGA设计文档格式.docx_第3页
第3页 / 共34页
地铁自动售票机基于FPGA设计文档格式.docx_第4页
第4页 / 共34页
地铁自动售票机基于FPGA设计文档格式.docx_第5页
第5页 / 共34页
地铁自动售票机基于FPGA设计文档格式.docx_第6页
第6页 / 共34页
地铁自动售票机基于FPGA设计文档格式.docx_第7页
第7页 / 共34页
地铁自动售票机基于FPGA设计文档格式.docx_第8页
第8页 / 共34页
地铁自动售票机基于FPGA设计文档格式.docx_第9页
第9页 / 共34页
地铁自动售票机基于FPGA设计文档格式.docx_第10页
第10页 / 共34页
地铁自动售票机基于FPGA设计文档格式.docx_第11页
第11页 / 共34页
地铁自动售票机基于FPGA设计文档格式.docx_第12页
第12页 / 共34页
地铁自动售票机基于FPGA设计文档格式.docx_第13页
第13页 / 共34页
地铁自动售票机基于FPGA设计文档格式.docx_第14页
第14页 / 共34页
地铁自动售票机基于FPGA设计文档格式.docx_第15页
第15页 / 共34页
地铁自动售票机基于FPGA设计文档格式.docx_第16页
第16页 / 共34页
地铁自动售票机基于FPGA设计文档格式.docx_第17页
第17页 / 共34页
地铁自动售票机基于FPGA设计文档格式.docx_第18页
第18页 / 共34页
地铁自动售票机基于FPGA设计文档格式.docx_第19页
第19页 / 共34页
地铁自动售票机基于FPGA设计文档格式.docx_第20页
第20页 / 共34页
亲,该文档总共34页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

地铁自动售票机基于FPGA设计文档格式.docx

《地铁自动售票机基于FPGA设计文档格式.docx》由会员分享,可在线阅读,更多相关《地铁自动售票机基于FPGA设计文档格式.docx(34页珍藏版)》请在冰点文库上搜索。

地铁自动售票机基于FPGA设计文档格式.docx

1项目分工

井站:

负责选票模块,投币模块,找零模块,顶层模块代码的编写和测试仿真

尹俊镖:

负责计数器序列模块,6选1选择器模块,数码管译码器模块,数码管位选模块等显示功能的代码编写和测试仿真和后期实验报告文档编写。

潘志友,李波:

负责市场调研分析,查找参考资料等众多任务。

2进度规划

第一天:

选定设计题目,分析项目可行性,完成市场调研分析,查找相关参考资料;

进行工程的整体规划。

第二天和第三天:

用Modlesim软件完成各个子模块的代码编写和测试仿真;

第四天:

学习QuartueII软件,完成综合文件,最后书写实验报告,工程竣工。

3技术重点及其预期难点分析

重点在于整体规划是否合理可行,代码是否成功编写,预期难点是不熟悉QuartueII软件的开发环境。

4可行性分析

整体设计思路是:

通过选择票的单价和数量,将总额和投币总额比较,当投入的钱币与选择的票款相等时,送出车票;

最后显示信息。

通过成员的反复论证,确认该设计思路可行。

三设计方案及其验证测试

.1系统的总体框架结构

地铁自动售票系统大致可分为四个功能模块:

车票选择模块、钱币处理模块、余额计算模块、显示功能模块。

[28]

系统总体框图如图所示:

系统总体框图

1)车票选择模块。

当自动售票机通电时,表示一次投币售票过程开始;

乘客正常购买车票操作失误包括改变购买意向或不再购买,按rd按钮重新进入初始状态;

在初始状态pri和qua生效时,顾客可以根据自己的需要,选择其中一种车票(只限一种)和票数,进入下一模块。

2)钱币处理模块。

表示投入的钱币是1元,5元、10元,20元的coin_1,coin_5、coin_10,coin_20生效,记录所投钱币总额。

3)余额计算模块。

当投人钱币总额大于或等于车票价格,并且按确认键后出票并找零;

若投入钱币总额小于车票价格,售票机不出票,并退出所投钱币,进入初始状态。

4)显示功能模块。

此模块根据输入提供的数据,用数码管来显示选择的是所选票面额、购买的票数、投入的钱币额及找赎的钱额。

[29]

2功能模块分析

顶层模块代码如下:

moduletop(pri_3,pri_4,pri_5,pri_6,qua_1,qua_2,coin_1,

coin_5,coin_10,coin_20,

rd,finish,clk1,clk2,outw,outz,act_1,act);

Inputpri_3,pri_4,pri_5,pri_6,qua_1,

qua_2,coin_1,coin_5,coin_10,

coin_20,rd,clk1,clk2,finish;

outputact_1;

output[3:

0]act;

output[5:

0]outw;

output[6:

0]outz;

wireact_1;

wire[3:

wire[5:

wire[6:

wire[3:

0]w1,w2,w3,w5,w6,w7,w8,w10;

wire[2:

0]w9;

wire[4:

0]w4;

Xuanpiaox1(.pri_3(pri_3),.pri_4(pri_4),

.pri_5(pri_5),.pri_6(pri_6),

.qua_1(qua_1),.qua_2(qua_2),.clk(clk1),

.rd(rd),.pri(w2),.qua(w3),.cost(w1));

Toubit1(.coin_1(coin_1),.coin_5(coin_5),

.coin_10(coin_10),.coin_20(coin_20),

.clk(clk1),.rd(rd),.coinh(w5),

.coinl(w6),.coin(w4));

zhaolingz1(.pri_in(w2),.cost_in(w1),.coin_in(w4),

.finish(finish),.clk(clk1),.rd(rd),.act(act),

.act_1(act_1),.rest(),.restl(w8),.resth(w7));

counter6c1(.clk2(clk2),.out(w9));

select6_1s1(.out(w10),.in0(w2),.in1(w3),.in2(w5),

.in3(w6),.in4(w7),.in5(w8),.sel(w9));

weixuanw(.din(w9),.out(outw));

zixingz(.din(w10),.out(outz));

endmodule

顶层综合文件如下:

各个子模块分析

2.1车票选择模块

车票选择模块是指对商品进行选择与购买。

车票分为票价3元,4元,5元,6元,共4种车票,乘客可以选择所要购买的票数(1张票,2张票)。

车票选择模块如图4所示:

1)输入

①rd:

模块复位信号,将所有输出信号清零。

作为开始一次购票过程的按键,也可以作为让乘客重新选票的按键。

②clk:

模块的时钟信号。

④pri_3,pri_4,pri_5,pri_6:

将其中一个置高电平,作为选择一种票价(3元,4元,5元,6元)。

⑤qua_1,qua_2:

将其中一个置高电平,作为选择购买车票的数量(一张票,两张票)。

2)输出

②pri[3:

0]:

表示所选票价,输出到余额计算模块和显示功能模块,作为判断出何种票的条件,并在数码管显示出车票单价。

③qua[3:

表示所买票数,输出到显示功能模块,在数码管显示出票数。

④cost[3:

表示应付总额,根据票价和票数来计算出应付的总额,输出到余额计算模块,用来计算找赎金额。

该车票选择模块的源程序如下:

modulexuanpiao(pri_3,pri_4,pri_5,pri_6,qua_1,qua_2,clk,rd,

pri,qua,cost);

inputpri_3,pri_4,pri_5,pri_6,qua_1,qua_2,rd,clk;

0]pri;

0]qua;

0]cost;

reg[3:

initial

begin

pri=0;

qua=0;

cost=0;

end

always@(rd)//清零

if(!

rd)

always@(posedgeclkornegedgerd)

elseif(pri_3&

&

qua_1)//选1张3元票,总额3元

pri=3;

qua=1;

cost=3;

elseif(pri_4&

qua_1)//选1张4元票,总额4元

pri=4;

cost=4;

elseif(pri_5&

qua_1)//选1张5元票,总额5元

pri=5;

cost=5;

elseif(pri_6&

qua_1)//选1张6元票,总额6元

pri=6;

cost=6;

qua_2)//选2张3元票,总额6元

qua=2;

qua_2)//选2张4元票,总额8元

cost=8;

qua_2)//选2张5元票,总额10元

cost=10;

qua_2)//选2张6元票,总额12元

cost=12;

endmodule

经过编译后建立波形文件,波形仿真图如图所示:

在此波形仿真图中,将pri_3,qua_1;

pri_5,qua_2;

pri_4,qua_2;

依次置高电平作为输入,输出显示为选择的3元票,1张票,应付总额3元;

选择的5元票,2张票,应付总额10;

选择的4元票,2张票,应付的总额8元,说明达到此车票选择模块的预期功能。

2.2钱币处理模块

钱币处理模块是对投入的钱币进行处理的过程,输出参数coin为投币数值计数器,以1元为单位进行计算。

该模块入口参数coin1(投入1元)coin5(投入5元钱),coin10(投入10元钱),coin20(投入20元)。

功能类似于计钱器,在清零的前提下,可准确计算,记录并保存所投入的总钱数。

钱币处理模块如图所示:

图钱币处理模块

③coin_1,coin_5,coin_10,coin_20:

表示投入1元,5元,10元,20元。

一次时钟上升沿,若信号为‘1’时,表示投入一次1元,5元10元,20元。

①coinh[3:

0],coinl[3:

信号输出到显示功能模块,在数码管上显示出投入钱币总额的十位和个位。

②coin[4:

表示投入钱币的总额,输出到余额计算模块,与应付总额相比较,来计算出找赎金额。

该钱币处理模块的源程序如下:

moduletoubi(coin_1,coin_5,coin_10,coin_20,clk,rd,

coinh,coinl,coin);

inputcoin_1,coin_5,coin_10,coin_20,rd,clk;

0]coinh,coinl;

output[4:

0]coin;

reg[4:

/*initial

coinh=0;

coinl=0;

coin=0;

end*/

/*always@(rd)//清零

begin

elseif(coin_1)//投入1元

case(coinl)//coinl是投入总额的个位数字

0:

coinl=1;

coinh=coinh;

//coinh是投入总额的十位数字

coin=coin+1;

//coin是投入总额

1:

coinl=2;

2:

coinl=3;

3:

coinl=4;

4:

coinl=5;

5:

coin=6;

6:

coinl=7;

7:

coinl=8;

8:

coinl=9;

9:

coinh=coinh+1;

endcase

elseif(coin_5)//投入5元

case(coinl)//coinl是投入总额的个位数字

coinl=6;

coin=coin+5;

elseif(coin_10)//投入10元

coinl=coinl;

//coinl是投入总额的个位数字

coin=coin+5'

b01010;

elseif(coin_20)//投入10元

coinh=coinh+4'

b0010;

;

//coinh是投入总额的十位数字

b10100;

经过编译后建立波形文件,波形仿真图如图所示:

在此波形仿真图中,将coin_1,coin_5,coin_10依次置了一个时钟周期的高电平作为输入,输出显示总额低位为6,高位为1,所投钱币总额为16,说明达到此钱币处理模块的预期功能。

2.3余额计算模块

余额计算模块主要完成出票找零操作。

通过所投钱币总额coin和应付总额cost计算找赎余额,然后用发光二极管点亮表示出票和找零。

钱数不够票价的,退出所投钱币数。

余额计算模块如图所示:

③finish:

用户使用的确定按键。

此信号置为高电平后,开始判断是否出票,计算找赎余额。

④pri_in[3:

输入乘客所选的线路和票价,用来判断出票时具体出哪张票。

⑤cost_in[3:

0],coin_in[4:

输入应付总额和所投钱币总额,用来判断是否出票,是否找赎,计算找赎余额。

①act[3:

表示出票。

车票共有4种,用4个发光二极管的点亮来表示具体出哪张票,若都不亮则表示不出票。

②act_1:

表示找赎。

若信号为‘1’,用1个发光二极管的点亮表示需要找赎。

③resth[3:

表示找赎余额十位,restl[3:

表示找赎余额个位,信号输出到显示功能模块,在数码管显示找赎余额。

该余额计算模块的源程序如下:

modulezhaoling(pri_in,cost_in,coin_in,finish,clk,rd,

act,act_1,rest,restl,resth);

input[3:

0]pri_in,cost_in;

input[4:

0]coin_in;

inputclk,finish,rd;

0]act,restl,resth;

0]rest;

regact_1;

begin

act=4'

b0000;

act_1=0;

rest=0;

resth=0;

restl=0;

/*always@(!

rd)//清零

elseif(finish)

if(coin_in==cost_in)//投币总额等于总票价

if(pri_in==3)

b0001;

//出3元票

elseif(pri_in==4)

//出4元票

elseif(pri_in==5)

b0100;

//出5元票

elseif(pri_in==6)

b1000;

//出6元票

elseif(coin_in>

cost_in)//投币总额大于总票价

act_1=1;

rest=coin_in-cost_in;

//余额总价

restl=rest%10;

//余额总价个位数字

resth=(rest-restl)/10;

//余额总价十位数字

elseif(pri_in==4)

elseif(coin_in<

cost_in)//投币总额小于总票价

//不出票

rest=coin_in;

//退钱

在此波形仿真图中,输入选择,3元票,应付总额为6元,所投钱币总额为10元,在finish确定键按下后,输出有找赎信号,且找赎余额为4元,出第1种车票(即3元票);

4元票,应付总额为4元,所投钱币为20元,在finish确定键按下后,输出找零信号,且找零余额为16元(高位为1,低位为6),出第二种车票(即4元票),由此说明达到余额计算模块的预期功能。

2.4显示功能模块

显示功能模块主要完成显示乘客选的票价、票数、投入钱数及找赎余额。

实验系统主板上,每次只能点亮一个数码管,如果显示这些数据,必须要用扫描的方式使得所需数码管依次点亮,选择较高的扫描频率,利用人眼的视觉暂留效果,视觉上可让数码管一起点亮。

此自动售票系统共需要6个数码管显示,此显示功能模块可分为四个部分:

1模6计数器(counter6):

每个时钟上升沿,计数器计数一次,产生3位二进制码,对6个数码管进行扫描,且对数据选择器的6个数据依次进行选择输出。

模6计数器模块

1)输入clk2:

计数器的时钟,每个时钟上升沿,计数器计数一次

2)输出out[2:

0]产生模为6信号000,001,010,011,100,101

此模6计数器源程序如下:

modulecounter6(clk2,out

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2