出租车计费系统VHDL

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

EDA课程设计:

出租车计费系统

学生姓名:

所在班级:

指导老师:

完成时间:

一、课程设计目的

1、综合运用EDA技术,独立完成一个课题的设计,考察运用所学知识,解决实际问题的能力;

2、结合理论知识,考察阅读参考资料、文献、手册的能力;

3、进一步熟悉EDA技术的开发流程,掌握文件编辑、编译、仿真、下载验证等环节的实现方法和应用技巧;

二、课程设计要求

实际中出租车的计费工作原理一般分成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元开始计费。车暂时停止(行驶中遇红灯或中途暂时停车)不计费,车费保持不变。若停止则车费清零,等待下一次计费的开始

三、基本设计思想

1、根据出租车计费原理,将出租车计费部分由5个计数器来完成分别为counterA,counterB,counterC,counterD,counterE。①计数器A完成车费百位。②计数器B完成车费十位和个位。③计数器C完成车费角和分。④计数器D完成计数到30(完成车费的起步价)。⑤计数器E完成模拟实现车行驶100 m的功能。

2、行驶过程中车费附加50%的功能:由比较器实现。

3、车费的显示:由动态扫描电路来完成。用专用模块来实现,完成数据的输入即动态数据的显示。

4、通过分析可以设计出系统的顶层框图如图3.1所示:

图3.1 系统的顶层框图

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

1、系统的总体框图

图4.1 系统总体框图

2、程序流程图

3、系统各功能模块的实现

(1)模块JIFEI的实现:

模块JIFEI见图4.3。输入端口START、STOP、PAUSE、JS分别为汽车起动、停止、暂停、加速按键。

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

图 4.3 模块

车开始启动

里程不计数

里程计数里程显示

计费器计数车费显示

车跑完一次后

车费、里程清零

YES

YES

YES

NO

N

图4.2程序流程图

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;

(2)模块X的实现:

模块X见图4.4。该模块把车费和路程转化为4位十进制数,daclk的频率要比clk 快得多

图4.4 模块X

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity x is

port(daclk:in std_logic;

ascore,bscore:in integer range 0 to 8000;

age,ashi,abai,aqian,bge,bshi,bbai,dqian:out std_logic_vector(3 downto 0)); end x ;

architecture rtl of x is

begin

process(daclk,ascore)

variable comb1:integer range 0 to 8000;

variable comb1a,comb1b,comb1c,comb1d:std_logic_vector(3 downto 0);

begin

if(daclk'event and daclk='1')then

if(comb1

if(comb1a=9 and comb1b=9 and comb1c=9)then

comb1a:="0000";

comb1b:="0000";

comb1c:="0000";

comb1d:=comb1d+1;

comb1:=comb1+1;

elsif(comb1a=9 and comb1b=9)then

comb1a:="0000";

comb1b:="0000";

comb1:=comb1+1;

comb1c:=comb1c+1;

elsif(comb1a=9)then

comb1a:="0000";

comb1b:= comb1b+1;

comb1:= comb1+1;

相关文档
最新文档