基于vhdl语言的出租车计费器.docx

上传人:b****4 文档编号:5730628 上传时间:2023-05-09 格式:DOCX 页数:20 大小:94.04KB
下载 相关 举报
基于vhdl语言的出租车计费器.docx_第1页
第1页 / 共20页
基于vhdl语言的出租车计费器.docx_第2页
第2页 / 共20页
基于vhdl语言的出租车计费器.docx_第3页
第3页 / 共20页
基于vhdl语言的出租车计费器.docx_第4页
第4页 / 共20页
基于vhdl语言的出租车计费器.docx_第5页
第5页 / 共20页
基于vhdl语言的出租车计费器.docx_第6页
第6页 / 共20页
基于vhdl语言的出租车计费器.docx_第7页
第7页 / 共20页
基于vhdl语言的出租车计费器.docx_第8页
第8页 / 共20页
基于vhdl语言的出租车计费器.docx_第9页
第9页 / 共20页
基于vhdl语言的出租车计费器.docx_第10页
第10页 / 共20页
基于vhdl语言的出租车计费器.docx_第11页
第11页 / 共20页
基于vhdl语言的出租车计费器.docx_第12页
第12页 / 共20页
基于vhdl语言的出租车计费器.docx_第13页
第13页 / 共20页
基于vhdl语言的出租车计费器.docx_第14页
第14页 / 共20页
基于vhdl语言的出租车计费器.docx_第15页
第15页 / 共20页
基于vhdl语言的出租车计费器.docx_第16页
第16页 / 共20页
基于vhdl语言的出租车计费器.docx_第17页
第17页 / 共20页
基于vhdl语言的出租车计费器.docx_第18页
第18页 / 共20页
基于vhdl语言的出租车计费器.docx_第19页
第19页 / 共20页
基于vhdl语言的出租车计费器.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于vhdl语言的出租车计费器.docx

《基于vhdl语言的出租车计费器.docx》由会员分享,可在线阅读,更多相关《基于vhdl语言的出租车计费器.docx(20页珍藏版)》请在冰点文库上搜索。

基于vhdl语言的出租车计费器.docx

基于vhdl语言的出租车计费器

目录

课题名称出租车计费器1

第一章设计指标2

1.1任务要求2

1.2设计原理2

1.2.1车速控制模块2

1.2.2里程动态显示模块2

1.2.3计费动态显示模块2

第二章系统框图2

第三章各单元电路设计3

3.1输入选择模块3

3.1.1说明3

3.1.2模块图3

3.1.3程序3

3.2状态模块3

3.2.1说明3

3.2.2模块图4

3.2.3程序4

3.3分频模块5

3.3.1说明5

3.3.2模块图5

3.3.3程序5

3.4计数模块6

3.4.1说明6

3.4.2模块图6

3.4.3程序6

3.5显示译码模块8

3.5.1说明8

3.5.2模块图8

3.5.3程序8

3.6顶层程序9

3.6.1说明9

3.6.2模块图10

3.6.3程序10

第四章总电路图12

第五章工作原理12

5.1选择输入模块12

5.2状态模块12

5.3分频模块12

5.4计数模块12

5.5显示模块13

第六章心得体会13

参考文献13

 

课题名称出租车计费器

内容摘要:

随着EDA技术的高速发展,电子系统的设计技术和工具发生了深刻的变化,大规模可编程逻辑器件CPLD/FPGA的出现,给设计人员带来了诸多方便。

利用它进行产品开发,不仅成本低、周期短、可靠性高,而且具有完全的知识产权。

该系统利用VHDL语言、PLD设计出租车计费系统,以QuartusII软件作为开发平台,设计了出租车计费器系统程序并进行了程序仿真。

使其实现计费以及预置和模拟汽车启动、停止、暂停等功能,并动态扫描显示车费数目。

关键词:

出租车计费器;计数器;VHDL语言;QuartusII。

第一章设计指标

1.1任务要求

(1)自动计费器具有行车里程计费、等候时间计费和起步费三部分,三项计费统一用4位数码管现实,最大金额为99.99元。

(2)行车里程起步费设为8.00元,并在行车3公里以后再按单价2元/km计费。

等候时间计费设为1元/10分钟,要求行车时,计费值每公里刷新一次;等候时每10分钟刷新一次;行车不到1km或等候不足10分钟则忽略计费。

