出租车计费系统VHDL
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;