出租车计费器.docx

上传人:b****4 文档编号:3909180 上传时间:2022-11-26 格式:DOCX 页数:16 大小:99.35KB
下载 相关 举报
出租车计费器.docx_第1页
第1页 / 共16页
出租车计费器.docx_第2页
第2页 / 共16页
出租车计费器.docx_第3页
第3页 / 共16页
出租车计费器.docx_第4页
第4页 / 共16页
出租车计费器.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

出租车计费器.docx

《出租车计费器.docx》由会员分享,可在线阅读,更多相关《出租车计费器.docx(16页珍藏版)》请在冰豆网上搜索。

出租车计费器.docx

出租车计费器

目录

摘要……………………………………………………………………………………………I

Abstract…………………………………………………………………………………………II

绪论…………………………………………………………………………………………III

1、设计目的及要求……………………………………………………………………………1

1.1设计目的………………………………………………………………………………1

1.2设计任务及要求………………………………………………………………………1

2、设计原理及单元模块设计……………………………………………………………………2

2.1设计原理及方法………………………………………………………………………2

2.2单元模块设计…………………………………………………………………………3

2.2.1分频模块设计……………………………………………………………………3

2.2.2控制模块设计……………………………………………………………………3

2.2.3计时模块设计……………………………………………………………………3

2.2.4计程模块设计……………………………………………………………………3

2.2.5计费模块设计……………………………………………………………………3

2.2.6显示模块设计……………………………………………………………………4

3、代码仿真结果………………………………………………………………………………5

3.1分频模块仿真结果……………………………………………………………………5

3.2计程模块仿真结果……………………………………………………………………5

3.3计费模块仿真结果……………………………………………………………………6

4、硬件调试………………………………………………………………………………………7

5、心得体会………………………………………………………………………………………8

6、参考文献………………………………………………………………………………………9

附件1:

顶层文件图……………………………………………………………………………10

附件2:

程序源代码……………………………………………………………………………11

2、设计原理及单元模块设计

2.1设计原理及方法

本次设计首先在QuartusⅡ环境中对出租车自动计费器的各个部分利用VHDL这一硬件描述语言予以设计,生成模块。

主要有:

分频模块、控制模块、计时模块、计程模块、计费模块及显示模块组成。

其系统框图如图2-1所示。

图2-1出租车自动计费器系统框图

计费器在非停车状态完成计程功能并输出到计费模块进行计费,计时模块在停车状态完成计时功能并产生等时计费信号。

计费模块是设计的核心与难点,涉及到多种时钟信号,并有多种计费标准。

计程模块、计时模块、计费模块根据位选信号,输出相应数据的当前选中数字,由顶层模块根据显示数据类型变换信号进行选择,传输给显示模块。

由于实验箱上数码管有限,另用三个LED灯组合,帮助显示计时的分钟。

本次设计首先在QuartusⅡ环境中对出租车自动计费器的各个部分利用VHDL这一硬件描述语言予以设计,进行仿真,然后编写顶层模块将各个模块连接,并对相互之间的信号进行必要处理,从而实现整机功能,最后在实验箱上进行物理测试。

2.2单元模块设计

2.2.1分频模块设计

分频模块从外部读入实验箱的时钟信号clk,向外输出计时信号q,供控制模块、显示模块使用。

具体程序代码详见附录。

2.2.2控制模块设计

控制模块输入端有系统时钟输入端clk、系统复位信号输入端rst、停车信号输入端stop。

靠与时钟信号clk进行逻辑与运算,达到控制计程及计时功能。

具体程序代码详见附录。

2.2.3计时模块设计

计时器有秒计数及60进制的计数,当停车信号stop为'0',进行计时。

计时器中还有一个3进制计数,每当代表分钟的60进制计数器计数3次,产生一个等时计费信号led。

具体程序代码详见附录。

2.2.4计程模块设计

计程器在得到停车信号时,计程器时钟信号无效,在没有停车信号stop时,每有1000个脉冲clk(1s)才进行计数1次,即里程加0.1mil。

在得到复位信号rst时,计程器内部所有计数器和计数信号清零复位,里程计费信号输出'0'。

具体程序代码详见附录。

2.2.5计费模块设计

因为在计费过程中存在小数的计费情况,所以需精确到十分位。

此计价器根据里程及费用来选择不同的计费方式。

根据停车的时间信号led,来选择计费是否加0.7。

复位信号rst为'0',计价器所有数据复位。

具体程序代码详见附录。

2.2.6显示模块设计

显示模块包含一个8位共阴数码管和3/8译码器,还有3个led灯,用来显示停车时间的分钟数。

具体程序代码详见附录。

3、代码仿真结果

仿真结果分为功能仿真与逻辑仿真两幅图进行呈现。

我们会发现时序仿真与功能仿真的波形有差异,这是因为在实际门电路的运行中,电平的处理过程造成了信号的延时。

3.1分频模块仿真结果

该模块的任务是将输入的时钟信号,进行偶数次分频,此处选为4分频进行仿真。

