EDA地铁售票系统长沙理工.docx

上传人:b****3 文档编号:10747797 上传时间:2023-05-27 格式:DOCX 页数:19 大小:182.23KB
下载 相关 举报
EDA地铁售票系统长沙理工.docx_第1页
第1页 / 共19页
EDA地铁售票系统长沙理工.docx_第2页
第2页 / 共19页
EDA地铁售票系统长沙理工.docx_第3页
第3页 / 共19页
EDA地铁售票系统长沙理工.docx_第4页
第4页 / 共19页
EDA地铁售票系统长沙理工.docx_第5页
第5页 / 共19页
EDA地铁售票系统长沙理工.docx_第6页
第6页 / 共19页
EDA地铁售票系统长沙理工.docx_第7页
第7页 / 共19页
EDA地铁售票系统长沙理工.docx_第8页
第8页 / 共19页
EDA地铁售票系统长沙理工.docx_第9页
第9页 / 共19页
EDA地铁售票系统长沙理工.docx_第10页
第10页 / 共19页
EDA地铁售票系统长沙理工.docx_第11页
第11页 / 共19页
EDA地铁售票系统长沙理工.docx_第12页
第12页 / 共19页
EDA地铁售票系统长沙理工.docx_第13页
第13页 / 共19页
EDA地铁售票系统长沙理工.docx_第14页
第14页 / 共19页
EDA地铁售票系统长沙理工.docx_第15页
第15页 / 共19页
EDA地铁售票系统长沙理工.docx_第16页
第16页 / 共19页
EDA地铁售票系统长沙理工.docx_第17页
第17页 / 共19页
EDA地铁售票系统长沙理工.docx_第18页
第18页 / 共19页
EDA地铁售票系统长沙理工.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

EDA地铁售票系统长沙理工.docx

《EDA地铁售票系统长沙理工.docx》由会员分享,可在线阅读,更多相关《EDA地铁售票系统长沙理工.docx(19页珍藏版)》请在冰点文库上搜索。

EDA地铁售票系统长沙理工.docx

EDA地铁售票系统长沙理工

模拟地铁售票系统实验报告

学院:

计算机与通信工程学院班级:

通信工程

参与人员:

郭xx(组长)2012xxxxx

吴xx2012xxxxx

赵xx2012xxxxxxxx

刘xx2012xxxxxxx

徐x2012xxxxxxx

题目:

模拟地铁售票系统。

主要内容:

利用VHDL语言设计地铁售票系统的核心功能MAXPLUSII软件作为发平台,设计城市地铁售票系统程序并进行仿真。

使其实现选站、选择张数、出票、找零等功能。

设计要求

功能描述:

用于模仿地铁售票的自动售票,完成地铁售票的核心控制功能。

功能要求:

售票机有2个进币孔,一个是输入硬币,一个是输入纸币,硬币的识别范围是1元的硬币,纸币的识别范围是1元、2元,5元,10元。

乘客可以连续多次投入钱币。

乘客可以选择的种类为2——5元,乘客一次只能选择一个出站口。

购买车票时,乘客先选择出站名,然后选择所需的票数,再进行投币,投入的钱币达到所需金额时,售票机自动出票,并找出余额,本次交易结束,等待下一次的交易。

在投币期间,乘客可以按取消键取消本次操作,钱币自动退出。

课题分析

1.买车票时,乘客按“开始选择”按钮,接着选择出站口接着选择购票数量(根据提示,一次购票数限制在6张以内);然后按“开始投币”按钮,投入钱币;当投入的钱币达到所需金额时,售票机自动出票,并找出余额。

考虑到控制整个售票机的物理体积,余额将全部采用1元硬币的形式找出。

2.选择出站口或投币过程中,乘客都可以按“取消”按钮取消该次交易。

选择出站口的过程中,若按“取消”,则售票机直接回到初始状态;投币过程中,若按“取消”,则售票机将乘客已经投入的钱币全部退出,再回到初始状态。

3.客一次只能选择一个出站口,根据乘坐的站数确定票价。

假设乘客购票所在站到终点站共有19站。

若乘坐1--5站,则票价为2元/张;若乘坐6-10站,则票价为3元/张。

19个站用长度位5的二进制向量编码表示,即00001表示乘坐1站,00010表示乘坐2站,依次类推,10011表示乘坐19站(到终点站)。

4.票机有1个进币端口。

硬币口可识别1元硬币,用单独信号的上升沿方式表示,纸币口类似,用长度为4的二进制编码方式表示。

乘客可以连续多次投入钱币,并且可以以任意顺序投入硬币和纸币

系统流程图

1选站状态当“确认”信号为高电平时,输入站点信号(0-19)被读入有效,确认票型,赋给相应暂存变量并进入选票数状态。