(3)实现预置功能:

能实现预置功能:

能预置起步费、每公里收费、车行加费里程。

(4)实现模拟功能:

能模拟汽车启动、停止、暂停、车速等状态。

1.2设计原理

1.2.1车速控制模块

当起停键为启动状态时(高电平),模块根据车速选择和基本车速发出响应频率的脉冲驱动计费器和里程显示模块进行计数;当处于停止状态时暂停发出脉冲,此时当输入600个单位脉冲后,即10分钟,计费器数值加1元。

当不足600个脉冲时,不进行计费。

1.2.2里程动态显示模块

其包括计数车速控制模块发出的脉冲以及将计数显示动态显示出来,每来一个脉冲里程值加0.1(控制器每发一个脉冲代表运行了0.1公里)。

1.2.3计费动态显示模块

其初值为8元,当里程超过3公里后才接受计数车速控制模块发出的脉冲的驱动,并且计数显示动态显示出来,每来一个脉冲(代表运行了0.5公里)其数值加1元,当收费超过20时数值加1.5元。

第二章系统框图

第三章各单元电路设计

3.1输入选择模块

3.1.1说明

模块MS,输入端口CK0、CK1为两个不同的时钟信号,来模拟汽车的加速和匀速,JS加速按键。

3.1.2模块图

3.1.3程序

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYMSIS

PORT(CK0:

INSTD_LOGIC;

CK1:

INSTD_LOGIC;

JS:

INSTD_LOGIC;

CLK_OUT:

OUTSTD_LOGIC);

ENDMS;

ARCHITECTUREONEOFMSIS

BEGIN

PROCESS(JS,CK0,CK1)

BEGIN

IFJS='0'THENCLK_OUT<=CK0;

ELSECLK_OUT<=CK1;

ENDIF;

ENDPROCESS;

ENDONE;

3.2状态模块

3.2.1说明

该模块实现车行状态输出功能,其中clk为时钟信号,enable为启动使能信号,sto暂停信号,clr为清零信号,st为状态信号。

3.2.2模块图

3.2.3程序

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYSOUTIS

PORT(CLK:

INSTD_LOGIC;

ENABLE:

INSTD_LOGIC;

STO:

INSTD_LOGIC;

CLR:

INSTD_LOGIC;

ST:

OUTSTD_LOGIC_VECTOR(1DOWNTO0));

ENDSOUT;

ARCHITECTUREONEOFSOUTIS

BEGIN

PROCESS(CLK,ENABLE,STO,CLR)

VARIABLECQI:

STD_LOGIC_VECTOR(7DOWNTO0);

VARIABLESTATE:

STD_LOGIC_VECTOR(1DOWNTO0);

BEGIN

IFCLR='0'THENCQI:

=(OTHERS=>'0');

ELSIFCLK'EVENTANDCLK='1'THEN

IFSTO='1'THENSTATE:

="11";CQI:

=CQI;

ELSIFENABLE='1'THEN

CQI:

=CQI+1;

IFCQI<=30THENSTATE:

="00";

ELSIFCQI>30ANDCQI<=80THENSTATE:

="01";

ELSE

STATE:

="10";

ENDIF;

ENDIF;

ENDIF;

ST<=STATE;

ENDPROCESS;

ENDONE;

3.3分频模块

3.3.1说明

该模块实现将时钟信号5分频功能。

3.3.2模块图

3.3.3程序

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYPULSEIS

PORT(CLK0:

INSTD_LOGIC;

FOUT:

OUTSTD_LOGIC);

ENDPULSE;

ARCHITECTUREONEOFPULSEIS

BEGIN

PROCESS(CLK0)

VARIABLECNT:

STD_LOGIC_VECTOR(2DOWNTO0);

VARIABLEFULL:

STD_LOGIC;

BEGIN

IFCLK0'EVENTANDCLK0='1'THEN

IFCNT="100"THEN

CNT:

="000";

FULL:

='1';

ELSE

CNT:

=CNT+1;

FULL:

='0';

ENDIF;

ENDIF;

FOUT<=FULL;

ENDPROCESS;

ENDONE;

3.4计数模块

3.4.1说明

实现汽车模拟计费功能。

clr1为清零信号,si为状态信号,c0,c1,c2,c3分别为费用的四位显示。

