摘要。该系统利用vhdl语言、pld设计出租车计费系统,以max+plusⅱ软件作为开发平台,设计了出租车计费器系统程序并进行了程序**。使其实现计费以及预置和模拟汽车启动、停止、暂停等功能,并动态扫描显示车费数目。
关键词: 出租车计费器;计数器;vhdl语言;max+plusⅱ;
一、实验任务及要求。
a)能够实现计费功能。
费用的计算是按行驶里程收费,设出租车的起步价是6.00元,当里程小于2km里时,按起步价收费;当里程大于2km时每公里按1.5元计费。
等待累计时间超过2.5min,按每分钟1.5元计费。
所以总费用按下式计算:
总费用=起步价+(里程-2km)*里程单价+等候时间*等候单价。
b)能够实现显示功能。
显示汽车行驶里程:用四位数字显示,显示方式为“xx”,单价为km。计程范围为0~99km,计程分辨率为1km。
显示等候时间:用两位数字显示分钟,显示方式为“xx”。计时范围为0~59min,计时分辨率为1min。
显示总费用:用四位数字显示,显示方式为“单位为元。计价范围为999.9元,计价分辨率为0.1元。
二、设计原理。
根据设计要求,系统的输入信号clk,计价开始信号start,等待信号stop,里程脉冲信号fin。系统得输出信号有:总费用数cha0 ~cha3,行驶距离km0 ~km1,等待时间min0 ~min1 等。
系统有两个脉冲输入信号clk_750k、fin,其中clk_750k将根据设计要求分频成15hz和1hz分别作为公里计费和超时计费的脉冲。两个控制输入开关start、stop;控制过程为:start作为计费开始开关,当start为高电平时,系统开始根据输入的情况计费。
当有乘客上车并开始行驶时,fin脉冲到来,进行行驶计费,此时的stop需要置为0;如需停车等待,就把stop变为高电平,并去除fin输入脉冲,进行等待计费;当乘客下车且不等待时,直接将start置为0,系统停止工作;**开始归为起步价6.00元。
整个设计由分频模块、计量模块、计费模块、控制模块等四个部分组成。
其中计量模块是整个系统实现里程计数和时间计数的重要部分;控制模块是实现不同计费方式的选择部分,根据所设计的使能端选择是根据里程计费还是根据等待时间计费;同时设计通过分频模块产生不同频率的脉冲信号来实现系统的计费。计量模块采用1hz的驱动信号,计费模块采用13hz、15hz的驱动信号;计量模块每计数一次,计费模块就实现13次或者15次计数,即为实现计时时的1.3 元/min、计程时的1.
5元/km的收费。组成框图如下所示:
三、功能模块设计:
因为乘法在电路中实现比较复杂,所以用计数的方法代替乘法。通过生成15hz的时钟,能够使计数器在1s内完成15次计数,从而使计费器可以在最短的时间内完成一次计费。因此功能的实现,需要像原理陈述中一样,需要分频模块、控制模块、计量模块、计费模块。
a)分频模块。
功能:将输入时钟进行分频,生成1hz的计时时钟和15hz的计费脉冲。同时1hz的时钟还将用于对计量模块使能脉冲的生成。
vhdl语言:
library ieee;
use use
entity div_frequense is
port( clk_750 : in std_logic;
clk_15 : out std_logic;
clk_1 : out std_logic);
end;architecture div of div_frequense is
signal q_15: integer range 0 to 24;
signal q_1: integer range 0 to 374;
signal tmp_clk_1,tmp_clk_15: std_logic;
beginprocess (clk_750)
beginif (clk_750'event and clk_750='1') then
if q_15=24
then q_15<=0;
tmp_clk_15<=not tmp_clk_15;
else q_15<=q_15+1;
end if;
if q_1=374
then q_1<=0;
tmp_clk_1<=not tmp_clk_1;
else q_1<=q_1+1;
end if;
end if;
end process;
clk_15<=tmp_clk_15;
clk_1<=tmp_clk_1;
end;波形**图:
b)控制模块。
功能:通过对使能信号,对输入的15hz时钟脉冲进行选通,用于计费模块计数。
vhdl语言:
library ieee;
use use
entity control is
port(en: in std_logic;
clk_in : in std_logic;
clk_out: out std_logic
end;architecture decise of control is
beginprocess(en)
beginif en='1' then
clk_out<=clk_in;
else clk_out<='0';
end if;
end process;
end;波形**图:
c)计量模块。
功能:该模块原理是一个十进制计数器原理。因为时间和路程要作为显示结果,不论是时间计数还是路程计数都是以10进制形式输出。
时间计数部分:利用1hz的时钟进行时钟计数,设置一个秒级的中间变量,既用于时间计数,也用于对使能脉冲输出的条件判定。等待时间是2分30秒,超出后每分钟计1.
5元,因此需要在大约2分钟后的每一分钟的第30秒进行一次1s高电平的使能脉冲的输出,从而完成一次计数。
路程计数部分:利用fin脉冲,假设fin是一个持续1s]高电平的脉冲信号。每次fin脉冲来到,需要对路程完成一次计数,同时也需要输出一个1s高电平的使能脉冲。
vhdl语言。
library ieee;
use use
entity count_num is
port(start: in std_logic;
fin : in std_logic;
stop : in std_logic;
clk_1: in std_logic;
en: out std_logic;
k1,k0: out std_logic_vector(3 downto 0);
m1,m0: out std_logic_vector(3 downto 0));
end;architecture count of count_num is
signal w: integer range 0 to 59;
signal tmp_k1,tmp_k0,tmp_m1,tmp_m0: std_logic_vector(3 downto 0);
beginprocess(clk_1)
beginif clk_1'event and clk_1='1' then
if start='0' then
w<=0;
en<='0';
tmp_m1<="0000";
tmp_m0<="0000";
tmp_k1<="0000";
tmp_k0<="0000";
elsif stop='1' then
if w=59 then w<=0;
if tmp_m0="1001" then tmp_m0<="0000";
if tmp_m1="0101" then tmp_m1<="0000";
else tmp_m1<=tmp_m1+1;
end if;
else tmp_m0<=tmp_m0+1;
end if;
else w<=w+1;
end if;
if stop='1' then en<='0';
if tmp_m1&tmp_m0>"00000010" and w=30 then
en<='1';
else en<='0';
end if;
end if;
elsif fin='1' then
if tmp_k0="1001" then tmp_k0<="0000";
if tmp_k1="1001" then tmp_k1<="0000";
else tmp_k1<=tmp_k1+1;
end if;
else tmp_k0<=tmp_k0+1;
end if;
if tmp_k1&tmp_k0>"00000011" then en<='1';
else en<='0';
end if;
else en<='0';
end if;
end if;
end process;
k1<=tmp_k1;
k0<=tmp_k0;
m1<=tmp_m1;
m0<=tmp_m0;
end;波形**图:
d)计费模块。
功能:该模块也是十进制计数原理。利用控制端传输过来的时间脉冲完成计数,输出结果要以10进制的形式输出。
vhdl语言:
library ieee;
use use
entity count_price is
port(clk1 : in std_logic;
start : in std_logic;
c0,c1,c2,c3:out std_logic_vector(3 downto 0)
end;architecture operation of count_price is
signal tmp_c0,tmp_c1,tmp_c2,tmp_c3: std_logic_vector(3 downto 0);
EDA大作业
eda技术课程大作业。设计题目 4线 16线译码器设计。学生姓名。学号。专业班级 09电子信息1班 2012年5月26日。4线 8线译码器设计。1.设计背景与设计方案。1.1设计背景。译码器是组合逻辑电路的一个重要器件,它是一种将一种编码转换为另一种编码的逻辑电路,在编码时,每一种二进制 都赋予了特...
EDA大作业
eda技术课程大作业。设计题目 双二选一多路选择器。学生姓名 王行智。学号 201002050002 专业班级 电气自动化技术一班。2012 年 5 月 26日。1.设计背景 在很多时候,要完成一项工作,需要进行两次判断和选择,对于机器和人都是如此,这就需要两个选择器,双2选1多路选择器就应运而生了...
EDA大作业
一 设计方案。1 设计一个汽车尾灯控制器,利用eda软件 max plusii 进行编译及 设计输入可采用vhdl硬件描述语言输入法和原理图输入法,通过 查看设计的可行性,因条件有限,只能进行简单的 实验。2 设计要求。1 汽车尾部左右两侧各有多盏指示灯。2 汽车正常行驶时指示灯都不亮。3 汽车右转...