当站点为前4站时,票为2元票,后每加5个站加一块钱。

否则当“确认”信号为低电平,所处状态不变,系统没有录入有效信息。

直至用户按下“确认”键前,选择的站点后选的覆盖先选的。

②选票数状态当“确认”信号为高电平时,输入票数(1-6)信号被读入有效,赋给相应暂存变量,计算出应付总金额,并进入付款状态。

这里需参考选站状态时确定的票类型计算总金额。

否则当“确认”信号为低电平,所处状态不变,系统没有录入有效信息。

直至用户按下“确认”键前,选择的票数后选的覆盖先选的。

③付款状态用户每投入钱币,系统更新“已付金额”。

若“已付金额”不小于“应付金额”,系统进入找零及出票状态。

若不足,系统任处于付款准备状态,直至金额足够。

若中途用户按下“取消”键,系统进入退款准备状态。

④退款准备状态系统计算出应退金额,并按钱的面值从大到小的优先级算出每种面值的钞票应该付几张。

系统进入结束状态。

⑤找零及出票准备状态系统计算出应找金额,并按钱的面值从大到小的优先级算出每种面值的钞票应该付几张。

系统计算出出票的种类和票数。

系统进入结束状态。

系统并将所有数据清除,进入下一个购票环节。

程序代码:

modulesubway_tb;

regrst;

regclk;

regget;

regcancel;

reg[4:

0]sel_in;

reg[4:

0]sel_out;

reg[3:

0]count;

regci_1;

regci1;

regci5;

regci10;

wireco1;

wireco2;

wireco3;

wireco4;

wirecak1;

regget_1;

 

subwaysu(

.rst(rst),

.clk(clk),

.get(get),

.cancel(cancel),

.sel_in(sel_in),

.sel_out(sel_out),

.ci_1(ci_1),

.ci1(ci1),

.ci5(ci5),

.ci10(ci10),

.co1(co1),

.co2(co2),

.co3(co3),

.co4(co4),

.cak1(cak1),

.get_1(get_1),

.count(count)

);

initial

begin

rst=1;

//forever#10clk=!

clk;

cancel=0;

#100;

rst=0;

sel_in=5'b00111;

sel_out=5'b00001;

#100;

count=4'b0011;

#100;

get_1=1'b1;

get=1'b1;

ci_1=1'b1;

ci10=1'b1;

ci5=1'b1;

#150;

count=4'b0000;

ci_1=1'b0;

ci10=1'b0;

ci5=1'b0;

#100;

sel_in=5'b00000;

sel_out=5'b00000;

#3000

get=1'b0;

get_1=1'b0;

//----------------

rst=1;

//forever#10clk=!

clk;

cancel=0;

#100;

rst=0;

sel_in=5'b00111;

sel_out=5'b00001;

#100;

count=4'b0011;

#100;

get_1=1'b1;

get=1'b1;

ci10=1'b1;

 

#150;

count=4'b0000;

cancel=1'b1;

ci_1=1'b0;

ci10=1'b0;

ci5=1'b0;

end

endmodule

 

modulesubway(

rst,

clk,

get,

get_1,

cancel,

sel_in,

sel_out,

count,

ci_1,

ci1,

ci5,

ci10,

co1,co2,co3,co4,

cak1,

);

inputrst,clk;

inputget,cancel;

inputci_1,ci1,ci5,ci10;

input[3:

0]count;

input[4:

0]sel_in;

input[4:

0]sel_out;

inputget_1;

outputco1,co2,co3,co4;

outputcak1;

wire[7:

0]cout;

wirefinish;

wirefinishp;

wire[3:

0]sel;

wireen;

wireclr;

wire[7:

0]mount;

 

modulezhan(

rst,

clk,

clr,

get_1,

sel_in,

sel_out,

sel

);

inputrst;

inputclk;

inputclr;

inputget_1;

input[4:

0]sel_in;

input[4:

0]sel_out;

outputreg[3:

0]sel;

reg[3:

0]a;

always@(posedgeclk&&get_1)

begin

if(!

rst==0)a=4'b0000;

elseif(!

clr==0)a=4'b0000;

elseif(sel_in>=sel_out)

a<=((sel_in-sel_out)/5)+1;

