您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 电子设计/PCB > VHDL语言设计出租车计费系统
武汉工业学院计算机系出租车计费系统的VHDL设计课程:EDA设计班级:网络工程081姓名:彭晓晓学号:080510122日期:2011-11-28一、设计任务与要求(1)、能够实现计费功能费用的计算是按行驶里程收费,设出租车的起步价是5.00元,当里程小于3km里时,按起步价收费;当里程大于3km时每公里按1.3元计费。等待累计时间超过2min,按每分钟1.5元计费。所以总费用按下式计算:总费用=起步价+(里程-3km)*里程单价+等候时间*等候单价(2)、能够实现显示功能显示汽车行驶里程:用四位数字显示,显示方式为“XXXX”,单价为km。计程范围为0~99km,计程分辨率为1km。显示等候时间:用两位数字显示分钟,显示方式为“XX”。计时范围为0~59min,计时分辨率为1min。显示总费用:用四位数字显示,显示方式为“XXX.X”,单位为元。计价范围为999.9元,计价分辨率为0.1元。二、设计原理根据设计要求,系统的输入信号CLK,计价开始信号START,等待信号STOP,里程脉冲信号FIN。系统得输出信号有:总费用数CHA0~CHA3,行驶距离KM0~KM1,等待时间MIN0~MIN1等。系统的元件框图如下:系统有两个脉冲输入信号clk_195、fin,两个控制输入开关start、stop;控制过程为:start作为计费开始开关,当start为高电平时,系统开始根据输入的情况计费。当有乘客上车并开始行驶时,fin脉冲到来,进行行驶计费,此时的stop需要置为0;如需停车等待,就把stop变为高电平,并去除fin输入脉冲,进行等待计费;当乘客下车且不等待时,直接将start置为0,系统停止工作;系统由分频模块、控制模块、计量模块和计费模块四部分组成。计量模块是整个系统实现里程计数和时间计数的重要部分;控制模块是实现不同计费方式的选择部分;设计通过分频模块产生不同频率的脉冲信号来实现系统的计费。计量模块采用1HZ的驱动信号,计费模块采用13HZ、15HZ的驱动信号;计量模块每计数一次,计费模块就实现13次或者15次计数,即为实现计时时的1.5元/min、计程时的1.3元/km的收费;系统总体顶层框图为:三、设计步骤(一)、分频模块分频模块是对系统时钟频率进行分频,分别得到15HZ、13HZ、1HZ三种频率;本设计中通过三种不同频率的脉冲信号实现在计程车在行驶、等待两种情况下的不同计费。原理框图如下:源程序如下:libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;entityfenpin2isport(clk_195:instd_logic;--频率为195HZ的时钟clk_13:outstd_logic;--频率为13HZ的时钟clk_15:outstd_logic;--频率为15HZ的时钟clk_1:outstd_logic);--频率为1HZ的时钟endfenpin2;architecturert1offenpin2issignalq_13:integerrange0to12;--分频器signalq_15:integerrange0to14;--分频器signalq_1:integerrange0to194;--分频器beginprocess(clk_195)beginif(clk_195'eventandclk_195='1')thenifq_13=12thenq_13=0;clk_13='1';--此处产生13HZ频率的信号elseq_13=q_13+1;clk_13='0';endif;ifq_15=14thenq_15=0;clk_15='1';--此处产生15HZ频率的信号elseq_15=q_15+1;clk_15='0';endif;ifq_1=194thenq_1=0;clk_1='1';--此处产生1HZ频率的信号elseq_1=q_1+1;clk_1='0';endif;endif;endprocess;endrt1;分频模块的仿真波形图为:注:有图中的周期时间可以看出,三种输出的信号脉冲对应的频率比实现了1:13:15;(二)、计量模块本模块实现对于出租车在行驶和等待过程中的继承和计时功能;当行驶里程大于3KM时,本模块中en0信号变为1;当等待时间大于2min时,本模块中en1信号变为1;clk1每来一个上升沿,计量模块实现一次计数,里程数或者等待时间加1;元件框图为:源程序如下:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;entityjiliangisport(s:instd_logic;--计量开始信号fin:instd_logic;--里程脉冲信号stop:instd_logic;--等待信号clk1:instd_logic;--计量驱动信号en1,en0:bufferstd_logic;--计量输出的控制信号k1,k0:bufferstd_logic_vector(3downto0);--里程计数m1,m0:bufferstd_logic_vector(3downto0));--时间计数endjiliang;architecturert2ofjiliangissignalw:integerrange0to59;--秒计数器beginprocess(clk1)beginifclk1'eventandclk1='1'then--本语句实现clk1对计量模块的驱动ifs='0'thenw=0;en1='0';en0='0';m1=0000;m0=0000;k1=0000;k0=0000;elsifstop='1'then--等待计时开始标志ifw=59thenw=0;ifm0=1001thenm0=0000;ifm1=0101thenm1=0000;elsem1=m1+1;endif;elsem0=m0+1;endif;--完成等待计时ifm1&m000000001thenen1='1';--等待时间大于2min输出使能信号en1elseen1='0';endif;elsew=w+1;en1='0';endif;elsiffin='1'then--行驶计程开始ifk0=1001thenk0=0000;ifk1=1001thenk1=0000;elsek1=k1+1;endif;elsek0=k0+1;endif;--完成里程计数ifk1&k000000010thenen0='1';--行驶里程大于3KM输出使能信号en0elseen0='0';endif;elseen1='0';en0='0';--clk1不驱动,使能信号为0endif;endif;endprocess;endrt2;计量模块的仿真波形图为:注:由图可以看出,在fin脉冲到来时,k1、k0进行计数,en0在每进行一次加法计数时就输出一次高电平;当stop为高电平时,即为进入等待计时,m1、m0进行计数,en1在每进行一次计时计数的时候输出一个高电平;(三)、计费模块本模块根据输入的clk2信号变化,调节费用的计数,c0、c1、c2、c3分别表示费用的显示。原理框图为:源程序如下:libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;entityjifeiisport(clk2:instd_logic;--计费驱动信号start:instd_logic;--计费开始信号c0,c1,c2,c3:bufferstd_logic_vector(3downto0));endjifei;architecturert3ofjifeiisbeginprocess(clk2,start)beginifstart='0'thenc3=0000;c2=0000;c1=0101;c0=0000;--对于起步价进行了限定elsifclk2'eventandclk2='1'thenifc0=1001thenc0=0000;ifc1=1001thenc1=0000;ifc2=1001thenc2=0000;ifc3=1001thenc3=0000;elsec3=c3+1;endif;elsec2=c2+1;endif;elsec1=c1+1;endif;elsec0=c0+1;--完成计费功能endif;endif;endprocess;endrt3;计费模块仿真波形图为:注:由图中可以看出,随着clk2的高电平的到来,c3、c2、c1、c0逐级进行加法计数,当c0计数到九时,产生进位,c1加一;当c1计数到九时,产生进位,c2加一;当c2计数到九时,产生进位,c3加一;起步价为5元;(四)、控制模块本模块主要是通过两个不同的输入使能信号,对两个输入脉冲进行选择输出;使能信号是计量模块中的输出,两个输入脉冲是分频模块输出的13HZ、15HZ的脉冲;本模块实现了双脉冲的二选一;原理框图为:源程序如下:libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;entitykongzhiisport(ent0,ent1:instd_logic;--输入的使能选择信号clk_in1:instd_logic;--输入脉冲clk_in2:instd_logic;--输入脉冲clk_out:outstd_logic);--输出脉冲endkongzhi;architecturert4ofkongzhiisbeginprocess(ent0,ent1)beginifent0='1'then--本语句实现对双脉冲的二选一clk_out=clk_in1;elsifent1='1'thenclk_out=clk_in2;endif;endprocess;endrt4;控制模块的仿真波形图为:注:由图中可以看出,当ent0为高电平时,输出为这一时段的clk_in1;当ent1为高电平时,输出为这一时段的clk_in2;(五)、原件例化(总模块)本模块用例化语句实现出租车的计费器系统设计,将各个模块组合在一起;源程序如下:libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;entitytaxiisport(clk_195:instd_logic;--195HZ的输入信号start:instd_logic;--计价开始信号stop:instd_logic;--等待信号fin:instd_logic;--里程脉冲信号cha3,cha2,cha1,cha0:outstd_logic_vector(3downto0);--计费显示输出km1,km0:outstd_logic_vector(3downto0);--里程计数显示min1,min0:outstd_logic_vector(3downto0));--等待时间计数endtaxi;architecturebehavoftaxiiscomponentfenpin2--本语句实现对分频模块的例化port(clk_195:instd_logic;clk_13:outstd_logic;clk_15:outstd_logic;clk_1:outstd_logic);endcomponent;compone
本文标题:VHDL语言设计出租车计费系统
链接地址:https://www.777doc.com/doc-6385092 .html