2 出租车计费系统的设计
2.1 出租车计费设计
实际中出租车的计费工作原理一般分成3个阶段:
(1)车起步开始计费。首先显示起步价(本次设计起步费为7.00元),车在行驶3 km以内,只收起步价7.00元。
(2)车行驶超过3 km后,按每公里2.2元计费(在7.00元基础上每行驶1 km车费加2.2元),车费依次累加。
(3)行驶路程达到或超过9 km后(车费达到20元),每公里加收50%的车费,车费变成按每公里3.3元开始计费。车暂时停止(行驶中遇红灯或中途暂时停车)不计费,车费保持不变。若停止则车费清零,等待下一次计费的开始
2.2 基本设计思想
(1) 根据出租车计费原理,将出租车计费部分由5个计数器来完成分别为counterA,counterB,counterC,counterD,counterE。①计数器A完成车费百位。②计数器B完成车费十位和个位。③计数器C完成车费角和分。④计数器D完成计数到30(完成车费的起步价)。⑤计数器E完成模拟实现车行驶100 m的功能。
(2)行驶过程中车费附加50%的功能:由比较器实现。
(3)车费的显示:由动态扫描电路来完成。用专用模块来实现,完成数据的输入即动态数据的显示。
(4)通过分析可以设计出系统的顶层框图如图2.1所示:
3 出租车计费系统的实现
3.1 系统的总体框图
3.3 系统各功能模块的实现
3.3.1 模块JIFEI的实现
模块JIFEI见图3.2。输入端口START、STOP、PAUSE、JS分别为汽车起动、停止、暂停、加速按键。
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity jifei is
port (clk,start,stop,pause,js:in std_logic;
chefei,luc:out integer range 0 to 8000);
end jifei;
architecture rtl of jifei is
begin
process(clk,start,stop,pause,js)
variable a,b:std_logic;
variable aa:integer range 0 to 100;
variable chf,lc:integer range 0 to 8000;
variable num:integer range 0 to 9;
begin
if(clk’event and clk=‘1’)then
if(stop=‘0’)then
chf:=0;
num:=0;
b:=‘1’;
aa:=0;
lc:=0;
elsif(start=‘0’)then
b:=‘0’;
chf:=700;
lc:=0;
elsif(start=‘1’ and js='1’and pause=‘1’)then
if(b=‘0’)then
num:=num+1;
end if;
if(num=9)then
lc:=lc+5;
num:=0;
aa:=aa+5;
end if;
elsif(start='1’and js='0’and pause=‘1’)then
lc:=lc+1;
aa:=aa+1;
end if;
if(aa>=100)then
a:=‘1’;
aa:=0;
else
a:=‘0’;
end if;
if(lc<300)then
null;
elsif(chf<2000 and a=‘1’)then
chf:=chf+220;
elsif(chf>=2000 and a=‘1’)then
chf:=chf+330;
end if;
end if;
chefei<=chf;
luc<=lc;
end process;
end rtl;
3.3.2 模块X的实现
模块X见图3.3。该模块把车费和路程转化为4位十进制数,daclk的频率要比clk快得多
4 系统仿真
4.1 模块X的仿真结果
将车费和路程转换成4位的十进制如图4.1所示:
输入端为:Daclk, ascore, bscore
输出端为:Age, ashi, aqian, abai, bge, bshi, bqian, bbai;
图4.1 模块X仿真波形图4.2 模块JIFEI的仿真结果
该模块是模拟汽车的启动、停止、暂停、加速按键,如图4.2所示:
输入端口为:stop, start, pause, js;
输出端口为:clk, b;
4.3 模块XXX1的仿真结果
该模块是将车费和路程显示出来如图4.3所示
输入端为:c, a1,a2,a3,a4,b1,b2,b3,b4;
输出端为:dp,d;
图4.3 模块XXX1仿真波形图
4.4模块SE的结果验证
模块SE仿真如图4.4所示:
输入端为:clk
输出端为:a
图4.4 模块SE仿真波形图
4.5模块DI的结果验证
模块DI仿真的结果如图4.5所示
输入端为:d
输出端为:q
图4.5 模块DI仿真波形图