elseif(sel_in

a<=~((sel_in-sel_out)/5)+2;

end

always@(posedgeclk)

begin

begin

case(a)

4'b0001:

sel=4'b0010;

4'b0010:

sel=4'b0011;

4'b0011:

sel=4'b0100;

4'b0100:

sel=4'b0101;

default:

sel=4'b0000;

endcase

end

end

endmodule

modulecount(clk,

rst,

clr,

ci_1,

ci1,

ci5,

ci10,

cout

);

inputrst;

inputclk;

inputclr;

inputci_1,ci1,ci5,ci10;

output[7:

0]cout;

reg[2:

0]q1,q5,q10,q_1;

assigncout=q1+5*q5+10*q10+1*q_1;

always@(posedgerstorposedgeclrorposedgeci1)

begin

if(rst==1)q1<=0;

elseif(clr==1)q1<=0;

else

begin

q1=q1+1;

end

end

always@(posedgerstorposedgeclrorposedgeci5)

begin

if(rst==1)q5<=0;

elseif(clr==1)q5<=0;

else

begin

q5=q5+1;

end

end

always@(posedgerstorposedgeclrorposedgeci10)

begin

if(rst==1)q10<=0;

elseif(clr==1)q10<=0;

else

begin

q10=q10+1;

end

end

always@(posedgerstorposedgeclrorposedgeq_1)

begin

if(rst==1)q_1<=0;

elseif(clr==1)q_1<=0;

else

begin

q_1=q_1+1;

end

end

endmodule

modulezhao(rst,

clk,

clr,

finishp,

mount,

cak1

);

inputrst;

inputclk;

inputclr;

inputfinishp;

input[7:

0]mount;

outputcak1;

regregcak1;

reg[7:

0]q;

assigncak1=regcak1;

always@(posedgeclk&&finishp==1)

begin

if(mount!

=0)

q=mount;

if(q)

begin

regcak1=1;q=q-1;

end

if(!

q)

begin

regcak1=0;

end

end

endmodule

modulecontrl(

rst,

clk,

get,

cancel,

sel,//

count,//

cout,//

mount,//

finish,

finish_done,//

finishp,

clr,

en//

);

inputrst;

inputclk;//

inputget,cancel;

input[3:

0]sel;

input[3:

0]count;

outputregfinish_done;

input[7:

0]cout;

inputclr;

outputreg[7:

0]mount;

outputregfinish,finishp;

outputregen;

always@(posedgerstorposedgeclk)

begin

finish_done=0;

if(rst==1)

begin

mount<=0;

finish<=0;

finishp<=0;

en<=0;

end

else

begin

if((get==1)&&(cout>=sel*count))

begin

finish<=1;

finishp<=1;

finish_done<=1;

en<=1;

mount=cout-sel*count;

end

elseif((cancel==1)||((get==1)&&(cout

begin

finishp<=0;

finish<=1;

mount<=cout;

finish_done<=1;

en<=1;

end

else

begin

finishp<=0;

finish<=0;

end

end

end

endmodule

modulechupiao(rst,clk,clr,

en,

sel,

count,

co1,co2,co3,co4);

inputrst,clk,clr;

inputen;

input[3:

0]sel;

input[3:

0]count;

outputco1,co2,co3,co4;

reg[3:

0]q;

//reg[3:

0]qsel;

reg[2:

0]qcount;

assignco1=q[0];

assignco2=q[1];

assignco3=q[2];

assignco4=q[3];

always@(posedgeclk&&en==1)

begin

if(rst==1)qcount<=0;

if(count!

=0)

qcount=count;

if(qcount&&sel==2)

begin

q[0]=1;qcount<=qcount-1;

end

if(!

qcount)

begin

q[0]=0;

end

end

endmodule

结束语

在此次课程设计中,我们收获了许多,不仅在知识学习方面,而且在动手能力方面、团结合作能力等方面都有了一定的成就。

首先,在知识学习方面,虽然我们开始有在计算机组成原理这一门课程中接触过verilogL这一门语言,但是我们都还不是很了解,只知道它由实体、结构体组成,其余的就不是很了解,但是在此次课程设计中,我们有了比较详细的了解,基本能够写出一个比较完整的程序。

这两周的自学中,我们也体会到了自学得快乐。

其次,在动手能力方面,很多时候我们都是知识不能够结合实践,所以很多时候我们都不知道应该怎么样开始,不过此次由于有了老师的详细讲解,所以,我们能够很快知道接下来应该做什么,有什么作用,得出什么结果。

最后,在团结合作能力方面,虽然每个人有每个人的题目板块,但是我们还是充分发挥了我们的团结合作能力,找到程序的同学帮没找到的同学找,有什么错误的大家一起讨论,一起找资料解决,最后,实在不行还有我们坚强的后盾——我们的指导老师,所以我们合作得很快乐。

在这次设计过程中,体现出团队设计的能力以及综合运用知识的能力,体会了学以致用、突出劳动成果的喜悦心情,从中发现平时学习的不足和薄弱环节,从而加以弥补。

同时,也再次体会到了学习合作的快乐。

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

当前位置:首页 > 高等教育 > 农学

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

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