图3-1分频模块功能仿真图

图3-2分频器模块时序仿真图

3.2计程模块仿真结果

该模块的任务是当输入脉冲时,进行计数,当有复位信号时,计数器复位。

当计数器计满后,产生进位信号。

图3-3计程模块功能仿真图

图3-4计程模块时序仿真图

3.3计费模块仿真结果

该模块的任务是根据输入里程数,进行计算。

不同时刻、不同里程,计算所得出的费用不一样。

图3-5计费模块功能仿真图

图3-6计费模块时序仿真图

4、硬件调试

在完成程序综合后,进行硬件调试之前,先要对芯片进行定义。

具体操作如下:

首先点击Assignments—Device,选择实验箱所用芯片型号EP1C3T144C8。

点选DeviceandPinOptions。

在这里选择UnusedPins选项卡,将Reserveallunusedpins选为Asinputtri-stated。

然后开始进行管脚设定,根据实验箱的资源配置设置如下:

PinName

Location

I/OStandard

PinName

Location

I/OStandard

Clk

16

Input

Segout[5]

99

Output

Led[0]

109

Output

Segout[6]

100

Output

Led[1]

110

Output

Segout[7]

103

Output

Led[2]

111

Output

Sel[0]

85

Output

Segout[0]

91

Output

Sel[1]

84

Output

Segout[1]

94

Output

Sel[2]

83

Output

Segout[2]

96

Output

Stop

51

Input

Segout[3]

97

Output

Rst

52

Input

Segout[4]

98

Output

表4-1.芯片管脚分配表

再次进行综合,正确后就可将文件下载到芯片中。

连接下载线,调整实验箱的跳线后,打开电源,经QuartusⅡ中的“PROGRAMMER”菜单,调出编程器窗口。

按下编程器窗口中的“START”按钮,设计的内容就开始下载到FPGA芯片中。

进行多组功能组合测试,显示结果符合设计要求,证明设计成功。

5、心得体会

通过两个星期的课程设计,让笔者明白了不仅要运用学过的EDA技术及应用,数字电路、模拟电路以及电子技术实验等知识,还要学会查阅各种图书资料和工具书,并将新知识和所学的结合起来为自己所用。

在做整个课程设计的过程中,作者进一步熟悉使用了QuartusII软件,能较好的应用这个软件,不管是程序的编写还是在顶层原理图的设计都有所提高,还增强了动手能力。

应用软件的时候,要注意积累每次的体会和错误,下次碰到该注意的地方就要小心点,碰到出过错误的地方就要格外注意不要再犯同样的错误,这种方法应该适用做任何一件事吧。

在设计中遇到一些困难和问题,在与同学的讨论中,解决了问题,觉得很有收获。

在整个课程设计的过程中让作者意识到耐心、毅力和细心是做好一件事的必须品质。

在应用QuartusII软件编程的时候,有很多小细节是需要注意的,不然一不小心就会出现很多错误。

要注意保存文件名和实体名要一致,保存位置要是某个盘里的某个文件夹。

图形编辑中同样有很多需要注意的地方,以及怎样将程序和图形结合起来。

通过这次设计,作者更好地掌握了这些基本技巧,学会了多学多练,也懂得了实践出真知。

6、参考文献

[1]潘松,黄继业.EDA技术与VHDL.北京:

清华大学出版社,2007.1.

[2]宋嘉玉,孙丽霞.EDA实用技术.北京:

人民邮电出版社,2006.12.

[3]齐洪喜,陆颖.VHDL电路设计实用技术.北京:

清华大学出版社,2004.5.

[4]刘艳萍,高振斌,李志军.EDA实用技术及应用.北京:

国防工业出版社,2006.1.

[5]章彬宏.EDA应用技术.北京:

北京理工大学出版社,2007.7.

附件1:

顶层文件图

附件2:

程序源代码

---------------------------------------------------------------------------------------------------------------------

libraryieee;-------分频器

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

useieee.std_logic_arith.all;

entitycount10000is

port(clk:

instd_logic;

q:

outstd_logic);

endcount10000;

architecturebhvofcount10000is

signalq0:

std_logic;

begin

process(clk)

variablecount:

integerrange0to10000;

begin

if(clk'eventandclk='1')then

if(count<10000)then

count:

=count+1;

else

q0<=notq0;

count:

=0;

endif;

endif;

endprocess;

q<=q0;

endbhv;

---------------------------------------------------------------------------------------------------------------------

libraryieee;-----控制器

useieee.std_logic_1164.all;

entitystopis

port(stop:

instd_logic;

rst:

instd_logic;

clk:

instd_logic;

q1:

outstd_logic;

q2:

outstd_logic;

rst_o:

outstd_logic);

endstop;

architecturebhvofstopis

begin

process(clk,stop,rst)

begin

q1<=clkand(notstop)andrst;

q2<=clkandstopandrst;

rst_o<=rst;

endprocess;

endbhv;

---------------------------------------------------------------------------------------------------------------------

libraryieee;--------计时器

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

useieee.std_logic_arith.all;

entitymin3is

port(stop:

instd_logic;

clk:

instd_logic;

led:

outstd_logic_vector(0to2);

q:

bufferintegerrange0to59);

endmin3;

architecturebhvofmin3is

signalq0:

std_logic;

begin

process(clk,stop)

variablecount:

integerrange0to500;

variablemin:

integerrange0to3;

begin

if(clk'eventandclk='1')then

if(count<500)then

count:

=count+1;

else

q0<=notq0;

if(q0='1')then

if(q<59)then

q<=q+1;

if(min=0)then

led<="000";

endif;

else

q<=0;

min:

=min+1;

if(min=1)then

led<="001";

elsif(min=2)then

led<="011";

elsif(min=3)then

led<="111";

min:

=0;

endif;

endif;

endif;

count:

=0;

endif;

endif;

if(stop='1')then

q<=0;

min:

=0;

led<="000";

endif;

endprocess;

endbhv;

---------------------------------------------------------------------------------------------------------------------

libraryieee;----------计程器

useieee.std_logic_1164.all;

entitymileis

port(clk:

instd_logic;

rst:

instd_logic;

mil:

bufferintegerrange0to99;

mil_p:

bufferintegerrange0to9);

endmile;

architecturebhvofmileis

begin

process(clk,rst)

variablenum:

integerrange0to1000;

begin

if(clk'eventandclk='1')then

if(num=1000)then

if(mil_p=9)then

if(mil=99)then

mil<=0;

else

mil<=mil+1;

endif;

mil_p<=0;

else

mil_p<=mil_p+1;

endif;

num:

=0;

else

num:

=num+1;

endif;

endif;

if(rst='0')then

mil<=0;mil_p<=0;

endif;

endprocess;

endbhv;

---------------------------------------------------------------------------------------------------------------------

libraryieee;------------计费器

useieee.std_logic_1164.all;

entityfeeis

port(stop_3min:

instd_logic_vector(0to2);

clk:

instd_logic;

mil:

inintegerrange0to99;

mil_p:

inintegerrange0to9;

rst:

instd_logic;

fee:

bufferintegerrange0to99;

fee_p:

bufferintegerrange0to9);

endfee;

architecturebhvoffeeis

begin

process(clk,rst,stop_3min)

variablefee_p0:

integerrange0to20;

variablemil0:

integerrange3to99;

variablechk_3:

std_logic:

='0';

begin

if(clk'eventandclk='1')then

if(stop_3min/="111")then

chk_3:

='0';

endif;

if(stop_3min="111"andchk_3='0')then

fee_p0:

=fee_p0+7;

fee<=fee+fee_p0/10;

chk_3:

='1';

endif;

if(mil=0)then

fee<=3;

fee_p0:

=0;

endif;

if(mil>0andmil<3)then

if(mil_p>=5)then

fee<=(mil+1)*2+1;

else

fee<=(mil+1)*2;

endif;

endif;

if(mil=3)then

fee<=8;

endif;

if(mil>3andfee<20andmil=mil0+1)then

fee_p0:

=fee_p0+4;

fee<=fee+1+fee_p0/10;

mil0:

=mil;

endif;

if(fee>=20andmil=mil0+1)then

fee_p0:

=fee_p0+1;

fee<=fee+2+fee_p0/10;

mil0:

=mil;

endif;

fee_p<=fee_p0rem10;

fee_p0:

=fee_p0rem10;

endif;

if(rst='0')then

fee<=0;fee_p<=0;mil0:

=3;

endif;

endprocess;

endbhv;

---------------------------------------------------------------------------------------------------------------------

libraryieee;------------显示模块

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

useieee.std_logic_arith.all;

entityseg7is

port(time:

inintegerrange0to59;

fee:

inintegerrange0to99;

fee_p:

inintegerrange0to9;

mil:

inintegerrange0to99;

mil_p:

inintegerrange0to9;

clk:

instd_logic;

sel:

bufferstd_logic_vector(2downto0);

segout:

outstd_logic_vector(7downto0));

endseg7;

architecturebhvofseg7is

signalshow:

integerrange0to10;

begin

process(clk)

begin

if(clk'eventandclk='1')then

if(sel="000")then

show<=feerem10;

sel<="001";

elsifsel="001"then

show<=fee/10;

sel<="010";

elsifsel="010"then

show<=mil_p;

sel<="011";

elsifsel="011"then

show<=milrem10;

sel<="100";

elsifsel="100"then

show<=mil/10;

sel<="101";

elsifsel="101"then

show<=timerem10;

sel<="110";

elsifsel="110"then

show<=time/10;

sel<="111";

elsifsel="111"then

show<=fee_p;

sel<="000";

else

sel<="000";

endif;

endif;

endprocess;

withshowselect

segout(6downto0)<="0111111"when0,

"0000110"when1,

"1011011"when2,

"1001111"when3,

"1100110"when4,

"1101101"when5,

"1111101"when6,

"0000111"when7,

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

当前位置:首页 > PPT模板 > 艺术创意

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1