3.4.2模块图

3.4.3程序

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYCOUNTERIS

PORT(CLK_DIV:

INSTD_LOGIC;

CLR1:

INSTD_LOGIC;

SI:

INSTD_LOGIC_VECTOR(1DOWNTO0);

C0:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

C1:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

C2:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

C3:

OUTSTD_LOGIC_VECTOR(3DOWNTO0));

ENDCOUNTER;

ARCHITECTUREONEOFCOUNTERIS

BEGIN

PROCESS(CLK_DIV,CLR1,SI)

VARIABLEQ0:

STD_LOGIC_VECTOR(3DOWNTO0);

VARIABLEQ1:

STD_LOGIC_VECTOR(3DOWNTO0);

VARIABLEQ2:

STD_LOGIC_VECTOR(3DOWNTO0);

VARIABLEQ3:

STD_LOGIC_VECTOR(3DOWNTO0);

VARIABLEaa:

integerrange0to600;

BEGIN

IFCLR1='0'THENQ0:

="0000";Q1:

="0000";Q2:

="0000";Q3:

="0000";

ELSIFCLK_DIV'EVENTANDCLK_DIV='1'THEN

CASESIIS

WHEN"00"=>Q1:

="0000";Q2:

="1000";Q3:

="0000";

WHEN"01"=>IFQ2<"1001"THEN

Q2:

=Q2+1;

ELSE

Q2:

="0000";

IFQ3<"1001"THEN

Q3:

=Q3+1;

ENDIF;

ENDIF;

Q1:

="0000";

WHEN"10"=>IFQ1<"0101"THEN

Q1:

=Q1+5;

ELSE

Q1:

="0000";

ENDIF;

IFQ1="0101"THEN

IFQ2<"1001"THEN

Q2:

=Q2+1;

ELSE

Q2:

="0000";

IFQ3<"1001"THEN

Q3:

=Q3+1;

ENDIF;

ENDIF;

ELSE

IFQ2<"1001"THEN

Q2:

=Q2+2;

ELSE

Q2:

="0001";

IFQ3<"1001"THEN

Q3:

=Q3+1;

ENDIF;

ENDIF;

ENDIF;

WHEN"11"=>aa:

=aa+1;

IF(aa<600)THENQ0:

="0000";Q1:

="0000";Q2:

="0000";Q3:

="0000";

ENDIF;

IF(aa=600andQ2<"1001")THEN

Q2:

=Q2+1;

ELSE

Q2:

="0000";

ENDIF;

IFQ3<"1001"THEN

Q3:

=Q3+1;

ENDIF;

WHENOTHERS=>NULL;

ENDCASE;

ENDIF;

C0<=Q0;

C1<=Q1;

C2<=Q2;

C3<=Q3;

ENDPROCESS;

ENDONE;

3.5显示译码模块

3.5.1说明

该模块实现显示车费功能。

BT为选位信号,SG译码信号。

3.5.2模块图

3.5.3程序

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYSCAN_LEDIS

PORT(DI0:

INSTD_LOGIC_VECTOR(3DOWNTO0);

DI1:

INSTD_LOGIC_VECTOR(3DOWNTO0);

DI2:

INSTD_LOGIC_VECTOR(3DOWNTO0);

DI3:

INSTD_LOGIC_VECTOR(3DOWNTO0);

CLK2:

INSTD_LOGIC;

SG:

OUTSTD_LOGIC_VECTOR(6DOWNTO0);

BT:

OUTSTD_LOGIC_VECTOR(2DOWNTO0));

ENDSCAN_LED;

ARCHITECTUREONEOFSCAN_LEDIS

SIGNALCNT4:

STD_LOGIC_VECTOR(1DOWNTO0);

SIGNALA:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGIN

P1:

PROCESS(CLK2)

VARIABLESQ:

STD_LOGIC_VECTOR(1DOWNTO0);

BEGIN

IFCLK2'EVENTANDCLK2='1'THEN

IFSQ="10"THENSQ:

="00";

ELSE

SQ:

=SQ+1;

ENDIF;

ENDIF;

CNT4<=SQ;

ENDPROCESSP1;

P2:

PROCESS(CNT4)

BEGIN

CASECNT4IS

WHEN"00"=>BT<="001";A<=DI0;

