EDA 出租汽车计费器文档Word格式.docx
《EDA 出租汽车计费器文档Word格式.docx》由会员分享,可在线阅读,更多相关《EDA 出租汽车计费器文档Word格式.docx(13页珍藏版)》请在冰豆网上搜索。
3.每0.5km改变一次显示,且提前显示(显示路程和车费),车停止不计费。
4.实现模拟功能:
能模拟汽车启动、停止、加速等状态。
5.设计动态扫描电路:
将路程和车费显示出来,有两位小数。
6.用VHDL语言设计符合上述功能要求的出租车计费器,并用层次化设计方法设计该电路。
7各计数器的计数状态用功能仿真的方法验证,并通过有关波形确认电路设计是否正确。
8完成电路全部设计后,通过系统实验箱下载验证设计课题的正确性。
二、实验总体框图:
出租车计费总体框图如图一所示。
它由五个模块组成,JIFEI(计费电路)、TRANS(转换电路)、SE(扫描电路)、XIANSHI(显示电路)、和DI(字形显示电路)。
计费电路完成计费功能;
转换电路把车费和路程转换成四位十进制数;
显示电路实际上是八选一数据选择器,和扫描电路共同控制输出;
字形显示电路输出0~9个字形。
图一总体框图
三、各个模块的VHDL程序与仿真波形如下:
(1)计费模块(计费)
计费模块如图二所示。
输入端口START、JS分别代表启动/停止、加速。
输出端口FARE、DISTANCE代表车费和路程。
(程序中lc、chefei分别代表路程和车费)
图二计费模块
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityjifeiis
port(clk,start,js:
instd_logic;
fare,distance:
outintegerrange0to8000);
endjifei;
architectureaaofjifeiis
begin
process(clk,start,js)
variablechefei,lc:
integerrange0to8000;
if(clk'
eventandclk='
1'
)then
if(start='
0'
chefei:
=0;
lc:
elsif(start='
andjs='
=500;
endif;
if(start='
=lc+50;
if(lc>
=500)then
=chefei+60;
fare<
=chefei;
distance<
=lc;
endprocess;
endaa;
该模块的仿真波形如图二-1所示
图二-1
(2)转换模块(TRANS)
转换模块如图三所示。
DCLK的频率要比CLK的快很多。
输入端口ASCORE、BSCORE代表车费和路程,输出端口A0~A3(B0~B3)分别代表车费(路程)的个、十、百、千。
图三转换模块
useieee.std_logic_arith.all;
entitytransis
port(dclk:
instd_logic;
ascore,bscore:
inintegerrange0to8000;
a0,a1,a2,a3,b0,b1,b2,b3:
outstd_logic_vector(3downto0));
endtrans;
architecturemixoftransis
signalcom1:
integerrange0to8000;
process(dclk,ascore)
variablecom1a,com1b,com1c,com1d:
std_logic_vector(3downto0);
begin
if(dclk'
eventanddclk='
)then
if(com1<
ascore)then
if(com1a=9andcom1b=9andcom1c=9)then
com1a:
="
0000"
;
com1b:
com1c:
com1d:
=com1d+1;
elsif(com1a=9andcom1b=9)then
=com1c+1;
com1<
=com1+1;
elsif(com1a=9)then
=com1b+1;
else
=com1a+1;
a0<
=com1a;
a1<
=com1b;
a2<
=com1c;
a3<
=com1d;
endprocess;
process(dclk,bscore)
variablecom2:
variablecom2a,com2b,com2c,com2d:
std_logic_vector(3downto0);
if(com2<
bscore)then
if(com2a=9andcom2b=9andcom2c=9)then
com2a:
com2b:
com2c:
com2d:
=com2d+1;
elsif(com2a=9andcom2b=9)then
=com2c+1;
com2:
=com2+1;
elsif(com2a=9)then
=com2b+1;
=com2a+1;
b0<
=com2a;
b1<
=com2b;
b2<
=com2c;
b3<
=com2d;
endmix;
该模块的仿真波形如图三-1所示
图三-1
(3)显示模块(XIANSHI)
显示模块如图四所示。
图四显示模块
entityxianshiis
port(c:
instd_logic_vector(2downto0);
instd_logic_vector(3downto0);
dp:
outstd_logic;
d:
endxianshi;
architecturemixofxianshiis
begin
process(c,a0,a1,a2,a3,b0,b1,b2,b3)
variablecom:
std_logic_vector(2downto0);
begin
com:
=c;
casecomis
when"
000"
=>
d<
=a0;
dp<
='
001"
=a1;
010"
=a2;
011"
=a3;
100"
=b0;
101"
=b1;
110"
=b2;
111"
=b3;
whenothers=>
null;
endcase;
该模块的仿真波形如图四-1所示
图四-1
(4)选择模块(SE)
选择模块如图五所示。
图五选择模块
entityseis
port(clk:
a:
outstd_logic_vector(2downto0));
endse;
architecturemixofseis
process(clk)
variableb:
if(clk'
)then
if(b="
b:
=b+1;
a<
=b;
endprocess;
该模块的仿真波形如图五-1所示
图五-1
(5)字形显示模块(DI)
字形显示模块如图六所示。
图六DI模块
entitydiis
port(d:
q:
outstd_logic_vector(6downto0));
enddi;
architecturemixofdiis
withdselect
q<
1111110"
when"
"
0110000"
0001"
1101101"
0010"
1111001"
0011"
0110011"
0100