打造国内最大的IC交易平台
技术资料 行业资讯 PDF资料 IC价格 IC替换 缩略语 IC供应 IC采购
基于VHDL语言的出租车计费系统设计
类别:汽车电子  
 
        

    

    

    作者:席砺莼 董丽梅 田梦周 闫宏伟

    

    摘 要:利用VHDL语言设计出租车计费系统,使其实现计费以及预置和模拟汽车启动、停止、暂停等功能,并设计动态扫描电路显示车费数目,突出了其作为硬件描述语言的良好的可读性、可移植性和易理解等优点。此程序通过下载到特定芯片后,可应用于实际的出租车计费系统中。

    关键词:超高速集成电路硬件描述语言;计数器;MAX+PLUSⅡ;高速集成电路

    

    1 前言

    目前,电子系统正向集成化、大规模和高速度的方向发展,集成电路的规模越来越大,复杂程度越来越高,因此传统的门级描述方法显得过于琐碎,难以理解掌握。由美国国防部提出的VHDL(Very High Speed Integrated Circuit Hardware Description Language)即超高速集成电路硬件描述语言,采用高层次的、自顶向下的设计方法来描述硬件,非常适合当前需要。美国国防部为了要解决项目间的信息交换困难和设计维护困难,同时也为解决当时的超高速集成电路(VHSIC,Very High Speed Integrated Circuit)计划而提出的一种硬件描述语言。1987年12月IEEE接受VHDL为标准的HDL,这就是今天的IEEE STD1076-1987和IEEE STD1076-1993。

    MAX+PLUSⅡ(Multiple Array Matrix And Programmable Logic User Systems)是电子设计不可缺少的工具,他可以接受多种方式的输入:原理图输入、文本输入(硬件描述语言)、第三方EDA工具提供的接口等。MAX+PLUSⅡ的仿真器具有很强灵活性,可以控制对单器件或多器件的仿真。MAX+PLUSⅡ还提供了丰富的帮助库。

    本文采用VHDL语言来设计实现出租车计费系统,源程序经美国Altera公司的MAX+PLUSⅡ软件调试优化,下载到特定芯片(MAX系列的EPM 7128SLC8415)后,可应用于实际的出租车计费系统中。

    2 出租车计费系统的设计

    2.1 出租车计费器工作原理

    实际中出租车的计费工作原理一般分成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元开始计费。车暂时停止(行驶中遇红灯或中途暂时停车)不计费,车费保持不变。若停止则车费清零,等待下一次计费的开始。

    2.2 基本设计思想

    (1)根据出租车计费原理,将出租车计费部分由5个计数器来完成分别为counterA,counterB,counterC,counterD,counterE。①计数器A完成车费百位。②计数器B完成车费十位和个位。③计数器C完成车费角和分。④计数器D完成计数到30(完成车费的起步价)。⑤计数器E完成模拟实现车行驶100 m的功能。

    (2)行驶过程中车费附加50%的功能:由比较器实现。

    (3)车费的显示:由动态扫描电路来完成。用专用模块来实现,完成数据的输入即动态数据的显示。

    (4)通过分析可以设计出系统的顶层框图如图1所示:

    

    

    

    2.3 具体模块划分并实现及部分程序

    计费器按里程收费,每100 m开始一次计费.图2为原理结构图,各模块功能如下:

    (1)计数器A为十进制计数器,其结果为车费的百位,与5位数码管的最高位相连,计数时钟为进位脉冲。程序如下:

    

    

    

    

    

    (2)计数器B为带预置的模100十进制计数器,预置数为出租车起步价,车费的十位和个位,与数码管的第2位和第3位相连。计数时钟为计数器C的进位脉冲信号。

    (3)计数器C为可变步长的模100十进制计数器,带预置端,预置数为计数步长。计数器C主要用于累加,当车行驶达到100 m时,计数器计数一次,计数步长为每100 m的行车收费。进位脉冲信号送到计数器B的“CLK”端,控制计数器B的计数步调。

    (4)计数器D为带预置模的十进制加法计数器,预置数为车起步里程3 km,计数脉冲为计数器E的进位信号。这样当计数器D计数达到30后,进位输出将为一个高电平,控制计数器A,B,C开始计数,这样就能实现超过3 km后计费器再按每公里加收车费。

    

    

    

    (5)计数器E为带预置的可变步长的模100计数器,预置端为车速(每秒),如果预置端接入车速表,就可以实现计费了,这里用于模拟行车速度。例如:假设当计数器E计数到100则E的“CO”端输出一个高电平。此脉冲信号送给计数器D,使D完成车起步里程3 km的功能。在以后的时间里E的“CO”端的脉冲信号送给计数器C,使其完成按每公里收取费用的功能。主要程序如下:

    

    

    

    

    

    

    

    (6)与门为2个8输入的8与门,一端用于预置,一端输入当前计费器收费情况,当计费器计费达到或超过一定收费(如20元)时,每公里加收50%的车费,此时该与门输出一个片选信号送MUX。

    (7)MUX为16选8的2选1MUX,2个选择输入端分别为每100 m收费和50%的每100 m收费,片选信号由与门控制。

    (8)动态扫描电路将计数器A、B、C的计费状态用数码管显示出来,所连接的数码管共用一个数据端,由片选信号依次选择输出,轮流显示。

    2.4 设计中需注意的问题

     (1)在一个进程中只允许一个信号上升沿作为触发条件。

     (2)信号值改变后,要经过一个小的延时才能生效,同一个信号不能在多个进程中赋值(因多个信号源不能同时对同一个信号驱动)。

     (3)时序电路与组合电路最好不要在同一个进程以免浪费资源。

     (4)一个功能模块最好按上升沿信号分多个进程完成,各进程间用信号联系。

     (5)同一个信号在进程中的值改变后,要注意该值改变前后,该进程中其他变量的变化,避免逻辑死锁。

     (6)在顺序语句中,信号赋值后需一定的延时才能改变而变量不需要延时。

    3 结语

    VHDL硬件描述语言打破了硬件和软件设计人员之间互不干涉的界限,可以使用语言的形式来进行数字系统的硬件结构、行为的描述,直接设计数字电路硬件系统。从本文描述的出租车计费系统可以看出,通过编程、下载后,该芯片已经具备了原来需要使用复杂的数字电路实现的功能;这样,使用语言描述的形式,大大缩短了开发周期,减少了开发难度,并使得系统更加灵活、稳健。

    

    参考文献

    

    [1]候伯亨,顾新.VHDL硬件描述语言与数字逻辑电路设计.修订版电子工程师必备知识[M].西安:西安电子科技大学出版社,1999

    [2]张昌凡,等.可编程逻辑器件及VHDL设计技术[M].广州:华南理工大学出版社,2001

    [3]曾繁泰,陈美金.VHDL程序设计[M].北京:清华大学出版社,2001

    [4]潘松,等.VHDL实用教程[M].成都:电子科技大学出版社,2000