WHEN"01"=>BT<="010";A<=DI1;

WHEN"10"=>BT<="011";A<=DI2;

WHEN"11"=>BT<="100";A<=DI3;

WHENOTHERS=>NULL;

ENDCASE;

ENDPROCESSP2;

P3:

PROCESS(A)

BEGIN

CASEAIS

WHEN"0000"=>SG<="0111111";

WHEN"0001"=>SG<="0000110";

WHEN"0010"=>SG<="1011011";

WHEN"0011"=>SG<="1001111";

WHEN"0100"=>SG<="1100110";

WHEN"0101"=>SG<="1101101";

WHEN"0110"=>SG<="1111101";

WHEN"0111"=>SG<="0000111";

WHEN"1000"=>SG<="1111111";

WHEN"1001"=>SG<="1101111";

WHENOTHERS=>NULL;

ENDCASE;

ENDPROCESSP3;

ENDONE;

3.6顶层程序

3.6.1说明

该模块为最终的顶层模块。

3.6.2模块图

3.6.3程序

LIBRARYIEEE;

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYTAXIIS

PORT(T_CLK0:

INSTD_LOGIC;

T_CLK1:

INSTD_LOGIC;

T_CLK2:

INSTD_LOGIC;

T_JS:

INSTD_LOGIC;

T_ENABLE:

INSTD_LOGIC;

T_CLR:

INSTD_LOGIC;

T_STO:

INSTD_LOGIC;

T_BT:

OUTSTD_LOGIC_VECTOR(2DOWNTO0);

T_SG:

OUTSTD_LOGIC_VECTOR(6DOWNTO0));

ENDTAXI;

ARCHITECTURESTRUCOFTAXIIS

COMPONENTMS

PORT(CK0:

INSTD_LOGIC;

CK1:

INSTD_LOGIC;

JS:

INSTD_LOGIC;

CLK_OUT:

OUTSTD_LOGIC);

ENDCOMPONENT;

COMPONENTSOUT

PORT(CLK:

INSTD_LOGIC;

ENABLE:

INSTD_LOGIC;

STO:

INSTD_LOGIC;

CLR:

INSTD_LOGIC;

ST:

OUTSTD_LOGIC_VECTOR(1DOWNTO0));

ENDCOMPONENT;

COMPONENTPULSE

PORT(CLK0:

INSTD_LOGIC;

FOUT:

OUTSTD_LOGIC);

ENDCOMPONENT;

COMPONENTCOUNTER

PORT(CLK_DIV:

INSTD_LOGIC;

CLR1:

INSTD_LOGIC;

SI:

INSTD_LOGIC_VECTOR(1DOWNTO0);

C0:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

C1:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

C2:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

C3:

OUTSTD_LOGIC_VECTOR(3DOWNTO0));

ENDCOMPONENT;

COMPONENTSCAN_LED

PORT(DI0:

INSTD_LOGIC_VECTOR(3DOWNTO0);

DI1:

INSTD_LOGIC_VECTOR(3DOWNTO0);

DI2:

INSTD_LOGIC_VECTOR(3DOWNTO0);

DI3:

INSTD_LOGIC_VECTOR(3DOWNTO0);

CLK2:

INSTD_LOGIC;

SG:

OUTSTD_LOGIC_VECTOR(6DOWNTO0);

BT:

OUTSTD_LOGIC_VECTOR(2DOWNTO0));

ENDCOMPONENT;

SIGNALL_CLK:

STD_LOGIC;

SIGNALL_FOUT:

STD_LOGIC;

SIGNALL_ST:

STD_LOGIC_VECTOR(1DOWNTO0);

SIGNALL_C0:

STD_LOGIC_VECTOR(3DOWNTO0);

SIGNALL_C1:

STD_LOGIC_VECTOR(3DOWNTO0);

SIGNALL_C2:

STD_LOGIC_VECTOR(3DOWNTO0);

SIGNALL_C3:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGIN

U0:

MSPORTMAP(CK0=>T_CLK0,CK1=>T_CLK1,JS=>T_JS,CLK_OUT=>L_CLK);

U1:

SOUT

PORTMAP(CLK=>L_CLK,ENABLE=>T_ENABLE,CLR=>T_CLR,STO=>T_STO,ST=>L_ST);

U2:

