EDA大作业 出租车计费系统的设计Word下载.docx
《EDA大作业 出租车计费系统的设计Word下载.docx》由会员分享,可在线阅读,更多相关《EDA大作业 出租车计费系统的设计Word下载.docx(15页珍藏版)》请在冰豆网上搜索。
④计数器D完成计数到20(完成车费的起步价)。
⑤计数器E完成模拟实现车行驶100m的功能。
(2)当超出起步价时就自动在起步价的基础上每增加一个100m脉冲就增加相应的费用,而当总里程达到或超过一定的数值时,能按新的收费标准进行收费。
(3)译码/动态扫描电路模块将路程与费用的数值译码后用动态扫描的方式驱动6只数码管,即所连接的数码管共用一个数据端,由片选信号依次选择输出,轮流显示。
(4)数码管显示将千米数和计费金额均用3位LED数码管显示(2位整数,1位小数)。
7.具体模块设计:
7.1车速控制模块
当启停键为启动状态(高电平时),模块根据车速选择和基本车速发出响应频率的脉冲驱动计费器和里程显示模块进行计数;
当处于暂停状态,暂停发出脉冲,此时里程计数模块和计费模块相应地停止计数。
当处于停止状态时,停止发出脉冲,此时计费器和里程显示模块数清零。
如图所示。
程序代码:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYSPEEDIS
PORT(
CLK,RESET,START,STOP:
INSTD_LOGIC;
SPEEDUP:
INSTD_LOGIC_VECTOR(4DOWNTO0);
CLKOUT:
OUTSTD_LOGIC
);
ENDSPEED;
ARCHITECTUREAOFSPEEDIS
SIGNALCOUNT1:
STD_LOGIC_VECTOR(1DOWNTO0);
SIGNALTEMPCLK,CLKS:
STD_LOGIC;
SIGNALKINSIDE:
STD_LOGIC_VECTOR(4DOWNTO0);
BEGIN
KINSIDE<
="
00000"
-SPEEDUP;
CLKS_LABEL:
PROCESS(RESET,CLK)
VARIABLECOUNT2:
STD_LOGIC_VECTOR(4DOWNTO0);
IFSTOP='
1'
THENTEMPCLK<
='
0'
;
ELSIFRESET='
andstop='
THEN
COUNT2:
ELSIFCLK'
EVENTANDCLK='
ANDSTOP='
IFSTART='
IFCOUNT2=KINSIDETHENCOUNT2:
ENDIF;
IFNOT(SPEEDUP="
)THENCOUNT2:
=COUNT2+1;
IFCOUNT2="
00001"
=NOTTEMPCLK;
ENDPROCESSCLKS_LABEL;
CLKOUT<
=TEMPCLK;
ENDA;
仿真结果:
启动后(包括暂停)
复位后
停止后
7.2里程计数模块
由车速控制模块发出的脉冲作为计数脉冲,行驶里程大于3KM时,本模块中信号变为1,并将计数动态显示出来,每来一个脉冲,里程值加0.1(每收到一个脉冲代表运行了0.1公里)。
程序中要将计数值从十六进制转换成十进制,即在十六进制的数上加7或6,同时产生了相应的进位信号。
USEIEEE.STD_LOGIC_ARITH.ALL;
ENTITYjichengIS
PORT(CLK,RESET,STOP:
COUNT1:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
COUNT3:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDjicheng;
ARCHITECTUREAAOFjichengIS
BEGIN
PROCESS(CLK,RESET,STOP)
VARIABLEMM:
STD_LOGIC_VECTOR(11DOWNTO0);
IFRESET='
MM:
000000000000"
ELSIFCLK='
THENMM:
IFMM(3DOWNTO0)="
1001"
=MM+7;
ELSEMM:
=MM+1;
IFMM(7DOWNTO4)="
1010"
=MM+"
01100000"
COUNT1<
=MM(3DOWNTO0);
COUNT2<
=MM(7DOWNTO4);
COUNT3<
=MM(11DOWNTO8);
ENDPROCESS;
ENDAA;
开始计程
个位开始计数
十位开始计数
7.3计费模块
计费模块启动reset信号,根据输入的clk信号变化,调节费用的计数,用c1、c2、c3显示费用。
其初值为6,当里程数超过2km后,才接受计数车速控制模块发出的脉冲的驱动,并且将计数显示动态显示出来,每一个脉冲其数值加0.12,当里程超过15km时数值加0.18。
当启动键为启动状态(高电平时),模块根据车速选择和基本车速发出响应频率的脉冲驱动计费器和里程显示模块进行计数;
当处于停止状态时,暂停发出脉冲,此时计费器和里程显示模块相应的停止计数,全部归零。
ENTITYjifeiIS
PORT(CLK,RESET,stop:
INSTD_LOGIC;
JUDGE2:
INSTD_LOGIC_VECTOR(3DOWNTO0);
JUDGE3:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
COUNT4:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDjifei;
ARCHITECTUREAAOFjifeiIS
SIGNALEN:
SIGNALMONEY:
STD_LOGIC_VECTOR(7DOWNTO0);
SIGNALMCOUNT:
STD_LOGIC_VECTOR(15DOWNTO0);
MONEY<
00011000"
WHEN((MCOUNT(15)='
)OR(MCOUNT(14)='
)OR(MCOUNT(13)='
))ELSE"
00010010"
EN<
WHENJUDGE3="
0000"
ANDJUDGE2(3DOWNTO1)="
000"
ELSE'
PROCESS(clk,reset)
VARIABLEmm:
std_logic_vector(15downto0);
ifstop='
andclk='
THENmm:
0000000000000000"
elsIFreset='
THEN
mm:
0000011000000000"
--复位,计费显示为起步费6.00
ELSIFclk'
eventandclk='
IFen='
=mm+money;
--里程超过2公里
IF(mm
(1)='
or(mm(3downto1)="
)or(mm(3downto2)="
11"
))THEN
=mm+6;
ENDIF;
--十六进制转换成十进制
IFmm(7)='
and(not(mm(6downto5)="
00"
=mm+"
IFmm(11)='
and(not(mm(10downto9)="
011000000000"
count1<
=mm(3downto0);
count2<
=mm(7downto4);
count3<
=mm(11downto8);
count4<
=mm(15downto12);
mcount<
=mm;
ENDaa;
起步后开始计费
行驶2公里后
行驶15公里后
7.4动态扫描模块
动态扫描电路将计数器A、B、C的计费状态用数码管显示出来,所连接的数码管共用一个数据端,由片选信号依次选择输出,轮流显示。
该模块经过6选1选择器将计费数据(3位BCD码)、计程数据(3位BCD码)动态选择输出。
其中计费数据送入显示译码模块进行译码,最后送至十元、元、角为单位对应的数码管上显示;
计程数据送入显示译码模块进行译码,最后送至以公里为单位的数码管上显示。
如图所示:
片选:
ENTITYpianxuanIS
PORT(CLK:
A:
OUTSTD_LOGIC_VECTOR(2DOWNTO0));
ENDpianxuan;
ARCHITECTURERT1OFpianxuanIS
PROCESS(CLK)
VARIABLEB:
STD_LOGIC_VECTOR(2DOWNTO0);
IF(CLK'
)THEN
IF(B="
101"
B:
ELSE
=B+1;
A<
=B;
ENDRT1;
六选一:
ENTITYliuxuanyiIS
PORT(C:
INSTD_LOGIC_VECTOR(2DOWNTO0);
DP:
OUTSTD_LOGIC;
A1,A2,A3,B1,B2,B3:
D:
ENDliuxuanyi;
ARCHITECTURERT1OFliuxuanyiIS
PROCESS(C,A1,A2,A3,B1,B2,B3)
VARIABLECOMB:
COMB:
=C;
CASECOMBIS
WHEN"
=>
D<
=A1;
DP<
001"
=A2;
010"
=A3;
011"
=B1;
100"
=B2;
=B3;
WHENOTHERS=>
NULL;
ENDCASE;
ENDRT1;
译码:
ENTITYyimaIS
PORT(D:
Q:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));
ENDyima;
ARCHITECTURERT1OFyimaIS
PROCESS(D)
CASEDIS
Q<
0111111"
0001"
0000110"
0010"
1011011"
0011"
1001111"
0100"
1100110"
0101"
1101101"
0110"
1111101"
0111"
0100111"
1000"
1111111"
1101111"
译码举例
7.5顶层模块
将以上各模块的原理图对应的端口连接,如图所示。
启动后
暂停
换挡
行驶超过2公里后
心得体会:
通过本次对于出租车计费系统的设计,我们进一步掌握了VHDL这一语言,熟悉了Quartus2操作环境,更进一步地熟悉了有关数字电路的知识和具体应用。
并能根据仿真结果来分析设计存在的问题及缺陷,从而能进行程序的调试和完善。
总的来说,通过本次设计更进一步的增加了动手能力,对出租车计费系统的原理也有了更透彻的理解。
虽然出租车计费系统已经初步实现其功能,但还存在一定的缺陷和不足,我们也还有很多该努力的地方!
以后的日子里,我们要更加努力学习,争取学有所用,把所学的知识用于实践,对社会做一些有益的事情!
附: