EDA大作业

发布 2020-02-25 08:19:28 阅读 6454

摘要。该系统利用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 汽车右转...