PULSEPORTMAP(CLK0=>L_CLK,FOUT=>L_FOUT);

U3:

COUNTER

PORTMAP(CLR1=>T_CLR,SI=>L_ST,CLK_DIV=>L_FOUT,C3=>L_C3,C2=>L_C2,C1=>L_C1,C0=>L_C0);

U4:

SCAN_LEDPORT

MAP(CLK2=>T_CLK2,DI3=>L_C3,DI2=>L_C2,DI1=>L_C1,DI0=>L_C0,BT=>T_BT,SG=>T_SG);

ENDSTRUC;

第四章总电路图

第五章工作原理

5.1选择输入模块

此模块实现的功能是通过js按键,对clk0和clk1进行选择。

Clk0和clk1分别输入频率不同的脉冲信号,从而实现对车速快慢的模拟。

5.2状态模块

Enable为模块时能端,sto为车辆停车信号输入端,clk引入脉冲信号,clr为清零端。

程序内设置CQI作为公里计数。

当模块工作室,如果sto输入为1,则表示暂停,此时st端口输出“11”。

当st端口为0时,则表示此时车辆处于行驶状态。

当出租车行驶在起步价包含的3公里内时,st端口对外输出00;当超出3公里但在5公里以内时,st输出“00”;当里程超过5公里以后st对外输出“10”。

5.3分频模块

该模块实现将时钟信号5分频功能。

为后面的技术模块提供稳定的脉冲源。

5.4计数模块

此模块实现的功能是对计费模式的选择,同时完成车费的计算。

Clr1为清零端,SI为输入端,SI提供信号,内置4种计费模式,分别对其进行选择。

C3、C2、C1、C0分别代表了计价器的十元、元、角、分。

当SI输入“00”时,则工作在起步价范围内;当SI输入“01”时,系统工作在正常计价范围,即行驶超过三公里,开始按照每公里2元计费;当SI输入“10”时,工作在加价计费范围,即每公里3元。

当SI输入为“11”时,表示车辆停止,此时aa开始计数,当等待脉冲达到600时,即10分钟,计费器增加1元。

从而实现了停车计费,行车计费功能。

5.5显示模块

对输入信号DI进行译码,并作出输出。

显示四位LED灯管,对车费进行计数。

最大值为9999。

第六章心得体会

作为一名工科学生,动手能力对我们来说是非常必要的。

每次实习我都把它当做一次宝贵的经验。

每次精工实习都能给我带来不少收获。

这次做课程设计,过程中也遇到了许多的麻烦,但是在自己的努力下,同学的帮助下,一一攻破,不仅增加了对学科的认识,丰富了自己的知识体系,也更加懂得了合作的重要性。

这次课程设计中,主要是运用VHDL语言设计了一个出租车计费器,并且用层次化的设计方法来实现这个电路。

在程序编写过程中,出现了很多差错,也发现了眼高手低的毛病。

在学习的过程中,对很多内容不去深入了解,在实际动手过程中,遇到了问题,才去找课本,翻资料解决。

虽然有很多不足,但是这次课程设计让我对VHDL语言有了进一步的了解,也对QUARTUS软件有了更加熟悉的掌握,也明白了很多程序设计中应该注意的东西,从而对以后的工作和学习有很大的帮助。

掌握好每一门课程,了解并掌握必要软件,在学习过程中,勤动手,多动脑。

是我这次课程设计最大的收获。

只有一个牢固的知识基础,才能在对深层次的内容进行了解,在学习的道路上走的更远。

最后,感谢在这次实习中指导老师谢贝贝老师,以及所有帮助过我的同学,没有你们,这次实习不可能这么顺利的完成。

 

参考文献

[1]艾永乐.数字电子技术基础.北京:

中国电力出版社,2008

[2]林明权.VHDL数字控制系统设计范例.北京:

电子工业出版社,2003

[3]王艳芬.数字电子电路及其EDA技术.北京:

化学工业出版社,2007

[4]雷伏容.VHDL电路设计.北京:

清华大学出版社,2006

[5]罗朝霞.数字电路EDA技术入门与实战.北京:

人民邮电出版社,2009

[6]黄任.VHDL入门解惑经典实例经验总结.北京:

北京航空航天大学出版社,2004

 

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

当前位置:首页 > 农林牧渔 > 林学

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

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