VHDL出租车计价器.docx

上传人:b****1 文档编号:17641250 上传时间:2023-04-24 格式:DOCX 页数:17 大小:174.86KB
下载 相关 举报
VHDL出租车计价器.docx_第1页
第1页 / 共17页
VHDL出租车计价器.docx_第2页
第2页 / 共17页
VHDL出租车计价器.docx_第3页
第3页 / 共17页
VHDL出租车计价器.docx_第4页
第4页 / 共17页
VHDL出租车计价器.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

VHDL出租车计价器.docx

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

VHDL出租车计价器.docx

VHDL出租车计价器

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

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

关键词:

出租车计费器;计数器;VHDL语言;MAX+PLUSⅡ;

一、实验任务及要求

1.能实现计费功能,计费标准为:

按行驶里程收费,起步费为10.00元,并在车行3公里后再按2元/公里,当计费器计费到达或超过一定收费(如20元)时,每公里加收50%的车费,车停止不计费。

2.实现预置功能:

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

3.实现模拟功能:

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

4.设计动态扫描电路:

将车费显示出来,有两位小数。

5.用VHDL语言设计符合上述功能要求的出租车计费器,并用层次化设计方法设计该电路。

6.各计数器的计数状态用功能仿真的方法验证,并通过有关波形确认电路设计是否正确。

7.完成电路全部设计后,通过系统实验箱下载验证设计的正确性。

二、实验原理

系统顶层框图:

车速

控制模块

计费动态显示

里程

动态显示

车速选择

起/停开关

基本速率

Reset

扫描时钟

显示输出显示输出

 

计费器按里程收费,每100米开始一次计费。

各模块功能如下:

(1)车速控制模块

当起停键为启动状态时〔高电平〕,模块根据车速选择和基本车速发出响应频率的脉冲驱动计费器和里程显示模块进行计数;当处于停止状态时暂停发出脉冲,此时计费器和里程显示模块相应的停止计数。

(2)里程动态显示模块

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

(3)计费动态显示模块

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

三、出租车计费系统的实现

3.1系统的总体模块图:

3.2系统各功能模块的实现:

〔1〕模块MS的实现

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

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;

〔2〕模块SOUT的实现

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

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:

="00";CQI:

=CQI;

ELSIFENABLE='1'THEN

CQI:

=CQI+1;

IFCQI<=30THENSTATE:

="01";

ELSIFCQI>30ANDCQI<=80THENSTATE:

="10";

ELSE

STATE:

="11";

ENDIF;

ENDIF;

ENDIF;

ST<=STATE;

ENDPROCESS;

ENDONE;

〔3〕模块PULSE的实现

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

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;

〔4〕模块COUNTER的实现

实现汽车模拟计费功能。

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

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);

C1:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

C2:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

C3:

OUTSTD_LOGIC_VECTOR(3DOWNTO0));

ENDCOUNTER;

ARCHITECTUREONEOFCOUNTERIS

BEGIN

PROCESS(CLK_DIV,CLR1,SI)

VARIABLEQ1:

STD_LOGIC_VECTOR(3DOWNTO0);

VARIABLEQ2:

STD_LOGIC_VECTOR(3DOWNTO0);

VARIABLEQ3:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGIN

IFCLR1='0'THENQ1:

="0000";Q2:

="0000";Q3:

="0000";

ELSIFCLK_DIV'EVENTANDCLK_DIV='1'THEN

CASESIIS

WHEN"00"=>Q1:

=Q1;Q2:

=Q2;Q3:

=Q3;

WHEN"01"=>Q1:

="0000";Q2:

="0000";Q3:

="0001";

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

Q2:

=Q2+1;

ELSE

Q2:

="0000";

IFQ3<"1001"THEN

Q3:

=Q3+1;

ENDIF;

ENDIF;

Q1:

="0000";

WHEN"11"=>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;

WHENOTHERS=>NULL;

ENDCASE;

ENDIF;

C1<=Q1;

C2<=Q2;

C3<=Q3;

ENDPROCESS;

ENDONE;

〔5〕模块SCAN_LED的实现

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

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

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYSCAN_LEDIS

PORT(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<=DI1;

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

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

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

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;

〔6〕模块TAXI的实现

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

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);

C1:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

C2:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

C3:

OUTSTD_LOGIC_VECTOR(3DOWNTO0));

ENDCOMPONENT;

COMPONENTSCAN_LED

PORT(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_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:

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

U2:

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

U3:

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

U4:

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

ENDSTRUC;

四、系统仿真

〔1〕模块MS的结果验证

 

〔2〕模块SOUT的结果验证

 

〔3〕模块PULSE的结果验证

 

〔4〕模块COUNTER的结果验证

 

〔5〕模块SCAN_LED的结果验证

〔6〕模块TAXI的结果验证

五、结论

出租车计费器系统的设计已全部完成,能按预期的效果进行模拟汽车启动、停止、暂停等功能,并设计动态扫描电路显示车费数目,由动态扫描电路来完成。

车暂时停止不计费,车费保持不变。

假设停止则车费清零,等待下一次计费的开始。

出租车计费器系统的设计已全部完成,能按预期的效果进行模拟汽车启动、停止、暂停等功能,并设计动态扫描电路显示车费数目,由动态扫描电路来完成。

车暂时停止不计费,车费保持不变。

假设停止则车费清零,等待下一次计费的开始。

各模块完成后,在将它们组合成完整的出租车系统,在设计过程中还需要改良的是控制系统的纠错功能。

出租车计费系统的设计中表达了VHDL覆盖面广,描述能力强,是一个多层次的硬件描述语言及PLD器件速度快,使用方便,便于修改等特点,本设计在实用方面具有一定的价值。

 

心得体会:

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

在程序编写结束后,我们还对该程序进行了调试,能按预期的效果进行模拟汽车启动、停止、暂停等功能,基本完成课程设计的要求。

通过此次课程设计,我们更进一步的深入了解了VHDL设计语言,并通过使用对它有了更深的体会。

对于编程过程中可能遇到的问题有了一定的了解,也明白了其中的一些注意事项,对于下次进行编程设计有很大的帮助和提高。

总之,这次实验不仅仅加强了我的动手编程能力,也大大加强了团队合作以及设计能力,使我在理论学习和编程练习方面都获得了较大的收获

 

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

当前位置:首页 > 高等教育 > 院校资料

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

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