时间时,输出一个脉冲到计费模块,实现停车等待费用。
3.计程模块,对速度模块所产生的脉冲进行一个计数,通过总计数次实现出租车所行使的总路程并输出总路程。
4.计费模块,对出租车所行使的路程进行一个费用的计算,并输出总费用。 5.显示模块,对输出的总费用和总路程的一个数码显示。
3.3 出租车计费器系统工作流程图
出租车计费器的工作流程如下所示:
图2 出租车计费器工作流程图
当出租车载有乘客时,计费器开始工作,首先是reset至为高电平,系统进入初始化,各部分都清零,计费模块显示起步价5元,然后启动start按钮(将其至为1),计费器开始计费,在行驶过程中,对输出路程进行比较,当输出路程在
6
3km以内时,费用保持5元起步价不变;当路程大于了3km时,则每公里按2.5元进行计费的累加,并且输出总费用;当总费用达到40元时,则计费器将按照每公里3元的价格进行计费。在行驶过程中,当乘客要求停车等待时,则计费器将会进入停车等待计费模式,超过一定时间,将收取一定的等待费用,并计入总费用。当在计程车行驶过程中出现stop有效信号时,则各计数器停止计数;当乘客下车之后,按下复位键reset键,所有计数器清零复位。
7
4 出租车计费器的软件仿真分析
4.1 硬件描述语言的介绍
硬件描绘语言HDL是EDA技术的重要组成部分,目前常常使用的HDL主要有VHDL,Verilog HDL,system C。其中VHDL,Verilog在现在EDA设计中使用最多。本次设计中所采用的正是基于VHDL语言的出租车计费器设计。
VHDL的英文全名是VHSIC Hardware description language,于1983年由美国国防部提议创立,由IEEE进一步发展并在1987年作为“IEEE标准1076”发布。后来,VHDL成为业界以此为标准的硬件描述语言。自IEEE发布了VHDL的标准版本以后,各EDA公司相继推出了自己的VHDL设计环境,或宣布自己的设计工具支持VHDL。自那时以来,VHDL已广泛应用在电子设计领域,结合Verilog逐步取代其他非标准的硬件描述语言。
VHDL作为一个规范语言和建模语言,随着VHDL语言的标准化,出现了一些支持该语言的行为仿真器,因为创立VHDL的首先目的是用于标准文档的建立和电路功能模拟,其基本思想是在高层次上描述系统和元件的行为。
1993年,IEEE对VHDL进行了修订,从更高的抽象层次和系统描述能力上扩展了VHDL的内容,公布了新版本VHDL。
VHDL具有与具体硬件电路无关和与设计平台无关的特性,并且具有良好的电路行为描述和系统描述能力。相对于Verilog,VHDL具有以下优点:
(1)语法比Verilog严谨,通过EDA工具自动语法检测,易排除许多设计中的疏忽。
(2)有好的行为描述的水平和能力的系统级描述能力,和Verilog建模和系统级抽象和描述能力比VHDL。
利用 VHDL 语言设计数字逻辑硬件系统还具有以下多方面的特点。 (1)VHDL不太关注具体的逻辑电路实现,设计者主要集中在电路功能的实现。
(2)语言可以用来描述逻辑设计,逻辑结构设计,如多少子逻辑,而是逻辑是如何连接。
(3)VHDL所给出的逻辑的模拟与调试功能为设计者提供了最大的空间,用户甚至不必编写任何测试向量即可进行源代码级的调试。
8
(4)VHDL语言描述的能力非常强,它涵盖了许多领域的、合乎逻辑的设计,和许多硬件模型。
(5)VHDL选用近似高级语言的语句格式实现对硬件行为的描述,所以我们就称VHDL 语言为行为描述语言。
(6)设计者可以方便地比较各种方案的优势和可行性,大大降低设计难度。 (7)VHDL语言具有良好的可读性, 用VHDL语言库的设计(图书馆),设计单位(设计单位),包(package)为设计人员提供了可重复使用的其他设计成果的技术手段。
(8)原有的硬件设计描述是非常简洁的描述,通过EDA工具进行电路描述或说明文件布局参数生产处理生成过程。
4.2 主要的模块设计
4.2.1 速度模块设计
如下图所示,这是一个速度模块框图的设计,其中clk为时钟脉冲输入,通过对这个clk的一个计数,来实现出租车所行使的时间和路程,reset则表示的是复位按钮,当有复位信号输入时,所有的计数器都将进行初始化,start按钮则是一个开始开关,当start信号有效时,则速度模块进入工作状态,stop则是一个停止按钮,当其有效时,速度模块停止工作,sp[2..0]则是一个速度控制输入端口,用它可以模拟出租车的行驶速度大小。其模块框图如下所示:
图3 速度模块框图
4.2.2 计时模块设计
速度模块主要是用来进行计程收费的,计时模块则是主要用来记录当车速为零时的时间,也就是乘客要求停车等待的时间。它通过对sp信号的判断来进行工作,
9
当sp=0(即出租车停车时),开始记录时间。当时间达到一定长度的时长,它会产生一个时间计数脉冲输出,目的是为了向乘客收取一定的等待费用,然后再重新计时,从而实现等待期间的计费,设计框图如下所示:
图4 计时模块框图
4.2.3 计费模块设计
计费模块设计主要是用于对出租车在行驶过程中所产生的总费用的一个仿真。在这个模块中,我们设计两个不同的计费进程,分别为jf1和jf2两个进程。 其中jf1是用于产生enable和price信号。当集成器所记录的路程达到3km后,enable信号将自动变为高电平,计费器开始进入每公里收费状态。当总费用超过40元时,单价price由原来的2.5元/km,变为3元/km。通过对速度模拟信号sp信号的判断,当速度为零时(sp=0)时,开始记录时间。当时间达到一定的时间久了,会产生一种时间计数脉冲输出,并重新启动的时间。
jf2是用来确定的时间计数和CLKOUT的值,当它是1时,总费用加0.7元。最终输出为总费用。设计框图如下所示:
图5 计费模块框图
10